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 <[email protected]> Authored: Sun Nov 22 17:35:13 2015 +0000 Committer: Steve Loughran <[email protected]> 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)) }
