use of com.hazelcast.internal.partition.ReplicaFragmentMigrationState 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.ReplicaFragmentMigrationState in project hazelcast by hazelcast.
the class MigrationRequestOperation method trySendNewFragment.
private void trySendNewFragment() {
try {
verifyMaster();
verifyExistingDestination();
InternalPartitionServiceImpl partitionService = getService();
MigrationManager migrationManager = partitionService.getMigrationManager();
MigrationInfo currentActiveMigration = migrationManager.addActiveMigration(migrationInfo);
if (!migrationInfo.equals(currentActiveMigration)) {
throw new IllegalStateException("Current active migration " + currentActiveMigration + " is different than expected: " + migrationInfo);
}
// replication operation preparation may have to happen on partition thread or not
ReplicaFragmentMigrationState migrationState = createNextReplicaFragmentMigrationState();
// migration invocation must always happen on partition thread
if (migrationState != null) {
// migration ops must be serialized and invoked from partition threads
getNodeEngine().getOperationService().execute(new InvokeMigrationOps(migrationState, getPartitionId()));
} else {
getLogger().finest("All migration fragments done for " + migrationInfo);
completeMigration(true);
}
} catch (Throwable e) {
logThrowable(e);
completeMigration(false);
}
}
use of com.hazelcast.internal.partition.ReplicaFragmentMigrationState in project hazelcast by hazelcast.
the class MigrationRequestOperation method createReplicaFragmentMigrationState.
private ReplicaFragmentMigrationState createReplicaFragmentMigrationState(Collection<ServiceNamespace> namespaces, Collection<Operation> operations, Collection<ChunkSupplier> suppliers, int maxTotalChunkedDataInBytes) {
InternalPartitionService partitionService = getService();
PartitionReplicaVersionManager versionManager = partitionService.getPartitionReplicaVersionManager();
Map<ServiceNamespace, long[]> versions = new HashMap<>(namespaces.size());
for (ServiceNamespace namespace : namespaces) {
long[] v = versionManager.getPartitionReplicaVersions(getPartitionId(), namespace);
versions.put(namespace, v);
}
return new ReplicaFragmentMigrationState(versions, operations, suppliers, chunkedMigrationEnabled, maxTotalChunkedDataInBytes, getLogger(), getPartitionId());
}
Aggregations