Update Settings API: Allow body request to be wrapped with `settings` element to conform with other APIs, closes #2227.

This commit is contained in:
Shay Banon 2012-09-02 17:40:08 +02:00
parent c834bca43c
commit edfbfc1c87
1 changed files with 12 additions and 3 deletions

View File

@ -58,10 +58,19 @@ public class RestUpdateSettingsAction extends BaseRestHandler {
updateSettingsRequest.listenerThreaded(false);
ImmutableSettings.Builder updateSettings = ImmutableSettings.settingsBuilder();
String bodySettings = request.content().toUtf8();
if (Strings.hasText(bodySettings)) {
String bodySettingsStr = request.content().toUtf8();
if (Strings.hasText(bodySettingsStr)) {
try {
updateSettings.put(ImmutableSettings.settingsBuilder().loadFromSource(bodySettings).build());
Settings buildSettings = ImmutableSettings.settingsBuilder().loadFromSource(bodySettingsStr).build();
for (Map.Entry<String, String> entry : buildSettings.getAsMap().entrySet()) {
String key = entry.getKey();
String value = entry.getValue();
// clean up in case the body is wrapped with "settings" : { ... }
if (key.startsWith("settings.")) {
key = key.substring("settings.".length());
}
updateSettings.put(key, value);
}
} catch (Exception e) {
try {
channel.sendResponse(new XContentThrowableRestResponse(request, BAD_REQUEST, new SettingsException("Failed to parse index settings", e)));