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.
test/framework/src/main/java/org/elasticsearch/test/ClusterServiceUtils.java
null,
            logger
        );
        future.get(30L, TimeUnit.SECONDS);
    }
    public static void awaitNoPendingTasks(ClusterService clusterService) {
        PlainActionFuture.<Void, RuntimeException>get(
            fut -> clusterService.submitUnbatchedStateUpdateTask(
                "await-queue-empty",
                new ClusterStateUpdateTask(Priority.LANGUID, TimeValue.timeValueSeconds(10)) {
                    @Override
                    public ClusterState execute(ClusterState currentState) {
                        return currentState;
                    }
                    @Override
                    public void onFailure(Exception e) {
                        fut.onFailure(e);
                    }
                    @Override
                    public void clusterStateProcessed(ClusterState initialState, ClusterState newState) {
                        fut.onResponse(null);
                    }
                }
            ),
            10,
            TimeUnit.SECONDS
        );
    }
}