use of com.hazelcast.internal.partition.operation.PartitionReplicaSyncRequest in project hazelcast by hazelcast.
the class PartitionDataSerializerHook method createFactory.
@Override
public DataSerializableFactory createFactory() {
ConstructorFunction<Integer, IdentifiedDataSerializable>[] constructors = new ConstructorFunction[LEN];
constructors[PARTITION_RUNTIME_STATE] = arg -> new PartitionRuntimeState();
constructors[ASSIGN_PARTITIONS] = arg -> new AssignPartitions();
constructors[PARTITION_BACKUP_REPLICA_ANTI_ENTROPY] = arg -> new PartitionBackupReplicaAntiEntropyOperation();
constructors[FETCH_PARTITION_STATE] = arg -> new FetchPartitionStateOperation();
constructors[HAS_ONGOING_MIGRATION] = arg -> new HasOngoingMigration();
constructors[MIGRATION_COMMIT] = arg -> new MigrationCommitOperation();
constructors[PARTITION_STATE_OP] = arg -> new PartitionStateOperation();
constructors[PROMOTION_COMMIT] = arg -> new PromotionCommitOperation();
constructors[REPLICA_SYNC_REQUEST] = arg -> new PartitionReplicaSyncRequest();
constructors[REPLICA_SYNC_RESPONSE] = arg -> new PartitionReplicaSyncResponse();
constructors[REPLICA_SYNC_RETRY_RESPONSE] = arg -> new PartitionReplicaSyncRetryResponse();
constructors[SAFE_STATE_CHECK] = arg -> new SafeStateCheckOperation();
constructors[SHUTDOWN_REQUEST] = arg -> new ShutdownRequestOperation();
constructors[SHUTDOWN_RESPONSE] = arg -> new ShutdownResponseOperation();
constructors[REPLICA_FRAGMENT_MIGRATION_STATE] = arg -> new ReplicaFragmentMigrationState();
constructors[MIGRATION] = arg -> new MigrationOperation();
constructors[MIGRATION_REQUEST] = arg -> new MigrationRequestOperation();
constructors[NON_FRAGMENTED_SERVICE_NAMESPACE] = arg -> NonFragmentedServiceNamespace.INSTANCE;
constructors[PARTITION_REPLICA] = arg -> new PartitionReplica();
constructors[PUBLISH_COMPLETED_MIGRATIONS] = arg -> new PublishCompletedMigrationsOperation();
constructors[PARTITION_STATE_CHECK_OP] = arg -> new PartitionStateCheckOperation();
constructors[REPLICA_MIGRATION_EVENT] = arg -> new ReplicaMigrationEventImpl();
constructors[MIGRATION_EVENT] = arg -> new MigrationStateImpl();
constructors[PARTITION_LOST_EVENT] = arg -> new PartitionLostEventImpl();
constructors[REPLICA_SYNC_REQUEST_OFFLOADABLE] = arg -> new PartitionReplicaSyncRequestOffloadable();
return new ArrayDataSerializableFactory(constructors);
}
use of com.hazelcast.internal.partition.operation.PartitionReplicaSyncRequest in project hazelcast by hazelcast.
the class PartitionReplicaManager method sendSyncReplicaRequest.
/**
* Send the sync request to {@code target} if the max number of parallel sync requests has not been made and the target
* was not removed while the cluster was not active. Also cancel any currently scheduled sync requests for the given
* partition and schedule a new sync request that is to be run in the case of timeout
*/
private void sendSyncReplicaRequest(int partitionId, Collection<ServiceNamespace> requestedNamespaces, int replicaIndex, PartitionReplica target) {
if (node.clusterService.isMissingMember(target.address(), target.uuid())) {
return;
}
int permits = tryAcquireReplicaSyncPermits(requestedNamespaces.size());
if (permits == 0) {
if (logger.isFinestEnabled()) {
logger.finest("Cannot send sync replica request for partitionId=" + partitionId + ", replicaIndex=" + replicaIndex + ", namespaces=" + requestedNamespaces + ". No permits available!");
}
return;
}
// Select only permitted number of namespaces
Collection<ServiceNamespace> namespaces = registerSyncInfoForNamespaces(partitionId, requestedNamespaces, replicaIndex, target, permits);
// release unused permits
if (namespaces.size() != permits) {
releaseReplicaSyncPermits(permits - namespaces.size());
}
if (namespaces.isEmpty()) {
return;
}
if (logger.isFinestEnabled()) {
logger.finest("Sending sync replica request for partitionId=" + partitionId + ", replicaIndex=" + replicaIndex + ", namespaces=" + namespaces);
}
replicaSyncRequestsCounter.inc();
Operation syncRequest = ALLOW_OFFLOAD ? new PartitionReplicaSyncRequestOffloadable(namespaces, partitionId, replicaIndex) : new PartitionReplicaSyncRequest(namespaces, partitionId, replicaIndex);
nodeEngine.getOperationService().send(syncRequest, target.address());
}
Aggregations