use of com.hazelcast.internal.partition.PartitionReplica in project hazelcast by hazelcast.
the class MigrationPlannerTest method test_SHIFT_UP_toReplicaIndexWithExistingOwner.
@Test
public void test_SHIFT_UP_toReplicaIndexWithExistingOwner() throws UnknownHostException {
final PartitionReplica[] oldReplicas = { new PartitionReplica(new Address("localhost", 5701), uuids[0]), new PartitionReplica(new Address("localhost", 5702), uuids[1]), new PartitionReplica(new Address("localhost", 5703), uuids[2]), new PartitionReplica(new Address("localhost", 5704), uuids[3]), null, null, null };
final PartitionReplica[] newReplicas = { new PartitionReplica(new Address("localhost", 5701), uuids[0]), new PartitionReplica(new Address("localhost", 5704), uuids[3]), new PartitionReplica(new Address("localhost", 5703), uuids[2]), null, null, null, null };
migrationPlanner.planMigrations(0, oldReplicas, newReplicas, callback);
verify(callback).migrate(new PartitionReplica(new Address("localhost", 5702), uuids[1]), 1, -1, new PartitionReplica(new Address("localhost", 5704), uuids[3]), 3, 1);
}
use of com.hazelcast.internal.partition.PartitionReplica in project hazelcast by hazelcast.
the class MigrationPlannerTest method test_SHIFT_UPS_performedBy_MOVE.
@Test
public void test_SHIFT_UPS_performedBy_MOVE() throws UnknownHostException {
final PartitionReplica[] oldReplicas = { new PartitionReplica(new Address("localhost", 5701), uuids[0]), new PartitionReplica(new Address("localhost", 5702), uuids[1]), new PartitionReplica(new Address("localhost", 5703), uuids[2]), new PartitionReplica(new Address("localhost", 5704), uuids[3]), null, null, null };
final PartitionReplica[] newReplicas = { new PartitionReplica(new Address("localhost", 5701), uuids[0]), new PartitionReplica(new Address("localhost", 5703), uuids[2]), new PartitionReplica(new Address("localhost", 5704), uuids[3]), new PartitionReplica(new Address("localhost", 5705), uuids[4]), null, null, null };
migrationPlanner.planMigrations(0, oldReplicas, newReplicas, callback);
verify(callback).migrate(new PartitionReplica(new Address("localhost", 5704), uuids[3]), 3, -1, new PartitionReplica(new Address("localhost", 5705), uuids[4]), -1, 3);
verify(callback).migrate(new PartitionReplica(new Address("localhost", 5703), uuids[2]), 2, -1, new PartitionReplica(new Address("localhost", 5704), uuids[3]), -1, 2);
verify(callback).migrate(new PartitionReplica(new Address("localhost", 5702), uuids[1]), 1, -1, new PartitionReplica(new Address("localhost", 5703), uuids[2]), -1, 1);
}
use of com.hazelcast.internal.partition.PartitionReplica in project hazelcast by hazelcast.
the class PartitionReplicaStateChecker_triggerAndWaitForReplicaSyncTest method whenHasMissingReplicaOwners_withAddress_thenWaitForMissingReplicaOwners.
@Test
public void whenHasMissingReplicaOwners_withAddress_thenWaitForMissingReplicaOwners() throws Exception {
configureNeedsReplicaStateCheckResponse();
Address address = new Address("127.0.0.1", 5701);
PartitionReplica replica = new PartitionReplica(address, UuidUtil.newUnsecureUUID());
InternalPartition partition = new ReadonlyInternalPartition(new PartitionReplica[] { replica }, 1, 0);
partitions.add(partition);
assertEquals(REPLICA_NOT_OWNED, replicaStateChecker.getPartitionServiceState());
assertFalse(replicaStateChecker.triggerAndWaitForReplicaSync(10, TimeUnit.MILLISECONDS, 5));
}
use of com.hazelcast.internal.partition.PartitionReplica in project hazelcast by hazelcast.
the class Backup method beforeRun.
@Override
public void beforeRun() {
NodeEngineImpl nodeEngine = (NodeEngineImpl) getNodeEngine();
int partitionId = getPartitionId();
InternalPartitionService partitionService = nodeEngine.getPartitionService();
ILogger logger = getLogger();
ensureBackupOperationInitialized();
PartitionReplicaVersionManager versionManager = partitionService.getPartitionReplicaVersionManager();
namespace = versionManager.getServiceNamespace(backupOp);
if (!nodeEngine.getNode().getNodeExtension().isStartCompleted()) {
validationFailure = new IllegalStateException("Ignoring backup! " + "Backup operation is received before startup is completed.");
if (logger.isFinestEnabled()) {
logger.finest(validationFailure.getMessage());
}
return;
}
InternalPartition partition = partitionService.getPartition(partitionId);
PartitionReplica owner = partition.getReplica(getReplicaIndex());
if (owner == null || !owner.isIdentical(nodeEngine.getLocalMember())) {
validationFailure = new IllegalStateException("Wrong target! " + toString() + " cannot be processed! Target should be: " + owner);
if (logger.isFinestEnabled()) {
logger.finest(validationFailure.getMessage());
}
return;
}
if (versionManager.isPartitionReplicaVersionStale(getPartitionId(), namespace, replicaVersions, getReplicaIndex())) {
validationFailure = new IllegalStateException("Ignoring stale backup with namespace: " + namespace + ", versions: " + Arrays.toString(replicaVersions));
if (logger.isFineEnabled()) {
long[] currentVersions = versionManager.getPartitionReplicaVersions(partitionId, namespace);
logger.fine("Ignoring stale backup! namespace: " + namespace + ", Current-versions: " + Arrays.toString(currentVersions) + ", Backup-versions: " + Arrays.toString(replicaVersions));
}
return;
}
}
use of com.hazelcast.internal.partition.PartitionReplica in project hazelcast by hazelcast.
the class OperationBackupHandler method sendMultipleBackups.
private int sendMultipleBackups(BackupAwareOperation backupAwareOp, InternalPartition partition, long[] replicaVersions, int syncBackups, int totalBackups) {
int sendSyncBackups = 0;
Operation backupOp = getBackupOperation(backupAwareOp);
if (!(backupOp instanceof TargetAware)) {
// optimize common case: serialize operation once and send to multiple targets
Data backupOpData = nodeEngine.getSerializationService().toData(backupOp);
for (int replicaIndex = 1; replicaIndex <= totalBackups; replicaIndex++) {
PartitionReplica target = partition.getReplica(replicaIndex);
if (target == null) {
continue;
}
if (skipSendingBackupToTarget(partition, target)) {
continue;
}
boolean isSyncBackup = replicaIndex <= syncBackups;
Backup backup = newBackup(backupAwareOp, backupOpData, replicaVersions, replicaIndex, isSyncBackup);
outboundOperationHandler.send(backup, target.address());
if (isSyncBackup) {
sendSyncBackups++;
}
}
} else {
for (int replicaIndex = 1; replicaIndex <= totalBackups; replicaIndex++) {
int syncBackupSent = sendSingleBackup(backupAwareOp, partition, replicaVersions, syncBackups, replicaIndex);
sendSyncBackups += syncBackupSent;
}
}
return sendSyncBackups;
}
Aggregations