You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@slider.apache.org by st...@apache.org on 2015/11/23 18:20:57 UTC
[45/50] incubator-slider git commit: SLIDER-994 node information map
to list node entries by role name, -fix up protobuf marshallng to match,
with tests to prove it
SLIDER-994 node information map to list node entries by role name, -fix up protobuf marshallng to match, with tests to prove it
Project: http://git-wip-us.apache.org/repos/asf/incubator-slider/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-slider/commit/77aeb253
Tree: http://git-wip-us.apache.org/repos/asf/incubator-slider/tree/77aeb253
Diff: http://git-wip-us.apache.org/repos/asf/incubator-slider/diff/77aeb253
Branch: refs/heads/develop
Commit: 77aeb2539084d37ee4f735bc0d37aaf554109045
Parents: 134c8d5
Author: Steve Loughran <st...@apache.org>
Authored: Sun Nov 22 17:35:13 2015 +0000
Committer: Steve Loughran <st...@apache.org>
Committed: Sun Nov 22 17:35:13 2015 +0000
----------------------------------------------------------------------
.../org/apache/slider/api/proto/Messages.java | 247 ++++++++++++++++---
.../slider/api/proto/RestTypeMarshalling.java | 31 +--
.../slider/server/appmaster/state/AppState.java | 12 +
.../appmaster/state/ProviderAppState.java | 16 +-
.../src/main/proto/SliderClusterMessages.proto | 1 +
.../appstate/TestMockAppStateAAPlacement.groovy | 18 ++
.../model/history/TestRoleHistoryAA.groovy | 33 +++
7 files changed, 289 insertions(+), 69 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/77aeb253/slider-core/src/main/java/org/apache/slider/api/proto/Messages.java
----------------------------------------------------------------------
diff --git a/slider-core/src/main/java/org/apache/slider/api/proto/Messages.java b/slider-core/src/main/java/org/apache/slider/api/proto/Messages.java
index 6dd5849..373d64d 100644
--- a/slider-core/src/main/java/org/apache/slider/api/proto/Messages.java
+++ b/slider-core/src/main/java/org/apache/slider/api/proto/Messages.java
@@ -20414,6 +20414,21 @@ public final class Messages {
* <code>required int64 lastUsed = 10;</code>
*/
long getLastUsed();
+
+ // required string name = 11;
+ /**
+ * <code>required string name = 11;</code>
+ */
+ boolean hasName();
+ /**
+ * <code>required string name = 11;</code>
+ */
+ java.lang.String getName();
+ /**
+ * <code>required string name = 11;</code>
+ */
+ com.google.protobuf.ByteString
+ getNameBytes();
}
/**
* Protobuf type {@code org.apache.slider.api.NodeEntryInformationProto}
@@ -20516,6 +20531,11 @@ public final class Messages {
lastUsed_ = input.readInt64();
break;
}
+ case 90: {
+ bitField0_ |= 0x00000400;
+ name_ = input.readBytes();
+ break;
+ }
}
}
} catch (com.google.protobuf.InvalidProtocolBufferException e) {
@@ -20716,6 +20736,49 @@ public final class Messages {
return lastUsed_;
}
+ // required string name = 11;
+ public static final int NAME_FIELD_NUMBER = 11;
+ private java.lang.Object name_;
+ /**
+ * <code>required string name = 11;</code>
+ */
+ public boolean hasName() {
+ return ((bitField0_ & 0x00000400) == 0x00000400);
+ }
+ /**
+ * <code>required string name = 11;</code>
+ */
+ public java.lang.String getName() {
+ java.lang.Object ref = name_;
+ if (ref instanceof java.lang.String) {
+ return (java.lang.String) ref;
+ } else {
+ com.google.protobuf.ByteString bs =
+ (com.google.protobuf.ByteString) ref;
+ java.lang.String s = bs.toStringUtf8();
+ if (bs.isValidUtf8()) {
+ name_ = s;
+ }
+ return s;
+ }
+ }
+ /**
+ * <code>required string name = 11;</code>
+ */
+ public com.google.protobuf.ByteString
+ getNameBytes() {
+ java.lang.Object ref = name_;
+ if (ref instanceof java.lang.String) {
+ com.google.protobuf.ByteString b =
+ com.google.protobuf.ByteString.copyFromUtf8(
+ (java.lang.String) ref);
+ name_ = b;
+ return b;
+ } else {
+ return (com.google.protobuf.ByteString) ref;
+ }
+ }
+
private void initFields() {
priority_ = 0;
requested_ = 0;
@@ -20727,6 +20790,7 @@ public final class Messages {
live_ = 0;
releasing_ = 0;
lastUsed_ = 0L;
+ name_ = "";
}
private byte memoizedIsInitialized = -1;
public final boolean isInitialized() {
@@ -20773,6 +20837,10 @@ public final class Messages {
memoizedIsInitialized = 0;
return false;
}
+ if (!hasName()) {
+ memoizedIsInitialized = 0;
+ return false;
+ }
memoizedIsInitialized = 1;
return true;
}
@@ -20810,6 +20878,9 @@ public final class Messages {
if (((bitField0_ & 0x00000200) == 0x00000200)) {
output.writeInt64(10, lastUsed_);
}
+ if (((bitField0_ & 0x00000400) == 0x00000400)) {
+ output.writeBytes(11, getNameBytes());
+ }
getUnknownFields().writeTo(output);
}
@@ -20859,6 +20930,10 @@ public final class Messages {
size += com.google.protobuf.CodedOutputStream
.computeInt64Size(10, lastUsed_);
}
+ if (((bitField0_ & 0x00000400) == 0x00000400)) {
+ size += com.google.protobuf.CodedOutputStream
+ .computeBytesSize(11, getNameBytes());
+ }
size += getUnknownFields().getSerializedSize();
memoizedSerializedSize = size;
return size;
@@ -20932,6 +21007,11 @@ public final class Messages {
result = result && (getLastUsed()
== other.getLastUsed());
}
+ result = result && (hasName() == other.hasName());
+ if (hasName()) {
+ result = result && getName()
+ .equals(other.getName());
+ }
result = result &&
getUnknownFields().equals(other.getUnknownFields());
return result;
@@ -20985,6 +21065,10 @@ public final class Messages {
hash = (37 * hash) + LASTUSED_FIELD_NUMBER;
hash = (53 * hash) + hashLong(getLastUsed());
}
+ if (hasName()) {
+ hash = (37 * hash) + NAME_FIELD_NUMBER;
+ hash = (53 * hash) + getName().hashCode();
+ }
hash = (29 * hash) + getUnknownFields().hashCode();
memoizedHashCode = hash;
return hash;
@@ -21114,6 +21198,8 @@ public final class Messages {
bitField0_ = (bitField0_ & ~0x00000100);
lastUsed_ = 0L;
bitField0_ = (bitField0_ & ~0x00000200);
+ name_ = "";
+ bitField0_ = (bitField0_ & ~0x00000400);
return this;
}
@@ -21182,6 +21268,10 @@ public final class Messages {
to_bitField0_ |= 0x00000200;
}
result.lastUsed_ = lastUsed_;
+ if (((from_bitField0_ & 0x00000400) == 0x00000400)) {
+ to_bitField0_ |= 0x00000400;
+ }
+ result.name_ = name_;
result.bitField0_ = to_bitField0_;
onBuilt();
return result;
@@ -21228,6 +21318,11 @@ public final class Messages {
if (other.hasLastUsed()) {
setLastUsed(other.getLastUsed());
}
+ if (other.hasName()) {
+ bitField0_ |= 0x00000400;
+ name_ = other.name_;
+ onChanged();
+ }
this.mergeUnknownFields(other.getUnknownFields());
return this;
}
@@ -21273,6 +21368,10 @@ public final class Messages {
return false;
}
+ if (!hasName()) {
+
+ return false;
+ }
return true;
}
@@ -21625,6 +21724,80 @@ public final class Messages {
return this;
}
+ // required string name = 11;
+ private java.lang.Object name_ = "";
+ /**
+ * <code>required string name = 11;</code>
+ */
+ public boolean hasName() {
+ return ((bitField0_ & 0x00000400) == 0x00000400);
+ }
+ /**
+ * <code>required string name = 11;</code>
+ */
+ public java.lang.String getName() {
+ java.lang.Object ref = name_;
+ if (!(ref instanceof java.lang.String)) {
+ java.lang.String s = ((com.google.protobuf.ByteString) ref)
+ .toStringUtf8();
+ name_ = s;
+ return s;
+ } else {
+ return (java.lang.String) ref;
+ }
+ }
+ /**
+ * <code>required string name = 11;</code>
+ */
+ public com.google.protobuf.ByteString
+ getNameBytes() {
+ java.lang.Object ref = name_;
+ if (ref instanceof String) {
+ com.google.protobuf.ByteString b =
+ com.google.protobuf.ByteString.copyFromUtf8(
+ (java.lang.String) ref);
+ name_ = b;
+ return b;
+ } else {
+ return (com.google.protobuf.ByteString) ref;
+ }
+ }
+ /**
+ * <code>required string name = 11;</code>
+ */
+ public Builder setName(
+ java.lang.String value) {
+ if (value == null) {
+ throw new NullPointerException();
+ }
+ bitField0_ |= 0x00000400;
+ name_ = value;
+ onChanged();
+ return this;
+ }
+ /**
+ * <code>required string name = 11;</code>
+ */
+ public Builder clearName() {
+ bitField0_ = (bitField0_ & ~0x00000400);
+ name_ = getDefaultInstance().getName();
+ onChanged();
+ return this;
+ }
+ /**
+ * <code>required string name = 11;</code>
+ */
+ public Builder setNameBytes(
+ com.google.protobuf.ByteString value) {
+ if (value == null) {
+ throw new NullPointerException();
+ }
+ bitField0_ |= 0x00000400;
+ name_ = value;
+ onChanged();
+ return this;
+ }
+
// @@protoc_insertion_point(builder_scope:org.apache.slider.api.NodeEntryInformationProto)
}
@@ -33941,46 +34114,46 @@ public final class Messages {
"t\030\n \001(\t\022\017\n\007hostURL\030\013 \001(\t\022\021\n\tplacement\030\014 " +
"\001(\t\022\022\n\nappVersion\030\r \001(\t\"N\n\024PingInformati" +
"onProto\022\014\n\004text\030\001 \001(\t\022\014\n\004verb\030\002 \001(\t\022\014\n\004b" +
- "ody\030\003 \001(\t\022\014\n\004time\030\004 \001(\003\"\325\001\n\031NodeEntryInf" +
+ "ody\030\003 \001(\t\022\014\n\004time\030\004 \001(\003\"\343\001\n\031NodeEntryInf" +
"ormationProto\022\020\n\010priority\030\001 \002(\005\022\021\n\treque",
"sted\030\002 \002(\005\022\020\n\010starting\030\003 \002(\005\022\023\n\013startFai" +
"led\030\004 \002(\005\022\016\n\006failed\030\005 \002(\005\022\026\n\016failedRecen" +
"tly\030\006 \002(\005\022\021\n\tpreempted\030\007 \002(\005\022\014\n\004live\030\010 \002" +
- "(\005\022\021\n\treleasing\030\t \002(\005\022\020\n\010lastUsed\030\n \002(\003\"" +
- "\334\001\n\024NodeInformationProto\022\020\n\010hostname\030\001 \002" +
- "(\t\022\r\n\005state\030\002 \002(\t\022\023\n\013httpAddress\030\003 \002(\t\022\020" +
- "\n\010rackName\030\004 \002(\t\022\016\n\006labels\030\005 \002(\t\022\024\n\014heal" +
- "thReport\030\006 \002(\t\022\023\n\013lastUpdated\030\007 \002(\003\022A\n\007e" +
- "ntries\030\010 \003(\01320.org.apache.slider.api.Nod" +
- "eEntryInformationProto\"\026\n\024GetModelReques",
- "tProto\"\035\n\033GetModelDesiredRequestProto\"$\n" +
- "\"GetModelDesiredAppconfRequestProto\"&\n$G" +
- "etModelDesiredResourcesRequestProto\"%\n#G" +
- "etModelResolvedAppconfRequestProto\"\'\n%Ge" +
- "tModelResolvedResourcesRequestProto\"#\n!G" +
- "etModelLiveResourcesRequestProto\"\037\n\035GetL" +
- "iveContainersRequestProto\"u\n\036GetLiveCont" +
- "ainersResponseProto\022\r\n\005names\030\001 \003(\t\022D\n\nco" +
- "ntainers\030\002 \003(\01320.org.apache.slider.api.C" +
- "ontainerInformationProto\"3\n\034GetLiveConta",
- "inerRequestProto\022\023\n\013containerId\030\001 \002(\t\"\037\n" +
- "\035GetLiveComponentsRequestProto\"u\n\036GetLiv" +
- "eComponentsResponseProto\022\r\n\005names\030\001 \003(\t\022" +
- "D\n\ncomponents\030\002 \003(\01320.org.apache.slider." +
- "api.ComponentInformationProto\",\n\034GetLive" +
- "ComponentRequestProto\022\014\n\004name\030\001 \002(\t\"$\n\"G" +
- "etApplicationLivenessRequestProto\"\023\n\021Emp" +
- "tyPayloadProto\" \n\020WrappedJsonProto\022\014\n\004js" +
- "on\030\001 \002(\t\"h\n\037GetCertificateStoreRequestPr" +
- "oto\022\020\n\010hostname\030\001 \001(\t\022\023\n\013requesterId\030\002 \002",
- "(\t\022\020\n\010password\030\003 \002(\t\022\014\n\004type\030\004 \002(\t\"1\n Ge" +
- "tCertificateStoreResponseProto\022\r\n\005store\030" +
- "\001 \002(\014\"\032\n\030GetLiveNodesRequestProto\"W\n\031Get" +
- "LiveNodesResponseProto\022:\n\005nodes\030\001 \003(\0132+." +
- "org.apache.slider.api.NodeInformationPro" +
- "to\"\'\n\027GetLiveNodeRequestProto\022\014\n\004name\030\001 " +
- "\002(\tB-\n\033org.apache.slider.api.protoB\010Mess" +
- "ages\210\001\001\240\001\001"
+ "(\005\022\021\n\treleasing\030\t \002(\005\022\020\n\010lastUsed\030\n \002(\003\022" +
+ "\014\n\004name\030\013 \002(\t\"\334\001\n\024NodeInformationProto\022\020" +
+ "\n\010hostname\030\001 \002(\t\022\r\n\005state\030\002 \002(\t\022\023\n\013httpA" +
+ "ddress\030\003 \002(\t\022\020\n\010rackName\030\004 \002(\t\022\016\n\006labels" +
+ "\030\005 \002(\t\022\024\n\014healthReport\030\006 \002(\t\022\023\n\013lastUpda" +
+ "ted\030\007 \002(\003\022A\n\007entries\030\010 \003(\01320.org.apache." +
+ "slider.api.NodeEntryInformationProto\"\026\n\024",
+ "GetModelRequestProto\"\035\n\033GetModelDesiredR" +
+ "equestProto\"$\n\"GetModelDesiredAppconfReq" +
+ "uestProto\"&\n$GetModelDesiredResourcesReq" +
+ "uestProto\"%\n#GetModelResolvedAppconfRequ" +
+ "estProto\"\'\n%GetModelResolvedResourcesReq" +
+ "uestProto\"#\n!GetModelLiveResourcesReques" +
+ "tProto\"\037\n\035GetLiveContainersRequestProto\"" +
+ "u\n\036GetLiveContainersResponseProto\022\r\n\005nam" +
+ "es\030\001 \003(\t\022D\n\ncontainers\030\002 \003(\01320.org.apach" +
+ "e.slider.api.ContainerInformationProto\"3",
+ "\n\034GetLiveContainerRequestProto\022\023\n\013contai" +
+ "nerId\030\001 \002(\t\"\037\n\035GetLiveComponentsRequestP" +
+ "roto\"u\n\036GetLiveComponentsResponseProto\022\r" +
+ "\n\005names\030\001 \003(\t\022D\n\ncomponents\030\002 \003(\01320.org." +
+ "apache.slider.api.ComponentInformationPr" +
+ "oto\",\n\034GetLiveComponentRequestProto\022\014\n\004n" +
+ "ame\030\001 \002(\t\"$\n\"GetApplicationLivenessReque" +
+ "stProto\"\023\n\021EmptyPayloadProto\" \n\020WrappedJ" +
+ "sonProto\022\014\n\004json\030\001 \002(\t\"h\n\037GetCertificate" +
+ "StoreRequestProto\022\020\n\010hostname\030\001 \001(\t\022\023\n\013r",
+ "equesterId\030\002 \002(\t\022\020\n\010password\030\003 \002(\t\022\014\n\004ty" +
+ "pe\030\004 \002(\t\"1\n GetCertificateStoreResponseP" +
+ "roto\022\r\n\005store\030\001 \002(\014\"\032\n\030GetLiveNodesReque" +
+ "stProto\"W\n\031GetLiveNodesResponseProto\022:\n\005" +
+ "nodes\030\001 \003(\0132+.org.apache.slider.api.Node" +
+ "InformationProto\"\'\n\027GetLiveNodeRequestPr" +
+ "oto\022\014\n\004name\030\001 \002(\tB-\n\033org.apache.slider.a" +
+ "pi.protoB\010Messages\210\001\001\240\001\001"
};
com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner assigner =
new com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner() {
@@ -34154,7 +34327,7 @@ public final class Messages {
internal_static_org_apache_slider_api_NodeEntryInformationProto_fieldAccessorTable = new
com.google.protobuf.GeneratedMessage.FieldAccessorTable(
internal_static_org_apache_slider_api_NodeEntryInformationProto_descriptor,
- new java.lang.String[] { "Priority", "Requested", "Starting", "StartFailed", "Failed", "FailedRecently", "Preempted", "Live", "Releasing", "LastUsed", });
+ new java.lang.String[] { "Priority", "Requested", "Starting", "StartFailed", "Failed", "FailedRecently", "Preempted", "Live", "Releasing", "LastUsed", "Name", });
internal_static_org_apache_slider_api_NodeInformationProto_descriptor =
getDescriptor().getMessageTypes().get(28);
internal_static_org_apache_slider_api_NodeInformationProto_fieldAccessorTable = new
http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/77aeb253/slider-core/src/main/java/org/apache/slider/api/proto/RestTypeMarshalling.java
----------------------------------------------------------------------
diff --git a/slider-core/src/main/java/org/apache/slider/api/proto/RestTypeMarshalling.java b/slider-core/src/main/java/org/apache/slider/api/proto/RestTypeMarshalling.java
index 8dcf65f..feebe1d 100644
--- a/slider-core/src/main/java/org/apache/slider/api/proto/RestTypeMarshalling.java
+++ b/slider-core/src/main/java/org/apache/slider/api/proto/RestTypeMarshalling.java
@@ -41,6 +41,7 @@ import java.util.Arrays;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
+import java.util.Map;
/**
* Class to handle marshalling of REST
@@ -152,33 +153,25 @@ public class RestTypeMarshalling {
Messages.NodeInformationProto.newBuilder();
builder.setHostname(info.hostname);
builder.setLastUpdated(info.lastUpdated);
- if (info.state != null) {
- builder.setState(info.state);
- }
- if (info.rackName != null) {
- builder.setRackName(info.rackName);
- }
- if (info.healthReport != null) {
- builder.setHealthReport(info.healthReport);
- }
- if (info.httpAddress != null) {
- builder.setHttpAddress(info.httpAddress);
- }
- if (info.labels != null) {
- builder.setLabels(info.labels);
- }
+ builder.setState(info.state != null? info.state : "unknown");
+ builder.setRackName(info.rackName != null ? info.rackName : "");
+ builder.setHealthReport(info.healthReport != null ? info.healthReport : "");
+ builder.setHttpAddress(info.httpAddress != null ? info.httpAddress : "");
+ builder.setLabels(info.labels != null ? info.labels: "");
+
if (info.entries != null) {
- Collection<NodeEntryInformation> entries = info.entries.values();
- for (NodeEntryInformation entry : entries) {
+ for (Map.Entry<String, NodeEntryInformation> elt : info.entries.entrySet()) {
+ NodeEntryInformation entry = elt.getValue();
Messages.NodeEntryInformationProto.Builder node =
Messages.NodeEntryInformationProto.newBuilder();
+ node.setPriority(entry.priority);
+ node.setName(elt.getKey());
node.setFailed(entry.failed);
node.setFailedRecently(entry.failedRecently);
node.setLive(entry.live);
node.setLastUsed(entry.lastUsed);
node.setPreempted(entry.preempted);
- node.setPriority(entry.priority);
node.setRequested(entry.requested);
node.setReleasing(entry.releasing);
node.setStartFailed(entry.startFailed);
@@ -213,7 +206,7 @@ public class RestTypeMarshalling {
nei.releasing = entry.getReleasing();
nei.startFailed = entry.getStartFailed();
nei.starting = entry.getStarting();
- info.entries.put(Integer.toString(nei.priority), nei);
+ info.entries.put(entry.getName(), nei);
}
}
return info;
http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/77aeb253/slider-core/src/main/java/org/apache/slider/server/appmaster/state/AppState.java
----------------------------------------------------------------------
diff --git a/slider-core/src/main/java/org/apache/slider/server/appmaster/state/AppState.java b/slider-core/src/main/java/org/apache/slider/server/appmaster/state/AppState.java
index 171cc42..4b4d7a7 100644
--- a/slider-core/src/main/java/org/apache/slider/server/appmaster/state/AppState.java
+++ b/slider-core/src/main/java/org/apache/slider/server/appmaster/state/AppState.java
@@ -2390,4 +2390,16 @@ public class AppState {
return sb.toString();
}
+ /**
+ * Build map of role ID-> name
+ * @return
+ */
+ public Map<Integer, String> buildNamingMap() {
+ Map<Integer, RoleStatus> statusMap = getRoleStatusMap();
+ Map<Integer, String> naming = new HashMap<>(statusMap.size());
+ for (Map.Entry<Integer, RoleStatus> entry : statusMap.entrySet()) {
+ naming.put(entry.getKey(), entry.getValue().getName());
+ }
+ return naming;
+ }
}
http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/77aeb253/slider-core/src/main/java/org/apache/slider/server/appmaster/state/ProviderAppState.java
----------------------------------------------------------------------
diff --git a/slider-core/src/main/java/org/apache/slider/server/appmaster/state/ProviderAppState.java b/slider-core/src/main/java/org/apache/slider/server/appmaster/state/ProviderAppState.java
index f544c6a..c409114 100644
--- a/slider-core/src/main/java/org/apache/slider/server/appmaster/state/ProviderAppState.java
+++ b/slider-core/src/main/java/org/apache/slider/server/appmaster/state/ProviderAppState.java
@@ -37,7 +37,6 @@ import org.apache.slider.server.services.utility.PatternValidator;
import java.util.ArrayList;
import java.util.Collection;
-import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
@@ -293,22 +292,13 @@ public class ProviderAppState implements StateAccessForProviders {
@Override
public Map<String, NodeInformation> getNodeInformationSnapshot() {
return appState.getRoleHistory()
- .getNodeInformationSnapshot(buildingNamingMap());
- }
-
- private Map<Integer, String> buildingNamingMap() {
- Map<Integer, RoleStatus> statusMap = getRoleStatusMap();
- Map<Integer, String> naming = new HashMap<>(statusMap.size());
- for (Map.Entry<Integer, RoleStatus> entry : statusMap.entrySet()) {
- naming.put(entry.getKey(), entry.getValue().getName());
- }
- return naming;
+ .getNodeInformationSnapshot(appState.buildNamingMap());
}
@Override
public NodeInformation getNodeInformation(String hostname) {
- return appState.getRoleHistory().getNodeInformation(hostname,
- buildingNamingMap());
+ return appState.getRoleHistory()
+ .getNodeInformation(hostname, appState.buildNamingMap());
}
@Override
http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/77aeb253/slider-core/src/main/proto/SliderClusterMessages.proto
----------------------------------------------------------------------
diff --git a/slider-core/src/main/proto/SliderClusterMessages.proto b/slider-core/src/main/proto/SliderClusterMessages.proto
index 9a4265c..b8bdc59 100644
--- a/slider-core/src/main/proto/SliderClusterMessages.proto
+++ b/slider-core/src/main/proto/SliderClusterMessages.proto
@@ -299,6 +299,7 @@ message NodeEntryInformationProto {
required int32 live = 8;
required int32 releasing = 9;
required int64 lastUsed = 10;
+ required string name = 11;
}
message NodeInformationProto {
http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/77aeb253/slider-core/src/test/groovy/org/apache/slider/server/appmaster/model/appstate/TestMockAppStateAAPlacement.groovy
----------------------------------------------------------------------
diff --git a/slider-core/src/test/groovy/org/apache/slider/server/appmaster/model/appstate/TestMockAppStateAAPlacement.groovy b/slider-core/src/test/groovy/org/apache/slider/server/appmaster/model/appstate/TestMockAppStateAAPlacement.groovy
index f911515..16d0f87 100644
--- a/slider-core/src/test/groovy/org/apache/slider/server/appmaster/model/appstate/TestMockAppStateAAPlacement.groovy
+++ b/slider-core/src/test/groovy/org/apache/slider/server/appmaster/model/appstate/TestMockAppStateAAPlacement.groovy
@@ -24,6 +24,7 @@ import org.apache.hadoop.yarn.api.records.Container
import org.apache.hadoop.yarn.api.records.NodeState
import org.apache.hadoop.yarn.client.api.AMRMClient
import org.apache.slider.api.ResourceKeys
+import org.apache.slider.api.types.NodeInformationList
import org.apache.slider.core.conf.ConfTreeOperations
import org.apache.slider.providers.PlacementPolicy
import org.apache.slider.server.appmaster.model.mock.MockAppState
@@ -310,4 +311,21 @@ class TestMockAppStateAAPlacement extends BaseMockAppStateAATest
assert aaRole.antiAffinePlacement
assert aaRole.AARequestOutstanding
}
+
+ @Test
+ public void testNodeInstanceSerialization() throws Throwable {
+ def naming = appState.buildNamingMap()
+ assert naming.size() == 3
+
+ def name = aaRole.name
+ assert naming[aaRole.key] == name
+ def info = appState.roleHistory.getNodeInformationSnapshot(naming);
+ assert info
+
+ def host = "localhost"
+ assert info[host] && info[host]?.entries[name]?.live
+ def nil = new NodeInformationList(info.values());
+ assert nil[0].entries[name]?.live
+ }
+
}
http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/77aeb253/slider-core/src/test/groovy/org/apache/slider/server/appmaster/model/history/TestRoleHistoryAA.groovy
----------------------------------------------------------------------
diff --git a/slider-core/src/test/groovy/org/apache/slider/server/appmaster/model/history/TestRoleHistoryAA.groovy b/slider-core/src/test/groovy/org/apache/slider/server/appmaster/model/history/TestRoleHistoryAA.groovy
index bf8d1b4..db84b0b 100644
--- a/slider-core/src/test/groovy/org/apache/slider/server/appmaster/model/history/TestRoleHistoryAA.groovy
+++ b/slider-core/src/test/groovy/org/apache/slider/server/appmaster/model/history/TestRoleHistoryAA.groovy
@@ -21,6 +21,10 @@ package org.apache.slider.server.appmaster.model.history
import groovy.util.logging.Slf4j
import org.apache.hadoop.yarn.api.records.NodeReport
import org.apache.hadoop.yarn.api.records.NodeState
+import org.apache.slider.api.proto.Messages
+import org.apache.slider.api.proto.RestTypeMarshalling
+import org.apache.slider.api.types.NodeInformation
+import org.apache.slider.api.types.NodeInformationList
import org.apache.slider.server.appmaster.model.mock.MockFactory
import org.apache.slider.server.appmaster.model.mock.MockNodeReport
import org.apache.slider.server.appmaster.model.mock.MockRoleHistory
@@ -184,6 +188,35 @@ class TestRoleHistoryAA extends SliderTestBase {
assert entry.available
}
+ @Test
+ public void testNodeInstanceSerialization() throws Throwable {
+ def rh2 = new MockRoleHistory([])
+ rh2.getOrCreateNodeInstance("localhost")
+ def instance = rh2.getOrCreateNodeInstance("localhost")
+ instance.getOrCreate(1).onStartCompleted()
+ def Map<Integer, String> naming = [(1):"manager"]
+ def ni = instance.serialize(naming)
+ assert 1 == ni.entries["manager"].live
+ def ni2 = rh2.getNodeInformation("localhost", naming)
+ assert 1 == ni2.entries["manager"].live
+ def info = rh2.getNodeInformationSnapshot(naming)
+ assert 1 == info["localhost"].entries["manager"].live
+ def nil = new NodeInformationList(info.values());
+ assert 1 == nil[0].entries["manager"].live
+
+ def nodeInformationProto = RestTypeMarshalling.marshall(ni)
+ def entryProto = nodeInformationProto.getEntries(0)
+ assert entryProto && entryProto.getPriority() == 1
+ def unmarshalled = RestTypeMarshalling.unmarshall(nodeInformationProto)
+ assert unmarshalled.hostname == ni.hostname
+ assert unmarshalled.entries.keySet().containsAll(ni.entries.keySet())
+
+ }
+
+ @Test
+ public void testBuildRolenames() throws Throwable {
+
+ }
public List<NodeInstance> assertNoAvailableNodes(int role = 1, String label = "") {
return verifyResultSize(0, nodeMap.findAllNodesForRole(role, label))
}