Skip to content

Instantly share code, notes, and snippets.

@Swarnim-singhal
Last active September 5, 2019 03:03
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Swarnim-singhal/f851dee32333000ab725adb14da9a5a1 to your computer and use it in GitHub Desktop.
Save Swarnim-singhal/f851dee32333000ab725adb14da9a5a1 to your computer and use it in GitHub Desktop.
Data Structures used in Cassandra Gossip Porotocol
public class VersionGenerator {
private static final AtomicInteger version = new AtomicInteger(0);
public static int getNextVersion() {
return version.incrementAndGet();
}
}
public class HeartBeatState implements Serializable {
private volatile int generation;
private volatile int version;
HeartBeatState(int gen) {
this(gen, 0);
}
public HeartBeatState(int gen, int ver) {
generation = gen;
version = ver;
}
int getGeneration() { return generation;}
void updateHeartBeat() { version = VersionGenerator.getNextVersion(); }
int getHeartBeatVersion() { return version; }
void forceNewerGenerationUnsafe() { generation += 1; }
void forceHighestPossibleVersionUnsafe() { version = Integer.MAX_VALUE; }
public String toString() { return
String.format("HeartBeat: generation = %d, version = %d", generation, version); }
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment