use of com.alipay.sofa.jraft.option.LogStorageOptions in project sofa-jraft by sofastack.
the class BaseLogStorageTest method setup.
@Override
@Before
public void setup() throws Exception {
super.setup();
this.confManager = new ConfigurationManager();
this.logEntryCodecFactory = LogEntryV2CodecFactory.getInstance();
this.logStorage = newLogStorage();
final LogStorageOptions opts = newLogStorageOptions();
this.logStorage.init(opts);
}
use of com.alipay.sofa.jraft.option.LogStorageOptions in project sofa-jraft by sofastack.
the class LogManagerImpl method init.
@Override
public boolean init(final LogManagerOptions opts) {
this.writeLock.lock();
try {
if (opts.getLogStorage() == null) {
LOG.error("Fail to init log manager, log storage is null");
return false;
}
this.raftOptions = opts.getRaftOptions();
this.nodeMetrics = opts.getNodeMetrics();
this.logStorage = opts.getLogStorage();
this.configManager = opts.getConfigurationManager();
LogStorageOptions lsOpts = new LogStorageOptions();
lsOpts.setConfigurationManager(this.configManager);
lsOpts.setLogEntryCodecFactory(opts.getLogEntryCodecFactory());
if (!this.logStorage.init(lsOpts)) {
LOG.error("Fail to init logStorage");
return false;
}
this.firstLogIndex = this.logStorage.getFirstLogIndex();
this.lastLogIndex = this.logStorage.getLastLogIndex();
this.diskId = new LogId(this.lastLogIndex, getTermFromLogStorage(this.lastLogIndex));
this.fsmCaller = opts.getFsmCaller();
this.disruptor = //
DisruptorBuilder.<StableClosureEvent>newInstance().setEventFactory(//
new StableClosureEventFactory()).setRingBufferSize(//
opts.getDisruptorBufferSize()).setThreadFactory(//
new NamedThreadFactory("JRaft-LogManager-Disruptor-", true)).setProducerType(//
ProducerType.MULTI).setWaitStrategy(new TimeoutBlockingWaitStrategy(this.raftOptions.getDisruptorPublishEventWaitTimeoutSecs(), //
TimeUnit.SECONDS)).build();
this.disruptor.handleEventsWith(new StableClosureEventHandler());
this.disruptor.setDefaultExceptionHandler(new LogExceptionHandler<Object>(this.getClass().getSimpleName(), (event, ex) -> reportError(-1, "LogManager handle event error")));
this.diskQueue = this.disruptor.start();
if (this.nodeMetrics.getMetricRegistry() != null) {
this.nodeMetrics.getMetricRegistry().register("jraft-log-manager-disruptor", new DisruptorMetricSet(this.diskQueue));
}
} finally {
this.writeLock.unlock();
}
return true;
}
use of com.alipay.sofa.jraft.option.LogStorageOptions in project sofa-jraft by sofastack.
the class BaseLogStorageTest method newLogStorageOptions.
protected LogStorageOptions newLogStorageOptions() {
final LogStorageOptions opts = new LogStorageOptions();
opts.setConfigurationManager(this.confManager);
opts.setLogEntryCodecFactory(this.logEntryCodecFactory);
return opts;
}
use of com.alipay.sofa.jraft.option.LogStorageOptions in project sofa-jraft by sofastack.
the class LogStorageBenchmark method main.
public static void main(final String[] args) {
String testPath = Paths.get(SystemPropertyUtil.get("user.dir"), "log_storage").toString();
System.out.println("Test log storage path: " + testPath);
int batchSize = 100;
int logSize = 16 * 1024;
int totalLogs = 1024 * 1024;
// LogStorage logStorage = new RocksDBLogStorage(testPath, new RaftOptions());
LogStorage logStorage = new RocksDBSegmentLogStorage(testPath, new RaftOptions());
LogStorageOptions opts = new LogStorageOptions();
opts.setConfigurationManager(new ConfigurationManager());
opts.setLogEntryCodecFactory(LogEntryV2CodecFactory.getInstance());
logStorage.init(opts);
new LogStorageBenchmark(logStorage, logSize, totalLogs, batchSize).doTest();
}
use of com.alipay.sofa.jraft.option.LogStorageOptions in project sofa-jraft by sofastack.
the class RocksDBSegmentLogStorageTest method testTruncateChaos.
@Test
public void testTruncateChaos() throws Exception {
int times = 100;
int n = 100;
for (int i = 0; i < times; i++) {
this.logStorage.shutdown();
FileUtils.deleteDirectory(new File(this.path));
this.path = TestUtils.mkTempDir();
FileUtils.forceMkdir(new File(this.path));
this.logStorage = new RocksDBSegmentLogStorage(this.path, new RaftOptions(), 32, 256);
final LogStorageOptions opts = newLogStorageOptions();
this.logStorage.init(opts);
for (int j = 0; j < n; j++) {
this.logStorage.appendEntries(Arrays.asList(TestUtils.mockEntry(j, 1, ThreadLocalRandom.current().nextInt(180))));
}
int index = ThreadLocalRandom.current().nextInt(n);
boolean truncatePrefix = ThreadLocalRandom.current().nextBoolean();
if (truncatePrefix) {
this.logStorage.truncatePrefix(index);
for (int j = 0; j < n; j++) {
if (j < index) {
assertNull(this.logStorage.getEntry(j));
} else {
assertNotNull(this.logStorage.getEntry(j));
}
}
} else {
this.logStorage.truncateSuffix(index);
for (int j = 0; j < n; j++) {
if (j <= index) {
assertNotNull(this.logStorage.getEntry(j));
} else {
assertNull(this.logStorage.getEntry(j));
}
}
}
}
}
Aggregations