Skip to content

Commit ee8105b

Browse files
authored
Improve summary error message for invalid setting updates
Signed-off-by: Xue Zhou <[email protected]>
1 parent 74912d2 commit ee8105b

File tree

20 files changed

+131
-115
lines changed

20 files changed

+131
-115
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
4646
- Changed http code on create index API with bad input raising NotXContentException from 500 to 400 ([#4773](https://github.com/opensearch-project/OpenSearch/pull/4773))
4747
- Change http code for DecommissioningFailedException from 500 to 400 ([#5283](https://github.com/opensearch-project/OpenSearch/pull/5283))
4848
- Require MediaType in Strings.toString API ([#6009](https://github.com/opensearch-project/OpenSearch/pull/6009))
49+
- Improve summary error message for invalid setting updates ([#4792](https://github.com/opensearch-project/OpenSearch/pull/4792))
4950

5051
### Deprecated
5152

client/rest-high-level/src/test/java/org/opensearch/client/ClusterClientIT.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -162,7 +162,7 @@ public void testClusterUpdateSettingNonExistent() {
162162
assertThat(exception.status(), equalTo(RestStatus.BAD_REQUEST));
163163
assertThat(
164164
exception.getMessage(),
165-
equalTo("OpenSearch exception [type=illegal_argument_exception, reason=transient setting [" + setting + "], not recognized]")
165+
equalTo("OpenSearch exception [type=settings_exception, reason=transient setting [" + setting + "], not recognized]")
166166
);
167167
}
168168

client/rest-high-level/src/test/java/org/opensearch/client/IndicesClientIT.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1437,8 +1437,7 @@ public void testIndexPutSettings() throws IOException {
14371437
assertThat(
14381438
exception.getMessage(),
14391439
startsWith(
1440-
"OpenSearch exception [type=illegal_argument_exception, "
1441-
+ "reason=final index setting [index.number_of_shards], not updateable"
1440+
"OpenSearch exception [type=settings_exception, " + "reason=final index setting [index.number_of_shards], not updateable"
14421441
)
14431442
);
14441443
}
@@ -1475,7 +1474,7 @@ public void testIndexPutSettingNonExistent() throws IOException {
14751474
assertThat(
14761475
exception.getMessage(),
14771476
equalTo(
1478-
"OpenSearch exception [type=illegal_argument_exception, "
1477+
"OpenSearch exception [type=settings_exception, "
14791478
+ "reason=unknown setting [index.no_idea_what_you_are_talking_about] please check that any required plugins are installed, "
14801479
+ "or check the breaking changes documentation for removed settings]"
14811480
)

qa/evil-tests/src/test/java/org/opensearch/cluster/metadata/EvilSystemPropertyTests.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,8 +31,10 @@
3131

3232
package org.opensearch.cluster.metadata;
3333

34+
import org.hamcrest.Matchers;
3435
import org.opensearch.common.SuppressForbidden;
3536
import org.opensearch.common.settings.Settings;
37+
import org.opensearch.common.settings.SettingsException;
3638
import org.opensearch.test.OpenSearchTestCase;
3739

3840
import static org.opensearch.cluster.metadata.IndexMetadata.DEFAULT_NUMBER_OF_SHARDS;

server/src/internalClusterTest/java/org/opensearch/action/admin/indices/create/CreateIndexIT.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@
4747
import org.opensearch.cluster.metadata.Metadata;
4848
import org.opensearch.common.collect.ImmutableOpenMap;
4949
import org.opensearch.common.settings.Settings;
50+
import org.opensearch.common.settings.SettingsException;
5051
import org.opensearch.common.unit.TimeValue;
5152
import org.opensearch.common.xcontent.XContentFactory;
5253
import org.opensearch.index.IndexNotFoundException;
@@ -82,7 +83,7 @@ public void testCreationDateGivenFails() {
8283
try {
8384
prepareCreate("test").setSettings(Settings.builder().put(IndexMetadata.SETTING_CREATION_DATE, 4L)).get();
8485
fail();
85-
} catch (IllegalArgumentException ex) {
86+
} catch (SettingsException ex) {
8687
assertEquals(
8788
"unknown setting [index.creation_date] please check that any required plugins are installed, or check the "
8889
+ "breaking changes documentation for removed settings",
@@ -203,7 +204,7 @@ public void testUnknownSettingFails() {
203204
try {
204205
prepareCreate("test").setSettings(Settings.builder().put("index.unknown.value", "this must fail").build()).get();
205206
fail("should have thrown an exception about the shard count");
206-
} catch (IllegalArgumentException e) {
207+
} catch (SettingsException e) {
207208
assertEquals(
208209
"unknown setting [index.unknown.value] please check that any required plugins are installed, or check the"
209210
+ " breaking changes documentation for removed settings",

server/src/internalClusterTest/java/org/opensearch/cluster/settings/ClusterSettingsIT.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@
4141
import org.opensearch.cluster.routing.allocation.decider.EnableAllocationDecider;
4242
import org.opensearch.common.settings.Setting;
4343
import org.opensearch.common.settings.Settings;
44+
import org.opensearch.common.settings.SettingsException;
4445
import org.opensearch.common.unit.ByteSizeUnit;
4546
import org.opensearch.common.unit.TimeValue;
4647
import org.opensearch.indices.recovery.RecoverySettings;
@@ -78,7 +79,7 @@ public void testClusterNonExistingSettingsUpdate() {
7879
try {
7980
client().admin().cluster().prepareUpdateSettings().setTransientSettings(Settings.builder().put(key1, value1).build()).get();
8081
fail("bogus value");
81-
} catch (IllegalArgumentException ex) {
82+
} catch (SettingsException ex) {
8283
assertEquals("transient setting [no_idea_what_you_are_talking_about], not recognized", ex.getMessage());
8384
}
8485
}

server/src/internalClusterTest/java/org/opensearch/indices/settings/InternalSettingsIT.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@
3434

3535
import org.opensearch.action.admin.indices.settings.get.GetSettingsResponse;
3636
import org.opensearch.common.settings.Settings;
37+
import org.opensearch.common.settings.SettingsException;
3738
import org.opensearch.plugins.Plugin;
3839
import org.opensearch.test.OpenSearchIntegTestCase;
3940

@@ -64,8 +65,8 @@ public void testUpdateInternalIndexSettingViaSettingsAPI() {
6465
final GetSettingsResponse response = client().admin().indices().prepareGetSettings("test").get();
6566
assertThat(response.getSetting("test", "index.internal"), equalTo("internal"));
6667
// we can not update the setting via the update settings API
67-
final IllegalArgumentException e = expectThrows(
68-
IllegalArgumentException.class,
68+
final SettingsException e = expectThrows(
69+
SettingsException.class,
6970
() -> client().admin()
7071
.indices()
7172
.prepareUpdateSettings("test")

server/src/internalClusterTest/java/org/opensearch/indices/settings/PrivateSettingsIT.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@
3535
import org.opensearch.action.admin.indices.settings.get.GetSettingsResponse;
3636
import org.opensearch.common.ValidationException;
3737
import org.opensearch.common.settings.Settings;
38+
import org.opensearch.common.settings.SettingsException;
3839
import org.opensearch.plugins.Plugin;
3940
import org.opensearch.test.OpenSearchIntegTestCase;
4041

@@ -64,8 +65,8 @@ public void testSetPrivateIndexSettingOnCreate() {
6465
public void testUpdatePrivateIndexSettingViaSettingsAPI() {
6566
createIndex("test");
6667
// we can not update the setting via the update settings API
67-
final IllegalArgumentException e = expectThrows(
68-
IllegalArgumentException.class,
68+
final SettingsException e = expectThrows(
69+
SettingsException.class,
6970
() -> client().admin()
7071
.indices()
7172
.prepareUpdateSettings("test")

server/src/internalClusterTest/java/org/opensearch/indices/settings/UpdateSettingsIT.java

Lines changed: 27 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@
4040
import org.opensearch.common.Priority;
4141
import org.opensearch.common.settings.Setting;
4242
import org.opensearch.common.settings.Settings;
43+
import org.opensearch.common.settings.SettingsException;
4344
import org.opensearch.common.unit.TimeValue;
4445
import org.opensearch.index.IndexModule;
4546
import org.opensearch.index.IndexService;
@@ -174,52 +175,52 @@ protected Settings nodeSettings(int nodeOrdinal) {
174175
}
175176

176177
public void testUpdateDependentClusterSettings() {
177-
IllegalArgumentException iae = expectThrows(
178-
IllegalArgumentException.class,
178+
SettingsException e = expectThrows(
179+
SettingsException.class,
179180
() -> client().admin()
180181
.cluster()
181182
.prepareUpdateSettings()
182183
.setPersistentSettings(Settings.builder().put("cluster.acc.test.pw", "asdf"))
183184
.get()
184185
);
185-
assertEquals("missing required setting [cluster.acc.test.user] for setting [cluster.acc.test.pw]", iae.getMessage());
186+
assertEquals("missing required setting [cluster.acc.test.user] for setting [cluster.acc.test.pw]", e.getMessage());
186187

187-
iae = expectThrows(
188-
IllegalArgumentException.class,
188+
e = expectThrows(
189+
SettingsException.class,
189190
() -> client().admin()
190191
.cluster()
191192
.prepareUpdateSettings()
192193
.setTransientSettings(Settings.builder().put("cluster.acc.test.pw", "asdf"))
193194
.get()
194195
);
195-
assertEquals("missing required setting [cluster.acc.test.user] for setting [cluster.acc.test.pw]", iae.getMessage());
196+
assertEquals("missing required setting [cluster.acc.test.user] for setting [cluster.acc.test.pw]", e.getMessage());
196197

197-
iae = expectThrows(
198-
IllegalArgumentException.class,
198+
e = expectThrows(
199+
SettingsException.class,
199200
() -> client().admin()
200201
.cluster()
201202
.prepareUpdateSettings()
202203
.setTransientSettings(Settings.builder().put("cluster.acc.test.pw", "asdf"))
203204
.setPersistentSettings(Settings.builder().put("cluster.acc.test.user", "asdf"))
204205
.get()
205206
);
206-
assertEquals("missing required setting [cluster.acc.test.user] for setting [cluster.acc.test.pw]", iae.getMessage());
207+
assertEquals("missing required setting [cluster.acc.test.user] for setting [cluster.acc.test.pw]", e.getMessage());
207208

208209
if (randomBoolean()) {
209210
client().admin()
210211
.cluster()
211212
.prepareUpdateSettings()
212213
.setTransientSettings(Settings.builder().put("cluster.acc.test.pw", "asdf").put("cluster.acc.test.user", "asdf"))
213214
.get();
214-
iae = expectThrows(
215-
IllegalArgumentException.class,
215+
e = expectThrows(
216+
SettingsException.class,
216217
() -> client().admin()
217218
.cluster()
218219
.prepareUpdateSettings()
219220
.setTransientSettings(Settings.builder().putNull("cluster.acc.test.user"))
220221
.get()
221222
);
222-
assertEquals("missing required setting [cluster.acc.test.user] for setting [cluster.acc.test.pw]", iae.getMessage());
223+
assertEquals("missing required setting [cluster.acc.test.user] for setting [cluster.acc.test.pw]", e.getMessage());
223224
client().admin()
224225
.cluster()
225226
.prepareUpdateSettings()
@@ -232,15 +233,15 @@ public void testUpdateDependentClusterSettings() {
232233
.setPersistentSettings(Settings.builder().put("cluster.acc.test.pw", "asdf").put("cluster.acc.test.user", "asdf"))
233234
.get();
234235

235-
iae = expectThrows(
236-
IllegalArgumentException.class,
236+
e = expectThrows(
237+
SettingsException.class,
237238
() -> client().admin()
238239
.cluster()
239240
.prepareUpdateSettings()
240241
.setPersistentSettings(Settings.builder().putNull("cluster.acc.test.user"))
241242
.get()
242243
);
243-
assertEquals("missing required setting [cluster.acc.test.user] for setting [cluster.acc.test.pw]", iae.getMessage());
244+
assertEquals("missing required setting [cluster.acc.test.user] for setting [cluster.acc.test.pw]", e.getMessage());
244245

245246
client().admin()
246247
.cluster()
@@ -252,11 +253,11 @@ public void testUpdateDependentClusterSettings() {
252253
}
253254

254255
public void testUpdateDependentIndexSettings() {
255-
IllegalArgumentException iae = expectThrows(
256-
IllegalArgumentException.class,
256+
SettingsException e = expectThrows(
257+
SettingsException.class,
257258
() -> prepareCreate("test", Settings.builder().put("index.acc.test.pw", "asdf")).get()
258259
);
259-
assertEquals("missing required setting [index.acc.test.user] for setting [index.acc.test.pw]", iae.getMessage());
260+
assertEquals("missing required setting [index.acc.test.user] for setting [index.acc.test.pw]", e.getMessage());
260261

261262
createIndex("test");
262263
for (int i = 0; i < 2; i++) {
@@ -265,16 +266,16 @@ public void testUpdateDependentIndexSettings() {
265266
client().admin().indices().prepareClose("test").get();
266267
}
267268

268-
iae = expectThrows(
269-
IllegalArgumentException.class,
269+
e = expectThrows(
270+
SettingsException.class,
270271
() -> client().admin()
271272
.indices()
272273
.prepareUpdateSettings("test")
273274
.setSettings(Settings.builder().put("index.acc.test.pw", "asdf"))
274275
.execute()
275276
.actionGet()
276277
);
277-
assertEquals("missing required setting [index.acc.test.user] for setting [index.acc.test.pw]", iae.getMessage());
278+
assertEquals("missing required setting [index.acc.test.user] for setting [index.acc.test.pw]", e.getMessage());
278279

279280
// user has no dependency
280281
client().admin()
@@ -293,16 +294,16 @@ public void testUpdateDependentIndexSettings() {
293294
.actionGet();
294295

295296
// now try to remove it and make sure it fails
296-
iae = expectThrows(
297-
IllegalArgumentException.class,
297+
e = expectThrows(
298+
SettingsException.class,
298299
() -> client().admin()
299300
.indices()
300301
.prepareUpdateSettings("test")
301302
.setSettings(Settings.builder().putNull("index.acc.test.user"))
302303
.execute()
303304
.actionGet()
304305
);
305-
assertEquals("missing required setting [index.acc.test.user] for setting [index.acc.test.pw]", iae.getMessage());
306+
assertEquals("missing required setting [index.acc.test.user] for setting [index.acc.test.pw]", e.getMessage());
306307

307308
// now we are consistent
308309
client().admin()
@@ -480,8 +481,8 @@ public void testOpenCloseUpdateSettings() throws Exception {
480481
assertThat(indexMetadata.getSettings().get("index.refresh_interval"), equalTo("1s"));
481482
assertThat(indexMetadata.getSettings().get("index.fielddata.cache"), equalTo("none"));
482483

483-
IllegalArgumentException ex = expectThrows(
484-
IllegalArgumentException.class,
484+
SettingsException ex = expectThrows(
485+
SettingsException.class,
485486
() -> client().admin()
486487
.indices()
487488
.prepareUpdateSettings("test")

server/src/internalClusterTest/java/org/opensearch/indices/template/SimpleIndexTemplateIT.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@
4848
import org.opensearch.common.ParsingException;
4949
import org.opensearch.common.bytes.BytesArray;
5050
import org.opensearch.common.settings.Settings;
51+
import org.opensearch.common.settings.SettingsException;
5152
import org.opensearch.common.xcontent.XContentFactory;
5253
import org.opensearch.common.xcontent.XContentType;
5354
import org.opensearch.index.mapper.MapperParsingException;
@@ -494,8 +495,8 @@ public void testInvalidSettings() throws Exception {
494495
GetIndexTemplatesResponse response = client().admin().indices().prepareGetTemplates().get();
495496
assertThat(response.getIndexTemplates(), empty());
496497

497-
IllegalArgumentException e = expectThrows(
498-
IllegalArgumentException.class,
498+
SettingsException e = expectThrows(
499+
SettingsException.class,
499500
() -> client().admin()
500501
.indices()
501502
.preparePutTemplate("template_1")

0 commit comments

Comments
 (0)