From 9f2fbabb2248ad0cf1aa52664abd334287206f35 Mon Sep 17 00:00:00 2001 From: Thomas Farr Date: Wed, 18 Sep 2024 01:39:01 +1200 Subject: [PATCH] fix: remove required check on indices.stats.ShardStats.shards (#1177) (#1200) * fix: remove required check on indices.stats.ShardStats.shards Signed-off-by: Liam Macpherson Signed-off-by: Liam Macpherson * address review comments re: imports and changelog Signed-off-by: Liam Macpherson * add test and remove check in constructor Signed-off-by: Liam Macpherson Signed-off-by: Liam Macpherson * re-remove auto import organisation Signed-off-by: Liam Macpherson Signed-off-by: Liam Macpherson * chore: correct changelog link Signed-off-by: Liam Macpherson * spotlessApply tidyup Signed-off-by: Liam Macpherson Signed-off-by: Liam Macpherson --------- Signed-off-by: Liam Macpherson Signed-off-by: Liam Macpherson (cherry picked from commit 8a37f3f2776f5ef2244382c6bc379747e05f203e) Co-authored-by: Liam Macpherson --- CHANGELOG.md | 1 + .../opensearch/indices/stats/ShardStats.java | 19 +- .../opensearch/model/ShardStatsTest.java | 198 ++++++++++++++++++ 3 files changed, 210 insertions(+), 8 deletions(-) create mode 100644 java-client/src/test/java/org/opensearch/client/opensearch/model/ShardStatsTest.java diff --git a/CHANGELOG.md b/CHANGELOG.md index 6267467950..376878fe0a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -17,6 +17,7 @@ Inspired from [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) ### Fixed - Fix queries not preserving boost and name when converted to builders ([#1181](https://github.com/opensearch-project/opensearch-java/pull/1181)) +- Remove required check on ShardStats.shards ([#1177](https://github.com/opensearch-project/opensearch-java/pull/1177)) ### Security diff --git a/java-client/src/main/java/org/opensearch/client/opensearch/indices/stats/ShardStats.java b/java-client/src/main/java/org/opensearch/client/opensearch/indices/stats/ShardStats.java index 9cc34fa4d5..7f7fca54b1 100644 --- a/java-client/src/main/java/org/opensearch/client/opensearch/indices/stats/ShardStats.java +++ b/java-client/src/main/java/org/opensearch/client/opensearch/indices/stats/ShardStats.java @@ -110,6 +110,7 @@ public class ShardStats implements PlainJsonSerializable { @Nullable private final BulkStats bulk; + @Nullable private final ShardsTotalStats shards; // --------------------------------------------------------------------------------------------- @@ -138,8 +139,7 @@ private ShardStats(Builder builder) { this.translog = ApiTypeHelper.requireNonNull(builder.translog, this, "translog"); this.warmer = ApiTypeHelper.requireNonNull(builder.warmer, this, "warmer"); this.bulk = builder.bulk; - this.shards = ApiTypeHelper.requireNonNull(builder.shards, this, "shards"); - + this.shards = builder.shards; } public static ShardStats of(Function> fn) { @@ -302,8 +302,9 @@ public final BulkStats bulk() { } /** - * Required - API name: {@code shards} + * API name: {@code shards} */ + @Nullable public final ShardsTotalStats shards() { return this.shards; } @@ -387,9 +388,10 @@ protected void serializeInternal(JsonGenerator generator, JsonpMapper mapper) { this.bulk.serialize(generator, mapper); } - generator.writeKey("shards"); - this.shards.serialize(generator, mapper); - + if (this.shards != null) { + generator.writeKey("shards"); + this.shards.serialize(generator, mapper); + } } // --------------------------------------------------------------------------------------------- @@ -444,6 +446,7 @@ public static class Builder extends ObjectBuilderBase implements ObjectBuilder> } /** - * Required - API name: {@code shards} + * API name: {@code shards} */ public final Builder shards(ShardsTotalStats value) { this.shards = value; @@ -785,7 +788,7 @@ public final Builder shards(ShardsTotalStats value) { } /** - * Required - API name: {@code shards} + * API name: {@code shards} */ public final Builder shards(Function> fn) { return this.shards(fn.apply(new ShardsTotalStats.Builder()).build()); diff --git a/java-client/src/test/java/org/opensearch/client/opensearch/model/ShardStatsTest.java b/java-client/src/test/java/org/opensearch/client/opensearch/model/ShardStatsTest.java new file mode 100644 index 0000000000..e86d347514 --- /dev/null +++ b/java-client/src/test/java/org/opensearch/client/opensearch/model/ShardStatsTest.java @@ -0,0 +1,198 @@ +/* + * SPDX-License-Identifier: Apache-2.0 + * + * The OpenSearch Contributors require contributions made to + * this file be licensed under the Apache-2.0 license or a + * compatible open source license. + */ + +/* + * Licensed to Elasticsearch B.V. under one or more contributor + * license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright + * ownership. Elasticsearch B.V. licenses this file to you under + * the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +/* + * Modifications Copyright OpenSearch Contributors. See + * GitHub history for details. + */ + +package org.opensearch.client.opensearch.model; + +import static java.util.Collections.emptyList; + +import java.util.HashMap; +import org.junit.Assert; +import org.junit.Test; +import org.opensearch.client.opensearch._types.CompletionStats; +import org.opensearch.client.opensearch._types.DocStats; +import org.opensearch.client.opensearch._types.FielddataStats; +import org.opensearch.client.opensearch._types.FlushStats; +import org.opensearch.client.opensearch._types.GetStats; +import org.opensearch.client.opensearch._types.IndexingStats; +import org.opensearch.client.opensearch._types.MergesStats; +import org.opensearch.client.opensearch._types.RecoveryStats; +import org.opensearch.client.opensearch._types.RefreshStats; +import org.opensearch.client.opensearch._types.RequestCacheStats; +import org.opensearch.client.opensearch._types.SearchStats; +import org.opensearch.client.opensearch._types.SegmentsStats; +import org.opensearch.client.opensearch._types.StoreStats; +import org.opensearch.client.opensearch._types.TranslogStats; +import org.opensearch.client.opensearch._types.WarmerStats; +import org.opensearch.client.opensearch.indices.stats.ShardCommit; +import org.opensearch.client.opensearch.indices.stats.ShardPath; +import org.opensearch.client.opensearch.indices.stats.ShardQueryCache; +import org.opensearch.client.opensearch.indices.stats.ShardRetentionLeases; +import org.opensearch.client.opensearch.indices.stats.ShardRouting; +import org.opensearch.client.opensearch.indices.stats.ShardRoutingState; +import org.opensearch.client.opensearch.indices.stats.ShardSequenceNumber; +import org.opensearch.client.opensearch.indices.stats.ShardStats; +import org.opensearch.client.util.MissingRequiredPropertyException; + +public class ShardStatsTest extends Assert { + + @Test + public void testShardStatsBulkAndShardsPropertiesNotRequired() { + + ShardStats.Builder builder = createShardsStatsBuilderWithRequiredFields(); + + try { + builder.build(); + } catch (MissingRequiredPropertyException e) { + fail(e.getClass().getSimpleName() + " was thrown: " + e.getMessage()); + } + } + + private ShardStats.Builder createShardsStatsBuilderWithRequiredFields() { + ShardCommit commit = new ShardCommit.Builder().id("").generation(0).numDocs(0).userData(new HashMap<>()).build(); + CompletionStats completion = new CompletionStats.Builder().sizeInBytes(0).build(); + DocStats docs = new DocStats.Builder().count(0).deleted(0).build(); + FielddataStats fielddata = new FielddataStats.Builder().memorySizeInBytes(0).build(); + FlushStats flush = new FlushStats.Builder().periodic(0).total(0).totalTimeInMillis(0).build(); + GetStats get = new GetStats.Builder().current(0) + .existsTimeInMillis(0) + .existsTotal(0) + .missingTimeInMillis(0) + .missingTotal(0) + .timeInMillis(0) + .total(0) + .build(); + IndexingStats indexing = new IndexingStats.Builder().indexCurrent(0) + .deleteCurrent(0) + .deleteTimeInMillis(0) + .deleteTotal(0) + .isThrottled(false) + .noopUpdateTotal(0) + .throttleTimeInMillis(0) + .indexTimeInMillis(0) + .indexTotal(0) + .indexFailed(0) + .types(new HashMap<>()) + .build(); + MergesStats merges = new MergesStats.Builder().current(0) + .currentDocs(0) + .currentSizeInBytes(0) + .total(0) + .totalAutoThrottleInBytes(0) + .totalDocs(0) + .totalSizeInBytes(0) + .totalStoppedTimeInMillis(0) + .totalThrottledTimeInMillis(0) + .totalTimeInMillis(0) + .build(); + ShardPath shardPath = new ShardPath.Builder().dataPath("").isCustomDataPath(false).statePath("").build(); + ShardQueryCache queryCache = new ShardQueryCache.Builder().cacheCount(0) + .cacheSize(0) + .evictions(0) + .hitCount(0) + .memorySizeInBytes(0) + .missCount(0) + .totalCount(0) + .build(); + RecoveryStats recovery = new RecoveryStats.Builder().currentAsSource(0).currentAsTarget(0).throttleTimeInMillis(0).build(); + RefreshStats refresh = new RefreshStats.Builder().externalTotal(0) + .externalTotalTimeInMillis(0) + .listeners(0) + .total(0) + .totalTimeInMillis(0) + .build(); + RequestCacheStats requestCache = new RequestCacheStats.Builder().evictions(0).hitCount(0).memorySizeInBytes(0).missCount(0).build(); + ShardRetentionLeases retentionLeases = new ShardRetentionLeases.Builder().primaryTerm(0).version(0).leases(emptyList()).build(); + ShardRouting routing = new ShardRouting.Builder().node("").primary(false).state(ShardRoutingState.Unassigned).build(); + SearchStats search = new SearchStats.Builder().fetchCurrent(0) + .fetchTimeInMillis(0) + .fetchTotal(0) + .queryCurrent(0) + .queryTimeInMillis(0) + .queryTotal(0) + .scrollCurrent(0) + .scrollTimeInMillis(0) + .scrollTotal(0) + .suggestCurrent(0) + .suggestTimeInMillis(0) + .suggestTotal(0) + .build(); + SegmentsStats segments = new SegmentsStats.Builder().count(0) + .docValuesMemoryInBytes(0) + .fileSizes(new HashMap<>()) + .fixedBitSetMemoryInBytes(0) + .indexWriterMemoryInBytes(0) + .maxUnsafeAutoIdTimestamp(0) + .memoryInBytes(0) + .normsMemoryInBytes(0) + .pointsMemoryInBytes(0) + .storedFieldsMemoryInBytes(0) + .termsMemoryInBytes(0) + .termVectorsMemoryInBytes(0) + .versionMapMemoryInBytes(0) + .build(); + ShardSequenceNumber seqNo = new ShardSequenceNumber.Builder().globalCheckpoint(0).localCheckpoint(0).maxSeqNo(0).build(); + StoreStats store = new StoreStats.Builder().sizeInBytes(0).reservedInBytes(0).build(); + TranslogStats translog = new TranslogStats.Builder().earliestLastModifiedAge(0) + .operations(0) + .sizeInBytes(0) + .uncommittedOperations(0) + .uncommittedSizeInBytes(0) + .build(); + WarmerStats warmer = new WarmerStats.Builder().current(0).total(0).totalTimeInMillis(0).build(); + + ShardStats.Builder builder = new ShardStats.Builder(); + + builder.commit(commit) + .completion(completion) + .docs(docs) + .fielddata(fielddata) + .flush(flush) + .get(get) + .indexing(indexing) + .merges(merges) + .shardPath(shardPath) + .queryCache(queryCache) + .recovery(recovery) + .refresh(refresh) + .requestCache(requestCache) + .retentionLeases(retentionLeases) + .routing(routing) + .search(search) + .segments(segments) + .seqNo(seqNo) + .store(store) + .translog(translog) + .warmer(warmer); + + return builder; + } +}