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
* @param onFailure        error handler invoked on failure to get a consistent view of the current {@link RepositoryData}
     */
    private void executeConsistentStateUpdate(
        Repository repository,
        Function<RepositoryData, ClusterStateUpdateTask> createUpdateTask,
        String source,
        Consumer<Exception> onFailure
    ) {
        final RepositoryMetadata repositoryMetadataStart = repository.getMetadata();
        repository.getRepositoryData(
            
            EsExecutors.DIRECT_EXECUTOR_SERVICE,
            ActionListener.wrap(repositoryData -> {
                final ClusterStateUpdateTask updateTask = createUpdateTask.apply(repositoryData);
                submitUnbatchedTask(source, new ClusterStateUpdateTask(updateTask.priority(), updateTask.timeout()) {
                    private boolean executedTask = false;
                    @Override
                    public ClusterState execute(ClusterState currentState) throws Exception {
                        
                        
                        
                        
                        
                        
                        if (repositoryMetadataStart.equals(
                            RepositoriesMetadata.get(currentState).repository(repository.getMetadata().name())
                        )) {
                            executedTask = true;
                            return updateTask.execute(currentState);
                        }