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
RepositoryData repositoryData,
        IndexVersion minNodeVersion
    ) {
        if (repositoryOperations.startDeletion(deleteEntry.uuid())) {
            assert currentlyFinalizing.contains(deleteEntry.repository());
            final List<SnapshotId> snapshotIds = deleteEntry.getSnapshots();
            assert deleteEntry.state() == SnapshotDeletionsInProgress.State.STARTED : "incorrect state for entry [" + deleteEntry + "]";
            if (snapshotIds.isEmpty()) {
                
                
                
                
                removeSnapshotDeletionFromClusterState(
                    deleteEntry,
                    repositoryData,
                    listeners -> completeListenersIgnoringException(listeners, null)
                );
                return;
            }
            repositoriesService.repository(deleteEntry.repository())
                .deleteSnapshots(snapshotIds, repositoryData.getGenId(), minNodeVersion, new SnapshotDeleteListener() {
                    private final ListenableFuture<Void> doneFuture = new ListenableFuture<>();
                    @Override
                    public void onDone() {
                        logger.info("snapshots {} deleted", snapshotIds);
                        doneFuture.onResponse(null);
                    }
                    @Override
                    public void onRepositoryDataWritten(RepositoryData updatedRepoData) {
                        removeSnapshotDeletionFromClusterState(