From 00b3721108d749dcaf88ee187a61e66b21006060 Mon Sep 17 00:00:00 2001 From: Armin Braun Date: Tue, 24 May 2022 07:30:34 +0200 Subject: [PATCH] Dry up collection writing to StreamOutput (#86386) Small weekend project around automated refactoring: We have endless duplication here, drying up some of it. --- .../builders/GeometryCollectionBuilder.java | 5 +--- .../builders/MultiLineStringBuilder.java | 5 +--- .../builders/MultiPolygonBuilder.java | 5 +--- .../legacygeo/builders/PolygonBuilder.java | 5 +--- .../legacygeo/builders/ShapeBuilder.java | 5 +--- .../percolator/PercolateQueryBuilder.java | 5 +--- .../index/rankeval/RankEvalResponse.java | 12 ++------ .../index/rankeval/RankEvalSpec.java | 11 ++----- .../admin/indices/analyze/AnalyzeAction.java | 10 ++----- .../indices/create/CreateIndexRequest.java | 5 +--- .../indices/rollover/RolloverResponse.java | 6 +--- .../shards/IndicesShardStoresRequest.java | 5 +--- .../shards/IndicesShardStoresResponse.java | 12 ++++---- .../get/GetIndexTemplatesResponse.java | 5 +--- .../template/put/PutIndexTemplateRequest.java | 5 +--- .../action/ingest/GetPipelineResponse.java | 5 +--- .../ingest/SimulateDocumentVerboseResult.java | 5 +--- .../ingest/SimulatePipelineResponse.java | 5 +--- .../action/search/MultiSearchRequest.java | 5 +--- .../action/search/TransportSearchHelper.java | 13 ++++---- .../support/broadcast/BroadcastResponse.java | 5 +--- .../node/TransportBroadcastByNodeAction.java | 5 +--- .../replication/ReplicationResponse.java | 5 +--- .../support/tasks/BaseTasksResponse.java | 10 ++----- .../support/tasks/TransportTasksAction.java | 16 ++-------- .../elasticsearch/cluster/ClusterInfo.java | 15 +++------- .../cluster/RestoreInProgress.java | 15 +++++----- .../cluster/metadata/IndexMetadata.java | 26 +++++----------- .../metadata/IndexTemplateMetadata.java | 11 ++----- .../cluster/metadata/Metadata.java | 5 +--- .../cluster/node/DiscoveryNode.java | 11 ++++--- .../cluster/node/DiscoveryNodes.java | 5 +--- .../cluster/routing/IndexRoutingTable.java | 5 +--- .../routing/IndexShardRoutingTable.java | 6 +--- .../cluster/routing/RoutingTable.java | 5 +--- .../allocation/RoutingExplanations.java | 5 +--- .../command/AllocationCommands.java | 5 +--- .../routing/allocation/decider/Decision.java | 5 +--- .../elasticsearch/common/lucene/Lucene.java | 22 +++----------- .../common/util/concurrent/ThreadContext.java | 7 +---- .../index/engine/CommitStats.java | 6 +--- .../elasticsearch/index/engine/Segment.java | 29 +++++++++--------- .../index/engine/SegmentsStats.java | 5 +--- .../index/query/GeoPolygonQueryBuilder.java | 5 +--- .../index/query/InnerHitBuilder.java | 5 +--- .../index/query/MultiMatchQueryBuilder.java | 6 +--- .../index/query/QueryStringQueryBuilder.java | 6 +--- .../index/reindex/BulkByScrollTask.java | 5 +--- .../indices/NodeIndicesStats.java | 9 +----- .../recovery/RecoveryFilesInfoRequest.java | 21 +++---------- .../org/elasticsearch/ingest/IngestStats.java | 11 ++++--- .../org/elasticsearch/monitor/fs/FsInfo.java | 5 +--- .../elasticsearch/monitor/jvm/JvmInfo.java | 6 +--- .../elasticsearch/script/ScriptMetadata.java | 7 +---- .../org/elasticsearch/search/SearchHit.java | 21 +++---------- .../org/elasticsearch/search/SearchHits.java | 7 +---- .../aggregations/AggregatorFactories.java | 10 ++----- .../search/aggregations/InternalOrder.java | 5 +--- .../adjacency/InternalAdjacencyMatrix.java | 5 +--- .../CompositeAggregationBuilder.java | 5 +--- .../filter/FiltersAggregationBuilder.java | 11 +------ .../bucket/filter/InternalFilters.java | 5 +--- .../histogram/InternalAutoDateHistogram.java | 5 +--- .../bucket/range/AbstractRangeBuilder.java | 5 +--- .../range/GeoDistanceAggregationBuilder.java | 5 +--- .../bucket/range/InternalRange.java | 5 +--- .../range/IpRangeAggregationBuilder.java | 11 ++++--- .../bucket/terms/IncludeExclude.java | 10 ++----- ...ucketScriptPipelineAggregationBuilder.java | 7 +---- .../aggregations/support/AggregationInfo.java | 9 +----- .../timeseries/InternalTimeSeries.java | 5 +--- .../search/builder/SearchSourceBuilder.java | 5 +--- .../search/dfs/AggregatedDfs.java | 20 +++++-------- .../search/dfs/DfsSearchResult.java | 30 +++++++------------ .../search/fetch/ShardFetchRequest.java | 5 +--- .../subphase/highlight/HighlightField.java | 5 +--- .../AggregationProfileShardResult.java | 5 +--- .../searchafter/SearchAfterBuilder.java | 5 +--- .../elasticsearch/search/suggest/Suggest.java | 5 +--- .../completion/CompletionSuggestion.java | 5 +--- .../phrase/PhraseSuggestionBuilder.java | 10 +------ .../autoscaling/AutoscalingMetadata.java | 5 +--- .../bulk/BulkShardOperationsRequest.java | 5 +--- .../license/PostStartBasicResponse.java | 9 +----- .../license/PostStartTrialResponse.java | 9 +----- .../xpack/graph/GraphExploreRequest.java | 6 ++-- .../protocol/xpack/graph/Hop.java | 5 +--- .../protocol/xpack/graph/VertexRequest.java | 16 ++++------ .../xpack/license/PutLicenseResponse.java | 9 +----- .../core/ilm/ExplainLifecycleResponse.java | 5 +--- .../monitoring/exporter/ExportException.java | 5 +--- .../sql/action/AbstractSqlQueryRequest.java | 5 +--- 92 files changed, 184 insertions(+), 570 deletions(-) diff --git a/modules/legacy-geo/src/main/java/org/elasticsearch/legacygeo/builders/GeometryCollectionBuilder.java b/modules/legacy-geo/src/main/java/org/elasticsearch/legacygeo/builders/GeometryCollectionBuilder.java index d79f4b4f3b10..0ebbbb3d6bf1 100644 --- a/modules/legacy-geo/src/main/java/org/elasticsearch/legacygeo/builders/GeometryCollectionBuilder.java +++ b/modules/legacy-geo/src/main/java/org/elasticsearch/legacygeo/builders/GeometryCollectionBuilder.java @@ -51,10 +51,7 @@ public class GeometryCollectionBuilder extends ShapeBuilder shape : shapes) { - out.writeNamedWriteable(shape); - } + out.writeNamedWriteableList(shapes); } public GeometryCollectionBuilder shape(ShapeBuilder shape) { diff --git a/modules/legacy-geo/src/main/java/org/elasticsearch/legacygeo/builders/MultiLineStringBuilder.java b/modules/legacy-geo/src/main/java/org/elasticsearch/legacygeo/builders/MultiLineStringBuilder.java index 259aadb4d9a2..7baeebbb1dcd 100644 --- a/modules/legacy-geo/src/main/java/org/elasticsearch/legacygeo/builders/MultiLineStringBuilder.java +++ b/modules/legacy-geo/src/main/java/org/elasticsearch/legacygeo/builders/MultiLineStringBuilder.java @@ -49,10 +49,7 @@ public class MultiLineStringBuilder extends ShapeBuilder writeCoordinateTo(p, o)); } protected static void writeCoordinateTo(Coordinate coordinate, StreamOutput out) throws IOException { diff --git a/modules/percolator/src/main/java/org/elasticsearch/percolator/PercolateQueryBuilder.java b/modules/percolator/src/main/java/org/elasticsearch/percolator/PercolateQueryBuilder.java index 455b3f1f8aa2..391f0a8b628c 100644 --- a/modules/percolator/src/main/java/org/elasticsearch/percolator/PercolateQueryBuilder.java +++ b/modules/percolator/src/main/java/org/elasticsearch/percolator/PercolateQueryBuilder.java @@ -275,10 +275,7 @@ public class PercolateQueryBuilder extends AbstractQueryBuilder v.writeTo(o)); + out.writeMap(failures, StreamOutput::writeString, StreamOutput::writeException); } @Override diff --git a/modules/rank-eval/src/main/java/org/elasticsearch/index/rankeval/RankEvalSpec.java b/modules/rank-eval/src/main/java/org/elasticsearch/index/rankeval/RankEvalSpec.java index 3f816e1479a6..89d5561f72ed 100644 --- a/modules/rank-eval/src/main/java/org/elasticsearch/index/rankeval/RankEvalSpec.java +++ b/modules/rank-eval/src/main/java/org/elasticsearch/index/rankeval/RankEvalSpec.java @@ -96,16 +96,9 @@ public class RankEvalSpec implements Writeable, ToXContentObject { @Override public void writeTo(StreamOutput out) throws IOException { - out.writeVInt(ratedRequests.size()); - for (RatedRequest spec : ratedRequests) { - spec.writeTo(out); - } + out.writeList(ratedRequests); out.writeNamedWriteable(metric); - out.writeVInt(templates.size()); - for (Entry entry : templates.entrySet()) { - out.writeString(entry.getKey()); - entry.getValue().writeTo(out); - } + out.writeMap(templates, StreamOutput::writeString, (o, v) -> v.writeTo(o)); out.writeVInt(maxConcurrentSearches); } diff --git a/server/src/main/java/org/elasticsearch/action/admin/indices/analyze/AnalyzeAction.java b/server/src/main/java/org/elasticsearch/action/admin/indices/analyze/AnalyzeAction.java index ae4f13616068..c7d77e7d3951 100644 --- a/server/src/main/java/org/elasticsearch/action/admin/indices/analyze/AnalyzeAction.java +++ b/server/src/main/java/org/elasticsearch/action/admin/indices/analyze/AnalyzeAction.java @@ -646,18 +646,12 @@ public class AnalyzeAction extends ActionType { if (customAnalyzer) { tokenizer.writeTo(out); if (charfilters != null) { - out.writeVInt(charfilters.length); - for (CharFilteredText charfilter : charfilters) { - charfilter.writeTo(out); - } + out.writeArray(charfilters); } else { out.writeVInt(0); } if (tokenfilters != null) { - out.writeVInt(tokenfilters.length); - for (AnalyzeTokenList tokenfilter : tokenfilters) { - tokenfilter.writeTo(out); - } + out.writeArray(tokenfilters); } else { out.writeVInt(0); } diff --git a/server/src/main/java/org/elasticsearch/action/admin/indices/create/CreateIndexRequest.java b/server/src/main/java/org/elasticsearch/action/admin/indices/create/CreateIndexRequest.java index 8b0eecf401ea..aa65352e5046 100644 --- a/server/src/main/java/org/elasticsearch/action/admin/indices/create/CreateIndexRequest.java +++ b/server/src/main/java/org/elasticsearch/action/admin/indices/create/CreateIndexRequest.java @@ -465,10 +465,7 @@ public class CreateIndexRequest extends AcknowledgedRequest } else { out.writeString(mappings); } - out.writeVInt(aliases.size()); - for (Alias alias : aliases) { - alias.writeTo(out); - } + out.writeCollection(aliases); waitForActiveShards.writeTo(out); if (out.getVersion().onOrAfter(Version.V_7_12_0)) { out.writeString(origin); diff --git a/server/src/main/java/org/elasticsearch/action/admin/indices/rollover/RolloverResponse.java b/server/src/main/java/org/elasticsearch/action/admin/indices/rollover/RolloverResponse.java index 9c37addf7b55..b9416fbfa216 100644 --- a/server/src/main/java/org/elasticsearch/action/admin/indices/rollover/RolloverResponse.java +++ b/server/src/main/java/org/elasticsearch/action/admin/indices/rollover/RolloverResponse.java @@ -120,11 +120,7 @@ public final class RolloverResponse extends ShardsAcknowledgedResponse implement super.writeTo(out); out.writeString(oldIndex); out.writeString(newIndex); - out.writeVInt(conditionStatus.size()); - for (Map.Entry entry : conditionStatus.entrySet()) { - out.writeString(entry.getKey()); - out.writeBoolean(entry.getValue()); - } + out.writeMap(conditionStatus, StreamOutput::writeString, StreamOutput::writeBoolean); out.writeBoolean(dryRun); out.writeBoolean(rolledOver); out.writeBoolean(shardsAcknowledged); diff --git a/server/src/main/java/org/elasticsearch/action/admin/indices/shards/IndicesShardStoresRequest.java b/server/src/main/java/org/elasticsearch/action/admin/indices/shards/IndicesShardStoresRequest.java index d6b8f1e993c8..562ea25468c8 100644 --- a/server/src/main/java/org/elasticsearch/action/admin/indices/shards/IndicesShardStoresRequest.java +++ b/server/src/main/java/org/elasticsearch/action/admin/indices/shards/IndicesShardStoresRequest.java @@ -52,10 +52,7 @@ public class IndicesShardStoresRequest extends MasterNodeReadRequest o.writeByte(v.value())); indicesOptions.writeIndicesOptions(out); } diff --git a/server/src/main/java/org/elasticsearch/action/admin/indices/shards/IndicesShardStoresResponse.java b/server/src/main/java/org/elasticsearch/action/admin/indices/shards/IndicesShardStoresResponse.java index 7f3d811470c2..c608febeaf4f 100644 --- a/server/src/main/java/org/elasticsearch/action/admin/indices/shards/IndicesShardStoresResponse.java +++ b/server/src/main/java/org/elasticsearch/action/admin/indices/shards/IndicesShardStoresResponse.java @@ -269,13 +269,11 @@ public class IndicesShardStoresResponse extends ActionResponse implements ToXCon @Override public void writeTo(StreamOutput out) throws IOException { - out.writeMap(storeStatuses, StreamOutput::writeString, (o, v) -> { - o.writeVInt(v.size()); - for (Map.Entry> shardStatusesEntry : v.entrySet()) { - o.writeInt(shardStatusesEntry.getKey()); - o.writeCollection(shardStatusesEntry.getValue()); - } - }); + out.writeMap( + storeStatuses, + StreamOutput::writeString, + (o, v) -> o.writeMap(v, StreamOutput::writeInt, StreamOutput::writeCollection) + ); out.writeList(failures); } diff --git a/server/src/main/java/org/elasticsearch/action/admin/indices/template/get/GetIndexTemplatesResponse.java b/server/src/main/java/org/elasticsearch/action/admin/indices/template/get/GetIndexTemplatesResponse.java index 6e9e722fb71a..62c9af29c947 100644 --- a/server/src/main/java/org/elasticsearch/action/admin/indices/template/get/GetIndexTemplatesResponse.java +++ b/server/src/main/java/org/elasticsearch/action/admin/indices/template/get/GetIndexTemplatesResponse.java @@ -42,10 +42,7 @@ public class GetIndexTemplatesResponse extends ActionResponse implements ToXCont @Override public void writeTo(StreamOutput out) throws IOException { - out.writeVInt(indexTemplates.size()); - for (IndexTemplateMetadata indexTemplate : indexTemplates) { - indexTemplate.writeTo(out); - } + out.writeCollection(indexTemplates); } @Override diff --git a/server/src/main/java/org/elasticsearch/action/admin/indices/template/put/PutIndexTemplateRequest.java b/server/src/main/java/org/elasticsearch/action/admin/indices/template/put/PutIndexTemplateRequest.java index b2fe3ec0d85f..66deeaa64df3 100644 --- a/server/src/main/java/org/elasticsearch/action/admin/indices/template/put/PutIndexTemplateRequest.java +++ b/server/src/main/java/org/elasticsearch/action/admin/indices/template/put/PutIndexTemplateRequest.java @@ -456,10 +456,7 @@ public class PutIndexTemplateRequest extends MasterNodeRequest getProcessorResults() { diff --git a/server/src/main/java/org/elasticsearch/action/ingest/SimulatePipelineResponse.java b/server/src/main/java/org/elasticsearch/action/ingest/SimulatePipelineResponse.java index a5dc7dda6413..f5dcb83fa36f 100644 --- a/server/src/main/java/org/elasticsearch/action/ingest/SimulatePipelineResponse.java +++ b/server/src/main/java/org/elasticsearch/action/ingest/SimulatePipelineResponse.java @@ -121,10 +121,7 @@ public class SimulatePipelineResponse extends ActionResponse implements ToXConte public void writeTo(StreamOutput out) throws IOException { out.writeOptionalString(pipelineId); out.writeBoolean(verbose); - out.writeVInt(results.size()); - for (SimulateDocumentResult response : results) { - response.writeTo(out); - } + out.writeCollection(results); } @Override diff --git a/server/src/main/java/org/elasticsearch/action/search/MultiSearchRequest.java b/server/src/main/java/org/elasticsearch/action/search/MultiSearchRequest.java index 085f17ef6684..5281b4e44211 100644 --- a/server/src/main/java/org/elasticsearch/action/search/MultiSearchRequest.java +++ b/server/src/main/java/org/elasticsearch/action/search/MultiSearchRequest.java @@ -147,10 +147,7 @@ public class MultiSearchRequest extends ActionRequest implements CompositeIndice public void writeTo(StreamOutput out) throws IOException { super.writeTo(out); out.writeVInt(maxConcurrentSearchRequests); - out.writeVInt(requests.size()); - for (SearchRequest request : requests) { - request.writeTo(out); - } + out.writeCollection(requests); } @Override diff --git a/server/src/main/java/org/elasticsearch/action/search/TransportSearchHelper.java b/server/src/main/java/org/elasticsearch/action/search/TransportSearchHelper.java index a58585ffb830..6be1dfdcf357 100644 --- a/server/src/main/java/org/elasticsearch/action/search/TransportSearchHelper.java +++ b/server/src/main/java/org/elasticsearch/action/search/TransportSearchHelper.java @@ -39,19 +39,18 @@ public final class TransportSearchHelper { BytesStreamOutput out = new BytesStreamOutput(); out.writeString(INCLUDE_CONTEXT_UUID); out.writeString(searchPhaseResults.length() == 1 ? ParsedScrollId.QUERY_AND_FETCH_TYPE : ParsedScrollId.QUERY_THEN_FETCH_TYPE); - out.writeVInt(searchPhaseResults.asList().size()); - for (SearchPhaseResult searchPhaseResult : searchPhaseResults.asList()) { - out.writeString(searchPhaseResult.getContextId().getSessionId()); - out.writeLong(searchPhaseResult.getContextId().getId()); + out.writeCollection(searchPhaseResults.asList(), (o, searchPhaseResult) -> { + o.writeString(searchPhaseResult.getContextId().getSessionId()); + o.writeLong(searchPhaseResult.getContextId().getId()); SearchShardTarget searchShardTarget = searchPhaseResult.getSearchShardTarget(); if (searchShardTarget.getClusterAlias() != null) { - out.writeString( + o.writeString( RemoteClusterAware.buildRemoteIndexName(searchShardTarget.getClusterAlias(), searchShardTarget.getNodeId()) ); } else { - out.writeString(searchShardTarget.getNodeId()); + o.writeString(searchShardTarget.getNodeId()); } - } + }); return Base64.getUrlEncoder().encodeToString(out.copyBytes().array()); } catch (IOException e) { throw new UncheckedIOException(e); diff --git a/server/src/main/java/org/elasticsearch/action/support/broadcast/BroadcastResponse.java b/server/src/main/java/org/elasticsearch/action/support/broadcast/BroadcastResponse.java index 74708d6c926a..5ec7f00fd130 100644 --- a/server/src/main/java/org/elasticsearch/action/support/broadcast/BroadcastResponse.java +++ b/server/src/main/java/org/elasticsearch/action/support/broadcast/BroadcastResponse.java @@ -137,10 +137,7 @@ public class BroadcastResponse extends ActionResponse implements ToXContentObjec out.writeVInt(totalShards); out.writeVInt(successfulShards); out.writeVInt(failedShards); - out.writeVInt(shardFailures.length); - for (DefaultShardOperationFailedException exp : shardFailures) { - exp.writeTo(out); - } + out.writeArray(shardFailures); } @Override diff --git a/server/src/main/java/org/elasticsearch/action/support/broadcast/node/TransportBroadcastByNodeAction.java b/server/src/main/java/org/elasticsearch/action/support/broadcast/node/TransportBroadcastByNodeAction.java index 382c9cf01693..23f7dddb983f 100644 --- a/server/src/main/java/org/elasticsearch/action/support/broadcast/node/TransportBroadcastByNodeAction.java +++ b/server/src/main/java/org/elasticsearch/action/support/broadcast/node/TransportBroadcastByNodeAction.java @@ -671,10 +671,7 @@ public abstract class TransportBroadcastByNodeAction< public void writeTo(StreamOutput out) throws IOException { out.writeString(nodeId); out.writeVInt(totalShards); - out.writeVInt(results.size()); - for (ShardOperationResult result : results) { - out.writeOptionalWriteable(result); - } + out.writeCollection(results, StreamOutput::writeOptionalWriteable); out.writeBoolean(exceptions != null); if (exceptions != null) { out.writeList(exceptions); diff --git a/server/src/main/java/org/elasticsearch/action/support/replication/ReplicationResponse.java b/server/src/main/java/org/elasticsearch/action/support/replication/ReplicationResponse.java index f8539947e246..3644b35e187a 100644 --- a/server/src/main/java/org/elasticsearch/action/support/replication/ReplicationResponse.java +++ b/server/src/main/java/org/elasticsearch/action/support/replication/ReplicationResponse.java @@ -135,10 +135,7 @@ public class ReplicationResponse extends ActionResponse { public void writeTo(StreamOutput out) throws IOException { out.writeVInt(total); out.writeVInt(successful); - out.writeVInt(failures.length); - for (Failure failure : failures) { - failure.writeTo(out); - } + out.writeArray(failures); } @Override diff --git a/server/src/main/java/org/elasticsearch/action/support/tasks/BaseTasksResponse.java b/server/src/main/java/org/elasticsearch/action/support/tasks/BaseTasksResponse.java index dca51fa650ea..fe6db0c0c4a4 100644 --- a/server/src/main/java/org/elasticsearch/action/support/tasks/BaseTasksResponse.java +++ b/server/src/main/java/org/elasticsearch/action/support/tasks/BaseTasksResponse.java @@ -61,14 +61,8 @@ public class BaseTasksResponse extends ActionResponse { @Override public void writeTo(StreamOutput out) throws IOException { - out.writeVInt(taskFailures.size()); - for (TaskOperationFailure exp : taskFailures) { - exp.writeTo(out); - } - out.writeVInt(nodeFailures.size()); - for (ElasticsearchException exp : nodeFailures) { - exp.writeTo(out); - } + out.writeCollection(taskFailures); + out.writeCollection(nodeFailures); } /** diff --git a/server/src/main/java/org/elasticsearch/action/support/tasks/TransportTasksAction.java b/server/src/main/java/org/elasticsearch/action/support/tasks/TransportTasksAction.java index 9404dd6f35c4..d5cbd5d7f21c 100644 --- a/server/src/main/java/org/elasticsearch/action/support/tasks/TransportTasksAction.java +++ b/server/src/main/java/org/elasticsearch/action/support/tasks/TransportTasksAction.java @@ -393,22 +393,10 @@ public abstract class TransportTasksAction< @Override public void writeTo(StreamOutput out) throws IOException { out.writeString(nodeId); - out.writeVInt(results.size()); - for (TaskResponse result : results) { - if (result != null) { - out.writeBoolean(true); - result.writeTo(out); - } else { - out.writeBoolean(false); - } - } + out.writeCollection(results, StreamOutput::writeOptionalWriteable); out.writeBoolean(exceptions != null); if (exceptions != null) { - int taskFailures = exceptions.size(); - out.writeVInt(taskFailures); - for (TaskOperationFailure exception : exceptions) { - exception.writeTo(out); - } + out.writeCollection(exceptions); } } } diff --git a/server/src/main/java/org/elasticsearch/cluster/ClusterInfo.java b/server/src/main/java/org/elasticsearch/cluster/ClusterInfo.java index 609505672212..f1339f005504 100644 --- a/server/src/main/java/org/elasticsearch/cluster/ClusterInfo.java +++ b/server/src/main/java/org/elasticsearch/cluster/ClusterInfo.java @@ -116,15 +116,11 @@ public class ClusterInfo implements ToXContentFragment, Writeable { @Override public void writeTo(StreamOutput out) throws IOException { - out.writeVInt(this.leastAvailableSpaceUsage.size()); - for (Map.Entry c : this.leastAvailableSpaceUsage.entrySet()) { - out.writeString(c.getKey()); - c.getValue().writeTo(out); - } + out.writeMap(this.leastAvailableSpaceUsage, StreamOutput::writeString, (o, v) -> v.writeTo(o)); out.writeMap(this.mostAvailableSpaceUsage, StreamOutput::writeString, (o, v) -> v.writeTo(o)); - out.writeMap(this.shardSizes, StreamOutput::writeString, (o, v) -> out.writeLong(v == null ? -1 : v)); + out.writeMap(this.shardSizes, StreamOutput::writeString, (o, v) -> o.writeLong(v == null ? -1 : v)); if (out.getVersion().onOrAfter(DATA_SET_SIZE_SIZE_VERSION)) { - out.writeMap(this.shardDataSetSizes, (o, s) -> s.writeTo(o), (o, v) -> out.writeLong(v)); + out.writeMap(this.shardDataSetSizes, (o, s) -> s.writeTo(o), StreamOutput::writeLong); } out.writeMap(this.routingToDataPath, (o, k) -> k.writeTo(o), StreamOutput::writeString); if (out.getVersion().onOrAfter(StoreStats.RESERVED_BYTES_VERSION)) { @@ -316,10 +312,7 @@ public class ClusterInfo implements ToXContentFragment, Writeable { @Override public void writeTo(StreamOutput out) throws IOException { out.writeVLong(total); - out.writeVInt(shardIds.size()); - for (ShardId shardIdCursor : shardIds) { - shardIdCursor.writeTo(out); - } + out.writeCollection(shardIds); } public long getTotal() { diff --git a/server/src/main/java/org/elasticsearch/cluster/RestoreInProgress.java b/server/src/main/java/org/elasticsearch/cluster/RestoreInProgress.java index 713b5484418a..3a8bcfeb9137 100644 --- a/server/src/main/java/org/elasticsearch/cluster/RestoreInProgress.java +++ b/server/src/main/java/org/elasticsearch/cluster/RestoreInProgress.java @@ -370,14 +370,13 @@ public class RestoreInProgress extends AbstractNamedDiffable implements @Override public void writeTo(StreamOutput out) throws IOException { - out.writeVInt(entries.size()); - for (Entry entry : entries.values()) { - out.writeString(entry.uuid); - entry.snapshot().writeTo(out); - out.writeByte(entry.state().value()); - out.writeStringCollection(entry.indices); - out.writeMap(entry.shards); - } + out.writeCollection(entries.values(), (o, entry) -> { + o.writeString(entry.uuid); + entry.snapshot().writeTo(o); + o.writeByte(entry.state().value()); + o.writeStringCollection(entry.indices); + o.writeMap(entry.shards); + }); } @Override diff --git a/server/src/main/java/org/elasticsearch/cluster/metadata/IndexMetadata.java b/server/src/main/java/org/elasticsearch/cluster/metadata/IndexMetadata.java index 98810cc31582..c67285b3f617 100644 --- a/server/src/main/java/org/elasticsearch/cluster/metadata/IndexMetadata.java +++ b/server/src/main/java/org/elasticsearch/cluster/metadata/IndexMetadata.java @@ -1247,24 +1247,14 @@ public class IndexMetadata implements Diffable, ToXContentFragmen mapping.writeTo(out); } } - out.writeVInt(aliases.size()); - for (AliasMetadata aliasMetadata : aliases.values()) { - aliasMetadata.writeTo(out); - } - out.writeVInt(customData.size()); - for (final Map.Entry cursor : customData.entrySet()) { - out.writeString(cursor.getKey()); - cursor.getValue().writeTo(out); - } - out.writeVInt(inSyncAllocationIds.size()); - for (Map.Entry> cursor : inSyncAllocationIds.entrySet()) { - out.writeVInt(cursor.getKey()); - DiffableUtils.StringSetValueSerializer.getInstance().write(cursor.getValue(), out); - } - out.writeVInt(rolloverInfos.size()); - for (RolloverInfo rolloverInfo : rolloverInfos.values()) { - rolloverInfo.writeTo(out); - } + out.writeCollection(aliases.values()); + out.writeMap(customData, StreamOutput::writeString, (o, v) -> v.writeTo(o)); + out.writeMap( + inSyncAllocationIds, + StreamOutput::writeVInt, + (o, v) -> DiffableUtils.StringSetValueSerializer.getInstance().write(v, o) + ); + out.writeCollection(rolloverInfos.values()); if (out.getVersion().onOrAfter(SYSTEM_INDEX_FLAG_ADDED)) { out.writeBoolean(isSystem); } diff --git a/server/src/main/java/org/elasticsearch/cluster/metadata/IndexTemplateMetadata.java b/server/src/main/java/org/elasticsearch/cluster/metadata/IndexTemplateMetadata.java index b3d126db2f46..245e5e8a6688 100644 --- a/server/src/main/java/org/elasticsearch/cluster/metadata/IndexTemplateMetadata.java +++ b/server/src/main/java/org/elasticsearch/cluster/metadata/IndexTemplateMetadata.java @@ -207,15 +207,8 @@ public class IndexTemplateMetadata implements SimpleDiffable cursor : mappings.entrySet()) { - out.writeString(cursor.getKey()); - cursor.getValue().writeTo(out); - } - out.writeVInt(aliases.size()); - for (AliasMetadata aliasMetadata : aliases.values()) { - aliasMetadata.writeTo(out); - } + out.writeMap(mappings, StreamOutput::writeString, (o, v) -> v.writeTo(o)); + out.writeCollection(aliases.values()); out.writeOptionalVInt(version); } diff --git a/server/src/main/java/org/elasticsearch/cluster/metadata/Metadata.java b/server/src/main/java/org/elasticsearch/cluster/metadata/Metadata.java index 4144a527aef1..dd317c96710d 100644 --- a/server/src/main/java/org/elasticsearch/cluster/metadata/Metadata.java +++ b/server/src/main/java/org/elasticsearch/cluster/metadata/Metadata.java @@ -1212,10 +1212,7 @@ public class Metadata extends AbstractCollection implements Diffa for (IndexMetadata indexMetadata : this) { indexMetadata.writeTo(out, writeMappingsHash); } - out.writeVInt(templates.size()); - for (IndexTemplateMetadata template : templates.values()) { - template.writeTo(out); - } + out.writeCollection(templates.values()); VersionedNamedWriteable.writeVersionedWritables(out, customs); } diff --git a/server/src/main/java/org/elasticsearch/cluster/node/DiscoveryNode.java b/server/src/main/java/org/elasticsearch/cluster/node/DiscoveryNode.java index 46f2f9c1706f..3f15f85e9ef3 100644 --- a/server/src/main/java/org/elasticsearch/cluster/node/DiscoveryNode.java +++ b/server/src/main/java/org/elasticsearch/cluster/node/DiscoveryNode.java @@ -388,12 +388,11 @@ public class DiscoveryNode implements Writeable, ToXContentFragment { out.writeString(hostAddress); address.writeTo(out); out.writeMap(attributes, StreamOutput::writeString, StreamOutput::writeString); - out.writeVInt(roles.size()); - for (final DiscoveryNodeRole role : roles) { - out.writeString(role.roleName()); - out.writeString(role.roleNameAbbreviation()); - out.writeBoolean(role.canContainData()); - } + out.writeCollection(roles, (o, role) -> { + o.writeString(role.roleName()); + o.writeString(role.roleNameAbbreviation()); + o.writeBoolean(role.canContainData()); + }); Version.writeVersion(version, out); if (out.getVersion().onOrAfter(EXTERNAL_ID_VERSION)) { out.writeString(externalId); diff --git a/server/src/main/java/org/elasticsearch/cluster/node/DiscoveryNodes.java b/server/src/main/java/org/elasticsearch/cluster/node/DiscoveryNodes.java index 193320b3dc79..bb4d858a861d 100644 --- a/server/src/main/java/org/elasticsearch/cluster/node/DiscoveryNodes.java +++ b/server/src/main/java/org/elasticsearch/cluster/node/DiscoveryNodes.java @@ -574,10 +574,7 @@ public class DiscoveryNodes extends AbstractCollection implements @Override public void writeTo(StreamOutput out) throws IOException { out.writeOptionalString(masterNodeId); - out.writeVInt(nodes.size()); - for (DiscoveryNode node : this) { - node.writeTo(out); - } + out.writeCollection(nodes.values()); } public static DiscoveryNodes readFrom(StreamInput in, DiscoveryNode localNode) throws IOException { diff --git a/server/src/main/java/org/elasticsearch/cluster/routing/IndexRoutingTable.java b/server/src/main/java/org/elasticsearch/cluster/routing/IndexRoutingTable.java index c7f8b6f4f5f1..66e2db239c43 100644 --- a/server/src/main/java/org/elasticsearch/cluster/routing/IndexRoutingTable.java +++ b/server/src/main/java/org/elasticsearch/cluster/routing/IndexRoutingTable.java @@ -313,10 +313,7 @@ public class IndexRoutingTable implements SimpleDiffable { @Override public void writeTo(StreamOutput out) throws IOException { index.writeTo(out); - out.writeVInt(shards.length); - for (IndexShardRoutingTable indexShard : this.shards) { - IndexShardRoutingTable.Builder.writeToThin(indexShard, out); - } + out.writeArray((o, s) -> IndexShardRoutingTable.Builder.writeToThin(s, o), shards); } public static Builder builder(Index index) { diff --git a/server/src/main/java/org/elasticsearch/cluster/routing/IndexShardRoutingTable.java b/server/src/main/java/org/elasticsearch/cluster/routing/IndexShardRoutingTable.java index 0f9b4ae10b17..7cb809fc783e 100644 --- a/server/src/main/java/org/elasticsearch/cluster/routing/IndexShardRoutingTable.java +++ b/server/src/main/java/org/elasticsearch/cluster/routing/IndexShardRoutingTable.java @@ -620,11 +620,7 @@ public class IndexShardRoutingTable { public static void writeToThin(IndexShardRoutingTable indexShard, StreamOutput out) throws IOException { out.writeVInt(indexShard.shardId.id()); - - out.writeVInt(indexShard.shards.length); - for (ShardRouting entry : indexShard.shards) { - entry.writeToThin(out); - } + out.writeArray((o, v) -> v.writeToThin(o), indexShard.shards); } } diff --git a/server/src/main/java/org/elasticsearch/cluster/routing/RoutingTable.java b/server/src/main/java/org/elasticsearch/cluster/routing/RoutingTable.java index 5b33913c9da5..e63ae6d75c6a 100644 --- a/server/src/main/java/org/elasticsearch/cluster/routing/RoutingTable.java +++ b/server/src/main/java/org/elasticsearch/cluster/routing/RoutingTable.java @@ -343,10 +343,7 @@ public class RoutingTable implements Iterable, Diffable { diff --git a/server/src/main/java/org/elasticsearch/cluster/routing/allocation/RoutingExplanations.java b/server/src/main/java/org/elasticsearch/cluster/routing/allocation/RoutingExplanations.java index 9d11d69964c5..7a36ed75d799 100644 --- a/server/src/main/java/org/elasticsearch/cluster/routing/allocation/RoutingExplanations.java +++ b/server/src/main/java/org/elasticsearch/cluster/routing/allocation/RoutingExplanations.java @@ -68,10 +68,7 @@ public class RoutingExplanations implements ToXContentFragment { * Write the RoutingExplanations object */ public static void writeTo(RoutingExplanations explanations, StreamOutput out) throws IOException { - out.writeVInt(explanations.explanations.size()); - for (RerouteExplanation explanation : explanations.explanations) { - RerouteExplanation.writeTo(explanation, out); - } + out.writeCollection(explanations.explanations, (o, v) -> RerouteExplanation.writeTo(v, o)); } @Override diff --git a/server/src/main/java/org/elasticsearch/cluster/routing/allocation/command/AllocationCommands.java b/server/src/main/java/org/elasticsearch/cluster/routing/allocation/command/AllocationCommands.java index 2a3042c7d5df..51a5c172c6a2 100644 --- a/server/src/main/java/org/elasticsearch/cluster/routing/allocation/command/AllocationCommands.java +++ b/server/src/main/java/org/elasticsearch/cluster/routing/allocation/command/AllocationCommands.java @@ -99,10 +99,7 @@ public class AllocationCommands implements ToXContentFragment { * @throws IOException if something happens during write */ public static void writeTo(AllocationCommands commands, StreamOutput out) throws IOException { - out.writeVInt(commands.commands.size()); - for (AllocationCommand command : commands.commands) { - out.writeNamedWriteable(command); - } + out.writeNamedWriteableList(commands.commands); } /** diff --git a/server/src/main/java/org/elasticsearch/cluster/routing/allocation/decider/Decision.java b/server/src/main/java/org/elasticsearch/cluster/routing/allocation/decider/Decision.java index e84f199ddabe..0c681da67e6e 100644 --- a/server/src/main/java/org/elasticsearch/cluster/routing/allocation/decider/Decision.java +++ b/server/src/main/java/org/elasticsearch/cluster/routing/allocation/decider/Decision.java @@ -339,10 +339,7 @@ public abstract class Decision implements ToXContent, Writeable { @Override public void writeTo(StreamOutput out) throws IOException { out.writeBoolean(true); // flag indicating it is a multi decision - out.writeVInt(getDecisions().size()); - for (Decision d : getDecisions()) { - d.writeTo(out); - } + out.writeCollection(getDecisions()); } } } diff --git a/server/src/main/java/org/elasticsearch/common/lucene/Lucene.java b/server/src/main/java/org/elasticsearch/common/lucene/Lucene.java index 1d55d9fb7cef..d5c2f8e7d5d6 100644 --- a/server/src/main/java/org/elasticsearch/common/lucene/Lucene.java +++ b/server/src/main/java/org/elasticsearch/common/lucene/Lucene.java @@ -414,20 +414,12 @@ public class Lucene { out.writeFloat(topDocs.maxScore); out.writeArray(Lucene::writeSortField, topFieldDocs.fields); - - out.writeVInt(topDocs.topDocs.scoreDocs.length); - for (ScoreDoc doc : topFieldDocs.scoreDocs) { - writeFieldDoc(out, (FieldDoc) doc); - } + out.writeArray((o, doc) -> writeFieldDoc(o, (FieldDoc) doc), topFieldDocs.scoreDocs); } else { out.writeByte((byte) 0); writeTotalHits(out, topDocs.topDocs.totalHits); out.writeFloat(topDocs.maxScore); - - out.writeVInt(topDocs.topDocs.scoreDocs.length); - for (ScoreDoc doc : topDocs.topDocs.scoreDocs) { - writeScoreDoc(out, doc); - } + out.writeArray(Lucene::writeScoreDoc, topDocs.topDocs.scoreDocs); } } @@ -495,10 +487,7 @@ public class Lucene { } public static void writeFieldDoc(StreamOutput out, FieldDoc fieldDoc) throws IOException { - out.writeVInt(fieldDoc.fields.length); - for (Object field : fieldDoc.fields) { - writeSortValue(out, field); - } + out.writeArray(Lucene::writeSortValue, fieldDoc.fields); out.writeVInt(fieldDoc.doc); out.writeFloat(fieldDoc.score); } @@ -627,10 +616,7 @@ public class Lucene { out.writeBoolean(explanation.isMatch()); out.writeString(explanation.getDescription()); Explanation[] subExplanations = explanation.getDetails(); - out.writeVInt(subExplanations.length); - for (Explanation subExp : subExplanations) { - writeExplanation(out, subExp); - } + out.writeArray(Lucene::writeExplanation, subExplanations); if (explanation.isMatch()) { writeExplanationValue(out, explanation.getValue()); } diff --git a/server/src/main/java/org/elasticsearch/common/util/concurrent/ThreadContext.java b/server/src/main/java/org/elasticsearch/common/util/concurrent/ThreadContext.java index 7082442bbafe..db5e06684d68 100644 --- a/server/src/main/java/org/elasticsearch/common/util/concurrent/ThreadContext.java +++ b/server/src/main/java/org/elasticsearch/common/util/concurrent/ThreadContext.java @@ -685,12 +685,7 @@ public final class ThreadContext implements Writeable { requestHeaders.putAll(this.requestHeaders); } - out.writeVInt(requestHeaders.size()); - for (Map.Entry entry : requestHeaders.entrySet()) { - out.writeString(entry.getKey()); - out.writeString(entry.getValue()); - } - + out.writeMap(requestHeaders, StreamOutput::writeString, StreamOutput::writeString); out.writeMap(responseHeaders, StreamOutput::writeString, StreamOutput::writeStringCollection); } } diff --git a/server/src/main/java/org/elasticsearch/index/engine/CommitStats.java b/server/src/main/java/org/elasticsearch/index/engine/CommitStats.java index fc901f556592..ec26f6a7cf69 100644 --- a/server/src/main/java/org/elasticsearch/index/engine/CommitStats.java +++ b/server/src/main/java/org/elasticsearch/index/engine/CommitStats.java @@ -78,11 +78,7 @@ public final class CommitStats implements Writeable, ToXContentFragment { @Override public void writeTo(StreamOutput out) throws IOException { - out.writeVInt(userData.size()); - for (Map.Entry entry : userData.entrySet()) { - out.writeString(entry.getKey()); - out.writeString(entry.getValue()); - } + out.writeMap(userData, StreamOutput::writeString, StreamOutput::writeString); out.writeLong(generation); out.writeOptionalString(id); out.writeInt(numDocs); diff --git a/server/src/main/java/org/elasticsearch/index/engine/Segment.java b/server/src/main/java/org/elasticsearch/index/engine/Segment.java index 604e93cf819a..43e22e521abb 100644 --- a/server/src/main/java/org/elasticsearch/index/engine/Segment.java +++ b/server/src/main/java/org/elasticsearch/index/engine/Segment.java @@ -219,29 +219,28 @@ public class Segment implements Writeable { out.writeVInt(0); return; } - out.writeVInt(sort.getSort().length); - for (SortField field : sort.getSort()) { - out.writeString(field.getField()); + out.writeArray((o, field) -> { + o.writeString(field.getField()); if (field instanceof SortedSetSortField) { - out.writeByte((byte) 0); - out.writeOptionalBoolean(field.getMissingValue() == null ? null : field.getMissingValue() == SortField.STRING_FIRST); - out.writeBoolean(((SortedSetSortField) field).getSelector() == SortedSetSelector.Type.MAX); - out.writeBoolean(field.getReverse()); + o.writeByte((byte) 0); + o.writeOptionalBoolean(field.getMissingValue() == null ? null : field.getMissingValue() == SortField.STRING_FIRST); + o.writeBoolean(((SortedSetSortField) field).getSelector() == SortedSetSelector.Type.MAX); + o.writeBoolean(field.getReverse()); } else if (field instanceof SortedNumericSortField) { switch (((SortedNumericSortField) field).getNumericType()) { - case INT -> out.writeByte((byte) 1); - case FLOAT -> out.writeByte((byte) 2); - case DOUBLE -> out.writeByte((byte) 3); - case LONG -> out.writeByte((byte) 4); + case INT -> o.writeByte((byte) 1); + case FLOAT -> o.writeByte((byte) 2); + case DOUBLE -> o.writeByte((byte) 3); + case LONG -> o.writeByte((byte) 4); default -> throw new IOException("invalid index sort field:" + field); } - out.writeGenericValue(field.getMissingValue()); - out.writeBoolean(((SortedNumericSortField) field).getSelector() == SortedNumericSelector.Type.MAX); - out.writeBoolean(field.getReverse()); + o.writeGenericValue(field.getMissingValue()); + o.writeBoolean(((SortedNumericSortField) field).getSelector() == SortedNumericSelector.Type.MAX); + o.writeBoolean(field.getReverse()); } else { throw new IOException("invalid index sort field:" + field); } - } + }, sort.getSort()); } private static void readRamTree(StreamInput in) throws IOException { diff --git a/server/src/main/java/org/elasticsearch/index/engine/SegmentsStats.java b/server/src/main/java/org/elasticsearch/index/engine/SegmentsStats.java index d5e67d1bcf2f..b8bc0fafa991 100644 --- a/server/src/main/java/org/elasticsearch/index/engine/SegmentsStats.java +++ b/server/src/main/java/org/elasticsearch/index/engine/SegmentsStats.java @@ -224,10 +224,7 @@ public class SegmentsStats implements Writeable, ToXContentFragment { out.writeLong(bitsetMemoryInBytes); out.writeLong(maxUnsafeAutoIdTimestamp); - out.writeVInt(files.size()); - for (FileStats file : files.values()) { - file.writeTo(out); - } + out.writeCollection(files.values()); } public void clearFiles() { diff --git a/server/src/main/java/org/elasticsearch/index/query/GeoPolygonQueryBuilder.java b/server/src/main/java/org/elasticsearch/index/query/GeoPolygonQueryBuilder.java index 2986c77c68ba..03358ea4835b 100644 --- a/server/src/main/java/org/elasticsearch/index/query/GeoPolygonQueryBuilder.java +++ b/server/src/main/java/org/elasticsearch/index/query/GeoPolygonQueryBuilder.java @@ -105,10 +105,7 @@ public class GeoPolygonQueryBuilder extends AbstractQueryBuilder sort : sorts) { - out.writeNamedWriteable(sort); - } + out.writeNamedWriteableList(sorts); } out.writeOptionalWriteable(highlightBuilder); out.writeOptionalWriteable(innerCollapseBuilder); diff --git a/server/src/main/java/org/elasticsearch/index/query/MultiMatchQueryBuilder.java b/server/src/main/java/org/elasticsearch/index/query/MultiMatchQueryBuilder.java index c8a7c2cd0ad2..27a1b696f156 100644 --- a/server/src/main/java/org/elasticsearch/index/query/MultiMatchQueryBuilder.java +++ b/server/src/main/java/org/elasticsearch/index/query/MultiMatchQueryBuilder.java @@ -234,11 +234,7 @@ public class MultiMatchQueryBuilder extends AbstractQueryBuilder fieldsEntry : fieldsBoosts.entrySet()) { - out.writeString(fieldsEntry.getKey()); - out.writeFloat(fieldsEntry.getValue()); - } + out.writeMap(fieldsBoosts, StreamOutput::writeString, StreamOutput::writeFloat); type.writeTo(out); operator.writeTo(out); out.writeOptionalString(analyzer); diff --git a/server/src/main/java/org/elasticsearch/index/query/QueryStringQueryBuilder.java b/server/src/main/java/org/elasticsearch/index/query/QueryStringQueryBuilder.java index 90c52e37b4e7..a9f3027cf2c2 100644 --- a/server/src/main/java/org/elasticsearch/index/query/QueryStringQueryBuilder.java +++ b/server/src/main/java/org/elasticsearch/index/query/QueryStringQueryBuilder.java @@ -192,11 +192,7 @@ public class QueryStringQueryBuilder extends AbstractQueryBuilder fieldsEntry : this.fieldsAndWeights.entrySet()) { - out.writeString(fieldsEntry.getKey()); - out.writeFloat(fieldsEntry.getValue()); - } + out.writeMap(this.fieldsAndWeights, StreamOutput::writeString, StreamOutput::writeFloat); this.defaultOperator.writeTo(out); out.writeOptionalString(this.analyzer); out.writeOptionalString(this.quoteAnalyzer); diff --git a/server/src/main/java/org/elasticsearch/index/reindex/BulkByScrollTask.java b/server/src/main/java/org/elasticsearch/index/reindex/BulkByScrollTask.java index b9e40a67097d..c438834ff3d6 100644 --- a/server/src/main/java/org/elasticsearch/index/reindex/BulkByScrollTask.java +++ b/server/src/main/java/org/elasticsearch/index/reindex/BulkByScrollTask.java @@ -556,10 +556,7 @@ public class BulkByScrollTask extends CancellableTask { out.writeFloat(requestsPerSecond); out.writeOptionalString(reasonCancelled); out.writeTimeValue(throttledUntil); - out.writeVInt(sliceStatuses.size()); - for (StatusOrException sliceStatus : sliceStatuses) { - out.writeOptionalWriteable(sliceStatus); - } + out.writeCollection(sliceStatuses, StreamOutput::writeOptionalWriteable); } @Override diff --git a/server/src/main/java/org/elasticsearch/indices/NodeIndicesStats.java b/server/src/main/java/org/elasticsearch/indices/NodeIndicesStats.java index 6c768b60f45c..83bb0a75281a 100644 --- a/server/src/main/java/org/elasticsearch/indices/NodeIndicesStats.java +++ b/server/src/main/java/org/elasticsearch/indices/NodeIndicesStats.java @@ -169,14 +169,7 @@ public class NodeIndicesStats implements Writeable, ToXContentFragment { @Override public void writeTo(StreamOutput out) throws IOException { stats.writeTo(out); - out.writeVInt(statsByShard.size()); - for (Map.Entry> entry : statsByShard.entrySet()) { - entry.getKey().writeTo(out); - out.writeVInt(entry.getValue().size()); - for (IndexShardStats indexShardStats : entry.getValue()) { - indexShardStats.writeTo(out); - } - } + out.writeMap(statsByShard, (o, k) -> k.writeTo(o), StreamOutput::writeList); } @Override diff --git a/server/src/main/java/org/elasticsearch/indices/recovery/RecoveryFilesInfoRequest.java b/server/src/main/java/org/elasticsearch/indices/recovery/RecoveryFilesInfoRequest.java index 9c837be66baf..bfc86fe4e1fa 100644 --- a/server/src/main/java/org/elasticsearch/indices/recovery/RecoveryFilesInfoRequest.java +++ b/server/src/main/java/org/elasticsearch/indices/recovery/RecoveryFilesInfoRequest.java @@ -92,25 +92,12 @@ public class RecoveryFilesInfoRequest extends RecoveryTransportRequest { out.writeLong(recoveryId); shardId.writeTo(out); - out.writeVInt(phase1FileNames.size()); - for (String phase1FileName : phase1FileNames) { - out.writeString(phase1FileName); - } + out.writeStringCollection(phase1FileNames); + out.writeCollection(phase1FileSizes, StreamOutput::writeVLong); - out.writeVInt(phase1FileSizes.size()); - for (Long phase1FileSize : phase1FileSizes) { - out.writeVLong(phase1FileSize); - } + out.writeStringCollection(phase1ExistingFileNames); + out.writeCollection(phase1ExistingFileSizes, StreamOutput::writeVLong); - out.writeVInt(phase1ExistingFileNames.size()); - for (String phase1ExistingFileName : phase1ExistingFileNames) { - out.writeString(phase1ExistingFileName); - } - - out.writeVInt(phase1ExistingFileSizes.size()); - for (Long phase1ExistingFileSize : phase1ExistingFileSizes) { - out.writeVLong(phase1ExistingFileSize); - } out.writeVInt(totalTranslogOps); } } diff --git a/server/src/main/java/org/elasticsearch/ingest/IngestStats.java b/server/src/main/java/org/elasticsearch/ingest/IngestStats.java index e97c54eb4e64..e8478af2d258 100644 --- a/server/src/main/java/org/elasticsearch/ingest/IngestStats.java +++ b/server/src/main/java/org/elasticsearch/ingest/IngestStats.java @@ -77,12 +77,11 @@ public class IngestStats implements Writeable, ToXContentFragment { if (processorStatsForPipeline == null) { out.writeVInt(0); } else { - out.writeVInt(processorStatsForPipeline.size()); - for (ProcessorStat processorStat : processorStatsForPipeline) { - out.writeString(processorStat.getName()); - out.writeString(processorStat.getType()); - processorStat.getStats().writeTo(out); - } + out.writeCollection(processorStatsForPipeline, (o, processorStat) -> { + o.writeString(processorStat.getName()); + o.writeString(processorStat.getType()); + processorStat.getStats().writeTo(o); + }); } } } diff --git a/server/src/main/java/org/elasticsearch/monitor/fs/FsInfo.java b/server/src/main/java/org/elasticsearch/monitor/fs/FsInfo.java index 492b262e0d6e..bfdd81446781 100644 --- a/server/src/main/java/org/elasticsearch/monitor/fs/FsInfo.java +++ b/server/src/main/java/org/elasticsearch/monitor/fs/FsInfo.java @@ -461,10 +461,7 @@ public class FsInfo implements Iterable, Writeable, ToXContentFragm public void writeTo(StreamOutput out) throws IOException { out.writeVLong(timestamp); out.writeOptionalWriteable(ioStats); - out.writeVInt(paths.length); - for (Path path : paths) { - path.writeTo(out); - } + out.writeArray(paths); } public Path getTotal() { diff --git a/server/src/main/java/org/elasticsearch/monitor/jvm/JvmInfo.java b/server/src/main/java/org/elasticsearch/monitor/jvm/JvmInfo.java index d265946b288e..2c950cbf7cda 100644 --- a/server/src/main/java/org/elasticsearch/monitor/jvm/JvmInfo.java +++ b/server/src/main/java/org/elasticsearch/monitor/jvm/JvmInfo.java @@ -313,11 +313,7 @@ public class JvmInfo implements ReportingService.Info { } out.writeString(bootClassPath); out.writeString(classPath); - out.writeVInt(this.systemProperties.size()); - for (Map.Entry entry : systemProperties.entrySet()) { - out.writeString(entry.getKey()); - out.writeString(entry.getValue()); - } + out.writeMap(this.systemProperties, StreamOutput::writeString, StreamOutput::writeString); mem.writeTo(out); out.writeStringArray(gcCollectors); out.writeStringArray(memoryPools); diff --git a/server/src/main/java/org/elasticsearch/script/ScriptMetadata.java b/server/src/main/java/org/elasticsearch/script/ScriptMetadata.java index 93ee39414fa7..f63593df5c44 100644 --- a/server/src/main/java/org/elasticsearch/script/ScriptMetadata.java +++ b/server/src/main/java/org/elasticsearch/script/ScriptMetadata.java @@ -257,12 +257,7 @@ public final class ScriptMetadata implements Metadata.Custom, Writeable, ToXCont @Override public void writeTo(StreamOutput out) throws IOException { - out.writeVInt(scripts.size()); - - for (Map.Entry entry : scripts.entrySet()) { - out.writeString(entry.getKey()); - entry.getValue().writeTo(out); - } + out.writeMap(scripts, StreamOutput::writeString, (o, v) -> v.writeTo(o)); } /** diff --git a/server/src/main/java/org/elasticsearch/search/SearchHit.java b/server/src/main/java/org/elasticsearch/search/SearchHit.java index def107de4368..b5f3164987e8 100644 --- a/server/src/main/java/org/elasticsearch/search/SearchHit.java +++ b/server/src/main/java/org/elasticsearch/search/SearchHit.java @@ -233,10 +233,7 @@ public final class SearchHit implements Writeable, ToXContentObject, Iterable entry : innerHits.entrySet()) { - out.writeString(entry.getKey()); - entry.getValue().writeTo(out); - } + out.writeMap(innerHits, StreamOutput::writeString, (o, v) -> v.writeTo(o)); } } diff --git a/server/src/main/java/org/elasticsearch/search/SearchHits.java b/server/src/main/java/org/elasticsearch/search/SearchHits.java index 53cc0c2406f9..89113a0f1036 100644 --- a/server/src/main/java/org/elasticsearch/search/SearchHits.java +++ b/server/src/main/java/org/elasticsearch/search/SearchHits.java @@ -97,12 +97,7 @@ public final class SearchHits implements Writeable, ToXContentFragment, Iterable Lucene.writeTotalHits(out, totalHits); } out.writeFloat(maxScore); - out.writeVInt(hits.length); - if (hits.length > 0) { - for (SearchHit hit : hits) { - hit.writeTo(out); - } - } + out.writeArray(hits); out.writeOptionalArray(Lucene::writeSortField, sortFields); out.writeOptionalString(collapseField); out.writeOptionalArray(Lucene::writeSortValue, collapseValues); diff --git a/server/src/main/java/org/elasticsearch/search/aggregations/AggregatorFactories.java b/server/src/main/java/org/elasticsearch/search/aggregations/AggregatorFactories.java index 77d8b54cef68..b92a2b230760 100644 --- a/server/src/main/java/org/elasticsearch/search/aggregations/AggregatorFactories.java +++ b/server/src/main/java/org/elasticsearch/search/aggregations/AggregatorFactories.java @@ -303,14 +303,8 @@ public class AggregatorFactories { @Override public void writeTo(StreamOutput out) throws IOException { - out.writeVInt(this.aggregationBuilders.size()); - for (AggregationBuilder factory : aggregationBuilders) { - out.writeNamedWriteable(factory); - } - out.writeVInt(this.pipelineAggregatorBuilders.size()); - for (PipelineAggregationBuilder factory : pipelineAggregatorBuilders) { - out.writeNamedWriteable(factory); - } + out.writeCollection(this.aggregationBuilders, StreamOutput::writeNamedWriteable); + out.writeCollection(this.pipelineAggregatorBuilders, StreamOutput::writeNamedWriteable); } public boolean mustVisitAllDocs() { diff --git a/server/src/main/java/org/elasticsearch/search/aggregations/InternalOrder.java b/server/src/main/java/org/elasticsearch/search/aggregations/InternalOrder.java index b2adc9bdcf5f..3d170694b62e 100644 --- a/server/src/main/java/org/elasticsearch/search/aggregations/InternalOrder.java +++ b/server/src/main/java/org/elasticsearch/search/aggregations/InternalOrder.java @@ -519,10 +519,7 @@ public abstract class InternalOrder extends BucketOrder { out.writeBoolean(aggregationOrder.order == SortOrder.ASC); out.writeString(aggregationOrder.path().toString()); } else if (order instanceof CompoundOrder compoundOrder) { - out.writeVInt(compoundOrder.orderElements.size()); - for (BucketOrder innerOrder : compoundOrder.orderElements) { - innerOrder.writeTo(out); - } + out.writeCollection(compoundOrder.orderElements); } } diff --git a/server/src/main/java/org/elasticsearch/search/aggregations/bucket/adjacency/InternalAdjacencyMatrix.java b/server/src/main/java/org/elasticsearch/search/aggregations/bucket/adjacency/InternalAdjacencyMatrix.java index 54ada9b14b91..aa2dbbcda8b6 100644 --- a/server/src/main/java/org/elasticsearch/search/aggregations/bucket/adjacency/InternalAdjacencyMatrix.java +++ b/server/src/main/java/org/elasticsearch/search/aggregations/bucket/adjacency/InternalAdjacencyMatrix.java @@ -141,10 +141,7 @@ public class InternalAdjacencyMatrix extends InternalMultiBucketAggregation builder : sources) { - CompositeValuesSourceParserHelper.writeTo(builder, out); - } + out.writeCollection(sources, (o, v) -> CompositeValuesSourceParserHelper.writeTo(v, o)); out.writeVInt(size); out.writeBoolean(after != null); if (after != null) { diff --git a/server/src/main/java/org/elasticsearch/search/aggregations/bucket/filter/FiltersAggregationBuilder.java b/server/src/main/java/org/elasticsearch/search/aggregations/bucket/filter/FiltersAggregationBuilder.java index f8a438fc0470..e3507cbef546 100644 --- a/server/src/main/java/org/elasticsearch/search/aggregations/bucket/filter/FiltersAggregationBuilder.java +++ b/server/src/main/java/org/elasticsearch/search/aggregations/bucket/filter/FiltersAggregationBuilder.java @@ -128,16 +128,7 @@ public class FiltersAggregationBuilder extends AbstractAggregationBuilder v.writeTo(o) : (o, v) -> o.writeNamedWriteable(v.filter())); out.writeBoolean(otherBucket); out.writeString(otherBucketKey); } diff --git a/server/src/main/java/org/elasticsearch/search/aggregations/bucket/filter/InternalFilters.java b/server/src/main/java/org/elasticsearch/search/aggregations/bucket/filter/InternalFilters.java index ee77861b1e7f..185f065fe139 100644 --- a/server/src/main/java/org/elasticsearch/search/aggregations/bucket/filter/InternalFilters.java +++ b/server/src/main/java/org/elasticsearch/search/aggregations/bucket/filter/InternalFilters.java @@ -148,10 +148,7 @@ public class InternalFilters extends InternalMultiBucketAggregation e : bucketsPathsMap.entrySet()) { - out.writeString(e.getKey()); - out.writeString(e.getValue()); - } + out.writeMap(bucketsPathsMap, StreamOutput::writeString, StreamOutput::writeString); script.writeTo(out); out.writeOptionalString(format); gapPolicy.writeTo(out); diff --git a/server/src/main/java/org/elasticsearch/search/aggregations/support/AggregationInfo.java b/server/src/main/java/org/elasticsearch/search/aggregations/support/AggregationInfo.java index 9706092351c3..8e832e2caa25 100644 --- a/server/src/main/java/org/elasticsearch/search/aggregations/support/AggregationInfo.java +++ b/server/src/main/java/org/elasticsearch/search/aggregations/support/AggregationInfo.java @@ -52,14 +52,7 @@ public class AggregationInfo implements ReportingService.Info { @Override public void writeTo(StreamOutput out) throws IOException { - out.writeVInt(aggs.size()); - for (Map.Entry> e : aggs.entrySet()) { - out.writeString(e.getKey()); - out.writeVInt(e.getValue().size()); - for (String type : e.getValue()) { - out.writeString(type); - } - } + out.writeMap(aggs, StreamOutput::writeString, StreamOutput::writeStringCollection); } public Map> getAggregations() { diff --git a/server/src/main/java/org/elasticsearch/search/aggregations/timeseries/InternalTimeSeries.java b/server/src/main/java/org/elasticsearch/search/aggregations/timeseries/InternalTimeSeries.java index e9d3237d0d4f..3b15f3fe3c2c 100644 --- a/server/src/main/java/org/elasticsearch/search/aggregations/timeseries/InternalTimeSeries.java +++ b/server/src/main/java/org/elasticsearch/search/aggregations/timeseries/InternalTimeSeries.java @@ -181,10 +181,7 @@ public class InternalTimeSeries extends InternalMultiBucketAggregation sort : sorts) { - out.writeNamedWriteable(sort); - } + out.writeNamedWriteableList(sorts); } boolean hasStats = stats != null; out.writeBoolean(hasStats); diff --git a/server/src/main/java/org/elasticsearch/search/dfs/AggregatedDfs.java b/server/src/main/java/org/elasticsearch/search/dfs/AggregatedDfs.java index 98b877ba2afd..1bd70b5c1481 100644 --- a/server/src/main/java/org/elasticsearch/search/dfs/AggregatedDfs.java +++ b/server/src/main/java/org/elasticsearch/search/dfs/AggregatedDfs.java @@ -57,18 +57,14 @@ public class AggregatedDfs implements Writeable { @Override public void writeTo(final StreamOutput out) throws IOException { - out.writeVInt(termStatistics.size()); - - for (var entry : termStatistics().entrySet()) { - Term term = entry.getKey(); - out.writeString(term.field()); - out.writeBytesRef(term.bytes()); - TermStatistics stats = entry.getValue(); - out.writeBytesRef(stats.term()); - out.writeVLong(stats.docFreq()); - out.writeVLong(DfsSearchResult.addOne(stats.totalTermFreq())); - } - + out.writeMap(termStatistics, (o, k) -> { + o.writeString(k.field()); + o.writeBytesRef(k.bytes()); + }, (o, v) -> { + o.writeBytesRef(v.term()); + o.writeVLong(v.docFreq()); + o.writeVLong(DfsSearchResult.addOne(v.totalTermFreq())); + }); DfsSearchResult.writeFieldStats(out, fieldStatistics); out.writeVLong(maxDoc); } diff --git a/server/src/main/java/org/elasticsearch/search/dfs/DfsSearchResult.java b/server/src/main/java/org/elasticsearch/search/dfs/DfsSearchResult.java index 5e5b6d8f28e2..2094ec5fc5e7 100644 --- a/server/src/main/java/org/elasticsearch/search/dfs/DfsSearchResult.java +++ b/server/src/main/java/org/elasticsearch/search/dfs/DfsSearchResult.java @@ -95,11 +95,10 @@ public class DfsSearchResult extends SearchPhaseResult { @Override public void writeTo(StreamOutput out) throws IOException { contextId.writeTo(out); - out.writeVInt(terms.length); - for (Term term : terms) { - out.writeString(term.field()); - out.writeBytesRef(term.bytes()); - } + out.writeArray((o, term) -> { + o.writeString(term.field()); + o.writeBytesRef(term.bytes()); + }, terms); writeTermStats(out, termStatistics); writeFieldStats(out, fieldStatistics); out.writeVInt(maxDoc); @@ -109,25 +108,18 @@ public class DfsSearchResult extends SearchPhaseResult { } public static void writeFieldStats(StreamOutput out, Map fieldStatistics) throws IOException { - out.writeVInt(fieldStatistics.size()); - - for (var entry : fieldStatistics.entrySet()) { - out.writeString(entry.getKey()); - CollectionStatistics statistics = entry.getValue(); + out.writeMap(fieldStatistics, StreamOutput::writeString, (o, statistics) -> { assert statistics.maxDoc() >= 0; - out.writeVLong(statistics.maxDoc()); + o.writeVLong(statistics.maxDoc()); // stats are always positive numbers - out.writeVLong(statistics.docCount()); - out.writeVLong(statistics.sumTotalTermFreq()); - out.writeVLong(statistics.sumDocFreq()); - } + o.writeVLong(statistics.docCount()); + o.writeVLong(statistics.sumTotalTermFreq()); + o.writeVLong(statistics.sumDocFreq()); + }); } public static void writeTermStats(StreamOutput out, TermStatistics[] termStatistics) throws IOException { - out.writeVInt(termStatistics.length); - for (TermStatistics termStatistic : termStatistics) { - writeSingleTermStats(out, termStatistic); - } + out.writeArray(DfsSearchResult::writeSingleTermStats, termStatistics); } public static void writeSingleTermStats(StreamOutput out, TermStatistics termStatistic) throws IOException { diff --git a/server/src/main/java/org/elasticsearch/search/fetch/ShardFetchRequest.java b/server/src/main/java/org/elasticsearch/search/fetch/ShardFetchRequest.java index 244e8a40470a..98f004db846d 100644 --- a/server/src/main/java/org/elasticsearch/search/fetch/ShardFetchRequest.java +++ b/server/src/main/java/org/elasticsearch/search/fetch/ShardFetchRequest.java @@ -67,10 +67,7 @@ public class ShardFetchRequest extends TransportRequest { public void writeTo(StreamOutput out) throws IOException { super.writeTo(out); contextId.writeTo(out); - out.writeVInt(docIds.length); - for (int docId : docIds) { - out.writeVInt(docId); - } + out.writeVIntArray(docIds); if (lastEmittedDoc == null) { out.writeByte((byte) 0); } else if (lastEmittedDoc instanceof FieldDoc) { diff --git a/server/src/main/java/org/elasticsearch/search/fetch/subphase/highlight/HighlightField.java b/server/src/main/java/org/elasticsearch/search/fetch/subphase/highlight/HighlightField.java index 82daa9fa2f08..d4b5234f4e0b 100644 --- a/server/src/main/java/org/elasticsearch/search/fetch/subphase/highlight/HighlightField.java +++ b/server/src/main/java/org/elasticsearch/search/fetch/subphase/highlight/HighlightField.java @@ -94,10 +94,7 @@ public class HighlightField implements ToXContentFragment, Writeable { out.writeBoolean(false); } else { out.writeBoolean(true); - out.writeVInt(fragments.length); - for (Text fragment : fragments) { - out.writeText(fragment); - } + out.writeArray(StreamOutput::writeText, fragments); } } diff --git a/server/src/main/java/org/elasticsearch/search/profile/aggregation/AggregationProfileShardResult.java b/server/src/main/java/org/elasticsearch/search/profile/aggregation/AggregationProfileShardResult.java index 81630f7dbdac..685ebdcb6d66 100644 --- a/server/src/main/java/org/elasticsearch/search/profile/aggregation/AggregationProfileShardResult.java +++ b/server/src/main/java/org/elasticsearch/search/profile/aggregation/AggregationProfileShardResult.java @@ -50,10 +50,7 @@ public final class AggregationProfileShardResult implements Writeable, ToXConten @Override public void writeTo(StreamOutput out) throws IOException { - out.writeVInt(aggProfileResults.size()); - for (ProfileResult p : aggProfileResults) { - p.writeTo(out); - } + out.writeCollection(aggProfileResults); } public List getProfileResults() { diff --git a/server/src/main/java/org/elasticsearch/search/searchafter/SearchAfterBuilder.java b/server/src/main/java/org/elasticsearch/search/searchafter/SearchAfterBuilder.java index 9d9baf744d53..d259b0b3dc9d 100644 --- a/server/src/main/java/org/elasticsearch/search/searchafter/SearchAfterBuilder.java +++ b/server/src/main/java/org/elasticsearch/search/searchafter/SearchAfterBuilder.java @@ -58,10 +58,7 @@ public class SearchAfterBuilder implements ToXContentObject, Writeable { @Override public void writeTo(StreamOutput out) throws IOException { - out.writeVInt(sortValues.length); - for (Object fieldValue : sortValues) { - out.writeGenericValue(fieldValue); - } + out.writeArray(StreamOutput::writeGenericValue, sortValues); } public SearchAfterBuilder setSortValues(Object[] values) { diff --git a/server/src/main/java/org/elasticsearch/search/suggest/Suggest.java b/server/src/main/java/org/elasticsearch/search/suggest/Suggest.java index ff5484190473..4dad6f779375 100644 --- a/server/src/main/java/org/elasticsearch/search/suggest/Suggest.java +++ b/server/src/main/java/org/elasticsearch/search/suggest/Suggest.java @@ -542,10 +542,7 @@ public class Suggest implements Iterable> entry : contexts.entrySet()) { out.writeString(entry.getKey()); - out.writeVInt(entry.getValue().size()); - for (CharSequence ctx : entry.getValue()) { - out.writeString(ctx.toString()); - } + out.writeStringCollection(entry.getValue()); } } diff --git a/server/src/main/java/org/elasticsearch/search/suggest/phrase/PhraseSuggestionBuilder.java b/server/src/main/java/org/elasticsearch/search/suggest/phrase/PhraseSuggestionBuilder.java index f7a415c3cbb0..23a30934fae9 100644 --- a/server/src/main/java/org/elasticsearch/search/suggest/phrase/PhraseSuggestionBuilder.java +++ b/server/src/main/java/org/elasticsearch/search/suggest/phrase/PhraseSuggestionBuilder.java @@ -161,15 +161,7 @@ public class PhraseSuggestionBuilder extends SuggestionBuilder> entry : this.generators.entrySet()) { - out.writeString(entry.getKey()); - List generatorsList = entry.getValue(); - out.writeVInt(generatorsList.size()); - for (CandidateGenerator generator : generatorsList) { - generator.writeTo(out); - } - } + out.writeMap(this.generators, StreamOutput::writeString, StreamOutput::writeList); } /** diff --git a/x-pack/plugin/autoscaling/src/main/java/org/elasticsearch/xpack/autoscaling/AutoscalingMetadata.java b/x-pack/plugin/autoscaling/src/main/java/org/elasticsearch/xpack/autoscaling/AutoscalingMetadata.java index 8d34e6ee7a70..1f83a57985c7 100644 --- a/x-pack/plugin/autoscaling/src/main/java/org/elasticsearch/xpack/autoscaling/AutoscalingMetadata.java +++ b/x-pack/plugin/autoscaling/src/main/java/org/elasticsearch/xpack/autoscaling/AutoscalingMetadata.java @@ -84,10 +84,7 @@ public class AutoscalingMetadata implements Metadata.Custom { @Override public void writeTo(final StreamOutput out) throws IOException { - out.writeVInt(policies.size()); - for (final Map.Entry policy : policies.entrySet()) { - policy.getValue().writeTo(out); - } + out.writeCollection(policies.values()); } @Override diff --git a/x-pack/plugin/ccr/src/main/java/org/elasticsearch/xpack/ccr/action/bulk/BulkShardOperationsRequest.java b/x-pack/plugin/ccr/src/main/java/org/elasticsearch/xpack/ccr/action/bulk/BulkShardOperationsRequest.java index f2b10d08a858..e11b46ac79bf 100644 --- a/x-pack/plugin/ccr/src/main/java/org/elasticsearch/xpack/ccr/action/bulk/BulkShardOperationsRequest.java +++ b/x-pack/plugin/ccr/src/main/java/org/elasticsearch/xpack/ccr/action/bulk/BulkShardOperationsRequest.java @@ -61,10 +61,7 @@ public final class BulkShardOperationsRequest extends ReplicatedWriteRequest entry : acknowledgeMessages.entrySet()) { - out.writeString(entry.getKey()); - out.writeVInt(entry.getValue().length); - for (String message : entry.getValue()) { - out.writeString(message); - } - } + out.writeMap(acknowledgeMessages, StreamOutput::writeString, StreamOutput::writeStringArray); } @Override diff --git a/x-pack/plugin/core/src/main/java/org/elasticsearch/license/PostStartTrialResponse.java b/x-pack/plugin/core/src/main/java/org/elasticsearch/license/PostStartTrialResponse.java index f806ff79a104..80281a1da444 100644 --- a/x-pack/plugin/core/src/main/java/org/elasticsearch/license/PostStartTrialResponse.java +++ b/x-pack/plugin/core/src/main/java/org/elasticsearch/license/PostStartTrialResponse.java @@ -88,14 +88,7 @@ public class PostStartTrialResponse extends ActionResponse { public void writeTo(StreamOutput out) throws IOException { out.writeEnum(status); out.writeOptionalString(acknowledgeMessage); - out.writeVInt(acknowledgeMessages.size()); - for (Map.Entry entry : acknowledgeMessages.entrySet()) { - out.writeString(entry.getKey()); - out.writeVInt(entry.getValue().length); - for (String message : entry.getValue()) { - out.writeString(message); - } - } + out.writeMap(acknowledgeMessages, StreamOutput::writeString, StreamOutput::writeStringArray); } Map getAcknowledgementMessages() { diff --git a/x-pack/plugin/core/src/main/java/org/elasticsearch/protocol/xpack/graph/GraphExploreRequest.java b/x-pack/plugin/core/src/main/java/org/elasticsearch/protocol/xpack/graph/GraphExploreRequest.java index 729a287a4cde..a2f73fcab266 100644 --- a/x-pack/plugin/core/src/main/java/org/elasticsearch/protocol/xpack/graph/GraphExploreRequest.java +++ b/x-pack/plugin/core/src/main/java/org/elasticsearch/protocol/xpack/graph/GraphExploreRequest.java @@ -15,6 +15,7 @@ import org.elasticsearch.action.support.IndicesOptions; import org.elasticsearch.common.Strings; import org.elasticsearch.common.io.stream.StreamInput; import org.elasticsearch.common.io.stream.StreamOutput; +import org.elasticsearch.common.io.stream.Writeable; import org.elasticsearch.core.TimeValue; import org.elasticsearch.index.query.QueryBuilder; import org.elasticsearch.search.aggregations.bucket.sampler.SamplerAggregationBuilder; @@ -313,7 +314,7 @@ public class GraphExploreRequest extends ActionRequest implements IndicesRequest return hops.get(hopNumber); } - public static class TermBoost { + public static class TermBoost implements Writeable { String term; float boost; @@ -341,7 +342,8 @@ public class GraphExploreRequest extends ActionRequest implements IndicesRequest this.boost = in.readFloat(); } - void writeTo(StreamOutput out) throws IOException { + @Override + public void writeTo(StreamOutput out) throws IOException { out.writeString(term); out.writeFloat(boost); } diff --git a/x-pack/plugin/core/src/main/java/org/elasticsearch/protocol/xpack/graph/Hop.java b/x-pack/plugin/core/src/main/java/org/elasticsearch/protocol/xpack/graph/Hop.java index 88a3913ae4bb..cc03b58631ee 100644 --- a/x-pack/plugin/core/src/main/java/org/elasticsearch/protocol/xpack/graph/Hop.java +++ b/x-pack/plugin/core/src/main/java/org/elasticsearch/protocol/xpack/graph/Hop.java @@ -71,10 +71,7 @@ public class Hop implements ToXContentFragment { if (vertices == null) { out.writeVInt(0); } else { - out.writeVInt(vertices.size()); - for (VertexRequest vr : vertices) { - vr.writeTo(out); - } + out.writeList(vertices); } } diff --git a/x-pack/plugin/core/src/main/java/org/elasticsearch/protocol/xpack/graph/VertexRequest.java b/x-pack/plugin/core/src/main/java/org/elasticsearch/protocol/xpack/graph/VertexRequest.java index d978eb9191f3..d7ca1766932a 100644 --- a/x-pack/plugin/core/src/main/java/org/elasticsearch/protocol/xpack/graph/VertexRequest.java +++ b/x-pack/plugin/core/src/main/java/org/elasticsearch/protocol/xpack/graph/VertexRequest.java @@ -9,6 +9,7 @@ package org.elasticsearch.protocol.xpack.graph; import org.apache.lucene.util.BytesRef; import org.elasticsearch.common.io.stream.StreamInput; import org.elasticsearch.common.io.stream.StreamOutput; +import org.elasticsearch.common.io.stream.Writeable; import org.elasticsearch.protocol.xpack.graph.GraphExploreRequest.TermBoost; import org.elasticsearch.xcontent.ToXContentObject; import org.elasticsearch.xcontent.XContentBuilder; @@ -27,7 +28,7 @@ import java.util.TreeSet; * inclusion list to filter which terms are considered. * */ -public class VertexRequest implements ToXContentObject { +public class VertexRequest implements ToXContentObject, Writeable { public static final int DEFAULT_SIZE = 5; public static final int DEFAULT_MIN_DOC_COUNT = 3; public static final int DEFAULT_SHARD_MIN_DOC_COUNT = 2; @@ -69,26 +70,21 @@ public class VertexRequest implements ToXContentObject { } - void writeTo(StreamOutput out) throws IOException { + @Override + public void writeTo(StreamOutput out) throws IOException { out.writeString(fieldName); out.writeVInt(size); out.writeVInt(minDocCount); out.writeVInt(shardMinDocCount); if (includes != null) { - out.writeVInt(includes.size()); - for (TermBoost tb : includes.values()) { - tb.writeTo(out); - } + out.writeCollection(includes.values()); } else { out.writeVInt(0); } if (excludes != null) { - out.writeVInt(excludes.size()); - for (String term : excludes) { - out.writeString(term); - } + out.writeStringCollection(excludes); } else { out.writeVInt(0); } diff --git a/x-pack/plugin/core/src/main/java/org/elasticsearch/protocol/xpack/license/PutLicenseResponse.java b/x-pack/plugin/core/src/main/java/org/elasticsearch/protocol/xpack/license/PutLicenseResponse.java index ac3b5b7b4c4e..42ec84eb2977 100644 --- a/x-pack/plugin/core/src/main/java/org/elasticsearch/protocol/xpack/license/PutLicenseResponse.java +++ b/x-pack/plugin/core/src/main/java/org/elasticsearch/protocol/xpack/license/PutLicenseResponse.java @@ -76,14 +76,7 @@ public class PutLicenseResponse extends AcknowledgedResponse { super.writeTo(out); out.writeVInt(status.id()); out.writeOptionalString(acknowledgeHeader); - out.writeVInt(acknowledgeMessages.size()); - for (Map.Entry entry : acknowledgeMessages.entrySet()) { - out.writeString(entry.getKey()); - out.writeVInt(entry.getValue().length); - for (String message : entry.getValue()) { - out.writeString(message); - } - } + out.writeMap(acknowledgeMessages, StreamOutput::writeString, StreamOutput::writeStringArray); } @Override diff --git a/x-pack/plugin/core/src/main/java/org/elasticsearch/xpack/core/ilm/ExplainLifecycleResponse.java b/x-pack/plugin/core/src/main/java/org/elasticsearch/xpack/core/ilm/ExplainLifecycleResponse.java index 6b0d552a7a08..749304caf6e2 100644 --- a/x-pack/plugin/core/src/main/java/org/elasticsearch/xpack/core/ilm/ExplainLifecycleResponse.java +++ b/x-pack/plugin/core/src/main/java/org/elasticsearch/xpack/core/ilm/ExplainLifecycleResponse.java @@ -96,10 +96,7 @@ public class ExplainLifecycleResponse extends ActionResponse implements ToXConte @Override public void writeTo(StreamOutput out) throws IOException { - out.writeVInt(indexResponses.size()); - for (IndexLifecycleExplainResponse e : indexResponses.values()) { - e.writeTo(out); - } + out.writeCollection(indexResponses.values()); } @Override diff --git a/x-pack/plugin/monitoring/src/main/java/org/elasticsearch/xpack/monitoring/exporter/ExportException.java b/x-pack/plugin/monitoring/src/main/java/org/elasticsearch/xpack/monitoring/exporter/ExportException.java index 2e052e5e9a00..58d86f3ae3e7 100644 --- a/x-pack/plugin/monitoring/src/main/java/org/elasticsearch/xpack/monitoring/exporter/ExportException.java +++ b/x-pack/plugin/monitoring/src/main/java/org/elasticsearch/xpack/monitoring/exporter/ExportException.java @@ -55,10 +55,7 @@ public class ExportException extends ElasticsearchException implements Iterable< @Override public void writeTo(StreamOutput out) throws IOException { super.writeTo(out); - out.writeVInt(exceptions.size()); - for (ExportException e : exceptions) { - e.writeTo(out); - } + out.writeCollection(exceptions); } @Override diff --git a/x-pack/plugin/sql/sql-action/src/main/java/org/elasticsearch/xpack/sql/action/AbstractSqlQueryRequest.java b/x-pack/plugin/sql/sql-action/src/main/java/org/elasticsearch/xpack/sql/action/AbstractSqlQueryRequest.java index 4efc5f0408be..4161d240eed3 100644 --- a/x-pack/plugin/sql/sql-action/src/main/java/org/elasticsearch/xpack/sql/action/AbstractSqlQueryRequest.java +++ b/x-pack/plugin/sql/sql-action/src/main/java/org/elasticsearch/xpack/sql/action/AbstractSqlQueryRequest.java @@ -455,10 +455,7 @@ public abstract class AbstractSqlQueryRequest extends AbstractSqlRequest impleme public void writeTo(StreamOutput out) throws IOException { super.writeTo(out); out.writeString(query); - out.writeVInt(params.size()); - for (SqlTypedParamValue param : params) { - writeSqlTypedParamValue(out, param); - } + out.writeCollection(params, AbstractSqlQueryRequest::writeSqlTypedParamValue); out.writeZoneId(zoneId); if (out.getVersion().onOrAfter(Version.V_7_16_0)) { out.writeOptionalString(catalog);