ColumnFamilyStore: Remove compaction parameter API usage

Do manual mangling of in/out data in JMX instead. Saves on
controversy over more or less pointless API additions.
This commit is contained in:
Calle Wilund 2016-11-01 09:44:17 +00:00
parent 434ce947b0
commit ae6a000807

View File

@ -25,24 +25,23 @@ package org.apache.cassandra.db;
import static java.lang.String.valueOf; import static java.lang.String.valueOf;
import static java.util.Arrays.asList; import static java.util.Arrays.asList;
import static java.util.stream.Collectors.toMap;
import static javax.json.Json.createObjectBuilder; import static javax.json.Json.createObjectBuilder;
import static javax.json.Json.createReader;
import static javax.ws.rs.core.MediaType.APPLICATION_JSON;
import java.io.StringReader; import java.io.StringReader;
import java.util.HashMap; import java.util.Collections;
import java.util.HashSet; import java.util.HashSet;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Map.Entry;
import java.util.Set; import java.util.Set;
import java.util.concurrent.ExecutionException; import java.util.concurrent.ExecutionException;
import java.util.logging.Logger; import java.util.logging.Logger;
import javax.json.Json;
import javax.json.JsonArray; import javax.json.JsonArray;
import javax.json.JsonObject; import javax.json.JsonObject;
import javax.json.JsonObjectBuilder; import javax.json.JsonObjectBuilder;
import javax.json.JsonValue; import javax.json.JsonReader;
import javax.management.MBeanServer; import javax.management.MBeanServer;
import javax.management.MalformedObjectNameException; import javax.management.MalformedObjectNameException;
import javax.management.ObjectName; import javax.management.ObjectName;
@ -369,33 +368,37 @@ public class ColumnFamilyStore extends MetricsMBean implements ColumnFamilyStore
@Override @Override
public void setCompactionParametersJson(String options) { public void setCompactionParametersJson(String options) {
log(" setCompactionParametersJson"); log(" setCompactionParametersJson");
client.post("column_family/compaction_parameters/" + getCFName(), null, options, APPLICATION_JSON); JsonReader reader = Json.createReaderFactory(null).createReader(new StringReader(options));
setCompactionParameters(
reader.readObject().entrySet().stream().collect(toMap(Map.Entry::getKey, e -> e.toString())));
} }
@Override @Override
public String getCompactionParametersJson() { public String getCompactionParametersJson() {
log(" getCompactionParametersJson"); log(" getCompactionParametersJson");
return client.getStringValue("column_family/compaction_parameters/" + getCFName()); JsonObjectBuilder b = createObjectBuilder();
getCompactionParameters().forEach(b::add);
return b.build().toString();
} }
@Override @Override
public void setCompactionParameters(Map<String, String> options) { public void setCompactionParameters(Map<String, String> options) {
JsonObjectBuilder b = createObjectBuilder();
for (Map.Entry<String, String> e : options.entrySet()) { for (Map.Entry<String, String> e : options.entrySet()) {
b.add(e.getKey(), e.getValue()); // See below
if ("class".equals(e.getKey())) {
setCompactionStrategyClass(e.getValue());
} else {
throw new IllegalArgumentException(e.getKey());
}
} }
setCompactionParametersJson(b.build().toString());
} }
@Override @Override
public Map<String, String> getCompactionParameters() { public Map<String, String> getCompactionParameters() {
String s = getCompactionParametersJson(); // We only currently support class. Here could have been a call that can
JsonObject o = createReader(new StringReader(s)).readObject(); // be expanded only on the server side, but that raises controversy.
HashMap<String, String> res = new HashMap<>(); // Lets add some technical debt instead.
for (Entry<String, JsonValue> e : o.entrySet()) { return Collections.singletonMap("class", getCompactionStrategyClass());
res.put(e.getKey(), e.getValue().toString());
}
return res;
} }
@Override @Override