private PrimaryBackupClient newClient() { return PrimaryBackupClient.builder() .withClientName(partition.name()) .withPartitionId(partition.id()) .withMembershipService(managementService.getMembershipService()) .withProtocol(new PrimaryBackupClientCommunicator( partition.name(), Serializer.using(PrimaryBackupNamespaces.PROTOCOL), managementService.getMessagingService())) .withPrimaryElection(managementService.getElectionService().getElectionFor(partition.id())) .withSessionIdProvider(managementService.getSessionIdService()) .withThreadContextFactory(threadFactory) .build(); }
private PrimaryBackupServer buildServer() { return PrimaryBackupServer.builder() .withServerName(partition.name()) .withMembershipService(managementService.getMembershipService()) .withMemberGroupProvider(memberGroupProvider) .withProtocol(new PrimaryBackupServerCommunicator( partition.name(), Serializer.using(PrimaryBackupNamespaces.PROTOCOL), managementService.getMessagingService())) .withPrimaryElection(managementService.getElectionService().getElectionFor(partition.id())) .withPrimitiveTypes(managementService.getPrimitiveTypes()) .withThreadContextFactory(threadFactory) .build(); }
/** * Creates a Raft server. */ protected RaftPartitionServer createServer(PartitionManagementService managementService) { return new RaftPartitionServer( this, config, managementService.getMembershipService().getLocalMember().id(), managementService.getMembershipService(), managementService.getMessagingService(), managementService.getPrimitiveTypes(), threadContextFactory); }
/** * Creates a Raft client. */ private RaftPartitionClient createClient(PartitionManagementService managementService) { return new RaftPartitionClient( this, managementService.getMembershipService().getLocalMember().id(), new RaftClientCommunicator( name(), Serializer.using(RaftNamespaces.RAFT_PROTOCOL), managementService.getMessagingService()), threadContextFactory); }
private DistributedLogServer buildServer() { return DistributedLogServer.builder() .withServerName(partition.name()) .withMembershipService(managementService.getMembershipService()) .withMemberGroupProvider(config.getMemberGroupProvider()) .withProtocol(new LogServerCommunicator( partition.name(), Serializer.using(LogNamespaces.PROTOCOL), managementService.getMessagingService())) .withPrimaryElection(managementService.getElectionService().getElectionFor(partition.id())) .withStorageLevel(config.getStorageConfig().getLevel()) .withDirectory(config.getStorageConfig().getDirectory(partition.name())) .withMaxSegmentSize((int) config.getStorageConfig().getSegmentSize().bytes()) .withMaxEntrySize((int) config.getStorageConfig().getMaxEntrySize().bytes()) .withFlushOnCommit(config.getStorageConfig().isFlushOnCommit()) .withMaxLogSize(config.getCompactionConfig().getSize().bytes()) .withMaxLogAge(config.getCompactionConfig().getAge()) .withThreadContextFactory(threadFactory) .build(); }
/** * Connects to the primary-backup partition. */ CompletableFuture<Partition> connect( PartitionManagementService managementService, ThreadContextFactory threadFactory) { election = managementService.getElectionService().getElectionFor(partitionId); client = new PrimaryBackupPartitionClient(this, managementService, threadFactory); return client.start().thenApply(v -> this); }
/** * Updates the partition with the given metadata. */ CompletableFuture<Void> update(PartitionMetadata metadata, PartitionManagementService managementService) { if (server == null && metadata.members().contains(managementService.getMembershipService().getLocalMember().id())) { server = createServer(managementService); return server.join(metadata.members()); } else if (server != null && !metadata.members().contains(managementService.getMembershipService().getLocalMember().id())) { return server.leave().thenRun(() -> server = null); } return CompletableFuture.completedFuture(null); }
@Override public CompletableFuture<ManagedPartitionGroup> join(PartitionManagementService managementService) { this.metadata = buildPartitions(); this.communicationService = managementService.getMessagingService(); communicationService.<Void, Void>subscribe(snapshotSubject, m -> handleSnapshot()); List<CompletableFuture<Partition>> futures = metadata.stream() .map(metadata -> { RaftPartition partition = partitions.get(metadata.id()); return partition.open(metadata, managementService); }) .collect(Collectors.toList()); return CompletableFuture.allOf(futures.toArray(new CompletableFuture[futures.size()])).thenApply(v -> { LOGGER.info("Started"); return this; }); }
private DistributedLogServer buildServer() { return DistributedLogServer.builder() .withServerName(partition.name()) .withMembershipService(managementService.getMembershipService()) .withMemberGroupProvider(config.getMemberGroupProvider()) .withProtocol(new LogServerCommunicator( partition.name(), Serializer.using(LogNamespaces.PROTOCOL), managementService.getMessagingService())) .withPrimaryElection(managementService.getElectionService().getElectionFor(partition.id())) .withStorageLevel(config.getStorageConfig().getLevel()) .withDirectory(config.getStorageConfig().getDirectory(partition.name())) .withMaxSegmentSize((int) config.getStorageConfig().getSegmentSize().bytes()) .withMaxEntrySize((int) config.getStorageConfig().getMaxEntrySize().bytes()) .withFlushOnCommit(config.getStorageConfig().isFlushOnCommit()) .withMaxLogSize(config.getCompactionConfig().getSize().bytes()) .withMaxLogAge(config.getCompactionConfig().getAge()) .withThreadContextFactory(threadFactory) .build(); }
/** * Connects to the log partition. */ CompletableFuture<Partition> connect( PartitionManagementService managementService, ThreadContextFactory threadFactory) { election = managementService.getElectionService().getElectionFor(partitionId); client = new LogPartitionClient(this, managementService, threadFactory); return client.start().thenApply(v -> this); }
/** * Opens the partition. */ CompletableFuture<Partition> open(PartitionMetadata metadata, PartitionManagementService managementService) { this.partition = metadata; this.client = createClient(managementService); if (partition.members().contains(managementService.getMembershipService().getLocalMember().id())) { server = createServer(managementService); return server.start() .thenCompose(v -> client.start()) .thenApply(v -> null); } return client.start() .thenApply(v -> this); }
private DistributedLogSessionClient newClient() { return DistributedLogSessionClient.builder() .withClientName(partition.name()) .withPartitionId(partition.id()) .withMembershipService(managementService.getMembershipService()) .withProtocol(new LogClientCommunicator( partition.name(), Serializer.using(LogNamespaces.PROTOCOL), managementService.getMessagingService())) .withSessionIdProvider(() -> managementService.getSessionIdService().nextSessionId()) .withPrimaryElection(managementService.getElectionService().getElectionFor(partition.id())) .withThreadContextFactory(threadFactory) .build(); }
/** * Joins the primary-backup partition. */ CompletableFuture<Partition> join( PartitionManagementService managementService, ThreadContextFactory threadFactory) { election = managementService.getElectionService().getElectionFor(partitionId); server = new PrimaryBackupPartitionServer( this, managementService, memberGroupProvider, threadFactory); client = new PrimaryBackupPartitionClient(this, managementService, threadFactory); return server.start().thenCompose(v -> client.start()).thenApply(v -> this); }
private DistributedLogSessionClient newClient() { return DistributedLogSessionClient.builder() .withClientName(partition.name()) .withPartitionId(partition.id()) .withMembershipService(managementService.getMembershipService()) .withProtocol(new LogClientCommunicator( partition.name(), Serializer.using(LogNamespaces.PROTOCOL), managementService.getMessagingService())) .withSessionIdProvider(() -> managementService.getSessionIdService().nextSessionId()) .withPrimaryElection(managementService.getElectionService().getElectionFor(partition.id())) .withThreadContextFactory(threadFactory) .build(); }
/** * Joins the log partition. */ CompletableFuture<Partition> join( PartitionManagementService managementService, ThreadContextFactory threadFactory) { election = managementService.getElectionService().getElectionFor(partitionId); server = new LogPartitionServer( this, managementService, config, threadFactory); client = new LogPartitionClient(this, managementService, threadFactory); return server.start().thenCompose(v -> client.start()).thenApply(v -> this); }
/** * Connects to the log partition. */ CompletableFuture<Partition> connect( PartitionManagementService managementService, ThreadContextFactory threadFactory) { election = managementService.getElectionService().getElectionFor(partitionId); client = new LogPartitionClient(this, managementService, threadFactory); return client.start().thenApply(v -> this); }
/** * Joins the log partition. */ CompletableFuture<Partition> join( PartitionManagementService managementService, ThreadContextFactory threadFactory) { election = managementService.getElectionService().getElectionFor(partitionId); server = new LogPartitionServer( this, managementService, config, threadFactory); client = new LogPartitionClient(this, managementService, threadFactory); return server.start().thenCompose(v -> client.start()).thenApply(v -> this); }