/**
* Initialize the local Raft server.
* <p/>
* Sets up the service implementation classes, creates database
* tables and starts any thread pools necessary. Following this
* call all service classes are <strong>fully initialized</strong>.
* Even though various threads are started they <strong>will not</strong>
* use or interact with the service implementation classes. Callers
* still have exclusive access to the system.
* <p/>
* This method should <strong>only</strong> be called once before {@link RaftAgent#start()}.
*
* @throws StorageException if the persistence components cannot be initialized
* @throws IllegalStateException if this method is called multiple times
*/
public synchronized void initialize() throws StorageException {
checkState(!running);
checkState(!initialized);
checkState(setupConversion);
// start up the snapshots subsystem
snapshotStore.initialize();
// check that the snapshot metadata and the filesystem agree
// FIXME (AG): this _may_ be expensive, especially if the user never bothers to clean out snapshots!
// FIXME (AG): warning, warning - this is upfront work - probably a very, very bad idea
snapshotStore.reconcileSnapshots();
// initialize the log and store
jdbcLog.initialize();
jdbcStore.initialize();
// initialize the various thread pools
nonIoExecutorService = MoreExecutors.listeningDecorator(Executors.newCachedThreadPool());
ioExecutorService = Executors.newCachedThreadPool();
serverBossPool = new NioServerBossPool(ioExecutorService, 1);
clientBossPool = new NioClientBossPool(ioExecutorService, 1);
workerPool = new NioWorkerPool(ioExecutorService, 3);
// TODO (AG): avoid creating threads in the initialize() method
// initialize the networking subsystem
sharedWorkerPool = new ShareableWorkerPool<NioWorker>(workerPool);
ServerSocketChannelFactory serverChannelFactory = new NioServerSocketChannelFactory(serverBossPool, sharedWorkerPool);
ClientSocketChannelFactory clientChannelFactory = new NioClientSocketChannelFactory(clientBossPool, sharedWorkerPool);
raftNetworkClient.initialize(nonIoExecutorService, serverChannelFactory, clientChannelFactory, raftAlgorithm);
raftAlgorithm.initialize();
initialized = true;
}
RaftAgent.java 文件源码
java
阅读 20
收藏 0
点赞 0
评论 0
项目:libraft
作者:
评论列表
文章目录