SLIDER-5 CLI tests on deser content passing; tuning what gets sent back
git-svn-id: https://svn.apache.org/repos/asf/incubator/slider/trunk@1592538 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/slider-core/src/main/java/org/apache/slider/common/params/ActionRegistryArgs.java b/slider-core/src/main/java/org/apache/slider/common/params/ActionRegistryArgs.java
index dd6e012..865e11e 100644
--- a/slider-core/src/main/java/org/apache/slider/common/params/ActionRegistryArgs.java
+++ b/slider-core/src/main/java/org/apache/slider/common/params/ActionRegistryArgs.java
@@ -24,6 +24,8 @@
import org.apache.slider.core.exceptions.BadCommandArgumentsException;
import org.apache.slider.core.exceptions.ErrorStrings;
+import static org.apache.slider.common.params.SliderActions.ACTION_REGISTRY;
+import static org.apache.slider.common.params.SliderActions.DESCRIBE_ACTION_REGISTRY;
import java.io.File;
@@ -35,13 +37,13 @@
* --list : list instances of slider service
* --listfiles
*/
-@Parameters(commandNames = {SliderActions.ACTION_REGISTRY},
- commandDescription = SliderActions.DESCRIBE_ACTION_REGISTRY)
+@Parameters(commandNames = {ACTION_REGISTRY},
+ commandDescription = DESCRIBE_ACTION_REGISTRY)
public class ActionRegistryArgs extends AbstractActionArgs {
@Override
public String getActionName() {
- return SliderActions.ACTION_REGISTRY;
+ return ACTION_REGISTRY;
}
@@ -147,23 +149,40 @@
return arg ? 1 : 0;
}
+ private String iff(String arg, boolean val) {
+ return val ? (arg + " "): "";
+ }
+
+ private String iff (String arg, String val) {
+ if (is(val)) {
+ return arg + " " + val + " ";
+ } else {
+ return "";
+ }
+ }
@Override
public String toString() {
final StringBuilder sb =
- new StringBuilder("ActionRegistryArgs{");
- sb.append("list=").append(list);
- sb.append(", listConf=").append(listConf);
- sb.append(", getConf='").append(getConf).append('\'');
- sb.append(", listFiles='").append(listFiles).append('\'');
- sb.append(", getFiles='").append(getFiles).append('\'');
- sb.append(", format='").append(format).append('\'');
- sb.append(", dest=").append(dest);
- sb.append(", name='").append(name).append('\'');
- sb.append(", serviceType='").append(serviceType).append('\'');
- sb.append(", verbose=").append(verbose);
- sb.append(", internal=").append(internal);
- sb.append('}');
+ new StringBuilder(ACTION_REGISTRY);
+ sb.append(iff(ARG_LIST, list));
+ sb.append(iff(ARG_LISTCONF, listConf));
+ sb.append(iff(ARG_LISTFILES, listFiles));
+ sb.append(iff(ARG_GETCONF, listFiles));
+ sb.append(iff(ARG_GETFILES, listFiles));
+
+ sb.append(iff(ARG_NAME, name));
+ sb.append(iff(ARG_SERVICETYPE, serviceType));
+
+
+ sb.append(iff(ARG_VERBOSE, verbose));
+ sb.append(iff(ARG_INTERNAL, internal));
+
+ if (dest != null) {
+ sb.append(iff(ARG_DEST, dest.toString()));
+ }
+ sb.append(iff(ARG_FORMAT, format));
+
return sb.toString();
}
}
diff --git a/slider-core/src/main/java/org/apache/slider/core/registry/docstore/PublishedConfigSet.java b/slider-core/src/main/java/org/apache/slider/core/registry/docstore/PublishedConfigSet.java
index fb77363..41b3619 100644
--- a/slider-core/src/main/java/org/apache/slider/core/registry/docstore/PublishedConfigSet.java
+++ b/slider-core/src/main/java/org/apache/slider/core/registry/docstore/PublishedConfigSet.java
@@ -58,4 +58,13 @@
keys.addAll(configurations.keySet());
return keys;
}
+
+ public PublishedConfigSet shallowCopy() {
+ PublishedConfigSet that = new PublishedConfigSet();
+ for (Map.Entry<String, PublishedConfiguration> entry : configurations
+ .entrySet()) {
+ that.put(entry.getKey(), entry.getValue().shallowCopy());
+ }
+ return that;
+ }
}
diff --git a/slider-core/src/main/java/org/apache/slider/core/registry/docstore/PublishedConfiguration.java b/slider-core/src/main/java/org/apache/slider/core/registry/docstore/PublishedConfiguration.java
index a47b51d..3c7b521 100644
--- a/slider-core/src/main/java/org/apache/slider/core/registry/docstore/PublishedConfiguration.java
+++ b/slider-core/src/main/java/org/apache/slider/core/registry/docstore/PublishedConfiguration.java
@@ -59,16 +59,24 @@
return updated;
}
- @JsonIgnore
private Map<String, String> values = new HashMap<String, String>();
/**
+ * Is the configuration empty. This means either that it has not
+ * been given any values, or it is stripped down copy set down over the
+ * wire.
+ * @return
+ */
+ public boolean isEmpty() {
+ return values.isEmpty();
+ }
+
+ /**
* Set the values from an iterable (this includes a Hadoop Configuration
* and Java properties object).
* Any existing value set is discarded
* @param entries entries to put
*/
- @JsonIgnore
public void putValues(Iterable<Map.Entry<String, String>> entries) {
values = new HashMap<String, String>();
for (Map.Entry<String, String> entry : entries) {
@@ -116,4 +124,19 @@
String json = mapper.writeValueAsString(values);
return json;
}
+
+
+ /**
+ * This makes a copy without the nested content -so is suitable
+ * for returning as part of the list of a parent's values
+ * @return the copy
+ */
+ public PublishedConfiguration shallowCopy() {
+ PublishedConfiguration that = new PublishedConfiguration();
+ that.description = this.description;
+ that.size = this.size;
+ that.updated = this.updated;
+ that.updatedTime = this.updatedTime;
+ return that;
+ }
}
diff --git a/slider-core/src/main/java/org/apache/slider/core/registry/info/ServiceInstanceData.java b/slider-core/src/main/java/org/apache/slider/core/registry/info/ServiceInstanceData.java
index b5e2d15..6c6918c 100644
--- a/slider-core/src/main/java/org/apache/slider/core/registry/info/ServiceInstanceData.java
+++ b/slider-core/src/main/java/org/apache/slider/core/registry/info/ServiceInstanceData.java
@@ -30,7 +30,7 @@
@JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL)
public class ServiceInstanceData implements Serializable {
- public String name;
+ public String serviceType;
public String id;
public long registrationTimeUTC;
@@ -49,8 +49,8 @@
public String toString() {
final StringBuilder sb =
new StringBuilder("ServiceInstanceData{");
- sb.append("name='").append(name).append('\'');
sb.append(", id='").append(id).append('\'');
+ sb.append("serviceType='").append(serviceType).append('\'');
sb.append('}');
return sb.toString();
}
diff --git a/slider-core/src/main/java/org/apache/slider/core/registry/retrieve/RegistryRetriever.java b/slider-core/src/main/java/org/apache/slider/core/registry/retrieve/RegistryRetriever.java
index 1202cb8..5d34ea8 100644
--- a/slider-core/src/main/java/org/apache/slider/core/registry/retrieve/RegistryRetriever.java
+++ b/slider-core/src/main/java/org/apache/slider/core/registry/retrieve/RegistryRetriever.java
@@ -22,6 +22,9 @@
import com.sun.jersey.api.client.Client;
import com.sun.jersey.api.client.UniformInterfaceException;
import com.sun.jersey.api.client.WebResource;
+import com.sun.jersey.api.client.config.ClientConfig;
+import com.sun.jersey.api.client.config.DefaultClientConfig;
+import com.sun.jersey.api.json.JSONConfiguration;
import org.apache.slider.core.exceptions.ExceptionConverter;
import org.apache.slider.core.registry.docstore.PublishedConfigSet;
import org.apache.slider.core.registry.info.RegistryView;
@@ -45,7 +48,11 @@
private static final Client jerseyClient;
static {
- jerseyClient = Client.create();
+ ClientConfig clientConfig = new DefaultClientConfig();
+ clientConfig.getFeatures().put(
+ JSONConfiguration.FEATURE_POJO_MAPPING,
+ Boolean.TRUE);
+ jerseyClient = Client.create(clientConfig);
jerseyClient.setFollowRedirects(true);
}
@@ -90,11 +97,11 @@
throw new FileNotFoundException("No configuration URL at "
+ destination(external) + " view");
}
- WebResource webResource = jerseyClient.resource(confURL);
try {
- PublishedConfigSet configSet =
- webResource.type(MediaType.APPLICATION_JSON)
- .get(PublishedConfigSet.class);
+ WebResource webResource = jerseyClient.resource(confURL);
+ webResource.type(MediaType.APPLICATION_JSON);
+ log.debug("GET {}", confURL);
+ PublishedConfigSet configSet = webResource.get(PublishedConfigSet.class);
return configSet;
} catch (UniformInterfaceException e) {
throw ExceptionConverter.convertJerseyException(confURL, e);
@@ -105,4 +112,6 @@
public String toString() {
return super.toString() + " - " + instance;
}
+
+
}
diff --git a/slider-core/src/main/java/org/apache/slider/server/appmaster/SliderAppMaster.java b/slider-core/src/main/java/org/apache/slider/server/appmaster/SliderAppMaster.java
index 5eaa618..5219837 100644
--- a/slider-core/src/main/java/org/apache/slider/server/appmaster/SliderAppMaster.java
+++ b/slider-core/src/main/java/org/apache/slider/server/appmaster/SliderAppMaster.java
@@ -699,7 +699,8 @@
URL amWeb = new URL(appMasterTrackingUrl);
String serviceName = SliderKeys.APP_TYPE;
int id = appid.getId();
- String appRegistryName = RegistryNaming.createRegistryName(instanceName,
+ String appServiceType = RegistryNaming.createRegistryServiceType(
+ instanceName,
service_user_name,
serviceName);
String registryId =
@@ -716,6 +717,8 @@
appState.getPublishedConfigurations().put("yarn-site.xml", pubconf);
ServiceInstanceData instanceData = new ServiceInstanceData();
+ instanceData.id = registryId;
+ instanceData.serviceType = appServiceType;
RegisteredEndpoint webUI =
new RegisteredEndpoint(amWeb, "Application Master Web UI");
@@ -772,7 +775,7 @@
registry.register(
- appRegistryName,
+ appServiceType,
registryId,
amWeb,
instanceData);
diff --git a/slider-core/src/main/java/org/apache/slider/server/appmaster/web/rest/publisher/PublisherResource.java b/slider-core/src/main/java/org/apache/slider/server/appmaster/web/rest/publisher/PublisherResource.java
index 65c8090..318ca03 100644
--- a/slider-core/src/main/java/org/apache/slider/server/appmaster/web/rest/publisher/PublisherResource.java
+++ b/slider-core/src/main/java/org/apache/slider/server/appmaster/web/rest/publisher/PublisherResource.java
@@ -65,8 +65,8 @@
init(res, uriInfo);
PublishedConfigSet publishedConfigSet = getContent();
- log.debug("number of avaiable configurations: {}", publishedConfigSet.size());
- return publishedConfigSet;
+ log.debug("number of available configurations: {}", publishedConfigSet.size());
+ return publishedConfigSet.shallowCopy();
}
private void logRequest(UriInfo uriInfo) {
diff --git a/slider-core/src/main/java/org/apache/slider/server/services/curator/RegistryNaming.java b/slider-core/src/main/java/org/apache/slider/server/services/curator/RegistryNaming.java
index ce6c4af..e5c8b1a 100644
--- a/slider-core/src/main/java/org/apache/slider/server/services/curator/RegistryNaming.java
+++ b/slider-core/src/main/java/org/apache/slider/server/services/curator/RegistryNaming.java
@@ -22,9 +22,9 @@
public class RegistryNaming {
- public static String createRegistryName(String instanceName,
- String userName,
- String serviceName) {
+ public static String createRegistryServiceType(String instanceName,
+ String userName,
+ String serviceName) {
return serviceName;
}
diff --git a/slider-core/src/test/groovy/org/apache/slider/agent/standalone/TestStandaloneRegistryAM.groovy b/slider-core/src/test/groovy/org/apache/slider/agent/standalone/TestStandaloneRegistryAM.groovy
index 0069e73..904f715 100644
--- a/slider-core/src/test/groovy/org/apache/slider/agent/standalone/TestStandaloneRegistryAM.groovy
+++ b/slider-core/src/test/groovy/org/apache/slider/agent/standalone/TestStandaloneRegistryAM.groovy
@@ -175,8 +175,9 @@
def externalConf = retriever.getConfigurations(true)
externalConf.keys().each { String key ->
def config = externalConf.get(key)
- log.info "$key -- ${config.description} -- size ${config.size}"
+ log.info "$key -- ${config.description}"
}
+ assert externalConf["yarn-site.xml"]
describe "Internal configurations"
assert !retriever.hasConfigurations(false)
@@ -186,17 +187,37 @@
} catch (FileNotFoundException fnfe) {
//expected
}
-
+
+
// retrieval via API
ActionRegistryArgs registryArgs = new ActionRegistryArgs()
- registryArgs.name = amInstance;
+ registryArgs.name = serviceInstanceData.id;
registryArgs.verbose = true
- registryArgs.list = true;
- assert client.actionRegistry(registryArgs)
+ // list
+ registryArgs.list = true;
+ describe registryArgs.toString()
+ assert 0 == client.actionRegistry(registryArgs)
+
+ // listconf
registryArgs.list = false;
registryArgs.listConf = true
- assert client.actionRegistry(registryArgs)
+ describe registryArgs.toString()
+
+ assert 0 == client.actionRegistry(registryArgs)
+
+
+ // listconf --internal
+ registryArgs.list = false;
+ registryArgs.listConf = true
+ registryArgs.internal = true
+ describe registryArgs.toString()
+ try {
+ assert 0 == client.actionRegistry(registryArgs)
+ fail("expected a failure")
+ } catch (FileNotFoundException fnfe) {
+ //expected
+ }
diff --git a/slider-core/src/test/groovy/org/apache/slider/registry/curator/TestLocalRegistry.groovy b/slider-core/src/test/groovy/org/apache/slider/registry/curator/TestLocalRegistry.groovy
index cf8dbd9..5d13018 100644
--- a/slider-core/src/test/groovy/org/apache/slider/registry/curator/TestLocalRegistry.groovy
+++ b/slider-core/src/test/groovy/org/apache/slider/registry/curator/TestLocalRegistry.groovy
@@ -118,7 +118,7 @@
@Test
public void testNamingPolicy() throws Throwable {
- String hobbitName = RegistryNaming.createRegistryName("hobbiton",
+ String hobbitName = RegistryNaming.createRegistryServiceType("hobbiton",
"bilbo",
SliderKeys.APP_TYPE);
String hobbitId =
@@ -127,7 +127,7 @@
"bilbo",
SliderKeys.APP_TYPE,
1);
- String mordorName = RegistryNaming.createRegistryName("mordor",
+ String mordorName = RegistryNaming.createRegistryServiceType("mordor",
"bilbo",
SliderKeys.APP_TYPE);
String mordorId =
diff --git a/slider-core/src/test/groovy/org/apache/slider/registry/curator/TestServiceInstanceSerDeser.groovy b/slider-core/src/test/groovy/org/apache/slider/registry/curator/TestServiceInstanceSerDeser.groovy
index 47924d2..6a57cd9 100644
--- a/slider-core/src/test/groovy/org/apache/slider/registry/curator/TestServiceInstanceSerDeser.groovy
+++ b/slider-core/src/test/groovy/org/apache/slider/registry/curator/TestServiceInstanceSerDeser.groovy
@@ -73,7 +73,7 @@
builder.address(null).id("testPayload").name("").port(0).uriSpec(null)
ServiceInstanceData data = new ServiceInstanceData()
- data.name = "testPayload"
+ data.serviceType = "testPayload"
data.externalView.documentsURL = "http://documents"
builder.payload(data)