An incomplete shard snapshot will prevent a shard from moving away from a node (see `SnapshotInProgressAllocationDecider`). That means that when a shard snapshot completes it may become possible to perform some shard movements that previously were not possible, so we should trigger a reroute to start those movements. AFAICT we do not trigger such a reroute today.
server/src/main/java/org/elasticsearch/snapshots/SnapshotsService.java
return unmodifiableList(builder);
    }
    @Override
    public void applyClusterState(ClusterChangedEvent event) {
        try {
            if (event.localNodeMaster()) {
                
                SnapshotsInProgress snapshotsInProgress = SnapshotsInProgress.get(event.state());
                final boolean newMaster = event.previousState().nodes().isLocalNodeElectedMaster() == false;
                processExternalChanges(
                    newMaster || removedNodesCleanupNeeded(snapshotsInProgress, event.nodesDelta().removedNodes()),
                    event.routingTableChanged() && waitingShardsStartedOrUnassigned(snapshotsInProgress, event)
                );
            } else {
                if (snapshotCompletionListeners.isEmpty() == false) {
                    
                    
                    
                    for (Snapshot snapshot : Set.copyOf(snapshotCompletionListeners.keySet())) {
                        if (endingSnapshots.add(snapshot)) {
                            failSnapshotCompletionListeners(snapshot, new SnapshotException(snapshot, "no longer master"));
                            assert endingSnapshots.contains(snapshot) == false : snapshot;
                        }
                    }
                }
                if (snapshotDeletionListeners.isEmpty() == false) {
                    final Exception e = new NotMasterException("no longer master");
                    for (String delete : Set.copyOf(snapshotDeletionListeners.keySet())) {
                        failListenersIgnoringException(snapshotDeletionListeners.remove(delete), e);
                    }