Search in sources :

Example 1 with LogManagerOptions

use of io.dingodb.raft.option.LogManagerOptions in project dingo by dingodb.

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());
        lsOpts.setRaftLogStorageOptions(opts.getRaftLogStorageOptions());
        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 BlockingWaitStrategy()).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;
}
Also used : RaftException(io.dingodb.raft.error.RaftException) Requires(io.dingodb.raft.util.Requires) RaftError(io.dingodb.raft.error.RaftError) LogId(io.dingodb.raft.entity.LogId) LoggerFactory(org.slf4j.LoggerFactory) LogEntryCorruptedException(io.dingodb.raft.error.LogEntryCorruptedException) HashMap(java.util.HashMap) ReentrantReadWriteLock(java.util.concurrent.locks.ReentrantReadWriteLock) NodeMetrics(io.dingodb.raft.core.NodeMetrics) LogEntry(io.dingodb.raft.entity.LogEntry) LogExceptionHandler(io.dingodb.raft.util.LogExceptionHandler) ArrayList(java.util.ArrayList) com.lmax.disruptor(com.lmax.disruptor) SnapshotMeta(io.dingodb.raft.entity.RaftOutter.SnapshotMeta) LogStorage(io.dingodb.raft.storage.LogStorage) Map(java.util.Map) ConfigurationEntry(io.dingodb.raft.conf.ConfigurationEntry) EntryType(io.dingodb.raft.entity.EnumOutter.EntryType) ThreadHelper(io.dingodb.raft.util.ThreadHelper) LogManager(io.dingodb.raft.storage.LogManager) RaftOptions(io.dingodb.raft.option.RaftOptions) ReadWriteLock(java.util.concurrent.locks.ReadWriteLock) DisruptorMetricSet(io.dingodb.raft.util.DisruptorMetricSet) Logger(org.slf4j.Logger) NamedThreadFactory(io.dingodb.raft.util.NamedThreadFactory) ArrayDeque(io.dingodb.raft.util.ArrayDeque) LogManagerOptions(io.dingodb.raft.option.LogManagerOptions) ProducerType(com.lmax.disruptor.dsl.ProducerType) ErrorType(io.dingodb.raft.entity.EnumOutter.ErrorType) Status(io.dingodb.raft.Status) Configuration(io.dingodb.raft.conf.Configuration) Utils(io.dingodb.raft.util.Utils) FSMCaller(io.dingodb.raft.FSMCaller) DisruptorBuilder(io.dingodb.raft.util.DisruptorBuilder) TimeUnit(java.util.concurrent.TimeUnit) CountDownLatch(java.util.concurrent.CountDownLatch) List(java.util.List) Lock(java.util.concurrent.locks.Lock) PeerId(io.dingodb.raft.entity.PeerId) ConfigurationManager(io.dingodb.raft.conf.ConfigurationManager) LogStorageOptions(io.dingodb.raft.option.LogStorageOptions) SegmentList(io.dingodb.raft.util.SegmentList) Disruptor(com.lmax.disruptor.dsl.Disruptor) CopyOnWriteArrayList(java.util.concurrent.CopyOnWriteArrayList) NamedThreadFactory(io.dingodb.raft.util.NamedThreadFactory) DisruptorMetricSet(io.dingodb.raft.util.DisruptorMetricSet) LogStorageOptions(io.dingodb.raft.option.LogStorageOptions) LogId(io.dingodb.raft.entity.LogId)

Example 2 with LogManagerOptions

use of io.dingodb.raft.option.LogManagerOptions in project dingo by dingodb.

the class NodeImpl method initLogStorage.

private boolean initLogStorage() {
    Requires.requireNonNull(this.fsmCaller, "Null fsm caller");
    this.logStorage = this.serviceFactory.createLogStorage(this.options.getLogUri(), this.raftOptions);
    this.logManager = new LogManagerImpl();
    final LogManagerOptions opts = new LogManagerOptions();
    opts.setLogEntryCodecFactory(this.serviceFactory.createLogEntryCodecFactory());
    opts.setLogStorage(this.logStorage);
    opts.setConfigurationManager(this.configManager);
    opts.setFsmCaller(this.fsmCaller);
    opts.setNodeMetrics(this.metrics);
    opts.setDisruptorBufferSize(this.raftOptions.getDisruptorBufferSize());
    opts.setRaftOptions(this.raftOptions);
    opts.setRaftLogStorageOptions(this.options.getRaftLogStorageOptions());
    return this.logManager.init(opts);
}
Also used : LogManagerImpl(io.dingodb.raft.storage.impl.LogManagerImpl) LogManagerOptions(io.dingodb.raft.option.LogManagerOptions)

Aggregations

LogManagerOptions (io.dingodb.raft.option.LogManagerOptions)2 com.lmax.disruptor (com.lmax.disruptor)1 Disruptor (com.lmax.disruptor.dsl.Disruptor)1 ProducerType (com.lmax.disruptor.dsl.ProducerType)1 FSMCaller (io.dingodb.raft.FSMCaller)1 Status (io.dingodb.raft.Status)1 Configuration (io.dingodb.raft.conf.Configuration)1 ConfigurationEntry (io.dingodb.raft.conf.ConfigurationEntry)1 ConfigurationManager (io.dingodb.raft.conf.ConfigurationManager)1 NodeMetrics (io.dingodb.raft.core.NodeMetrics)1 EntryType (io.dingodb.raft.entity.EnumOutter.EntryType)1 ErrorType (io.dingodb.raft.entity.EnumOutter.ErrorType)1 LogEntry (io.dingodb.raft.entity.LogEntry)1 LogId (io.dingodb.raft.entity.LogId)1 PeerId (io.dingodb.raft.entity.PeerId)1 SnapshotMeta (io.dingodb.raft.entity.RaftOutter.SnapshotMeta)1 LogEntryCorruptedException (io.dingodb.raft.error.LogEntryCorruptedException)1 RaftError (io.dingodb.raft.error.RaftError)1 RaftException (io.dingodb.raft.error.RaftException)1 LogStorageOptions (io.dingodb.raft.option.LogStorageOptions)1