### Description

ShutdownShardMigrationStatus serializes ShardAllocationDecision, which, as of #97803, is chunked. ShardAllocationDecision grows with the number of nodes. Therefore, it would save heap space to chunk ShutdownShardMigrationStatus as well.
server/src/main/java/org/elasticsearch/common/xcontent/ChunkedToXContentHelper.java
return Iterators.single(((builder, params) -> builder.field(name, value)));
    }
    public static Iterator<ToXContent> field(String name, String value) {
        return Iterators.single(((builder, params) -> builder.field(name, value)));
    }
    public static Iterator<ToXContent> array(String name, Iterator<? extends ToXContent> contents) {
        return Iterators.concat(ChunkedToXContentHelper.startArray(name), contents, ChunkedToXContentHelper.endArray());
    }
    public static <T extends ToXContent> Iterator<ToXContent> wrapWithObject(String name, Iterator<T> iterator) {
        return Iterators.concat(startObject(name), iterator, endObject());
    }
    private static <T> Iterator<ToXContent> map(String name, Map<String, T> map, Function<Map.Entry<String, T>, ToXContent> toXContent) {
        return wrapWithObject(name, Iterators.map(map.entrySet().iterator(), toXContent));
    }
    /**
     * Creates an Iterator of a single ToXContent object that serializes all the given 'contents' ToXContent objects into a single chunk.
     *
     * @param contents ToXContent objects supporting toXContent() calls.
     * @return Iterator of a single ToXContent object serializing all the ToXContent "contents".
     */
    public static Iterator<ToXContent> singleChunk(ToXContent... contents) {
        return Iterators.single((builder, params) -> {
            for (ToXContent content : contents) {
                content.toXContent(builder, params);
            }
            return builder;
        });
    }
}