private RaftLog createRaftLog( Config config, LifeSupport life, FileSystemAbstraction fileSystem, File clusterStateDirectory, CoreReplicatedContentMarshal marshal, LogProvider logProvider, JobScheduler scheduler ) { EnterpriseCoreEditionModule.RaftLogImplementation raftLogImplementation = EnterpriseCoreEditionModule.RaftLogImplementation .valueOf( config.get( CausalClusteringSettings.raft_log_implementation ) ); switch ( raftLogImplementation ) { case IN_MEMORY: { return new InMemoryRaftLog(); } case SEGMENTED: { long rotateAtSize = config.get( CausalClusteringSettings.raft_log_rotation_size ); int readerPoolSize = config.get( CausalClusteringSettings.raft_log_reader_pool_size ); CoreLogPruningStrategy pruningStrategy = new CoreLogPruningStrategyFactory( config.get( CausalClusteringSettings.raft_log_pruning_strategy ), logProvider ).newInstance(); File directory = new File( clusterStateDirectory, RAFT_LOG_DIRECTORY_NAME ); return life.add( new SegmentedRaftLog( fileSystem, directory, rotateAtSize, marshal, logProvider, readerPoolSize, systemClock(), scheduler, pruningStrategy ) ); } default: throw new IllegalStateException( "Unknown raft log implementation: " + raftLogImplementation ); } }