http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/3aeab9ca/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 7425c2d..115405c 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 @@ -23,6 +23,8 @@ import org.apache.commons.io.IOUtils; import org.apache.slider.api.types.ApplicationLivenessInformation; import org.apache.slider.api.types.ComponentInformation; import org.apache.slider.api.types.ContainerInformation; +import org.apache.slider.api.types.NodeEntryInformation; +import org.apache.slider.api.types.NodeInformation; import org.apache.slider.core.conf.AggregateConf; import org.apache.slider.core.conf.ConfTree; import org.apache.slider.core.conf.ConfTreeOperations; @@ -137,6 +139,79 @@ public class RestTypeMarshalling { return builder.build(); } + public static Messages.NodeInformationProto marshall(NodeInformation info) { + + Messages.NodeInformationProto.Builder builder = + 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); + } + + List<NodeEntryInformation> entries = info.entries; + if (entries != null) { + for (NodeEntryInformation entry : entries) { + Messages.NodeEntryInformationProto.Builder node = + Messages.NodeEntryInformationProto.newBuilder(); + 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); + node.setStarting(entry.starting); + builder.addEntries(node.build()); + } + } + return builder.build(); + } + + public static NodeInformation unmarshall(Messages.NodeInformationProto wire) { + NodeInformation info = new NodeInformation(); + info.healthReport = wire.getHealthReport(); + info.hostname = wire.getHostname(); + info.httpAddress = wire.getHttpAddress(); + info.labels = wire.getLabels(); + info.lastUpdated = wire.getLastUpdated(); + info.rackName = wire.getRackName(); + info.state = wire.getState(); + List<Messages.NodeEntryInformationProto> entriesList = wire.getEntriesList(); + if (entriesList != null) { + info.entries = new ArrayList<>(entriesList.size()); + for (Messages.NodeEntryInformationProto entry : entriesList) { + NodeEntryInformation nei = new NodeEntryInformation(); + nei.failed = entry.getFailed(); + nei.failedRecently = entry.getFailedRecently(); + nei.lastUsed = entry.getLastUsed(); + nei.live = entry.getLive(); + nei.preempted = entry.getPreempted(); + nei.priority = entry.getPriority(); + nei.requested = entry.getRequested(); + nei.releasing = entry.getReleasing(); + nei.startFailed = entry.getStartFailed(); + nei.starting = entry.getStarting(); + info.entries.add(nei); + } + } + return info; + } + public static ContainerInformation unmarshall(Messages.ContainerInformationProto wire) { ContainerInformation info = new ContainerInformation(); info.containerId = wire.getContainerId(); @@ -169,19 +244,15 @@ public class RestTypeMarshalling { return info; } - public static List<ContainerInformation> unmarshall( - Messages.GetLiveContainersResponseProto wire) { - List<ContainerInformation> infoList = new ArrayList<ContainerInformation>( - wire.getContainersList().size()); - for (Messages.ContainerInformationProto container : wire - .getContainersList()) { + public static List<ContainerInformation> unmarshall(Messages.GetLiveContainersResponseProto wire) { + List<ContainerInformation> infoList = new ArrayList<>(wire.getContainersList().size()); + for (Messages.ContainerInformationProto container : wire.getContainersList()) { infoList.add(unmarshall(container)); } return infoList; } - public static Messages.ContainerInformationProto - marshall(ContainerInformation info) { + public static Messages.ContainerInformationProto marshall(ContainerInformation info) { Messages.ContainerInformationProto.Builder builder = Messages.ContainerInformationProto.newBuilder(); @@ -218,8 +289,7 @@ public class RestTypeMarshalling { return builder.build(); } - public static String - unmarshall(Messages.WrappedJsonProto wire) { + public static String unmarshall(Messages.WrappedJsonProto wire) { return wire.getJson(); }
http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/3aeab9ca/slider-core/src/main/java/org/apache/slider/api/proto/SliderClusterAPI.java ---------------------------------------------------------------------- diff --git a/slider-core/src/main/java/org/apache/slider/api/proto/SliderClusterAPI.java b/slider-core/src/main/java/org/apache/slider/api/proto/SliderClusterAPI.java index 702c762..081b7fa 100644 --- a/slider-core/src/main/java/org/apache/slider/api/proto/SliderClusterAPI.java +++ b/slider-core/src/main/java/org/apache/slider/api/proto/SliderClusterAPI.java @@ -203,6 +203,22 @@ public final class SliderClusterAPI { com.google.protobuf.RpcCallback<org.apache.slider.api.proto.Messages.ComponentInformationProto> done); /** + * <code>rpc getLiveNodes(.org.apache.slider.api.GetLiveNodesRequestProto) returns (.org.apache.slider.api.GetLiveNodesResponseProto);</code> + */ + public abstract void getLiveNodes( + com.google.protobuf.RpcController controller, + org.apache.slider.api.proto.Messages.GetLiveNodesRequestProto request, + com.google.protobuf.RpcCallback<org.apache.slider.api.proto.Messages.GetLiveNodesResponseProto> done); + + /** + * <code>rpc getLiveNode(.org.apache.slider.api.GetLiveNodeRequestProto) returns (.org.apache.slider.api.NodeInformationProto);</code> + */ + public abstract void getLiveNode( + com.google.protobuf.RpcController controller, + org.apache.slider.api.proto.Messages.GetLiveNodeRequestProto request, + com.google.protobuf.RpcCallback<org.apache.slider.api.proto.Messages.NodeInformationProto> done); + + /** * <code>rpc getModelDesired(.org.apache.slider.api.EmptyPayloadProto) returns (.org.apache.slider.api.WrappedJsonProto);</code> * * <pre> @@ -428,6 +444,22 @@ public final class SliderClusterAPI { } @java.lang.Override + public void getLiveNodes( + com.google.protobuf.RpcController controller, + org.apache.slider.api.proto.Messages.GetLiveNodesRequestProto request, + com.google.protobuf.RpcCallback<org.apache.slider.api.proto.Messages.GetLiveNodesResponseProto> done) { + impl.getLiveNodes(controller, request, done); + } + + @java.lang.Override + public void getLiveNode( + com.google.protobuf.RpcController controller, + org.apache.slider.api.proto.Messages.GetLiveNodeRequestProto request, + com.google.protobuf.RpcCallback<org.apache.slider.api.proto.Messages.NodeInformationProto> done) { + impl.getLiveNode(controller, request, done); + } + + @java.lang.Override public void getModelDesired( com.google.protobuf.RpcController controller, org.apache.slider.api.proto.Messages.EmptyPayloadProto request, @@ -546,20 +578,24 @@ public final class SliderClusterAPI { case 15: return impl.getLiveComponent(controller, (org.apache.slider.api.proto.Messages.GetLiveComponentRequestProto)request); case 16: - return impl.getModelDesired(controller, (org.apache.slider.api.proto.Messages.EmptyPayloadProto)request); + return impl.getLiveNodes(controller, (org.apache.slider.api.proto.Messages.GetLiveNodesRequestProto)request); case 17: - return impl.getModelDesiredAppconf(controller, (org.apache.slider.api.proto.Messages.EmptyPayloadProto)request); + return impl.getLiveNode(controller, (org.apache.slider.api.proto.Messages.GetLiveNodeRequestProto)request); case 18: - return impl.getModelDesiredResources(controller, (org.apache.slider.api.proto.Messages.EmptyPayloadProto)request); + return impl.getModelDesired(controller, (org.apache.slider.api.proto.Messages.EmptyPayloadProto)request); case 19: - return impl.getModelResolved(controller, (org.apache.slider.api.proto.Messages.EmptyPayloadProto)request); + return impl.getModelDesiredAppconf(controller, (org.apache.slider.api.proto.Messages.EmptyPayloadProto)request); case 20: - return impl.getModelResolvedAppconf(controller, (org.apache.slider.api.proto.Messages.EmptyPayloadProto)request); + return impl.getModelDesiredResources(controller, (org.apache.slider.api.proto.Messages.EmptyPayloadProto)request); case 21: - return impl.getModelResolvedResources(controller, (org.apache.slider.api.proto.Messages.EmptyPayloadProto)request); + return impl.getModelResolved(controller, (org.apache.slider.api.proto.Messages.EmptyPayloadProto)request); case 22: - return impl.getLiveResources(controller, (org.apache.slider.api.proto.Messages.EmptyPayloadProto)request); + return impl.getModelResolvedAppconf(controller, (org.apache.slider.api.proto.Messages.EmptyPayloadProto)request); case 23: + return impl.getModelResolvedResources(controller, (org.apache.slider.api.proto.Messages.EmptyPayloadProto)request); + case 24: + return impl.getLiveResources(controller, (org.apache.slider.api.proto.Messages.EmptyPayloadProto)request); + case 25: return impl.getClientCertificateStore(controller, (org.apache.slider.api.proto.Messages.GetCertificateStoreRequestProto)request); default: throw new java.lang.AssertionError("Can't get here."); @@ -608,9 +644,9 @@ public final class SliderClusterAPI { case 15: return org.apache.slider.api.proto.Messages.GetLiveComponentRequestProto.getDefaultInstance(); case 16: - return org.apache.slider.api.proto.Messages.EmptyPayloadProto.getDefaultInstance(); + return org.apache.slider.api.proto.Messages.GetLiveNodesRequestProto.getDefaultInstance(); case 17: - return org.apache.slider.api.proto.Messages.EmptyPayloadProto.getDefaultInstance(); + return org.apache.slider.api.proto.Messages.GetLiveNodeRequestProto.getDefaultInstance(); case 18: return org.apache.slider.api.proto.Messages.EmptyPayloadProto.getDefaultInstance(); case 19: @@ -622,6 +658,10 @@ public final class SliderClusterAPI { case 22: return org.apache.slider.api.proto.Messages.EmptyPayloadProto.getDefaultInstance(); case 23: + return org.apache.slider.api.proto.Messages.EmptyPayloadProto.getDefaultInstance(); + case 24: + return org.apache.slider.api.proto.Messages.EmptyPayloadProto.getDefaultInstance(); + case 25: return org.apache.slider.api.proto.Messages.GetCertificateStoreRequestProto.getDefaultInstance(); default: throw new java.lang.AssertionError("Can't get here."); @@ -670,9 +710,9 @@ public final class SliderClusterAPI { case 15: return org.apache.slider.api.proto.Messages.ComponentInformationProto.getDefaultInstance(); case 16: - return org.apache.slider.api.proto.Messages.WrappedJsonProto.getDefaultInstance(); + return org.apache.slider.api.proto.Messages.GetLiveNodesResponseProto.getDefaultInstance(); case 17: - return org.apache.slider.api.proto.Messages.WrappedJsonProto.getDefaultInstance(); + return org.apache.slider.api.proto.Messages.NodeInformationProto.getDefaultInstance(); case 18: return org.apache.slider.api.proto.Messages.WrappedJsonProto.getDefaultInstance(); case 19: @@ -684,6 +724,10 @@ public final class SliderClusterAPI { case 22: return org.apache.slider.api.proto.Messages.WrappedJsonProto.getDefaultInstance(); case 23: + return org.apache.slider.api.proto.Messages.WrappedJsonProto.getDefaultInstance(); + case 24: + return org.apache.slider.api.proto.Messages.WrappedJsonProto.getDefaultInstance(); + case 25: return org.apache.slider.api.proto.Messages.GetCertificateStoreResponseProto.getDefaultInstance(); default: throw new java.lang.AssertionError("Can't get here."); @@ -875,6 +919,22 @@ public final class SliderClusterAPI { com.google.protobuf.RpcCallback<org.apache.slider.api.proto.Messages.ComponentInformationProto> done); /** + * <code>rpc getLiveNodes(.org.apache.slider.api.GetLiveNodesRequestProto) returns (.org.apache.slider.api.GetLiveNodesResponseProto);</code> + */ + public abstract void getLiveNodes( + com.google.protobuf.RpcController controller, + org.apache.slider.api.proto.Messages.GetLiveNodesRequestProto request, + com.google.protobuf.RpcCallback<org.apache.slider.api.proto.Messages.GetLiveNodesResponseProto> done); + + /** + * <code>rpc getLiveNode(.org.apache.slider.api.GetLiveNodeRequestProto) returns (.org.apache.slider.api.NodeInformationProto);</code> + */ + public abstract void getLiveNode( + com.google.protobuf.RpcController controller, + org.apache.slider.api.proto.Messages.GetLiveNodeRequestProto request, + com.google.protobuf.RpcCallback<org.apache.slider.api.proto.Messages.NodeInformationProto> done); + + /** * <code>rpc getModelDesired(.org.apache.slider.api.EmptyPayloadProto) returns (.org.apache.slider.api.WrappedJsonProto);</code> * * <pre> @@ -1069,41 +1129,51 @@ public final class SliderClusterAPI { done)); return; case 16: + this.getLiveNodes(controller, (org.apache.slider.api.proto.Messages.GetLiveNodesRequestProto)request, + com.google.protobuf.RpcUtil.<org.apache.slider.api.proto.Messages.GetLiveNodesResponseProto>specializeCallback( + done)); + return; + case 17: + this.getLiveNode(controller, (org.apache.slider.api.proto.Messages.GetLiveNodeRequestProto)request, + com.google.protobuf.RpcUtil.<org.apache.slider.api.proto.Messages.NodeInformationProto>specializeCallback( + done)); + return; + case 18: this.getModelDesired(controller, (org.apache.slider.api.proto.Messages.EmptyPayloadProto)request, com.google.protobuf.RpcUtil.<org.apache.slider.api.proto.Messages.WrappedJsonProto>specializeCallback( done)); return; - case 17: + case 19: this.getModelDesiredAppconf(controller, (org.apache.slider.api.proto.Messages.EmptyPayloadProto)request, com.google.protobuf.RpcUtil.<org.apache.slider.api.proto.Messages.WrappedJsonProto>specializeCallback( done)); return; - case 18: + case 20: this.getModelDesiredResources(controller, (org.apache.slider.api.proto.Messages.EmptyPayloadProto)request, com.google.protobuf.RpcUtil.<org.apache.slider.api.proto.Messages.WrappedJsonProto>specializeCallback( done)); return; - case 19: + case 21: this.getModelResolved(controller, (org.apache.slider.api.proto.Messages.EmptyPayloadProto)request, com.google.protobuf.RpcUtil.<org.apache.slider.api.proto.Messages.WrappedJsonProto>specializeCallback( done)); return; - case 20: + case 22: this.getModelResolvedAppconf(controller, (org.apache.slider.api.proto.Messages.EmptyPayloadProto)request, com.google.protobuf.RpcUtil.<org.apache.slider.api.proto.Messages.WrappedJsonProto>specializeCallback( done)); return; - case 21: + case 23: this.getModelResolvedResources(controller, (org.apache.slider.api.proto.Messages.EmptyPayloadProto)request, com.google.protobuf.RpcUtil.<org.apache.slider.api.proto.Messages.WrappedJsonProto>specializeCallback( done)); return; - case 22: + case 24: this.getLiveResources(controller, (org.apache.slider.api.proto.Messages.EmptyPayloadProto)request, com.google.protobuf.RpcUtil.<org.apache.slider.api.proto.Messages.WrappedJsonProto>specializeCallback( done)); return; - case 23: + case 25: this.getClientCertificateStore(controller, (org.apache.slider.api.proto.Messages.GetCertificateStoreRequestProto)request, com.google.protobuf.RpcUtil.<org.apache.slider.api.proto.Messages.GetCertificateStoreResponseProto>specializeCallback( done)); @@ -1155,9 +1225,9 @@ public final class SliderClusterAPI { case 15: return org.apache.slider.api.proto.Messages.GetLiveComponentRequestProto.getDefaultInstance(); case 16: - return org.apache.slider.api.proto.Messages.EmptyPayloadProto.getDefaultInstance(); + return org.apache.slider.api.proto.Messages.GetLiveNodesRequestProto.getDefaultInstance(); case 17: - return org.apache.slider.api.proto.Messages.EmptyPayloadProto.getDefaultInstance(); + return org.apache.slider.api.proto.Messages.GetLiveNodeRequestProto.getDefaultInstance(); case 18: return org.apache.slider.api.proto.Messages.EmptyPayloadProto.getDefaultInstance(); case 19: @@ -1169,6 +1239,10 @@ public final class SliderClusterAPI { case 22: return org.apache.slider.api.proto.Messages.EmptyPayloadProto.getDefaultInstance(); case 23: + return org.apache.slider.api.proto.Messages.EmptyPayloadProto.getDefaultInstance(); + case 24: + return org.apache.slider.api.proto.Messages.EmptyPayloadProto.getDefaultInstance(); + case 25: return org.apache.slider.api.proto.Messages.GetCertificateStoreRequestProto.getDefaultInstance(); default: throw new java.lang.AssertionError("Can't get here."); @@ -1217,9 +1291,9 @@ public final class SliderClusterAPI { case 15: return org.apache.slider.api.proto.Messages.ComponentInformationProto.getDefaultInstance(); case 16: - return org.apache.slider.api.proto.Messages.WrappedJsonProto.getDefaultInstance(); + return org.apache.slider.api.proto.Messages.GetLiveNodesResponseProto.getDefaultInstance(); case 17: - return org.apache.slider.api.proto.Messages.WrappedJsonProto.getDefaultInstance(); + return org.apache.slider.api.proto.Messages.NodeInformationProto.getDefaultInstance(); case 18: return org.apache.slider.api.proto.Messages.WrappedJsonProto.getDefaultInstance(); case 19: @@ -1231,6 +1305,10 @@ public final class SliderClusterAPI { case 22: return org.apache.slider.api.proto.Messages.WrappedJsonProto.getDefaultInstance(); case 23: + return org.apache.slider.api.proto.Messages.WrappedJsonProto.getDefaultInstance(); + case 24: + return org.apache.slider.api.proto.Messages.WrappedJsonProto.getDefaultInstance(); + case 25: return org.apache.slider.api.proto.Messages.GetCertificateStoreResponseProto.getDefaultInstance(); default: throw new java.lang.AssertionError("Can't get here."); @@ -1493,12 +1571,42 @@ public final class SliderClusterAPI { org.apache.slider.api.proto.Messages.ComponentInformationProto.getDefaultInstance())); } + public void getLiveNodes( + com.google.protobuf.RpcController controller, + org.apache.slider.api.proto.Messages.GetLiveNodesRequestProto request, + com.google.protobuf.RpcCallback<org.apache.slider.api.proto.Messages.GetLiveNodesResponseProto> done) { + channel.callMethod( + getDescriptor().getMethods().get(16), + controller, + request, + org.apache.slider.api.proto.Messages.GetLiveNodesResponseProto.getDefaultInstance(), + com.google.protobuf.RpcUtil.generalizeCallback( + done, + org.apache.slider.api.proto.Messages.GetLiveNodesResponseProto.class, + org.apache.slider.api.proto.Messages.GetLiveNodesResponseProto.getDefaultInstance())); + } + + public void getLiveNode( + com.google.protobuf.RpcController controller, + org.apache.slider.api.proto.Messages.GetLiveNodeRequestProto request, + com.google.protobuf.RpcCallback<org.apache.slider.api.proto.Messages.NodeInformationProto> done) { + channel.callMethod( + getDescriptor().getMethods().get(17), + controller, + request, + org.apache.slider.api.proto.Messages.NodeInformationProto.getDefaultInstance(), + com.google.protobuf.RpcUtil.generalizeCallback( + done, + org.apache.slider.api.proto.Messages.NodeInformationProto.class, + org.apache.slider.api.proto.Messages.NodeInformationProto.getDefaultInstance())); + } + public void getModelDesired( com.google.protobuf.RpcController controller, org.apache.slider.api.proto.Messages.EmptyPayloadProto request, com.google.protobuf.RpcCallback<org.apache.slider.api.proto.Messages.WrappedJsonProto> done) { channel.callMethod( - getDescriptor().getMethods().get(16), + getDescriptor().getMethods().get(18), controller, request, org.apache.slider.api.proto.Messages.WrappedJsonProto.getDefaultInstance(), @@ -1513,7 +1621,7 @@ public final class SliderClusterAPI { org.apache.slider.api.proto.Messages.EmptyPayloadProto request, com.google.protobuf.RpcCallback<org.apache.slider.api.proto.Messages.WrappedJsonProto> done) { channel.callMethod( - getDescriptor().getMethods().get(17), + getDescriptor().getMethods().get(19), controller, request, org.apache.slider.api.proto.Messages.WrappedJsonProto.getDefaultInstance(), @@ -1528,7 +1636,7 @@ public final class SliderClusterAPI { org.apache.slider.api.proto.Messages.EmptyPayloadProto request, com.google.protobuf.RpcCallback<org.apache.slider.api.proto.Messages.WrappedJsonProto> done) { channel.callMethod( - getDescriptor().getMethods().get(18), + getDescriptor().getMethods().get(20), controller, request, org.apache.slider.api.proto.Messages.WrappedJsonProto.getDefaultInstance(), @@ -1543,7 +1651,7 @@ public final class SliderClusterAPI { org.apache.slider.api.proto.Messages.EmptyPayloadProto request, com.google.protobuf.RpcCallback<org.apache.slider.api.proto.Messages.WrappedJsonProto> done) { channel.callMethod( - getDescriptor().getMethods().get(19), + getDescriptor().getMethods().get(21), controller, request, org.apache.slider.api.proto.Messages.WrappedJsonProto.getDefaultInstance(), @@ -1558,7 +1666,7 @@ public final class SliderClusterAPI { org.apache.slider.api.proto.Messages.EmptyPayloadProto request, com.google.protobuf.RpcCallback<org.apache.slider.api.proto.Messages.WrappedJsonProto> done) { channel.callMethod( - getDescriptor().getMethods().get(20), + getDescriptor().getMethods().get(22), controller, request, org.apache.slider.api.proto.Messages.WrappedJsonProto.getDefaultInstance(), @@ -1573,7 +1681,7 @@ public final class SliderClusterAPI { org.apache.slider.api.proto.Messages.EmptyPayloadProto request, com.google.protobuf.RpcCallback<org.apache.slider.api.proto.Messages.WrappedJsonProto> done) { channel.callMethod( - getDescriptor().getMethods().get(21), + getDescriptor().getMethods().get(23), controller, request, org.apache.slider.api.proto.Messages.WrappedJsonProto.getDefaultInstance(), @@ -1588,7 +1696,7 @@ public final class SliderClusterAPI { org.apache.slider.api.proto.Messages.EmptyPayloadProto request, com.google.protobuf.RpcCallback<org.apache.slider.api.proto.Messages.WrappedJsonProto> done) { channel.callMethod( - getDescriptor().getMethods().get(22), + getDescriptor().getMethods().get(24), controller, request, org.apache.slider.api.proto.Messages.WrappedJsonProto.getDefaultInstance(), @@ -1603,7 +1711,7 @@ public final class SliderClusterAPI { org.apache.slider.api.proto.Messages.GetCertificateStoreRequestProto request, com.google.protobuf.RpcCallback<org.apache.slider.api.proto.Messages.GetCertificateStoreResponseProto> done) { channel.callMethod( - getDescriptor().getMethods().get(23), + getDescriptor().getMethods().get(25), controller, request, org.apache.slider.api.proto.Messages.GetCertificateStoreResponseProto.getDefaultInstance(), @@ -1700,6 +1808,16 @@ public final class SliderClusterAPI { org.apache.slider.api.proto.Messages.GetLiveComponentRequestProto request) throws com.google.protobuf.ServiceException; + public org.apache.slider.api.proto.Messages.GetLiveNodesResponseProto getLiveNodes( + com.google.protobuf.RpcController controller, + org.apache.slider.api.proto.Messages.GetLiveNodesRequestProto request) + throws com.google.protobuf.ServiceException; + + public org.apache.slider.api.proto.Messages.NodeInformationProto getLiveNode( + com.google.protobuf.RpcController controller, + org.apache.slider.api.proto.Messages.GetLiveNodeRequestProto request) + throws com.google.protobuf.ServiceException; + public org.apache.slider.api.proto.Messages.WrappedJsonProto getModelDesired( com.google.protobuf.RpcController controller, org.apache.slider.api.proto.Messages.EmptyPayloadProto request) @@ -1940,12 +2058,36 @@ public final class SliderClusterAPI { } + public org.apache.slider.api.proto.Messages.GetLiveNodesResponseProto getLiveNodes( + com.google.protobuf.RpcController controller, + org.apache.slider.api.proto.Messages.GetLiveNodesRequestProto request) + throws com.google.protobuf.ServiceException { + return (org.apache.slider.api.proto.Messages.GetLiveNodesResponseProto) channel.callBlockingMethod( + getDescriptor().getMethods().get(16), + controller, + request, + org.apache.slider.api.proto.Messages.GetLiveNodesResponseProto.getDefaultInstance()); + } + + + public org.apache.slider.api.proto.Messages.NodeInformationProto getLiveNode( + com.google.protobuf.RpcController controller, + org.apache.slider.api.proto.Messages.GetLiveNodeRequestProto request) + throws com.google.protobuf.ServiceException { + return (org.apache.slider.api.proto.Messages.NodeInformationProto) channel.callBlockingMethod( + getDescriptor().getMethods().get(17), + controller, + request, + org.apache.slider.api.proto.Messages.NodeInformationProto.getDefaultInstance()); + } + + public org.apache.slider.api.proto.Messages.WrappedJsonProto getModelDesired( com.google.protobuf.RpcController controller, org.apache.slider.api.proto.Messages.EmptyPayloadProto request) throws com.google.protobuf.ServiceException { return (org.apache.slider.api.proto.Messages.WrappedJsonProto) channel.callBlockingMethod( - getDescriptor().getMethods().get(16), + getDescriptor().getMethods().get(18), controller, request, org.apache.slider.api.proto.Messages.WrappedJsonProto.getDefaultInstance()); @@ -1957,7 +2099,7 @@ public final class SliderClusterAPI { org.apache.slider.api.proto.Messages.EmptyPayloadProto request) throws com.google.protobuf.ServiceException { return (org.apache.slider.api.proto.Messages.WrappedJsonProto) channel.callBlockingMethod( - getDescriptor().getMethods().get(17), + getDescriptor().getMethods().get(19), controller, request, org.apache.slider.api.proto.Messages.WrappedJsonProto.getDefaultInstance()); @@ -1969,7 +2111,7 @@ public final class SliderClusterAPI { org.apache.slider.api.proto.Messages.EmptyPayloadProto request) throws com.google.protobuf.ServiceException { return (org.apache.slider.api.proto.Messages.WrappedJsonProto) channel.callBlockingMethod( - getDescriptor().getMethods().get(18), + getDescriptor().getMethods().get(20), controller, request, org.apache.slider.api.proto.Messages.WrappedJsonProto.getDefaultInstance()); @@ -1981,7 +2123,7 @@ public final class SliderClusterAPI { org.apache.slider.api.proto.Messages.EmptyPayloadProto request) throws com.google.protobuf.ServiceException { return (org.apache.slider.api.proto.Messages.WrappedJsonProto) channel.callBlockingMethod( - getDescriptor().getMethods().get(19), + getDescriptor().getMethods().get(21), controller, request, org.apache.slider.api.proto.Messages.WrappedJsonProto.getDefaultInstance()); @@ -1993,7 +2135,7 @@ public final class SliderClusterAPI { org.apache.slider.api.proto.Messages.EmptyPayloadProto request) throws com.google.protobuf.ServiceException { return (org.apache.slider.api.proto.Messages.WrappedJsonProto) channel.callBlockingMethod( - getDescriptor().getMethods().get(20), + getDescriptor().getMethods().get(22), controller, request, org.apache.slider.api.proto.Messages.WrappedJsonProto.getDefaultInstance()); @@ -2005,7 +2147,7 @@ public final class SliderClusterAPI { org.apache.slider.api.proto.Messages.EmptyPayloadProto request) throws com.google.protobuf.ServiceException { return (org.apache.slider.api.proto.Messages.WrappedJsonProto) channel.callBlockingMethod( - getDescriptor().getMethods().get(21), + getDescriptor().getMethods().get(23), controller, request, org.apache.slider.api.proto.Messages.WrappedJsonProto.getDefaultInstance()); @@ -2017,7 +2159,7 @@ public final class SliderClusterAPI { org.apache.slider.api.proto.Messages.EmptyPayloadProto request) throws com.google.protobuf.ServiceException { return (org.apache.slider.api.proto.Messages.WrappedJsonProto) channel.callBlockingMethod( - getDescriptor().getMethods().get(22), + getDescriptor().getMethods().get(24), controller, request, org.apache.slider.api.proto.Messages.WrappedJsonProto.getDefaultInstance()); @@ -2029,7 +2171,7 @@ public final class SliderClusterAPI { org.apache.slider.api.proto.Messages.GetCertificateStoreRequestProto request) throws com.google.protobuf.ServiceException { return (org.apache.slider.api.proto.Messages.GetCertificateStoreResponseProto) channel.callBlockingMethod( - getDescriptor().getMethods().get(23), + getDescriptor().getMethods().get(25), controller, request, org.apache.slider.api.proto.Messages.GetCertificateStoreResponseProto.getDefaultInstance()); @@ -2051,7 +2193,7 @@ public final class SliderClusterAPI { java.lang.String[] descriptorData = { "\n\033SliderClusterProtocol.proto\022\025org.apach" + "e.slider.api\032\033SliderClusterMessages.prot" + - "o2\306\026\n\027SliderClusterProtocolPB\022n\n\013stopClu" + + "o2\245\030\n\027SliderClusterProtocolPB\022n\n\013stopClu" + "ster\022..org.apache.slider.api.StopCluster" + "RequestProto\032/.org.apache.slider.api.Sto" + "pClusterResponseProto\022\200\001\n\021upgradeContain" + @@ -2100,31 +2242,37 @@ public final class SliderClusterAPI { "api.GetLiveComponentsResponseProto\022y\n\020ge" + "tLiveComponent\0223.org.apache.slider.api.G", "etLiveComponentRequestProto\0320.org.apache" + - ".slider.api.ComponentInformationProto\022d\n" + - "\017getModelDesired\022(.org.apache.slider.api" + - ".EmptyPayloadProto\032\'.org.apache.slider.a" + - "pi.WrappedJsonProto\022k\n\026getModelDesiredAp" + - "pconf\022(.org.apache.slider.api.EmptyPaylo" + - "adProto\032\'.org.apache.slider.api.WrappedJ" + - "sonProto\022m\n\030getModelDesiredResources\022(.o" + - "rg.apache.slider.api.EmptyPayloadProto\032\'" + - ".org.apache.slider.api.WrappedJsonProto\022", - "e\n\020getModelResolved\022(.org.apache.slider." + + ".slider.api.ComponentInformationProto\022q\n" + + "\014getLiveNodes\022/.org.apache.slider.api.Ge" + + "tLiveNodesRequestProto\0320.org.apache.slid" + + "er.api.GetLiveNodesResponseProto\022j\n\013getL" + + "iveNode\022..org.apache.slider.api.GetLiveN" + + "odeRequestProto\032+.org.apache.slider.api." + + "NodeInformationProto\022d\n\017getModelDesired\022" + + "(.org.apache.slider.api.EmptyPayloadProt" + + "o\032\'.org.apache.slider.api.WrappedJsonPro", + "to\022k\n\026getModelDesiredAppconf\022(.org.apach" + + "e.slider.api.EmptyPayloadProto\032\'.org.apa" + + "che.slider.api.WrappedJsonProto\022m\n\030getMo" + + "delDesiredResources\022(.org.apache.slider." + "api.EmptyPayloadProto\032\'.org.apache.slide" + - "r.api.WrappedJsonProto\022l\n\027getModelResolv" + - "edAppconf\022(.org.apache.slider.api.EmptyP" + - "ayloadProto\032\'.org.apache.slider.api.Wrap" + - "pedJsonProto\022n\n\031getModelResolvedResource" + - "s\022(.org.apache.slider.api.EmptyPayloadPr" + - "oto\032\'.org.apache.slider.api.WrappedJsonP" + - "roto\022e\n\020getLiveResources\022(.org.apache.sl" + - "ider.api.EmptyPayloadProto\032\'.org.apache.", - "slider.api.WrappedJsonProto\022\214\001\n\031getClien" + - "tCertificateStore\0226.org.apache.slider.ap" + - "i.GetCertificateStoreRequestProto\0327.org." + - "apache.slider.api.GetCertificateStoreRes" + - "ponseProtoB5\n\033org.apache.slider.api.prot" + - "oB\020SliderClusterAPI\210\001\001\240\001\001" + "r.api.WrappedJsonProto\022e\n\020getModelResolv" + + "ed\022(.org.apache.slider.api.EmptyPayloadP" + + "roto\032\'.org.apache.slider.api.WrappedJson" + + "Proto\022l\n\027getModelResolvedAppconf\022(.org.a" + + "pache.slider.api.EmptyPayloadProto\032\'.org", + ".apache.slider.api.WrappedJsonProto\022n\n\031g" + + "etModelResolvedResources\022(.org.apache.sl" + + "ider.api.EmptyPayloadProto\032\'.org.apache." + + "slider.api.WrappedJsonProto\022e\n\020getLiveRe" + + "sources\022(.org.apache.slider.api.EmptyPay" + + "loadProto\032\'.org.apache.slider.api.Wrappe" + + "dJsonProto\022\214\001\n\031getClientCertificateStore" + + "\0226.org.apache.slider.api.GetCertificateS" + + "toreRequestProto\0327.org.apache.slider.api" + + ".GetCertificateStoreResponseProtoB5\n\033org", + ".apache.slider.api.protoB\020SliderClusterA" + + "PI\210\001\001\240\001\001" }; com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner assigner = new com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner() { http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/3aeab9ca/slider-core/src/main/java/org/apache/slider/api/types/NodeEntryInformation.java ---------------------------------------------------------------------- diff --git a/slider-core/src/main/java/org/apache/slider/api/types/NodeEntryInformation.java b/slider-core/src/main/java/org/apache/slider/api/types/NodeEntryInformation.java index 33a875e..482b0c7 100644 --- a/slider-core/src/main/java/org/apache/slider/api/types/NodeEntryInformation.java +++ b/slider-core/src/main/java/org/apache/slider/api/types/NodeEntryInformation.java @@ -28,41 +28,34 @@ import org.codehaus.jackson.map.annotate.JsonSerialize; @JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) public class NodeEntryInformation { - public int priority; - - /** - * instance explicitly requested on this node: it's OK if an allocation - * comes in that has not been (and when that happens, this count should - * not drop). - */ - public int requested; - - /** number of starting instances */ - public int starting; - - /** incrementing counter of instances that failed to start */ - public int startFailed; /** incrementing counter of instances that failed */ public int failed; - /** - * Counter of "failed recently" events. These are all failures - * which have happened since it was last reset. - */ + /** Counter of "failed recently" events. */ public int failedRecently; + /** timestamp of last use */ + public long lastUsed; + + /** Number of live nodes. */ + public int live; + /** incrementing counter of instances that have been pre-empted. */ public int preempted; - /** - * Number of live nodes. - */ - public int live; + /** Priority */ + public int priority; + + /** instance explicitly requested on this node */ + public int requested; /** number of containers being released off this node */ public int releasing; - /** timestamp of last use */ - public long lastUsed; + /** incrementing counter of instances that failed to start */ + public int startFailed; + + /** number of starting instances */ + public int starting; } http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/3aeab9ca/slider-core/src/main/java/org/apache/slider/api/types/NodeInformation.java ---------------------------------------------------------------------- diff --git a/slider-core/src/main/java/org/apache/slider/api/types/NodeInformation.java b/slider-core/src/main/java/org/apache/slider/api/types/NodeInformation.java index 842db14..049ee52 100644 --- a/slider-core/src/main/java/org/apache/slider/api/types/NodeInformation.java +++ b/slider-core/src/main/java/org/apache/slider/api/types/NodeInformation.java @@ -31,14 +31,12 @@ import java.util.List; @JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) public class NodeInformation { + public String healthReport; public String hostname; - public String state; public String httpAddress; - public String rackName; public String labels; - public String healthReport; public long lastUpdated; + public String rackName; + public String state; public List<NodeEntryInformation> entries = new ArrayList<>(); - - } http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/3aeab9ca/slider-core/src/main/java/org/apache/slider/client/SliderClientAPI.java ---------------------------------------------------------------------- diff --git a/slider-core/src/main/java/org/apache/slider/client/SliderClientAPI.java b/slider-core/src/main/java/org/apache/slider/client/SliderClientAPI.java index bab451f..3627687 100644 --- a/slider-core/src/main/java/org/apache/slider/client/SliderClientAPI.java +++ b/slider-core/src/main/java/org/apache/slider/client/SliderClientAPI.java @@ -99,7 +99,7 @@ public interface SliderClientAPI extends Service { * @throws YarnException Yarn problems * @throws IOException other problems * @throws BadCommandArgumentsException bad arguments. - * @deperecated use #actionKeytab + * @deprecated use #actionKeytab */ int actionInstallKeytab(ActionInstallKeytabArgs installKeytabInfo) throws YarnException, IOException; @@ -111,7 +111,7 @@ public interface SliderClientAPI extends Service { * @throws YarnException Yarn problems * @throws IOException other problems * @throws BadCommandArgumentsException bad arguments. - * @deperecated use #actionKeytab + * @deprecated use #actionKeytab */ int actionKeytab(ActionKeytabArgs keytabInfo) throws YarnException, IOException; http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/3aeab9ca/slider-core/src/main/java/org/apache/slider/client/ipc/SliderApplicationIpcClient.java ---------------------------------------------------------------------- diff --git a/slider-core/src/main/java/org/apache/slider/client/ipc/SliderApplicationIpcClient.java b/slider-core/src/main/java/org/apache/slider/client/ipc/SliderApplicationIpcClient.java index bada24e..291583d 100644 --- a/slider-core/src/main/java/org/apache/slider/client/ipc/SliderApplicationIpcClient.java +++ b/slider-core/src/main/java/org/apache/slider/client/ipc/SliderApplicationIpcClient.java @@ -23,6 +23,7 @@ import org.apache.slider.api.SliderClusterProtocol; import org.apache.slider.api.types.ApplicationLivenessInformation; import org.apache.slider.api.types.ComponentInformation; import org.apache.slider.api.types.ContainerInformation; +import org.apache.slider.api.types.NodeInformation; import org.apache.slider.api.types.PingInformation; import org.apache.slider.api.SliderApplicationApi; import org.apache.slider.core.conf.AggregateConf; @@ -186,8 +187,7 @@ public class SliderApplicationIpcClient implements SliderApplicationApi { } @Override - public ComponentInformation getComponent(String componentName) throws - IOException { + public ComponentInformation getComponent(String componentName) throws IOException { try { return operations.getComponent(componentName); } catch (IOException e) { @@ -196,6 +196,24 @@ public class SliderApplicationIpcClient implements SliderApplicationApi { } @Override + public Map<String, NodeInformation> getLiveNodes() throws IOException { + try { + return operations.getLiveNodes(); + } catch (IOException e) { + throw convert(e); + } + } + + @Override + public NodeInformation getLiveNode(String hostname) throws IOException { + try { + return operations.getLiveNode(hostname); + } catch (IOException e) { + throw convert(e); + } + } + + @Override public PingInformation ping(String text) throws IOException { return null; } http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/3aeab9ca/slider-core/src/main/java/org/apache/slider/client/ipc/SliderClusterOperations.java ---------------------------------------------------------------------- diff --git a/slider-core/src/main/java/org/apache/slider/client/ipc/SliderClusterOperations.java b/slider-core/src/main/java/org/apache/slider/client/ipc/SliderClusterOperations.java index 69dcb3b..e1ec971 100644 --- a/slider-core/src/main/java/org/apache/slider/client/ipc/SliderClusterOperations.java +++ b/slider-core/src/main/java/org/apache/slider/client/ipc/SliderClusterOperations.java @@ -30,6 +30,7 @@ import static org.apache.slider.api.proto.RestTypeMarshalling.*; import org.apache.slider.api.types.ApplicationLivenessInformation; import org.apache.slider.api.types.ComponentInformation; import org.apache.slider.api.types.ContainerInformation; +import org.apache.slider.api.types.NodeInformation; import org.apache.slider.api.types.PingInformation; import org.apache.slider.common.tools.Duration; import org.apache.slider.core.conf.AggregateConf; @@ -102,7 +103,7 @@ public class SliderClusterOperations { */ public List<ClusterNode> convertNodeWireToClusterNodes(List<Messages.RoleInstanceState> nodes) throws IOException { - List<ClusterNode> nodeList = new ArrayList<ClusterNode>(nodes.size()); + List<ClusterNode> nodeList = new ArrayList<>(nodes.size()); for (Messages.RoleInstanceState node : nodes) { nodeList.add(ClusterNode.fromProtobuf(node)); } @@ -116,16 +117,12 @@ public class SliderClusterOperations { * @throws YarnException * @throws IOException */ - public String echo(String text) throws - YarnException, - IOException { + public String echo(String text) throws YarnException, IOException { Messages.EchoRequestProto.Builder builder = Messages.EchoRequestProto.newBuilder(); builder.setText(text); - Messages.EchoRequestProto req = - builder.build(); - Messages.EchoResponseProto response = - appMaster.echo(req); + Messages.EchoRequestProto req = builder.build(); + Messages.EchoResponseProto response = appMaster.echo(req); return response.getText(); } @@ -145,9 +142,7 @@ public class SliderClusterOperations { try { return ClusterDescription.fromJson(statusJson); } catch (JsonParseException e) { - log.error( - "Exception " + e + " parsing:\n" + statusJson, - e); + log.error("Exception " + e + " parsing:\n" + statusJson, e); throw e; } } @@ -191,10 +186,8 @@ public class SliderClusterOperations { Messages.KillContainerRequestProto.Builder builder = Messages.KillContainerRequestProto.newBuilder(); builder.setId(id); - Messages.KillContainerRequestProto req = - builder.build(); - Messages.KillContainerResponseProto response = - appMaster.killContainer(req); + Messages.KillContainerRequestProto req = builder.build(); + Messages.KillContainerResponseProto response = appMaster.killContainer(req); return response.getSuccess(); } @@ -205,24 +198,19 @@ public class SliderClusterOperations { * @throws IOException * @throws YarnException */ - public String[] listNodeUUIDsByRole(String role) throws - IOException, - YarnException { + public String[] listNodeUUIDsByRole(String role) throws IOException, YarnException { Collection<String> uuidList = innerListNodeUUIDSByRole(role); String[] uuids = new String[uuidList.size()]; return uuidList.toArray(uuids); } - public List<String> innerListNodeUUIDSByRole(String role) throws - IOException, - YarnException { + public List<String> innerListNodeUUIDSByRole(String role) throws IOException, YarnException { Messages.ListNodeUUIDsByRoleRequestProto req = Messages.ListNodeUUIDsByRoleRequestProto .newBuilder() .setRole(role) .build(); - Messages.ListNodeUUIDsByRoleResponseProto resp = - appMaster.listNodeUUIDsByRole(req); + Messages.ListNodeUUIDsByRoleResponseProto resp = appMaster.listNodeUUIDsByRole(req); return resp.getUuidList(); } @@ -234,9 +222,8 @@ public class SliderClusterOperations { * @throws IOException * @throws YarnException */ - public List<ClusterNode> listClusterNodesInRole(String role) throws - IOException, - YarnException { + public List<ClusterNode> listClusterNodesInRole(String role) + throws IOException, YarnException { Collection<String> uuidList = innerListNodeUUIDSByRole(role); Messages.GetClusterNodesRequestProto req = @@ -256,9 +243,8 @@ public class SliderClusterOperations { * @throws YarnException */ @VisibleForTesting - public List<ClusterNode> listClusterNodes(String[] uuids) throws - IOException, - YarnException { + public List<ClusterNode> listClusterNodes(String[] uuids) + throws IOException, YarnException { Messages.GetClusterNodesRequestProto req = Messages.GetClusterNodesRequestProto @@ -341,8 +327,7 @@ public class SliderClusterOperations { Messages.FlexClusterRequestProto.newBuilder() .setClusterSpec(resources.toJson()) .build(); - Messages.FlexClusterResponseProto response = - appMaster.flexCluster(request); + Messages.FlexClusterResponseProto response = appMaster.flexCluster(request); return response.getResponse(); } @@ -365,10 +350,8 @@ public class SliderClusterOperations { } builder.setSignal(signal); builder.setDelay(delay); - Messages.AMSuicideRequestProto req = - builder.build(); - Messages.AMSuicideResponseProto response = - appMaster.amSuicide(req); + Messages.AMSuicideRequestProto req = builder.build(); + appMaster.amSuicide(req); } /** @@ -385,45 +368,38 @@ public class SliderClusterOperations { } - public AggregateConf getModelDesired() throws IOException { return unmarshallToAggregateConf(appMaster.getModelDesired(EMPTY)); } public ConfTreeOperations getModelDesiredAppconf() throws IOException { - return unmarshallToCTO( - appMaster.getModelDesiredAppconf(EMPTY)); + return unmarshallToCTO(appMaster.getModelDesiredAppconf(EMPTY)); } public ConfTreeOperations getModelDesiredResources() throws IOException { - return unmarshallToCTO( - appMaster.getModelDesiredResources(EMPTY)); + return unmarshallToCTO(appMaster.getModelDesiredResources(EMPTY)); } public AggregateConf getModelResolved() throws IOException { - return unmarshallToAggregateConf( - appMaster.getModelResolved(EMPTY)); + return unmarshallToAggregateConf(appMaster.getModelResolved(EMPTY)); } public ConfTreeOperations getModelResolvedAppconf() throws IOException { - return unmarshallToCTO( - appMaster.getModelResolvedAppconf(EMPTY)); + return unmarshallToCTO(appMaster.getModelResolvedAppconf(EMPTY)); } public ConfTreeOperations getModelResolvedResources() throws IOException { - return unmarshallToCTO( - appMaster.getModelDesiredResources(EMPTY)); + return unmarshallToCTO(appMaster.getModelDesiredResources(EMPTY)); } public ConfTreeOperations getLiveResources() throws IOException { - return unmarshallToCTO( - appMaster.getLiveResources(EMPTY)); + return unmarshallToCTO(appMaster.getLiveResources(EMPTY)); } @@ -439,8 +415,7 @@ public class SliderClusterOperations { + ") does not match the number of records returned: " + records); } - Map<String, ContainerInformation> map = - new HashMap<String, ContainerInformation>(namesCount); + Map<String, ContainerInformation> map = new HashMap<>(namesCount); for (int i = 0; i < namesCount; i++) { map.put(response.getNames(i), unmarshall(response.getContainers(i))); } @@ -473,42 +448,59 @@ public class SliderClusterOperations { int namesCount = response.getNamesCount(); int records = response.getComponentsCount(); if (namesCount != records) { - throw new IOException("Number of names returned (" + namesCount - + - ") does not match the number of records returned: " - + records); + throw new IOException( + "Number of names returned (" + namesCount + ")" + + " does not match the number of records returned: " + records); } - Map<String, ComponentInformation> map = - new HashMap<String, ComponentInformation>(namesCount); + Map<String, ComponentInformation> map = new HashMap<>(namesCount); for (int i = 0; i < namesCount; i++) { map.put(response.getNames(i), unmarshall(response.getComponents(i))); } return map; } - public ComponentInformation getComponent(String componentName) throws IOException { Messages.GetLiveComponentRequestProto.Builder builder = Messages.GetLiveComponentRequestProto.newBuilder(); builder.setName(componentName); - Messages.ComponentInformationProto proto = - appMaster.getLiveComponent(builder.build()); - + Messages.ComponentInformationProto proto = appMaster.getLiveComponent(builder.build()); return unmarshall(proto); } - + public Map<String, NodeInformation> getLiveNodes() throws IOException { + Messages.GetLiveNodesResponseProto response = + appMaster.getLiveNodes(Messages.GetLiveNodesRequestProto.newBuilder().build()); + + int namesCount = response.getNamesCount(); + int records = response.getNodesCount(); + if (namesCount != records) { + throw new IOException( + "Number of names returned (" + namesCount + ")" + + " does not match the number of records returned: " + records); + } + Map<String, NodeInformation> map = new HashMap<>(namesCount); + for (int i = 0; i < namesCount; i++) { + map.put(response.getNames(i), unmarshall(response.getNodes(i))); + } + return map; + } + + public NodeInformation getLiveNode(String hostname) throws IOException { + Messages.GetLiveNodeRequestProto.Builder builder = + Messages.GetLiveNodeRequestProto.newBuilder(); + builder.setName(hostname); + return unmarshall(appMaster.getLiveNode(builder.build())); + } + public PingInformation ping(String text) throws IOException { return null; } - public void stop(String text) throws IOException { amSuicide(text, 3, 0); } - public ApplicationLivenessInformation getApplicationLiveness() throws IOException { Messages.ApplicationLivenessInformationProto proto = http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/3aeab9ca/slider-core/src/main/java/org/apache/slider/client/rest/SliderApplicationApiRestClient.java ---------------------------------------------------------------------- diff --git a/slider-core/src/main/java/org/apache/slider/client/rest/SliderApplicationApiRestClient.java b/slider-core/src/main/java/org/apache/slider/client/rest/SliderApplicationApiRestClient.java index b1aa633..ce2817a 100644 --- a/slider-core/src/main/java/org/apache/slider/client/rest/SliderApplicationApiRestClient.java +++ b/slider-core/src/main/java/org/apache/slider/client/rest/SliderApplicationApiRestClient.java @@ -31,6 +31,7 @@ import org.apache.slider.api.types.ApplicationLivenessInformation; import org.apache.slider.api.types.ComponentInformation; import org.apache.slider.api.types.ContainerInformation; import org.apache.slider.api.SliderApplicationApi; +import org.apache.slider.api.types.NodeInformation; import org.apache.slider.core.conf.AggregateConf; import org.apache.slider.core.conf.ConfTree; import org.apache.slider.core.conf.ConfTreeOperations; @@ -232,8 +233,7 @@ public class SliderApplicationApiRestClient extends BaseRestClient public Map<String, ComponentInformation> enumComponents() throws IOException { return getApplicationResource(LIVE_COMPONENTS, - new GenericType<Map<String, ComponentInformation>>() { - }); + new GenericType<Map<String, ComponentInformation>>() { }); } @Override @@ -244,6 +244,18 @@ public class SliderApplicationApiRestClient extends BaseRestClient } @Override + public Map<String, NodeInformation> getLiveNodes() throws IOException { + return getApplicationResource(LIVE_NODES, + new GenericType<Map<String, NodeInformation>>() { }); + } + + @Override + public NodeInformation getLiveNode(String hostname) throws IOException { + return getApplicationResource(LIVE_COMPONENTS + "/" + hostname, + NodeInformation.class); + } + + @Override public PingInformation ping(String text) throws IOException { return pingPost(text); } http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/3aeab9ca/slider-core/src/main/java/org/apache/slider/server/appmaster/SliderAppMaster.java ---------------------------------------------------------------------- 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 0e7e295..92b602f 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 @@ -20,6 +20,9 @@ package org.apache.slider.server.appmaster; import com.codahale.metrics.MetricRegistry; import com.codahale.metrics.health.HealthCheckRegistry; +import com.codahale.metrics.jvm.GarbageCollectorMetricSet; +import com.codahale.metrics.jvm.MemoryUsageGaugeSet; +import com.codahale.metrics.jvm.ThreadStatesGaugeSet; import com.google.common.base.Preconditions; import com.google.protobuf.BlockingService; @@ -221,10 +224,13 @@ public class SliderAppMaster extends AbstractSliderLaunchedService * Deployed in {@link #serviceInit(Configuration)} */ private final MetricsAndMonitoring metricsAndMonitoring = new MetricsAndMonitoring(); + /** * metrics registry */ public MetricRegistry metrics; + + /** Error string on chaos monkey launch failure action: {@value} */ public static final String E_TRIGGERED_LAUNCH_FAILURE = "Chaos monkey triggered launch failure"; @@ -244,7 +250,6 @@ public class SliderAppMaster extends AbstractSliderLaunchedService @SuppressWarnings("FieldAccessedSynchronizedAndUnsynchronized") public NMClientAsync nmClientAsync; -// YarnConfiguration conf; /** * token blob */ @@ -484,16 +489,19 @@ public class SliderAppMaster extends AbstractSliderLaunchedService false); SliderUtils.validateSliderServerEnvironment(log, dependencyChecks); - // create app state and monitoring + // create and register monitoring services addService(metricsAndMonitoring); metrics = metricsAndMonitoring.getMetrics(); +/* + metrics.registerAll(new ThreadStatesGaugeSet()); + metrics.registerAll(new MemoryUsageGaugeSet()); + metrics.registerAll(new GarbageCollectorMetricSet()); - +*/ contentCache = ApplicationResouceContentCacheFactory.createContentCache( stateForProviders); - - executorService = new WorkflowExecutorService<ExecutorService>("AmExecutor", + executorService = new WorkflowExecutorService<>("AmExecutor", Executors.newFixedThreadPool(2, new ServiceThreadFactory("AmExecutor", true))); addService(executorService); @@ -1647,7 +1655,7 @@ public class SliderAppMaster extends AbstractSliderLaunchedService // If components are specified as well, then grab all the containers of // each of the components (roles) if (CollectionUtils.isNotEmpty(components)) { - Map<ContainerId, RoleInstance> liveContainers = appState.getLiveNodes(); + Map<ContainerId, RoleInstance> liveContainers = appState.getLiveContainers(); if (CollectionUtils.isNotEmpty(liveContainers.keySet())) { Map<String, Set<String>> roleContainerMap = prepareRoleContainerMap(liveContainers); for (String component : components) { http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/3aeab9ca/slider-core/src/main/java/org/apache/slider/server/appmaster/management/BoolMetric.java ---------------------------------------------------------------------- diff --git a/slider-core/src/main/java/org/apache/slider/server/appmaster/management/BoolMetric.java b/slider-core/src/main/java/org/apache/slider/server/appmaster/management/BoolMetric.java new file mode 100644 index 0000000..23ea61d --- /dev/null +++ b/slider-core/src/main/java/org/apache/slider/server/appmaster/management/BoolMetric.java @@ -0,0 +1,88 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.slider.server.appmaster.management; + +import com.codahale.metrics.Counting; +import com.codahale.metrics.Gauge; +import com.codahale.metrics.Metric; + +import java.util.concurrent.atomic.AtomicBoolean; + +/** + * A bool metric, mapped to an integer. true maps to 1, false to zero, + */ +public class BoolMetric implements Metric, Gauge<Integer> { + + private final AtomicBoolean value; + + public BoolMetric(boolean b) { + value = new AtomicBoolean(b); + } + + public void set(boolean b) { + value.set(b); + } + + public boolean get() { + return value.get(); + } + + @Override + public Integer getValue() { + return value.get() ? 1 : 0; + } + + /** + * Evaluate from a string. Returns true if the string is considered to match 'true', + * false otherwise. + * @param s source + * @return true if the input parses to an integer other than 0. False if it doesn't parse + * or parses to 0. + */ + public boolean fromString(String s) { + try { + return Integer.valueOf(s) != 0; + } catch (NumberFormatException e) { + return false; + } + } + + @Override + public String toString() { + return value.toString(); + } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + + BoolMetric that = (BoolMetric) o; + return get() == that.get(); + } + + @Override + public int hashCode() { + return value.hashCode(); + } +} http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/3aeab9ca/slider-core/src/main/java/org/apache/slider/server/appmaster/management/LongGauge.java ---------------------------------------------------------------------- diff --git a/slider-core/src/main/java/org/apache/slider/server/appmaster/management/LongGauge.java b/slider-core/src/main/java/org/apache/slider/server/appmaster/management/LongGauge.java new file mode 100644 index 0000000..08f61ec --- /dev/null +++ b/slider-core/src/main/java/org/apache/slider/server/appmaster/management/LongGauge.java @@ -0,0 +1,92 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.slider.server.appmaster.management; + +import com.codahale.metrics.Gauge; +import com.codahale.metrics.Metric; + +import java.util.concurrent.atomic.AtomicLong; + +/** + * This is a long which acts as a gauge + */ +public class LongGauge implements Metric, Gauge<Long> { + + private final AtomicLong value; + + /** + * Instantiate + * @param val current value + */ + public LongGauge(long val) { + this.value = new AtomicLong(val); + } + + public LongGauge() { + this(0); + } + + /** + * Set to a new value. + * @param val value + */ + public synchronized void set(long val) { + value.set(val); + } + + public void inc() { + inc(1); + } + + public void dec() { + dec(1); + } + + public synchronized void inc(int delta) { + set(value.get() + delta); + } + + public synchronized void dec(int delta) { + set(value.get() - delta); + } + + public long get() { + return value.get(); + } + + @Override + public Long getValue() { + return get(); + } + + @Override + public String toString() { + return value.toString(); + } + + @Override + public int hashCode() { + return value.hashCode(); + } + + @Override + public boolean equals(Object obj) { + return value.equals(obj); + } +} http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/3aeab9ca/slider-core/src/main/java/org/apache/slider/server/appmaster/management/MeterAndCounter.java ---------------------------------------------------------------------- diff --git a/slider-core/src/main/java/org/apache/slider/server/appmaster/management/MeterAndCounter.java b/slider-core/src/main/java/org/apache/slider/server/appmaster/management/MeterAndCounter.java index 58d9eb3..02ab7bc 100644 --- a/slider-core/src/main/java/org/apache/slider/server/appmaster/management/MeterAndCounter.java +++ b/slider-core/src/main/java/org/apache/slider/server/appmaster/management/MeterAndCounter.java @@ -74,6 +74,11 @@ public class MeterAndCounter { meter.mark(); } + public void inc() { + mark(); + } + + @Override public boolean equals(Object o) { if (this == o) { http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/3aeab9ca/slider-core/src/main/java/org/apache/slider/server/appmaster/management/MetricsAndMonitoring.java ---------------------------------------------------------------------- diff --git a/slider-core/src/main/java/org/apache/slider/server/appmaster/management/MetricsAndMonitoring.java b/slider-core/src/main/java/org/apache/slider/server/appmaster/management/MetricsAndMonitoring.java index 8de27e7..cced42a 100644 --- a/slider-core/src/main/java/org/apache/slider/server/appmaster/management/MetricsAndMonitoring.java +++ b/slider-core/src/main/java/org/apache/slider/server/appmaster/management/MetricsAndMonitoring.java @@ -18,14 +18,13 @@ package org.apache.slider.server.appmaster.management; +import com.codahale.metrics.Metric; import com.codahale.metrics.MetricRegistry; import com.codahale.metrics.health.HealthCheckRegistry; import org.apache.hadoop.conf.Configuration; -import org.apache.hadoop.service.AbstractService; import org.apache.hadoop.service.CompositeService; import java.util.ArrayList; -import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; @@ -100,7 +99,7 @@ public class MetricsAndMonitoring extends CompositeService { } /** - * Get a specific meter and mark it + * Get a specific meter and mark it. This will create and register it on demand. * @param name name of meter/counter */ public void markMeterAndCounter(String name) { @@ -109,6 +108,25 @@ public class MetricsAndMonitoring extends CompositeService { } /** + * Given a {@link Metric}, registers it under the given name. + * + * @param name the name of the metric + * @param metric the metric + * @param <T> the type of the metric + * @return {@code metric} + * @throws IllegalArgumentException if the name is already registered + */ + public <T extends Metric> T register(String name, T metric) throws IllegalArgumentException { + return metrics.register(name, metric); + } + + public <T extends Metric> T register(Class<?> klass, T metric, String... names) + throws IllegalArgumentException { + return register(MetricRegistry.name(klass, names), metric); + } + + + /** * Add an event (synchronized) * @param event event */ http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/3aeab9ca/slider-core/src/main/java/org/apache/slider/server/appmaster/management/RangeLimitedCounter.java ---------------------------------------------------------------------- diff --git a/slider-core/src/main/java/org/apache/slider/server/appmaster/management/RangeLimitedCounter.java b/slider-core/src/main/java/org/apache/slider/server/appmaster/management/RangeLimitedCounter.java new file mode 100644 index 0000000..80e88fc --- /dev/null +++ b/slider-core/src/main/java/org/apache/slider/server/appmaster/management/RangeLimitedCounter.java @@ -0,0 +1,85 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.slider.server.appmaster.management; + +import com.codahale.metrics.Counter; +import com.codahale.metrics.Counting; +import com.codahale.metrics.Metric; + +import java.util.concurrent.atomic.AtomicLong; + +/** + * This is a counter whose range can be given a min and a max + */ +public class RangeLimitedCounter implements Metric, Counting { + + private final AtomicLong value; + private final long min, max; + + /** + * Instantiate + * @param val current value + * @param min minimum value + * @param max max value (or 0 for no max) + */ + public RangeLimitedCounter(long val, long min, long max) { + this.value = new AtomicLong(val); + this.min = min; + this.max = max; + } + + /** + * Set to a new value. If below the min, set to the minimum. If the max is non + * zero and the value is above that maximum, set it to the maximum instead. + * @param val value + */ + public synchronized void set(long val) { + if (val < min) { + val = min; + } else if (max > 0 && val > max) { + val = max; + } + value.set(val); + } + + public void inc() { + inc(1); + } + + public void dec() { + dec(1); + } + + public synchronized void inc(int delta) { + set(value.get() + delta); + } + + public synchronized void dec(int delta) { + set(value.get() - delta); + } + + public long get() { + return value.get(); + } + + @Override + public long getCount() { + return value.get(); + } +} http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/3aeab9ca/slider-core/src/main/java/org/apache/slider/server/appmaster/management/Timestamp.java ---------------------------------------------------------------------- diff --git a/slider-core/src/main/java/org/apache/slider/server/appmaster/management/Timestamp.java b/slider-core/src/main/java/org/apache/slider/server/appmaster/management/Timestamp.java new file mode 100644 index 0000000..c30e749 --- /dev/null +++ b/slider-core/src/main/java/org/apache/slider/server/appmaster/management/Timestamp.java @@ -0,0 +1,33 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.slider.server.appmaster.management; + +/** + * A timestamp metric + */ +public class Timestamp extends LongGauge { + + public Timestamp(long val) { + super(val); + } + + public Timestamp() { + } + +} http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/3aeab9ca/slider-core/src/main/java/org/apache/slider/server/appmaster/rpc/SliderClusterProtocolPBImpl.java ---------------------------------------------------------------------- diff --git a/slider-core/src/main/java/org/apache/slider/server/appmaster/rpc/SliderClusterProtocolPBImpl.java b/slider-core/src/main/java/org/apache/slider/server/appmaster/rpc/SliderClusterProtocolPBImpl.java index 50534d2..f0d9063 100644 --- a/slider-core/src/main/java/org/apache/slider/server/appmaster/rpc/SliderClusterProtocolPBImpl.java +++ b/slider-core/src/main/java/org/apache/slider/server/appmaster/rpc/SliderClusterProtocolPBImpl.java @@ -216,6 +216,26 @@ public class SliderClusterProtocolPBImpl implements SliderClusterProtocolPB { } @Override + public Messages.GetLiveNodesResponseProto getLiveNodes(RpcController controller, + Messages.GetLiveNodesRequestProto request) throws ServiceException { + try { + return real.getLiveNodes(request); + } catch (Exception e) { + throw wrap(e); + } + } + + @Override + public Messages.NodeInformationProto getLiveNode(RpcController controller, + Messages.GetLiveNodeRequestProto request) throws ServiceException { + try { + return real.getLiveNode(request); + } catch (Exception e) { + throw wrap(e); + } + } + + @Override public Messages.WrappedJsonProto getModelDesired(RpcController controller, Messages.EmptyPayloadProto request) throws ServiceException { try { http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/3aeab9ca/slider-core/src/main/java/org/apache/slider/server/appmaster/rpc/SliderClusterProtocolProxy.java ---------------------------------------------------------------------- diff --git a/slider-core/src/main/java/org/apache/slider/server/appmaster/rpc/SliderClusterProtocolProxy.java b/slider-core/src/main/java/org/apache/slider/server/appmaster/rpc/SliderClusterProtocolProxy.java index 2d927c6..b230816 100644 --- a/slider-core/src/main/java/org/apache/slider/server/appmaster/rpc/SliderClusterProtocolProxy.java +++ b/slider-core/src/main/java/org/apache/slider/server/appmaster/rpc/SliderClusterProtocolProxy.java @@ -263,6 +263,26 @@ public class SliderClusterProtocolProxy implements SliderClusterProtocol { } @Override + public Messages.GetLiveNodesResponseProto getLiveNodes(Messages.GetLiveNodesRequestProto request) + throws IOException { + try { + return endpoint.getLiveNodes(NULL_CONTROLLER, request); + } catch (ServiceException e) { + throw convert(e); + } + } + + @Override + public Messages.NodeInformationProto getLiveNode(Messages.GetLiveNodeRequestProto request) + throws IOException { + try { + return endpoint.getLiveNode(NULL_CONTROLLER, request); + } catch (ServiceException e) { + throw convert(e); + } + } + + @Override public Messages.WrappedJsonProto getModelDesired(Messages.EmptyPayloadProto request) throws IOException { try { return endpoint.getModelDesired(NULL_CONTROLLER, request); http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/3aeab9ca/slider-core/src/main/java/org/apache/slider/server/appmaster/rpc/SliderIPCService.java ---------------------------------------------------------------------- diff --git a/slider-core/src/main/java/org/apache/slider/server/appmaster/rpc/SliderIPCService.java b/slider-core/src/main/java/org/apache/slider/server/appmaster/rpc/SliderIPCService.java index 1581482..bb8f512 100644 --- a/slider-core/src/main/java/org/apache/slider/server/appmaster/rpc/SliderIPCService.java +++ b/slider-core/src/main/java/org/apache/slider/server/appmaster/rpc/SliderIPCService.java @@ -30,9 +30,9 @@ import org.apache.slider.api.proto.Messages; import org.apache.slider.api.types.ApplicationLivenessInformation; import org.apache.slider.api.types.ComponentInformation; import org.apache.slider.api.types.ContainerInformation; +import org.apache.slider.api.types.NodeInformation; import org.apache.slider.core.conf.AggregateConf; import org.apache.slider.core.conf.ConfTree; -import org.apache.slider.core.exceptions.NoSuchNodeException; import org.apache.slider.core.exceptions.ServiceNotReadyException; import org.apache.slider.core.exceptions.SliderException; import org.apache.slider.core.main.LauncherExitCodes; @@ -51,7 +51,6 @@ import org.apache.slider.server.appmaster.state.RoleInstance; import org.apache.slider.server.appmaster.state.StateAccessForProviders; import org.apache.slider.server.appmaster.web.rest.application.resources.ContentCache; import org.apache.slider.server.services.security.CertificateManager; -import org.apache.slider.server.services.security.KeystoreGenerator; import org.apache.slider.server.services.security.SecurityStore; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -65,6 +64,7 @@ import java.util.concurrent.TimeUnit; import static org.apache.slider.api.proto.RestTypeMarshalling.marshall; import static org.apache.slider.server.appmaster.web.rest.RestPaths.LIVE_COMPONENTS; import static org.apache.slider.server.appmaster.web.rest.RestPaths.LIVE_CONTAINERS; +import static org.apache.slider.server.appmaster.web.rest.RestPaths.LIVE_NODES; import static org.apache.slider.server.appmaster.web.rest.RestPaths.LIVE_RESOURCES; import static org.apache.slider.server.appmaster.web.rest.RestPaths.MODEL_DESIRED; import static org.apache.slider.server.appmaster.web.rest.RestPaths.MODEL_DESIRED_APPCONF; @@ -273,7 +273,7 @@ public class SliderIPCService extends AbstractService String role = request.getRole(); Messages.ListNodeUUIDsByRoleResponseProto.Builder builder = Messages.ListNodeUUIDsByRoleResponseProto.newBuilder(); - List<RoleInstance> nodes = state.enumLiveNodesInRole(role); + List<RoleInstance> nodes = state.enumLiveInstancesInRole(role); for (RoleInstance node : nodes) { builder.addUuid(node.id); } @@ -373,13 +373,11 @@ public class SliderIPCService extends AbstractService Messages.GetLiveContainersRequestProto request) throws IOException { Map<String, ContainerInformation> infoMap = - (Map<String, ContainerInformation>) cache.lookupWithIOE( - LIVE_CONTAINERS); + (Map<String, ContainerInformation>) cache.lookupWithIOE(LIVE_CONTAINERS); Messages.GetLiveContainersResponseProto.Builder builder = Messages.GetLiveContainersResponseProto.newBuilder(); - for (Map.Entry<String, ContainerInformation> entry : infoMap - .entrySet()) { + for (Map.Entry<String, ContainerInformation> entry : infoMap.entrySet()) { builder.addNames(entry.getKey()); builder.addContainers(marshall(entry.getValue())); } @@ -387,8 +385,8 @@ public class SliderIPCService extends AbstractService } @Override - public Messages.ContainerInformationProto getLiveContainer(Messages.GetLiveContainerRequestProto request) throws - IOException { + public Messages.ContainerInformationProto getLiveContainer(Messages.GetLiveContainerRequestProto request) + throws IOException { String containerId = request.getContainerId(); RoleInstance id = state.getLiveInstanceByContainerID(containerId); ContainerInformation containerInformation = id.serialize(); @@ -396,22 +394,61 @@ public class SliderIPCService extends AbstractService } @Override - public Messages.GetLiveComponentsResponseProto getLiveComponents(Messages.GetLiveComponentsRequestProto request) throws - IOException { + public Messages.GetLiveComponentsResponseProto getLiveComponents(Messages.GetLiveComponentsRequestProto request) + throws IOException { Map<String, ComponentInformation> infoMap = - (Map<String, ComponentInformation>) cache.lookupWithIOE( - LIVE_COMPONENTS); + (Map<String, ComponentInformation>) cache.lookupWithIOE(LIVE_COMPONENTS); Messages.GetLiveComponentsResponseProto.Builder builder = Messages.GetLiveComponentsResponseProto.newBuilder(); - for (Map.Entry<String, ComponentInformation> entry : infoMap - .entrySet()) { + for (Map.Entry<String, ComponentInformation> entry : infoMap.entrySet()) { builder.addNames(entry.getKey()); builder.addComponents(marshall(entry.getValue())); } return builder.build(); } + + @Override + public Messages.ComponentInformationProto getLiveComponent(Messages.GetLiveComponentRequestProto request) + throws IOException { + String name = request.getName(); + try { + return marshall(state.getComponentInformation(name)); + } catch (YarnRuntimeException e) { + throw new FileNotFoundException("Unknown component: " + name); + } + } + + @Override + public Messages.GetLiveNodesResponseProto getLiveNodes(Messages.GetLiveNodesRequestProto request) + throws IOException { + Map<String, NodeInformation> infoMap = + (Map<String, NodeInformation>) cache.lookupWithIOE(LIVE_NODES); + Messages.GetLiveNodesResponseProto.Builder builder = + Messages.GetLiveNodesResponseProto.newBuilder(); + + for (Map.Entry<String, NodeInformation> entry : infoMap.entrySet()) { + builder.addNames(entry.getKey()); + builder.addNodes(marshall(entry.getValue())); + } + return builder.build(); + } + + + @Override + public Messages.NodeInformationProto getLiveNode(Messages.GetLiveNodeRequestProto request) + throws IOException { + String name = request.getName(); + NodeInformation nodeInformation = state.getNodeInformation(name); + if (nodeInformation != null) { + return marshall(nodeInformation); + } else { + throw new FileNotFoundException("Unknown host: " + name); + } + } + + @Override public Messages.WrappedJsonProto getModelDesired(Messages.EmptyPayloadProto request) throws IOException { return lookupAggregateConf(MODEL_DESIRED); @@ -447,17 +484,6 @@ public class SliderIPCService extends AbstractService return lookupConfTree(LIVE_RESOURCES); } - @Override - public Messages.ComponentInformationProto getLiveComponent(Messages.GetLiveComponentRequestProto request) throws - IOException { - String name = request.getName(); - try { - return marshall(state.getComponentInformation(name)); - } catch (YarnRuntimeException e) { - throw new FileNotFoundException("Unknown component: " + name); - } - } - /** * Helper method; look up an aggregate configuration in the cache from * a key, or raise an exception
