@Override public void initializedReplicaReinitialized(ShardRouting oldReplica, ShardRouting reinitializedReplica) { for (RoutingChangesObserver routingChangesObserver : routingChangesObservers) { routingChangesObserver.initializedReplicaReinitialized(oldReplica, reinitializedReplica); } } }
@Override public void relocationCompleted(ShardRouting removedRelocationSource) { for (RoutingChangesObserver routingChangesObserver : routingChangesObservers) { routingChangesObserver.relocationCompleted(removedRelocationSource); } }
@Override public void relocationSourceRemoved(ShardRouting removedReplicaRelocationSource) { for (RoutingChangesObserver routingChangesObserver : routingChangesObservers) { routingChangesObserver.relocationSourceRemoved(removedReplicaRelocationSource); } }
ShardRouting startedShard = started(initializingShard); logger.trace("{} marked shard as started (routing: {})", initializingShard.shardId(), initializingShard); routingChangesObserver.shardStarted(initializingShard, startedShard); + initializingShard + " but was: " + relocationSourceShard.getTargetRelocatingShard(); remove(relocationSourceShard); routingChangesObserver.relocationCompleted(relocationSourceShard); routingChangesObserver.shardFailed(routing, new UnassignedInfo(UnassignedInfo.Reason.REINITIALIZED, "primary changed")); relocateShard(startedReplica, sourceShard.relocatingNodeId(), } else { ShardRouting reinitializedReplica = reinitReplica(routing); routingChangesObserver.initializedReplicaReinitialized(routing, reinitializedReplica);
routingChangesObserver.shardFailed(targetShard, unassignedInfo); } else { logger.trace("{}, relocation source failed / cancelled, mark as initializing without relocation source", targetShard); routingChangesObserver.relocationSourceRemoved(targetShard); remove(failedShard); routingChangesObserver.shardFailed(failedShard, unassignedInfo); } else { assert failedShard.active(); routingChangesObserver.shardFailed(failedShard, unassignedInfo);
@Override public void unassignedInfoUpdated(ShardRouting unassignedShard, UnassignedInfo newUnassignedInfo) { for (RoutingChangesObserver routingChangesObserver : routingChangesObservers) { routingChangesObserver.unassignedInfoUpdated(unassignedShard, newUnassignedInfo); } }
@Override public void shardInitialized(ShardRouting unassignedShard, ShardRouting initializedShard) { for (RoutingChangesObserver routingChangesObserver : routingChangesObservers) { routingChangesObserver.shardInitialized(unassignedShard, initializedShard); } }
@Override public void relocationStarted(ShardRouting startedShard, ShardRouting targetRelocatingShard) { for (RoutingChangesObserver routingChangesObserver : routingChangesObservers) { routingChangesObserver.relocationStarted(startedShard, targetRelocatingShard); } }
private void promoteReplicaToPrimary(ShardRouting activeReplica, IndexMetaData indexMetaData, RoutingChangesObserver routingChangesObserver) { // if the activeReplica was relocating before this call to failShard, its relocation was cancelled earlier when we // failed initializing replica shards (and moved replica relocation source back to started) assert activeReplica.started() : "replica relocation should have been cancelled: " + activeReplica; ShardRouting primarySwappedCandidate = promoteActiveReplicaShardToPrimary(activeReplica); routingChangesObserver.replicaPromoted(activeReplica); if (IndexMetaData.isIndexUsingShadowReplicas(indexMetaData.getSettings())) { ShardRouting initializedShard = reinitShadowPrimary(primarySwappedCandidate); routingChangesObserver.startedPrimaryReinitialized(primarySwappedCandidate, initializedShard); } }
@Override public void replicaPromoted(ShardRouting replicaShard) { for (RoutingChangesObserver routingChangesObserver : routingChangesObservers) { routingChangesObserver.replicaPromoted(replicaShard); } }
@Override public void shardStarted(ShardRouting initializingShard, ShardRouting startedShard) { for (RoutingChangesObserver routingChangesObserver : routingChangesObservers) { routingChangesObserver.shardStarted(initializingShard, startedShard); } }
@Override public void startedPrimaryReinitialized(ShardRouting startedPrimaryShard, ShardRouting initializedShard) { for (RoutingChangesObserver routingChangesObserver : routingChangesObservers) { routingChangesObserver.startedPrimaryReinitialized(startedPrimaryShard, initializedShard); } }
@Override public void shardFailed(ShardRouting activeShard, UnassignedInfo unassignedInfo) { for (RoutingChangesObserver routingChangesObserver : routingChangesObservers) { routingChangesObserver.shardFailed(activeShard, unassignedInfo); } }
ShardRouting startedShard = started(initializingShard); logger.trace("{} marked shard as started (routing: {})", initializingShard.shardId(), initializingShard); routingChangesObserver.shardStarted(initializingShard, startedShard); + initializingShard + " but was: " + relocationSourceShard.getTargetRelocatingShard(); remove(relocationSourceShard); routingChangesObserver.relocationCompleted(relocationSourceShard); routingChangesObserver.shardFailed(routing, new UnassignedInfo(UnassignedInfo.Reason.REINITIALIZED, "primary changed")); relocateShard(startedReplica, sourceShard.relocatingNodeId(), } else { ShardRouting reinitializedReplica = reinitReplica(routing); routingChangesObserver.initializedReplicaReinitialized(routing, reinitializedReplica);
routingChangesObserver.shardFailed(targetShard, unassignedInfo); } else { logger.trace("{}, relocation source failed / cancelled, mark as initializing without relocation source", targetShard); routingChangesObserver.relocationSourceRemoved(targetShard); remove(failedShard); routingChangesObserver.shardFailed(failedShard, unassignedInfo); } else { assert failedShard.active(); routingChangesObserver.shardFailed(failedShard, unassignedInfo);
/** * updates the unassigned info and recovery source on the current unassigned shard * * @param unassignedInfo the new unassigned info to use * @param recoverySource the new recovery source to use * @return the shard with unassigned info updated */ public ShardRouting updateUnassigned(UnassignedInfo unassignedInfo, RecoverySource recoverySource, RoutingChangesObserver changes) { nodes.ensureMutable(); ShardRouting updatedShardRouting = current.updateUnassigned(unassignedInfo, recoverySource); changes.unassignedInfoUpdated(current, unassignedInfo); updateShardRouting(updatedShardRouting); return updatedShardRouting; }
@Override public void shardInitialized(ShardRouting unassignedShard, ShardRouting initializedShard) { for (RoutingChangesObserver routingChangesObserver : routingChangesObservers) { routingChangesObserver.shardInitialized(unassignedShard, initializedShard); } }
@Override public void relocationStarted(ShardRouting startedShard, ShardRouting targetRelocatingShard) { for (RoutingChangesObserver routingChangesObserver : routingChangesObservers) { routingChangesObserver.relocationStarted(startedShard, targetRelocatingShard); } }
private void promoteReplicaToPrimary(ShardRouting activeReplica, IndexMetaData indexMetaData, RoutingChangesObserver routingChangesObserver) { // if the activeReplica was relocating before this call to failShard, its relocation was cancelled earlier when we // failed initializing replica shards (and moved replica relocation source back to started) assert activeReplica.started() : "replica relocation should have been cancelled: " + activeReplica; ShardRouting primarySwappedCandidate = promoteActiveReplicaShardToPrimary(activeReplica); routingChangesObserver.replicaPromoted(activeReplica); }
@Override public void shardStarted(ShardRouting initializingShard, ShardRouting startedShard) { for (RoutingChangesObserver routingChangesObserver : routingChangesObservers) { routingChangesObserver.shardStarted(initializingShard, startedShard); } }