use of org.apache.ratis.statemachine.impl.SingleFileSnapshotInfo in project alluxio by Alluxio.
the class RaftJournalDumper method readRatisSnapshotFromDir.
private void readRatisSnapshotFromDir() throws IOException {
try (RaftStorage storage = new RaftStorageImpl(getJournalDir(), RaftServerConfigKeys.Log.CorruptionPolicy.getDefault())) {
SimpleStateMachineStorage stateMachineStorage = new SimpleStateMachineStorage();
stateMachineStorage.init(storage);
SingleFileSnapshotInfo currentSnapshot = stateMachineStorage.getLatestSnapshot();
if (currentSnapshot == null) {
LOG.debug("No snapshot found");
return;
}
final File snapshotFile = currentSnapshot.getFile().getPath().toFile();
String checkpointPath = String.format("%s-%s-%s", mCheckpointsDir, currentSnapshot.getIndex(), snapshotFile.lastModified());
try (DataInputStream inputStream = new DataInputStream(new FileInputStream(snapshotFile))) {
LOG.debug("Reading snapshot-Id: {}", inputStream.readLong());
try (CheckpointInputStream checkpointStream = new CheckpointInputStream(inputStream)) {
readCheckpoint(checkpointStream, Paths.get(checkpointPath));
} catch (Exception e) {
LOG.error("Failed to read snapshot from journal.", e);
}
} catch (Exception e) {
LOG.error("Failed to load snapshot {}", snapshotFile, e);
throw e;
}
}
}
use of org.apache.ratis.statemachine.impl.SingleFileSnapshotInfo in project alluxio by Alluxio.
the class JournalToolTest method getCurrentRatisSnapshotIndex.
private long getCurrentRatisSnapshotIndex(String journalFolder) throws Throwable {
try (RaftStorage storage = new RaftStorageImpl(new File(RaftJournalUtils.getRaftJournalDir(new File(journalFolder)), RaftJournalSystem.RAFT_GROUP_UUID.toString()), RaftServerConfigKeys.Log.CorruptionPolicy.getDefault())) {
SimpleStateMachineStorage stateMachineStorage = new SimpleStateMachineStorage();
stateMachineStorage.init(storage);
SingleFileSnapshotInfo snapshot = stateMachineStorage.getLatestSnapshot();
if (snapshot == null) {
throw new IOException("Failed to find a valid snapshot");
}
return snapshot.getIndex();
}
}
use of org.apache.ratis.statemachine.impl.SingleFileSnapshotInfo in project alluxio by Alluxio.
the class EmbeddedJournalIntegrationTestFaultTolerance method copySnapshotToMaster.
@Test
public void copySnapshotToMaster() throws Exception {
mCluster = MultiProcessCluster.newBuilder(PortCoordination.EMBEDDED_JOURNAL_SNAPSHOT_MASTER).setClusterName("EmbeddedJournalFaultTolerance_copySnapshotToMaster").setNumMasters(NUM_MASTERS).setNumWorkers(NUM_WORKERS).addProperty(PropertyKey.MASTER_JOURNAL_TYPE, JournalType.EMBEDDED.toString()).addProperty(PropertyKey.MASTER_JOURNAL_FLUSH_TIMEOUT_MS, "5min").addProperty(PropertyKey.MASTER_JOURNAL_CHECKPOINT_PERIOD_ENTRIES, "1000").addProperty(PropertyKey.MASTER_JOURNAL_LOG_SIZE_BYTES_MAX, "50KB").addProperty(PropertyKey.MASTER_EMBEDDED_JOURNAL_MIN_ELECTION_TIMEOUT, "3s").addProperty(PropertyKey.MASTER_EMBEDDED_JOURNAL_MAX_ELECTION_TIMEOUT, "6s").addProperty(PropertyKey.MASTER_STANDBY_HEARTBEAT_INTERVAL, "5s").build();
mCluster.start();
AlluxioURI testDir = new AlluxioURI("/dir");
FileSystem fs = mCluster.getFileSystemClient();
fs.createDirectory(testDir);
for (int i = 0; i < 2000; i++) {
fs.createDirectory(testDir.join("file" + i));
}
int primaryMasterIndex = mCluster.getPrimaryMasterIndex(MASTER_INDEX_WAIT_TIME);
String leaderJournalPath = mCluster.getJournalDir(primaryMasterIndex);
File raftDir = new File(RaftJournalUtils.getRaftJournalDir(new File(leaderJournalPath)), RaftJournalSystem.RAFT_GROUP_UUID.toString());
waitForSnapshot(raftDir);
mCluster.stopMasters();
SimpleStateMachineStorage storage = new SimpleStateMachineStorage();
storage.init(new RaftStorageImpl(raftDir, RaftServerConfigKeys.Log.CorruptionPolicy.getDefault()));
SingleFileSnapshotInfo snapshot = storage.findLatestSnapshot();
assertNotNull(snapshot);
mCluster.notifySuccess();
}
use of org.apache.ratis.statemachine.impl.SingleFileSnapshotInfo in project alluxio by Alluxio.
the class EmbeddedJournalIntegrationTestFaultTolerance method copySnapshotToFollower.
@Test
public void copySnapshotToFollower() throws Exception {
mCluster = MultiProcessCluster.newBuilder(PortCoordination.EMBEDDED_JOURNAL_SNAPSHOT_FOLLOWER).setClusterName("EmbeddedJournalFaultTolerance_copySnapshotToFollower").setNumMasters(NUM_MASTERS).setNumWorkers(NUM_WORKERS).addProperty(PropertyKey.MASTER_JOURNAL_TYPE, JournalType.EMBEDDED.toString()).addProperty(PropertyKey.MASTER_JOURNAL_FLUSH_TIMEOUT_MS, "5min").addProperty(PropertyKey.MASTER_JOURNAL_CHECKPOINT_PERIOD_ENTRIES, "1000").addProperty(PropertyKey.MASTER_JOURNAL_LOG_SIZE_BYTES_MAX, "50KB").addProperty(PropertyKey.MASTER_EMBEDDED_JOURNAL_MIN_ELECTION_TIMEOUT, "3s").addProperty(PropertyKey.MASTER_EMBEDDED_JOURNAL_MAX_ELECTION_TIMEOUT, "6s").addProperty(PropertyKey.MASTER_STANDBY_HEARTBEAT_INTERVAL, "5s").build();
mCluster.start();
int catchUpMasterIndex = (mCluster.getPrimaryMasterIndex(MASTER_INDEX_WAIT_TIME) + 1) % NUM_MASTERS;
AlluxioURI testDir = new AlluxioURI("/dir");
FileSystem fs = mCluster.getFileSystemClient();
fs.createDirectory(testDir);
for (int i = 0; i < 2000; i++) {
fs.createDirectory(testDir.join("file" + i));
}
mCluster.getMetaMasterClient().checkpoint();
mCluster.stopMaster(catchUpMasterIndex);
File catchupJournalDir = new File(mCluster.getJournalDir(catchUpMasterIndex));
FileUtils.deleteDirectory(catchupJournalDir);
assertTrue(catchupJournalDir.mkdirs());
mCluster.startMaster(catchUpMasterIndex);
File raftDir = new File(RaftJournalUtils.getRaftJournalDir(catchupJournalDir), RaftJournalSystem.RAFT_GROUP_UUID.toString());
waitForSnapshot(raftDir);
mCluster.stopMaster(catchUpMasterIndex);
SimpleStateMachineStorage storage = new SimpleStateMachineStorage();
storage.init(new RaftStorageImpl(raftDir, RaftServerConfigKeys.Log.CorruptionPolicy.getDefault()));
SingleFileSnapshotInfo snapshot = storage.findLatestSnapshot();
assertNotNull(snapshot);
mCluster.notifySuccess();
}
Aggregations