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 updateWithSnapshots(
                            currentState,
                            snapshotsInProgress.withUpdatedEntriesForRepo(repoName, updatedEntries),
                            null
                        );
                    }
                    return currentState;
                }
                @Override
                public void onFailure(Exception e) {
                    initializingClones.remove(targetSnapshot);
                    logger.info(() -> "Failed to start snapshot clone [" + cloneEntry + "]", e);
                    failAllListenersOnMasterFailOver(e);
                }
                @Override
                public void clusterStateProcessed(ClusterState oldState, ClusterState newState) {
                    initializingClones.remove(targetSnapshot);
                    if (updatedEntry != null) {
                        final Snapshot target = updatedEntry.snapshot();
                        final SnapshotId sourceSnapshot = updatedEntry.source();
                        for (Map.Entry<RepositoryShardId, ShardSnapshotStatus> indexClone : updatedEntry.shardsByRepoShardId().entrySet()) {
                            final ShardSnapshotStatus shardStatusBefore = indexClone.getValue();
                            if (shardStatusBefore.state() != ShardState.INIT) {
                                continue;
                            }
                            final RepositoryShardId repoShardId = indexClone.getKey();
                            runReadyClone(target, sourceSnapshot, shardStatusBefore, repoShardId, repository);
                        }
                    } else {