diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-common/pom.xml b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-common/pom.xml index 1ee71104833..18492ce2994 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-common/pom.xml +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-common/pom.xml @@ -58,6 +58,13 @@ org.apache.hadoop hadoop-yarn-common + + + org.apache.hadoop + hadoop-yarn-common + test-jar + test + com.google.guava @@ -140,6 +147,7 @@ yarn_server_common_protos.proto yarn_server_common_service_protos.proto yarn_server_common_service_protos.proto + yarn_server_federation_protos.proto ResourceTracker.proto SCMUploader.proto collectornodemanager_protocol.proto diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-common/src/main/java/org/apache/hadoop/yarn/server/federation/store/FederationMembershipStateStore.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-common/src/main/java/org/apache/hadoop/yarn/server/federation/store/FederationMembershipStateStore.java new file mode 100644 index 00000000000..378eadc49a5 --- /dev/null +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-common/src/main/java/org/apache/hadoop/yarn/server/federation/store/FederationMembershipStateStore.java @@ -0,0 +1,126 @@ +/** + * 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.hadoop.yarn.server.federation.store; + +import org.apache.hadoop.classification.InterfaceAudience.Private; +import org.apache.hadoop.classification.InterfaceStability.Unstable; +import org.apache.hadoop.yarn.exceptions.YarnException; +import org.apache.hadoop.yarn.server.federation.store.records.GetSubClusterInfoRequest; +import org.apache.hadoop.yarn.server.federation.store.records.GetSubClusterInfoResponse; +import org.apache.hadoop.yarn.server.federation.store.records.GetSubClustersInfoRequest; +import org.apache.hadoop.yarn.server.federation.store.records.GetSubClustersInfoResponse; +import org.apache.hadoop.yarn.server.federation.store.records.SubClusterDeregisterRequest; +import org.apache.hadoop.yarn.server.federation.store.records.SubClusterDeregisterResponse; +import org.apache.hadoop.yarn.server.federation.store.records.SubClusterHeartbeatRequest; +import org.apache.hadoop.yarn.server.federation.store.records.SubClusterHeartbeatResponse; +import org.apache.hadoop.yarn.server.federation.store.records.SubClusterRegisterRequest; +import org.apache.hadoop.yarn.server.federation.store.records.SubClusterRegisterResponse; +import org.apache.hadoop.yarn.server.records.Version; + +/** + * FederationMembershipStateStore maintains the state of all + * subcluster(s) as encapsulated by {@code SubClusterInfo} for all the + * subcluster(s) that are participating in federation. + */ +@Private +@Unstable +public interface FederationMembershipStateStore { + + /** + * Get the {@link Version} of the underlying federation membership state + * store. + * + * @return the {@link Version} of the underlying federation membership state + * store + */ + Version getMembershipStateStoreVersion(); + + /** + * Register a subcluster by publishing capabilities as represented by + * {@code SubClusterInfo} to indicate participation in federation. This is + * typically done during initialization or restart/failover of the + * subcluster's ResourceManager. Upon successful registration, an + * identifier for the subcluster which is unique across the federated + * cluster is returned. The identifier is static, i.e. preserved across + * restarts and failover. + * + * @param registerSubClusterRequest the capabilities of the subcluster that + * wants to participate in federation. The subcluster id is also + * specified in case registration is triggered by restart/failover + * @return response empty on successfully if registration was successful + * @throws YarnException if the request is invalid/fails + */ + SubClusterRegisterResponse registerSubCluster( + SubClusterRegisterRequest registerSubClusterRequest) throws YarnException; + + /** + * Deregister a subcluster identified by {@code SubClusterId} to + * change state in federation. This can be done to mark the sub cluster lost, + * deregistered, or decommissioned. + * + * @param subClusterDeregisterRequest - the request to deregister the + * sub-cluster from federation. + * @return response empty on successfully deregistering the subcluster state + * @throws YarnException if the request is invalid/fails + */ + SubClusterDeregisterResponse deregisterSubCluster( + SubClusterDeregisterRequest subClusterDeregisterRequest) + throws YarnException; + + /** + * Periodic heartbeat from a ResourceManager participating in + * federation to indicate liveliness. The heartbeat publishes the current + * capabilities as represented by {@code SubClusterInfo} of the subcluster. + * Currently response is empty if the operation was successful, if not an + * exception reporting reason for a failure. + * + * @param subClusterHeartbeatRequest the capabilities of the subcluster that + * wants to keep alive its participation in federation + * @return response currently empty on if heartbeat was successfully processed + * @throws YarnException if the request is invalid/fails + */ + SubClusterHeartbeatResponse subClusterHeartbeat( + SubClusterHeartbeatRequest subClusterHeartbeatRequest) + throws YarnException; + + /** + * Get the membership information of subcluster as identified by + * {@code SubClusterId}. The membership information includes the cluster + * endpoint and current capabilities as represented by {@code SubClusterInfo}. + * + * @param subClusterRequest the subcluster whose information is required + * @return the {@code SubClusterInfo} + * @throws YarnException if the request is invalid/fails + */ + GetSubClusterInfoResponse getSubCluster( + GetSubClusterInfoRequest subClusterRequest) throws YarnException; + + /** + * Get the membership information of all the subclusters that are + * currently participating in federation. The membership information includes + * the cluster endpoint and current capabilities as represented by + * {@code SubClusterInfo}. + * + * @param subClustersRequest request for sub-clusters information + * @return a map of {@code SubClusterInfo} keyed by the {@code SubClusterId} + * @throws YarnException if the request is invalid/fails + */ + GetSubClustersInfoResponse getSubClusters( + GetSubClustersInfoRequest subClustersRequest) throws YarnException; + +} diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-common/src/main/java/org/apache/hadoop/yarn/server/federation/store/package-info.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-common/src/main/java/org/apache/hadoop/yarn/server/federation/store/package-info.java new file mode 100644 index 00000000000..33179e9fe9b --- /dev/null +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-common/src/main/java/org/apache/hadoop/yarn/server/federation/store/package-info.java @@ -0,0 +1,17 @@ +/** + * 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.hadoop.yarn.server.federation.store; \ No newline at end of file diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-common/src/main/java/org/apache/hadoop/yarn/server/federation/store/records/GetSubClusterInfoRequest.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-common/src/main/java/org/apache/hadoop/yarn/server/federation/store/records/GetSubClusterInfoRequest.java new file mode 100644 index 00000000000..656dea948ac --- /dev/null +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-common/src/main/java/org/apache/hadoop/yarn/server/federation/store/records/GetSubClusterInfoRequest.java @@ -0,0 +1,62 @@ +/** + * 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.hadoop.yarn.server.federation.store.records; + +import org.apache.hadoop.classification.InterfaceAudience.Private; +import org.apache.hadoop.classification.InterfaceAudience.Public; +import org.apache.hadoop.classification.InterfaceStability.Unstable; +import org.apache.hadoop.yarn.util.Records; + +/** + * Request class to obtain information about a sub-cluster identified by its + * {@link SubClusterId}. + */ +@Private +@Unstable +public abstract class GetSubClusterInfoRequest { + + @Private + @Unstable + public static GetSubClusterInfoRequest newInstance( + SubClusterId subClusterId) { + GetSubClusterInfoRequest subClusterRequest = + Records.newRecord(GetSubClusterInfoRequest.class); + subClusterRequest.setSubClusterId(subClusterId); + return subClusterRequest; + } + + /** + * Get the {@link SubClusterId} representing the unique identifier of the + * subcluster. + * + * @return the subcluster identifier + */ + @Public + @Unstable + public abstract SubClusterId getSubClusterId(); + + /** + * Set the {@link SubClusterId} representing the unique identifier of the + * subcluster. + * + * @param subClusterId the subcluster identifier + */ + @Public + @Unstable + public abstract void setSubClusterId(SubClusterId subClusterId); +} diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-common/src/main/java/org/apache/hadoop/yarn/server/federation/store/records/GetSubClusterInfoResponse.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-common/src/main/java/org/apache/hadoop/yarn/server/federation/store/records/GetSubClusterInfoResponse.java new file mode 100644 index 00000000000..f7bc74d6f31 --- /dev/null +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-common/src/main/java/org/apache/hadoop/yarn/server/federation/store/records/GetSubClusterInfoResponse.java @@ -0,0 +1,62 @@ +/** + * 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.hadoop.yarn.server.federation.store.records; + +import org.apache.hadoop.classification.InterfaceAudience.Private; +import org.apache.hadoop.classification.InterfaceAudience.Public; +import org.apache.hadoop.classification.InterfaceStability.Unstable; +import org.apache.hadoop.yarn.util.Records; + +/** + * Response to a query with {@link SubClusterInfo} about a sub-cluster. + */ +@Private +@Unstable +public abstract class GetSubClusterInfoResponse { + + @Private + @Unstable + public static GetSubClusterInfoResponse newInstance( + SubClusterInfo subClusterInfo) { + GetSubClusterInfoResponse registerSubClusterRequest = + Records.newRecord(GetSubClusterInfoResponse.class); + registerSubClusterRequest.setSubClusterInfo(subClusterInfo); + return registerSubClusterRequest; + } + + /** + * Get the {@link SubClusterInfo} encapsulating the information about the + * sub-cluster. + * + * @return the information pertaining to the sub-cluster + */ + @Public + @Unstable + public abstract SubClusterInfo getSubClusterInfo(); + + /** + * Set the {@link SubClusterInfo} encapsulating the information about the + * sub-cluster. + * + * @param subClusterInfo the information pertaining to the sub-cluster + */ + @Private + @Unstable + public abstract void setSubClusterInfo(SubClusterInfo subClusterInfo); + +} diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-common/src/main/java/org/apache/hadoop/yarn/server/federation/store/records/GetSubClustersInfoRequest.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-common/src/main/java/org/apache/hadoop/yarn/server/federation/store/records/GetSubClustersInfoRequest.java new file mode 100644 index 00000000000..3264d8188bd --- /dev/null +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-common/src/main/java/org/apache/hadoop/yarn/server/federation/store/records/GetSubClustersInfoRequest.java @@ -0,0 +1,66 @@ +/** + * 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.hadoop.yarn.server.federation.store.records; + +import org.apache.hadoop.classification.InterfaceAudience.Private; +import org.apache.hadoop.classification.InterfaceAudience.Public; +import org.apache.hadoop.classification.InterfaceStability.Unstable; +import org.apache.hadoop.yarn.util.Records; + +/** + * Request class to obtain information about all sub-clusters that are + * participating in federation. + */ +@Private +@Unstable +public abstract class GetSubClustersInfoRequest { + + @Public + @Unstable + public static GetSubClustersInfoRequest newInstance( + boolean filterInactiveSubClusters) { + GetSubClustersInfoRequest request = + Records.newRecord(GetSubClustersInfoRequest.class); + request.setFilterInactiveSubClusters(filterInactiveSubClusters); + return request; + } + + /** + * Get the flag that indicates whether only active sub-clusters should be + * returned. + * + * @return whether to filter out inactive sub-clusters + */ + @Public + @Unstable + public abstract boolean getFilterInactiveSubClusters(); + + /** + * Set the flag that indicates whether only active sub-clusters should be + * returned. + * + * @param filterInactiveSubClusters whether to filter out inactive + * sub-clusters + */ + @Public + @Unstable + public abstract void setFilterInactiveSubClusters( + boolean filterInactiveSubClusters); + +} diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-common/src/main/java/org/apache/hadoop/yarn/server/federation/store/records/GetSubClustersInfoResponse.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-common/src/main/java/org/apache/hadoop/yarn/server/federation/store/records/GetSubClustersInfoResponse.java new file mode 100644 index 00000000000..bcf75aba1ae --- /dev/null +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-common/src/main/java/org/apache/hadoop/yarn/server/federation/store/records/GetSubClustersInfoResponse.java @@ -0,0 +1,66 @@ +/** + * 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.hadoop.yarn.server.federation.store.records; + +import java.util.List; + +import org.apache.hadoop.classification.InterfaceAudience.Private; +import org.apache.hadoop.classification.InterfaceAudience.Public; +import org.apache.hadoop.classification.InterfaceStability.Unstable; +import org.apache.hadoop.yarn.util.Records; + +/** + * Response to a query with list of {@link SubClusterInfo} about all + * sub-clusters that are currently participating in Federation. + */ +@Private +@Unstable +public abstract class GetSubClustersInfoResponse { + + @Public + @Unstable + public static GetSubClustersInfoResponse newInstance( + List subClusters) { + GetSubClustersInfoResponse subClusterInfos = + Records.newRecord(GetSubClustersInfoResponse.class); + subClusterInfos.setSubClusters(subClusters); + return subClusterInfos; + } + + /** + * Get the list of {@link SubClusterInfo} representing the information about + * all sub-clusters that are currently participating in Federation. + * + * @return the list of {@link SubClusterInfo} + */ + @Public + @Unstable + public abstract List getSubClusters(); + + /** + * Set the list of {@link SubClusterInfo} representing the information about + * all sub-clusters that are currently participating in Federation. + * + * @param subClusters the list of {@link SubClusterInfo} + */ + @Private + @Unstable + public abstract void setSubClusters(List subClusters); + +} diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-common/src/main/java/org/apache/hadoop/yarn/server/federation/store/records/SubClusterDeregisterRequest.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-common/src/main/java/org/apache/hadoop/yarn/server/federation/store/records/SubClusterDeregisterRequest.java new file mode 100644 index 00000000000..50a50a182fb --- /dev/null +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-common/src/main/java/org/apache/hadoop/yarn/server/federation/store/records/SubClusterDeregisterRequest.java @@ -0,0 +1,89 @@ +/** + * 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.hadoop.yarn.server.federation.store.records; + +import org.apache.hadoop.classification.InterfaceAudience.Private; +import org.apache.hadoop.classification.InterfaceAudience.Public; +import org.apache.hadoop.classification.InterfaceStability.Unstable; +import org.apache.hadoop.yarn.util.Records; + +/** + *

+ * The request sent to set the state of a subcluster to either + * SC_DECOMMISSIONED, SC_LOST, or SC_DEREGISTERED. + * + *

+ * The update includes details such as: + *

+ */ +@Private +@Unstable +public abstract class SubClusterDeregisterRequest { + + @Private + @Unstable + public static SubClusterDeregisterRequest newInstance( + SubClusterId subClusterId, SubClusterState subClusterState) { + SubClusterDeregisterRequest registerRequest = + Records.newRecord(SubClusterDeregisterRequest.class); + registerRequest.setSubClusterId(subClusterId); + registerRequest.setState(subClusterState); + return registerRequest; + } + + /** + * Get the {@link SubClusterId} representing the unique identifier of the + * subcluster. + * + * @return the subcluster identifier + */ + @Public + @Unstable + public abstract SubClusterId getSubClusterId(); + + /** + * Set the {@link SubClusterId} representing the unique identifier of the + * subcluster. + * + * @param subClusterId the subcluster identifier + */ + @Private + @Unstable + public abstract void setSubClusterId(SubClusterId subClusterId); + + /** + * Get the {@link SubClusterState} of the subcluster. + * + * @return the state of the subcluster + */ + @Public + @Unstable + public abstract SubClusterState getState(); + + /** + * Set the {@link SubClusterState} of the subcluster. + * + * @param state the state of the subCluster + */ + @Private + @Unstable + public abstract void setState(SubClusterState state); +} diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-common/src/main/java/org/apache/hadoop/yarn/server/federation/store/records/SubClusterDeregisterResponse.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-common/src/main/java/org/apache/hadoop/yarn/server/federation/store/records/SubClusterDeregisterResponse.java new file mode 100644 index 00000000000..74fe9944813 --- /dev/null +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-common/src/main/java/org/apache/hadoop/yarn/server/federation/store/records/SubClusterDeregisterResponse.java @@ -0,0 +1,42 @@ +/** + * 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.hadoop.yarn.server.federation.store.records; + +import org.apache.hadoop.classification.InterfaceAudience.Private; +import org.apache.hadoop.classification.InterfaceStability.Unstable; +import org.apache.hadoop.yarn.util.Records; + +/** + * SubClusterDeregisterResponse contains the answer from the {@code + * FederationMembershipStateStore} to a request to deregister the sub cluster. + * Currently response is empty if the operation was successful, if not an + * exception reporting reason for a failure. + */ +@Private +@Unstable +public abstract class SubClusterDeregisterResponse { + + @Private + @Unstable + public static SubClusterDeregisterResponse newInstance() { + SubClusterDeregisterResponse response = + Records.newRecord(SubClusterDeregisterResponse.class); + return response; + } + +} diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-common/src/main/java/org/apache/hadoop/yarn/server/federation/store/records/SubClusterHeartbeatRequest.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-common/src/main/java/org/apache/hadoop/yarn/server/federation/store/records/SubClusterHeartbeatRequest.java new file mode 100644 index 00000000000..3a07c18bf2a --- /dev/null +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-common/src/main/java/org/apache/hadoop/yarn/server/federation/store/records/SubClusterHeartbeatRequest.java @@ -0,0 +1,149 @@ +/** + * 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.hadoop.yarn.server.federation.store.records; + +import org.apache.hadoop.classification.InterfaceAudience.Private; +import org.apache.hadoop.classification.InterfaceAudience.Public; +import org.apache.hadoop.classification.InterfaceStability.Unstable; +import org.apache.hadoop.yarn.util.Records; + +/** + *

+ * SubClusterHeartbeatRequest is a report of the runtime information of the + * subcluster that is participating in federation. + * + *

+ * It includes information such as: + *

+ */ +@Private +@Unstable +public abstract class SubClusterHeartbeatRequest { + + @Private + @Unstable + public static SubClusterHeartbeatRequest newInstance( + SubClusterId subClusterId, SubClusterState state, String capability) { + return newInstance(subClusterId, 0, state, capability); + } + + @Private + @Unstable + public static SubClusterHeartbeatRequest newInstance( + SubClusterId subClusterId, long lastHeartBeat, SubClusterState state, + String capability) { + SubClusterHeartbeatRequest subClusterHeartbeatRequest = + Records.newRecord(SubClusterHeartbeatRequest.class); + subClusterHeartbeatRequest.setSubClusterId(subClusterId); + subClusterHeartbeatRequest.setLastHeartBeat(lastHeartBeat); + subClusterHeartbeatRequest.setState(state); + subClusterHeartbeatRequest.setCapability(capability); + return subClusterHeartbeatRequest; + } + + /** + * Get the {@link SubClusterId} representing the unique identifier of the + * subcluster. + * + * @return the subcluster identifier + */ + @Public + @Unstable + public abstract SubClusterId getSubClusterId(); + + /** + * Set the {@link SubClusterId} representing the unique identifier of the + * subCluster. + * + * @param subClusterId the subCluster identifier + */ + @Private + @Unstable + public abstract void setSubClusterId(SubClusterId subClusterId); + + /** + * Get the last heart beat time of the subcluster. + * + * @return the state of the subcluster + */ + @Public + @Unstable + public abstract long getLastHeartBeat(); + + /** + * Set the last heartbeat time of the subcluster. + * + * @param time the last heartbeat time of the subcluster + */ + @Private + @Unstable + public abstract void setLastHeartBeat(long time); + + /** + * Get the {@link SubClusterState} of the subcluster. + * + * @return the state of the subcluster + */ + @Public + @Unstable + public abstract SubClusterState getState(); + + /** + * Set the {@link SubClusterState} of the subcluster. + * + * @param state the state of the subCluster + */ + @Private + @Unstable + public abstract void setState(SubClusterState state); + + /** + * Get the current capacity and utilization of the subcluster. This is the + * JAXB marshalled string representation of the ClusterMetrics. + * + * @return the current capacity and utilization of the subcluster + */ + @Public + @Unstable + public abstract String getCapability(); + + /** + * Set the current capacity and utilization of the subCluster. This is the + * JAXB marshalled string representation of the ClusterMetrics. + * + * @param capability the current capacity and utilization of the subcluster + */ + @Private + @Unstable + public abstract void setCapability(String capability); + + @Override + public String toString() { + return "SubClusterHeartbeatRequest [getSubClusterId() = " + + getSubClusterId() + ", getState() = " + getState() + + ", getLastHeartBeat = " + getLastHeartBeat() + ", getCapability() = " + + getCapability() + "]"; + } + +} diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-common/src/main/java/org/apache/hadoop/yarn/server/federation/store/records/SubClusterHeartbeatResponse.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-common/src/main/java/org/apache/hadoop/yarn/server/federation/store/records/SubClusterHeartbeatResponse.java new file mode 100644 index 00000000000..0b7fd8cd2ac --- /dev/null +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-common/src/main/java/org/apache/hadoop/yarn/server/federation/store/records/SubClusterHeartbeatResponse.java @@ -0,0 +1,45 @@ +/** + * 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.hadoop.yarn.server.federation.store.records; + +import org.apache.hadoop.classification.InterfaceAudience.Private; +import org.apache.hadoop.classification.InterfaceStability.Unstable; +import org.apache.hadoop.yarn.util.Records; + +/** + * SubClusterHeartbeatResponse contains the response from the {@code + * FederationMembershipStateStore} to a periodic heartbeat to indicate + * liveliness from a ResourceManager participating in federation. + * Currently response is empty if the operation was successful, if not an + * exception reporting reason for a failure. + *

+ * NOTE: This can be extended to push down policies in future + */ +@Private +@Unstable +public abstract class SubClusterHeartbeatResponse { + + @Private + @Unstable + public static SubClusterHeartbeatResponse newInstance() { + SubClusterHeartbeatResponse response = + Records.newRecord(SubClusterHeartbeatResponse.class); + return response; + } + +} diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-common/src/main/java/org/apache/hadoop/yarn/server/federation/store/records/SubClusterId.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-common/src/main/java/org/apache/hadoop/yarn/server/federation/store/records/SubClusterId.java new file mode 100644 index 00000000000..fec967d86bd --- /dev/null +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-common/src/main/java/org/apache/hadoop/yarn/server/federation/store/records/SubClusterId.java @@ -0,0 +1,100 @@ +/** + * 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.hadoop.yarn.server.federation.store.records; + +import org.apache.hadoop.classification.InterfaceAudience.Private; +import org.apache.hadoop.classification.InterfaceAudience.Public; +import org.apache.hadoop.classification.InterfaceStability.Unstable; +import org.apache.hadoop.yarn.util.Records; + +/** + *

+ * SubClusterId represents the globally unique identifier for a + * subcluster that is participating in federation. + * + *

+ * The globally unique nature of the identifier is obtained from the + * FederationMembershipStateStore on initialization. + */ +@Private +@Unstable +public abstract class SubClusterId implements Comparable { + + @Private + @Unstable + public static SubClusterId newInstance(String subClusterId) { + SubClusterId id = Records.newRecord(SubClusterId.class); + id.setId(subClusterId); + return id; + } + + /** + * Get the string identifier of the subcluster which is unique across + * the federated cluster. The identifier is static, i.e. preserved across + * restarts and failover. + * + * @return unique identifier of the subcluster + */ + @Public + @Unstable + public abstract String getId(); + + /** + * Set the string identifier of the subcluster which is unique across + * the federated cluster. The identifier is static, i.e. preserved across + * restarts and failover. + * + * @param subClusterId unique identifier of the subcluster + */ + @Private + @Unstable + protected abstract void setId(String subClusterId); + + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + if (obj == null) { + return false; + } + if (getClass() != obj.getClass()) { + return false; + } + SubClusterId other = (SubClusterId) obj; + return this.getId().equals(other.getId()); + } + + @Override + public int hashCode() { + return getId().hashCode(); + } + + @Override + public int compareTo(SubClusterId other) { + return getId().compareTo(other.getId()); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append(getId()); + return sb.toString(); + } + +} diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-common/src/main/java/org/apache/hadoop/yarn/server/federation/store/records/SubClusterInfo.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-common/src/main/java/org/apache/hadoop/yarn/server/federation/store/records/SubClusterInfo.java new file mode 100644 index 00000000000..f13c8f16708 --- /dev/null +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-common/src/main/java/org/apache/hadoop/yarn/server/federation/store/records/SubClusterInfo.java @@ -0,0 +1,263 @@ +/** + * 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.hadoop.yarn.server.federation.store.records; + +import org.apache.hadoop.classification.InterfaceAudience.Private; +import org.apache.hadoop.classification.InterfaceAudience.Public; +import org.apache.hadoop.classification.InterfaceStability.Unstable; +import org.apache.hadoop.yarn.util.Records; + +/** + *

+ * SubClusterInfo is a report of the runtime information of the subcluster that + * is participating in federation. + * + *

+ * It includes information such as: + *

+ */ +@Private +@Unstable +public abstract class SubClusterInfo { + + @Private + @Unstable + public static SubClusterInfo newInstance(SubClusterId subClusterId, + String amRMServiceAddress, String clientRMServiceAddress, + String rmAdminServiceAddress, String rmWebServiceAddress, + SubClusterState state, long lastStartTime, String capability) { + return newInstance(subClusterId, amRMServiceAddress, clientRMServiceAddress, + rmAdminServiceAddress, rmWebServiceAddress, 0, state, lastStartTime, + capability); + } + + @Private + @Unstable + public static SubClusterInfo newInstance(SubClusterId subClusterId, + String amRMServiceAddress, String clientRMServiceAddress, + String rmAdminServiceAddress, String rmWebServiceAddress, + long lastHeartBeat, SubClusterState state, long lastStartTime, + String capability) { + SubClusterInfo subClusterInfo = Records.newRecord(SubClusterInfo.class); + subClusterInfo.setSubClusterId(subClusterId); + subClusterInfo.setAMRMServiceAddress(amRMServiceAddress); + subClusterInfo.setClientRMServiceAddress(clientRMServiceAddress); + subClusterInfo.setRMAdminServiceAddress(rmAdminServiceAddress); + subClusterInfo.setRMWebServiceAddress(rmWebServiceAddress); + subClusterInfo.setLastHeartBeat(lastHeartBeat); + subClusterInfo.setState(state); + subClusterInfo.setLastStartTime(lastStartTime); + subClusterInfo.setCapability(capability); + return subClusterInfo; + } + + /** + * Get the {@link SubClusterId} representing the unique identifier of the + * subcluster. + * + * @return the subcluster identifier + */ + @Public + @Unstable + public abstract SubClusterId getSubClusterId(); + + /** + * Set the {@link SubClusterId} representing the unique identifier of the + * subCluster. + * + * @param subClusterId the subCluster identifier + */ + @Private + @Unstable + public abstract void setSubClusterId(SubClusterId subClusterId); + + /** + * Get the URL of the AM-RM service endpoint of the subcluster + * ResourceManager. + * + * @return the URL of the AM-RM service endpoint of the subcluster + * ResourceManager + */ + @Public + @Unstable + public abstract String getAMRMServiceAddress(); + + /** + * Set the URL of the AM-RM service endpoint of the subcluster + * ResourceManager. + * + * @param amRMServiceAddress the URL of the AM-RM service endpoint of the + * subcluster ResourceManager + */ + @Private + @Unstable + public abstract void setAMRMServiceAddress(String amRMServiceAddress); + + /** + * Get the URL of the client-RM service endpoint of the subcluster + * ResourceManager. + * + * @return the URL of the client-RM service endpoint of the subcluster + * ResourceManager + */ + @Public + @Unstable + public abstract String getClientRMServiceAddress(); + + /** + * Set the URL of the client-RM service endpoint of the subcluster + * ResourceManager. + * + * @param clientRMServiceAddress the URL of the client-RM service endpoint of + * the subCluster ResourceManager + */ + @Private + @Unstable + public abstract void setClientRMServiceAddress(String clientRMServiceAddress); + + /** + * Get the URL of the ResourceManager administration service. + * + * @return the URL of the ResourceManager administration service + */ + @Public + @Unstable + public abstract String getRMAdminServiceAddress(); + + /** + * Set the URL of the ResourceManager administration service. + * + * @param rmAdminServiceAddress the URL of the ResourceManager + * administration service. + */ + @Private + @Unstable + public abstract void setRMAdminServiceAddress(String rmAdminServiceAddress); + + /** + * Get the URL of the ResourceManager web application interface. + * + * @return the URL of the ResourceManager web application + * interface. + */ + @Public + @Unstable + public abstract String getRMWebServiceAddress(); + + /** + * Set the URL of the ResourceManager web application interface. + * + * @param rmWebServiceAddress the URL of the ResourceManager web + * application interface. + */ + @Private + @Unstable + public abstract void setRMWebServiceAddress(String rmWebServiceAddress); + + /** + * Get the last heart beat time of the subcluster. + * + * @return the state of the subcluster + */ + @Public + @Unstable + public abstract long getLastHeartBeat(); + + /** + * Set the last heartbeat time of the subcluster. + * + * @param time the last heartbeat time of the subcluster + */ + @Private + @Unstable + public abstract void setLastHeartBeat(long time); + + /** + * Get the {@link SubClusterState} of the subcluster. + * + * @return the state of the subcluster + */ + @Public + @Unstable + public abstract SubClusterState getState(); + + /** + * Set the {@link SubClusterState} of the subcluster. + * + * @param state the state of the subCluster + */ + @Private + @Unstable + public abstract void setState(SubClusterState state); + + /** + * Get the timestamp representing the last start time of the subcluster. + * + * @return the timestamp representing the last start time of the subcluster + */ + @Public + @Unstable + public abstract long getLastStartTime(); + + /** + * Set the timestamp representing the last start time of the subcluster. + * + * @param lastStartTime the timestamp representing the last start time of the + * subcluster + */ + @Private + @Unstable + public abstract void setLastStartTime(long lastStartTime); + + /** + * Get the current capacity and utilization of the subcluster. This is the + * JAXB marshalled string representation of the ClusterMetrics. + * + * @return the current capacity and utilization of the subcluster + */ + @Public + @Unstable + public abstract String getCapability(); + + /** + * Set the current capacity and utilization of the subCluster. This is the + * JAXB marshalled string representation of the ClusterMetrics. + * + * @param capability the current capacity and utilization of the subcluster + */ + @Private + @Unstable + public abstract void setCapability(String capability); + + @Override + public String toString() { + return "SubClusterInfo [getSubClusterId() = " + getSubClusterId() + + ", getAMRMServiceAddress() = " + getAMRMServiceAddress() + + ", getClientRMServiceAddress() = " + getClientRMServiceAddress() + + ", getRMAdminServiceAddress() = " + getRMAdminServiceAddress() + + ", getRMWebServiceAddress() = " + getRMWebServiceAddress() + + ", getState() = " + getState() + ", getLastStartTime() = " + + getLastStartTime() + ", getCapability() = " + getCapability() + "]"; + } +} diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-common/src/main/java/org/apache/hadoop/yarn/server/federation/store/records/SubClusterRegisterRequest.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-common/src/main/java/org/apache/hadoop/yarn/server/federation/store/records/SubClusterRegisterRequest.java new file mode 100644 index 00000000000..8864fe30cab --- /dev/null +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-common/src/main/java/org/apache/hadoop/yarn/server/federation/store/records/SubClusterRegisterRequest.java @@ -0,0 +1,74 @@ +/** + * 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.hadoop.yarn.server.federation.store.records; + +import org.apache.hadoop.classification.InterfaceAudience.Private; +import org.apache.hadoop.classification.InterfaceAudience.Public; +import org.apache.hadoop.classification.InterfaceStability.Unstable; +import org.apache.hadoop.yarn.util.Records; + +/** + *

+ * SubClusterRegisterRequest is a request by a sub-cluster + * {@code ResourceManager} to participate in federation. + * + *

+ * It includes information such as: + *

+ */ +@Private +@Unstable +public abstract class SubClusterRegisterRequest { + + @Private + @Unstable + public static SubClusterRegisterRequest newInstance( + SubClusterInfo subClusterInfo) { + SubClusterRegisterRequest registerSubClusterRequest = + Records.newRecord(SubClusterRegisterRequest.class); + registerSubClusterRequest.setSubClusterInfo(subClusterInfo); + return registerSubClusterRequest; + } + + /** + * Get the {@link SubClusterInfo} encapsulating the information about the + * sub-cluster. + * + * @return the information pertaining to the sub-cluster + */ + @Public + @Unstable + public abstract SubClusterInfo getSubClusterInfo(); + + /** + * Set the {@link SubClusterInfo} encapsulating the information about the + * sub-cluster. + * + * @param subClusterInfo the information pertaining to the sub-cluster + */ + @Public + @Unstable + public abstract void setSubClusterInfo(SubClusterInfo subClusterInfo); + +} diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-common/src/main/java/org/apache/hadoop/yarn/server/federation/store/records/SubClusterRegisterResponse.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-common/src/main/java/org/apache/hadoop/yarn/server/federation/store/records/SubClusterRegisterResponse.java new file mode 100644 index 00000000000..060a8573fba --- /dev/null +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-common/src/main/java/org/apache/hadoop/yarn/server/federation/store/records/SubClusterRegisterResponse.java @@ -0,0 +1,44 @@ +/** + * 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.hadoop.yarn.server.federation.store.records; + +import org.apache.hadoop.classification.InterfaceAudience.Private; +import org.apache.hadoop.classification.InterfaceStability.Unstable; +import org.apache.hadoop.yarn.util.Records; + +/** + * SubClusterRegisterResponse contains the response from the {@code + * FederationMembershipStateStore} to a registration request from a + * ResourceManager to participate in federation. + * + * Currently response is empty if the operation was successful, if not an + * exception reporting reason for a failure. + */ +@Private +@Unstable +public abstract class SubClusterRegisterResponse { + + @Private + @Unstable + public static SubClusterRegisterResponse newInstance() { + SubClusterRegisterResponse response = + Records.newRecord(SubClusterRegisterResponse.class); + return response; + } + +} diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-common/src/main/java/org/apache/hadoop/yarn/server/federation/store/records/SubClusterState.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-common/src/main/java/org/apache/hadoop/yarn/server/federation/store/records/SubClusterState.java new file mode 100644 index 00000000000..22cec99b9c1 --- /dev/null +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-common/src/main/java/org/apache/hadoop/yarn/server/federation/store/records/SubClusterState.java @@ -0,0 +1,60 @@ +/** + * 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.hadoop.yarn.server.federation.store.records; + +import org.apache.hadoop.classification.InterfaceAudience.Private; +import org.apache.hadoop.classification.InterfaceStability.Unstable; + +/** + *

+ * State of a SubCluster. + *

+ */ +@Private +@Unstable +public enum SubClusterState { + /** Newly registered subcluster, before the first heartbeat. */ + SC_NEW, + + /** Subcluster is registered and the RM sent a heartbeat recently. */ + SC_RUNNING, + + /** Subcluster is unhealthy. */ + SC_UNHEALTHY, + + /** Subcluster is in the process of being out of service. */ + SC_DECOMMISSIONING, + + /** Subcluster is out of service. */ + SC_DECOMMISSIONED, + + /** RM has not sent a heartbeat for some configured time threshold. */ + SC_LOST, + + /** Subcluster has unregistered. */ + SC_UNREGISTERED; + + public boolean isUnusable() { + return (this != SC_RUNNING && this != SC_NEW); + } + + public boolean isFinal() { + return (this == SC_UNREGISTERED || this == SC_DECOMMISSIONED + || this == SC_LOST); + } +} diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-common/src/main/java/org/apache/hadoop/yarn/server/federation/store/records/impl/pb/GetSubClusterInfoRequestPBImpl.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-common/src/main/java/org/apache/hadoop/yarn/server/federation/store/records/impl/pb/GetSubClusterInfoRequestPBImpl.java new file mode 100644 index 00000000000..c61c4191b99 --- /dev/null +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-common/src/main/java/org/apache/hadoop/yarn/server/federation/store/records/impl/pb/GetSubClusterInfoRequestPBImpl.java @@ -0,0 +1,125 @@ +/** + * 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.hadoop.yarn.server.federation.store.records.impl.pb; + +import org.apache.hadoop.classification.InterfaceAudience.Private; +import org.apache.hadoop.classification.InterfaceStability.Unstable; +import org.apache.hadoop.yarn.federation.proto.YarnServerFederationProtos.GetSubClusterInfoRequestProto; +import org.apache.hadoop.yarn.federation.proto.YarnServerFederationProtos.GetSubClusterInfoRequestProtoOrBuilder; +import org.apache.hadoop.yarn.federation.proto.YarnServerFederationProtos.SubClusterIdProto; +import org.apache.hadoop.yarn.server.federation.store.records.GetSubClusterInfoRequest; +import org.apache.hadoop.yarn.server.federation.store.records.SubClusterId; + +import com.google.protobuf.TextFormat; + +/** + * Protocol buffer based implementation of {@link GetSubClusterInfoRequest}. + */ +@Private +@Unstable +public class GetSubClusterInfoRequestPBImpl extends GetSubClusterInfoRequest { + + private GetSubClusterInfoRequestProto proto = + GetSubClusterInfoRequestProto.getDefaultInstance(); + private GetSubClusterInfoRequestProto.Builder builder = null; + private boolean viaProto = false; + + public GetSubClusterInfoRequestPBImpl() { + builder = GetSubClusterInfoRequestProto.newBuilder(); + } + + public GetSubClusterInfoRequestPBImpl(GetSubClusterInfoRequestProto proto) { + this.proto = proto; + viaProto = true; + } + + public GetSubClusterInfoRequestProto getProto() { + mergeLocalToProto(); + proto = viaProto ? proto : builder.build(); + viaProto = true; + return proto; + } + + private void mergeLocalToProto() { + if (viaProto) { + maybeInitBuilder(); + } + mergeLocalToBuilder(); + proto = builder.build(); + viaProto = true; + } + + private void maybeInitBuilder() { + if (viaProto || builder == null) { + builder = GetSubClusterInfoRequestProto.newBuilder(proto); + } + viaProto = false; + } + + private void mergeLocalToBuilder() { + } + + @Override + public int hashCode() { + return getProto().hashCode(); + } + + @Override + public boolean equals(Object other) { + if (other == null) { + return false; + } + if (other.getClass().isAssignableFrom(this.getClass())) { + return this.getProto().equals(this.getClass().cast(other).getProto()); + } + return false; + } + + @Override + public String toString() { + return TextFormat.shortDebugString(getProto()); + } + + @Override + public SubClusterId getSubClusterId() { + GetSubClusterInfoRequestProtoOrBuilder p = viaProto ? proto : builder; + if (!p.hasSubClusterId()) { + return null; + } + return convertFromProtoFormat(p.getSubClusterId()); + } + + @Override + public void setSubClusterId(SubClusterId subClusterId) { + maybeInitBuilder(); + if (subClusterId == null) { + builder.clearSubClusterId(); + return; + } + builder.setSubClusterId(convertToProtoFormat(subClusterId)); + } + + private SubClusterId convertFromProtoFormat(SubClusterIdProto sc) { + return new SubClusterIdPBImpl(sc); + } + + private SubClusterIdProto convertToProtoFormat(SubClusterId sc) { + return ((SubClusterIdPBImpl) sc).getProto(); + } + +} diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-common/src/main/java/org/apache/hadoop/yarn/server/federation/store/records/impl/pb/GetSubClusterInfoResponsePBImpl.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-common/src/main/java/org/apache/hadoop/yarn/server/federation/store/records/impl/pb/GetSubClusterInfoResponsePBImpl.java new file mode 100644 index 00000000000..d0bcc33db87 --- /dev/null +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-common/src/main/java/org/apache/hadoop/yarn/server/federation/store/records/impl/pb/GetSubClusterInfoResponsePBImpl.java @@ -0,0 +1,134 @@ +/** + * 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.hadoop.yarn.server.federation.store.records.impl.pb; + +import org.apache.hadoop.classification.InterfaceAudience.Private; +import org.apache.hadoop.classification.InterfaceStability.Unstable; +import org.apache.hadoop.yarn.federation.proto.YarnServerFederationProtos.GetSubClusterInfoResponseProto; +import org.apache.hadoop.yarn.federation.proto.YarnServerFederationProtos.GetSubClusterInfoResponseProtoOrBuilder; +import org.apache.hadoop.yarn.federation.proto.YarnServerFederationProtos.SubClusterInfoProto; +import org.apache.hadoop.yarn.server.federation.store.records.GetSubClusterInfoResponse; +import org.apache.hadoop.yarn.server.federation.store.records.SubClusterInfo; + +import com.google.protobuf.TextFormat; + +/** + * Protocol buffer based implementation of {@link GetSubClusterInfoResponse}. + */ +@Private +@Unstable +public class GetSubClusterInfoResponsePBImpl extends GetSubClusterInfoResponse { + + private GetSubClusterInfoResponseProto proto = + GetSubClusterInfoResponseProto.getDefaultInstance(); + private GetSubClusterInfoResponseProto.Builder builder = null; + private boolean viaProto = false; + + private SubClusterInfo subClusterInfo = null; + + public GetSubClusterInfoResponsePBImpl() { + builder = GetSubClusterInfoResponseProto.newBuilder(); + } + + public GetSubClusterInfoResponsePBImpl(GetSubClusterInfoResponseProto proto) { + this.proto = proto; + viaProto = true; + } + + public GetSubClusterInfoResponseProto getProto() { + mergeLocalToProto(); + proto = viaProto ? proto : builder.build(); + viaProto = true; + return proto; + } + + private void mergeLocalToProto() { + if (viaProto) { + maybeInitBuilder(); + } + mergeLocalToBuilder(); + proto = builder.build(); + viaProto = true; + } + + private void maybeInitBuilder() { + if (viaProto || builder == null) { + builder = GetSubClusterInfoResponseProto.newBuilder(proto); + } + viaProto = false; + } + + private void mergeLocalToBuilder() { + if (this.subClusterInfo != null) { + builder.setSubClusterInfo(convertToProtoFormat(this.subClusterInfo)); + } + } + + @Override + public int hashCode() { + return getProto().hashCode(); + } + + @Override + public boolean equals(Object other) { + if (other == null) { + return false; + } + if (other.getClass().isAssignableFrom(this.getClass())) { + return this.getProto().equals(this.getClass().cast(other).getProto()); + } + return false; + } + + @Override + public String toString() { + return TextFormat.shortDebugString(getProto()); + } + + @Override + public SubClusterInfo getSubClusterInfo() { + GetSubClusterInfoResponseProtoOrBuilder p = viaProto ? proto : builder; + if (this.subClusterInfo != null) { + return this.subClusterInfo; + } + if (!p.hasSubClusterInfo()) { + return null; + } + this.subClusterInfo = convertFromProtoFormat(p.getSubClusterInfo()); + return this.subClusterInfo; + } + + @Override + public void setSubClusterInfo(SubClusterInfo subClusterInfo) { + maybeInitBuilder(); + if (subClusterInfo == null) { + builder.clearSubClusterInfo(); + } + this.subClusterInfo = subClusterInfo; + } + + private SubClusterInfo convertFromProtoFormat( + SubClusterInfoProto clusterInfo) { + return new SubClusterInfoPBImpl(clusterInfo); + } + + private SubClusterInfoProto convertToProtoFormat(SubClusterInfo clusterInfo) { + return ((SubClusterInfoPBImpl) clusterInfo).getProto(); + } + +} diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-common/src/main/java/org/apache/hadoop/yarn/server/federation/store/records/impl/pb/GetSubClustersInfoRequestPBImpl.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-common/src/main/java/org/apache/hadoop/yarn/server/federation/store/records/impl/pb/GetSubClustersInfoRequestPBImpl.java new file mode 100644 index 00000000000..2b848c0d285 --- /dev/null +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-common/src/main/java/org/apache/hadoop/yarn/server/federation/store/records/impl/pb/GetSubClustersInfoRequestPBImpl.java @@ -0,0 +1,108 @@ +/** + * 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.hadoop.yarn.server.federation.store.records.impl.pb; + +import org.apache.hadoop.classification.InterfaceAudience.Private; +import org.apache.hadoop.classification.InterfaceStability.Unstable; +import org.apache.hadoop.yarn.federation.proto.YarnServerFederationProtos.GetSubClustersInfoRequestProto; +import org.apache.hadoop.yarn.federation.proto.YarnServerFederationProtos.GetSubClustersInfoRequestProtoOrBuilder; +import org.apache.hadoop.yarn.server.federation.store.records.GetSubClustersInfoRequest; + +import com.google.protobuf.TextFormat; + +/** + * Protocol buffer based implementation of {@link GetSubClustersInfoRequest}. + */ +@Private +@Unstable +public class GetSubClustersInfoRequestPBImpl extends GetSubClustersInfoRequest { + + private GetSubClustersInfoRequestProto proto = + GetSubClustersInfoRequestProto.getDefaultInstance(); + private GetSubClustersInfoRequestProto.Builder builder = null; + private boolean viaProto = false; + + public GetSubClustersInfoRequestPBImpl() { + builder = GetSubClustersInfoRequestProto.newBuilder(); + } + + public GetSubClustersInfoRequestPBImpl(GetSubClustersInfoRequestProto proto) { + this.proto = proto; + viaProto = true; + } + + public GetSubClustersInfoRequestProto getProto() { + mergeLocalToProto(); + proto = viaProto ? proto : builder.build(); + viaProto = true; + return proto; + } + + private void mergeLocalToProto() { + if (viaProto) { + maybeInitBuilder(); + } + mergeLocalToBuilder(); + proto = builder.build(); + viaProto = true; + } + + private void maybeInitBuilder() { + if (viaProto || builder == null) { + builder = GetSubClustersInfoRequestProto.newBuilder(proto); + } + viaProto = false; + } + + private void mergeLocalToBuilder() { + } + + @Override + public int hashCode() { + return getProto().hashCode(); + } + + @Override + public boolean equals(Object other) { + if (other == null) { + return false; + } + if (other.getClass().isAssignableFrom(this.getClass())) { + return this.getProto().equals(this.getClass().cast(other).getProto()); + } + return false; + } + + @Override + public String toString() { + return TextFormat.shortDebugString(getProto()); + } + + @Override + public boolean getFilterInactiveSubClusters() { + GetSubClustersInfoRequestProtoOrBuilder p = viaProto ? proto : builder; + return p.getFilterInactiveSubclusters(); + } + + @Override + public void setFilterInactiveSubClusters(boolean filterInactiveSubClusters) { + maybeInitBuilder(); + builder.setFilterInactiveSubclusters(filterInactiveSubClusters); + } + +} diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-common/src/main/java/org/apache/hadoop/yarn/server/federation/store/records/impl/pb/GetSubClustersInfoResponsePBImpl.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-common/src/main/java/org/apache/hadoop/yarn/server/federation/store/records/impl/pb/GetSubClustersInfoResponsePBImpl.java new file mode 100644 index 00000000000..d39ef7f69b7 --- /dev/null +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-common/src/main/java/org/apache/hadoop/yarn/server/federation/store/records/impl/pb/GetSubClustersInfoResponsePBImpl.java @@ -0,0 +1,184 @@ +/** + * 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.hadoop.yarn.server.federation.store.records.impl.pb; + +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; + +import org.apache.hadoop.classification.InterfaceAudience.Private; +import org.apache.hadoop.classification.InterfaceStability.Unstable; +import org.apache.hadoop.yarn.federation.proto.YarnServerFederationProtos.GetSubClustersInfoResponseProto; +import org.apache.hadoop.yarn.federation.proto.YarnServerFederationProtos.GetSubClustersInfoResponseProtoOrBuilder; +import org.apache.hadoop.yarn.federation.proto.YarnServerFederationProtos.SubClusterInfoProto; +import org.apache.hadoop.yarn.server.federation.store.records.GetSubClustersInfoResponse; +import org.apache.hadoop.yarn.server.federation.store.records.SubClusterInfo; + +import com.google.protobuf.TextFormat; + +/** + * Protocol buffer based implementation of {@link GetSubClustersInfoResponse}. + */ +@Private +@Unstable +public class GetSubClustersInfoResponsePBImpl + extends GetSubClustersInfoResponse { + + private GetSubClustersInfoResponseProto proto = + GetSubClustersInfoResponseProto.getDefaultInstance(); + private GetSubClustersInfoResponseProto.Builder builder = null; + private boolean viaProto = false; + + private List subClusterInfos; + + public GetSubClustersInfoResponsePBImpl() { + builder = GetSubClustersInfoResponseProto.newBuilder(); + } + + public GetSubClustersInfoResponsePBImpl( + GetSubClustersInfoResponseProto proto) { + this.proto = proto; + viaProto = true; + } + + public GetSubClustersInfoResponseProto getProto() { + mergeLocalToProto(); + proto = viaProto ? proto : builder.build(); + viaProto = true; + return proto; + } + + private void mergeLocalToBuilder() { + if (this.subClusterInfos != null) { + addReservationResourcesToProto(); + } + } + + private void mergeLocalToProto() { + if (viaProto) { + maybeInitBuilder(); + } + mergeLocalToBuilder(); + proto = builder.build(); + viaProto = true; + } + + private void maybeInitBuilder() { + if (viaProto || builder == null) { + builder = GetSubClustersInfoResponseProto.newBuilder(proto); + } + viaProto = false; + } + + @Override + public List getSubClusters() { + initSubClustersInfoList(); + return subClusterInfos; + } + + @Override + public void setSubClusters(List subClusters) { + if (subClusters == null) { + builder.clearSubClusterInfos(); + return; + } + this.subClusterInfos = subClusters; + } + + private void initSubClustersInfoList() { + if (this.subClusterInfos != null) { + return; + } + GetSubClustersInfoResponseProtoOrBuilder p = viaProto ? proto : builder; + List subClusterInfosList = p.getSubClusterInfosList(); + subClusterInfos = new ArrayList(); + + for (SubClusterInfoProto r : subClusterInfosList) { + subClusterInfos.add(convertFromProtoFormat(r)); + } + } + + private void addReservationResourcesToProto() { + maybeInitBuilder(); + builder.clearSubClusterInfos(); + if (subClusterInfos == null) { + return; + } + Iterable iterable = + new Iterable() { + @Override + public Iterator iterator() { + return new Iterator() { + + private Iterator iter = + subClusterInfos.iterator(); + + @Override + public boolean hasNext() { + return iter.hasNext(); + } + + @Override + public SubClusterInfoProto next() { + return convertToProtoFormat(iter.next()); + } + + @Override + public void remove() { + throw new UnsupportedOperationException(); + } + + }; + + } + + }; + builder.addAllSubClusterInfos(iterable); + } + + private SubClusterInfoProto convertToProtoFormat(SubClusterInfo r) { + return ((SubClusterInfoPBImpl) r).getProto(); + } + + private SubClusterInfoPBImpl convertFromProtoFormat(SubClusterInfoProto r) { + return new SubClusterInfoPBImpl(r); + } + + @Override + public int hashCode() { + return getProto().hashCode(); + } + + @Override + public boolean equals(Object other) { + if (other == null) { + return false; + } + if (other.getClass().isAssignableFrom(this.getClass())) { + return this.getProto().equals(this.getClass().cast(other).getProto()); + } + return false; + } + + @Override + public String toString() { + return TextFormat.shortDebugString(getProto()); + } + +} diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-common/src/main/java/org/apache/hadoop/yarn/server/federation/store/records/impl/pb/SubClusterDeregisterRequestPBImpl.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-common/src/main/java/org/apache/hadoop/yarn/server/federation/store/records/impl/pb/SubClusterDeregisterRequestPBImpl.java new file mode 100644 index 00000000000..d4c5451471b --- /dev/null +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-common/src/main/java/org/apache/hadoop/yarn/server/federation/store/records/impl/pb/SubClusterDeregisterRequestPBImpl.java @@ -0,0 +1,156 @@ +/** + * 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.hadoop.yarn.server.federation.store.records.impl.pb; + +import org.apache.hadoop.classification.InterfaceAudience.Private; +import org.apache.hadoop.classification.InterfaceStability.Unstable; +import org.apache.hadoop.yarn.federation.proto.YarnServerFederationProtos.SubClusterDeregisterRequestProto; +import org.apache.hadoop.yarn.federation.proto.YarnServerFederationProtos.SubClusterDeregisterRequestProtoOrBuilder; +import org.apache.hadoop.yarn.federation.proto.YarnServerFederationProtos.SubClusterIdProto; +import org.apache.hadoop.yarn.federation.proto.YarnServerFederationProtos.SubClusterStateProto; +import org.apache.hadoop.yarn.server.federation.store.records.SubClusterDeregisterRequest; +import org.apache.hadoop.yarn.server.federation.store.records.SubClusterId; +import org.apache.hadoop.yarn.server.federation.store.records.SubClusterState; + +import com.google.protobuf.TextFormat; + +/** + * Protocol buffer based implementation of {@link SubClusterDeregisterRequest}. + */ +@Private +@Unstable +public class SubClusterDeregisterRequestPBImpl + extends SubClusterDeregisterRequest { + + private SubClusterDeregisterRequestProto proto = + SubClusterDeregisterRequestProto.getDefaultInstance(); + private SubClusterDeregisterRequestProto.Builder builder = null; + private boolean viaProto = false; + + public SubClusterDeregisterRequestPBImpl() { + builder = SubClusterDeregisterRequestProto.newBuilder(); + } + + public SubClusterDeregisterRequestPBImpl( + SubClusterDeregisterRequestProto proto) { + this.proto = proto; + viaProto = true; + } + + public SubClusterDeregisterRequestProto getProto() { + mergeLocalToProto(); + proto = viaProto ? proto : builder.build(); + viaProto = true; + return proto; + } + + private void mergeLocalToProto() { + if (viaProto) { + maybeInitBuilder(); + } + mergeLocalToBuilder(); + proto = builder.build(); + viaProto = true; + } + + private void maybeInitBuilder() { + if (viaProto || builder == null) { + builder = SubClusterDeregisterRequestProto.newBuilder(proto); + } + viaProto = false; + } + + private void mergeLocalToBuilder() { + } + + @Override + public int hashCode() { + return getProto().hashCode(); + } + + @Override + public boolean equals(Object other) { + if (other == null) { + return false; + } + if (other.getClass().isAssignableFrom(this.getClass())) { + return this.getProto().equals(this.getClass().cast(other).getProto()); + } + return false; + } + + @Override + public String toString() { + return TextFormat.shortDebugString(getProto()); + } + + @Override + public SubClusterId getSubClusterId() { + SubClusterDeregisterRequestProtoOrBuilder p = viaProto ? proto : builder; + if (!p.hasSubClusterId()) { + return null; + } + return convertFromProtoFormat(p.getSubClusterId()); + } + + @Override + public void setSubClusterId(SubClusterId subClusterId) { + maybeInitBuilder(); + if (subClusterId == null) { + builder.clearSubClusterId(); + return; + } + builder.setSubClusterId(convertToProtoFormat(subClusterId)); + } + + @Override + public SubClusterState getState() { + SubClusterDeregisterRequestProtoOrBuilder p = viaProto ? proto : builder; + if (!p.hasState()) { + return null; + } + return convertFromProtoFormat(p.getState()); + } + + @Override + public void setState(SubClusterState state) { + maybeInitBuilder(); + if (state == null) { + builder.clearState(); + return; + } + builder.setState(convertToProtoFormat(state)); + } + + private SubClusterId convertFromProtoFormat(SubClusterIdProto sc) { + return new SubClusterIdPBImpl(sc); + } + + private SubClusterIdProto convertToProtoFormat(SubClusterId sc) { + return ((SubClusterIdPBImpl) sc).getProto(); + } + + private SubClusterState convertFromProtoFormat(SubClusterStateProto state) { + return SubClusterState.valueOf(state.name()); + } + + private SubClusterStateProto convertToProtoFormat(SubClusterState state) { + return SubClusterStateProto.valueOf(state.name()); + } + +} diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-common/src/main/java/org/apache/hadoop/yarn/server/federation/store/records/impl/pb/SubClusterDeregisterResponsePBImpl.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-common/src/main/java/org/apache/hadoop/yarn/server/federation/store/records/impl/pb/SubClusterDeregisterResponsePBImpl.java new file mode 100644 index 00000000000..9e007968e26 --- /dev/null +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-common/src/main/java/org/apache/hadoop/yarn/server/federation/store/records/impl/pb/SubClusterDeregisterResponsePBImpl.java @@ -0,0 +1,77 @@ +/** + * 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.hadoop.yarn.server.federation.store.records.impl.pb; + +import org.apache.hadoop.classification.InterfaceAudience.Private; +import org.apache.hadoop.classification.InterfaceStability.Unstable; +import org.apache.hadoop.yarn.federation.proto.YarnServerFederationProtos.SubClusterDeregisterResponseProto; +import org.apache.hadoop.yarn.server.federation.store.records.SubClusterDeregisterResponse; + +import com.google.protobuf.TextFormat; + +/** + * Protocol buffer based implementation of {@link SubClusterDeregisterResponse}. + */ +@Private +@Unstable +public class SubClusterDeregisterResponsePBImpl + extends SubClusterDeregisterResponse { + + private SubClusterDeregisterResponseProto proto = + SubClusterDeregisterResponseProto.getDefaultInstance(); + private SubClusterDeregisterResponseProto.Builder builder = null; + private boolean viaProto = false; + + public SubClusterDeregisterResponsePBImpl() { + builder = SubClusterDeregisterResponseProto.newBuilder(); + } + + public SubClusterDeregisterResponsePBImpl( + SubClusterDeregisterResponseProto proto) { + this.proto = proto; + viaProto = true; + } + + public SubClusterDeregisterResponseProto getProto() { + proto = viaProto ? proto : builder.build(); + viaProto = true; + return proto; + } + + @Override + public int hashCode() { + return getProto().hashCode(); + } + + @Override + public boolean equals(Object other) { + if (other == null) { + return false; + } + if (other.getClass().isAssignableFrom(this.getClass())) { + return this.getProto().equals(this.getClass().cast(other).getProto()); + } + return false; + } + + @Override + public String toString() { + return TextFormat.shortDebugString(getProto()); + } + +} diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-common/src/main/java/org/apache/hadoop/yarn/server/federation/store/records/impl/pb/SubClusterHeartbeatRequestPBImpl.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-common/src/main/java/org/apache/hadoop/yarn/server/federation/store/records/impl/pb/SubClusterHeartbeatRequestPBImpl.java new file mode 100644 index 00000000000..ca6b154bdc4 --- /dev/null +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-common/src/main/java/org/apache/hadoop/yarn/server/federation/store/records/impl/pb/SubClusterHeartbeatRequestPBImpl.java @@ -0,0 +1,192 @@ +/** + * 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.hadoop.yarn.server.federation.store.records.impl.pb; + +import org.apache.hadoop.classification.InterfaceAudience.Private; +import org.apache.hadoop.classification.InterfaceStability.Unstable; +import org.apache.hadoop.yarn.federation.proto.YarnServerFederationProtos.SubClusterHeartbeatRequestProto; +import org.apache.hadoop.yarn.federation.proto.YarnServerFederationProtos.SubClusterHeartbeatRequestProtoOrBuilder; +import org.apache.hadoop.yarn.federation.proto.YarnServerFederationProtos.SubClusterIdProto; +import org.apache.hadoop.yarn.federation.proto.YarnServerFederationProtos.SubClusterStateProto; +import org.apache.hadoop.yarn.server.federation.store.records.SubClusterHeartbeatRequest; +import org.apache.hadoop.yarn.server.federation.store.records.SubClusterId; +import org.apache.hadoop.yarn.server.federation.store.records.SubClusterState; + +import com.google.protobuf.TextFormat; + +/** + * Protocol buffer based implementation of {@link SubClusterHeartbeatRequest}. + */ +@Private +@Unstable +public class SubClusterHeartbeatRequestPBImpl + extends SubClusterHeartbeatRequest { + + private SubClusterHeartbeatRequestProto proto = + SubClusterHeartbeatRequestProto.getDefaultInstance(); + private SubClusterHeartbeatRequestProto.Builder builder = null; + private boolean viaProto = false; + + private SubClusterId subClusterId = null; + + public SubClusterHeartbeatRequestPBImpl() { + builder = SubClusterHeartbeatRequestProto.newBuilder(); + } + + public SubClusterHeartbeatRequestPBImpl( + SubClusterHeartbeatRequestProto proto) { + this.proto = proto; + viaProto = true; + } + + public SubClusterHeartbeatRequestProto getProto() { + mergeLocalToProto(); + proto = viaProto ? proto : builder.build(); + viaProto = true; + return proto; + } + + private void mergeLocalToProto() { + if (viaProto) { + maybeInitBuilder(); + } + mergeLocalToBuilder(); + proto = builder.build(); + viaProto = true; + } + + private void maybeInitBuilder() { + if (viaProto || builder == null) { + builder = SubClusterHeartbeatRequestProto.newBuilder(proto); + } + viaProto = false; + } + + private void mergeLocalToBuilder() { + if (this.subClusterId != null) { + builder.setSubClusterId(convertToProtoFormat(this.subClusterId)); + } + } + + @Override + public int hashCode() { + return getProto().hashCode(); + } + + @Override + public boolean equals(Object other) { + if (other == null) { + return false; + } + if (other.getClass().isAssignableFrom(this.getClass())) { + return this.getProto().equals(this.getClass().cast(other).getProto()); + } + return false; + } + + @Override + public String toString() { + return TextFormat.shortDebugString(getProto()); + } + + @Override + public SubClusterId getSubClusterId() { + SubClusterHeartbeatRequestProtoOrBuilder p = viaProto ? proto : builder; + if (this.subClusterId != null) { + return this.subClusterId; + } + if (!p.hasSubClusterId()) { + return null; + } + this.subClusterId = convertFromProtoFormat(p.getSubClusterId()); + return this.subClusterId; + } + + @Override + public void setSubClusterId(SubClusterId subClusterId) { + maybeInitBuilder(); + if (subClusterId == null) { + builder.clearSubClusterId(); + } + this.subClusterId = subClusterId; + } + + @Override + public long getLastHeartBeat() { + SubClusterHeartbeatRequestProtoOrBuilder p = viaProto ? proto : builder; + return p.getLastHeartBeat(); + } + + @Override + public void setLastHeartBeat(long time) { + maybeInitBuilder(); + builder.setLastHeartBeat(time); + } + + @Override + public SubClusterState getState() { + SubClusterHeartbeatRequestProtoOrBuilder p = viaProto ? proto : builder; + if (!p.hasState()) { + return null; + } + return convertFromProtoFormat(p.getState()); + } + + @Override + public void setState(SubClusterState state) { + maybeInitBuilder(); + if (state == null) { + builder.clearState(); + return; + } + builder.setState(convertToProtoFormat(state)); + } + + @Override + public String getCapability() { + SubClusterHeartbeatRequestProtoOrBuilder p = viaProto ? proto : builder; + return (p.hasCapability()) ? p.getCapability() : null; + } + + @Override + public void setCapability(String capability) { + maybeInitBuilder(); + if (capability == null) { + builder.clearCapability(); + return; + } + builder.setCapability(capability); + } + + private SubClusterId convertFromProtoFormat(SubClusterIdProto clusterId) { + return new SubClusterIdPBImpl(clusterId); + } + + private SubClusterIdProto convertToProtoFormat(SubClusterId clusterId) { + return ((SubClusterIdPBImpl) clusterId).getProto(); + } + + private SubClusterState convertFromProtoFormat(SubClusterStateProto state) { + return SubClusterState.valueOf(state.name()); + } + + private SubClusterStateProto convertToProtoFormat(SubClusterState state) { + return SubClusterStateProto.valueOf(state.name()); + } + +} diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-common/src/main/java/org/apache/hadoop/yarn/server/federation/store/records/impl/pb/SubClusterHeartbeatResponsePBImpl.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-common/src/main/java/org/apache/hadoop/yarn/server/federation/store/records/impl/pb/SubClusterHeartbeatResponsePBImpl.java new file mode 100644 index 00000000000..2020c1ad749 --- /dev/null +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-common/src/main/java/org/apache/hadoop/yarn/server/federation/store/records/impl/pb/SubClusterHeartbeatResponsePBImpl.java @@ -0,0 +1,77 @@ +/** + * 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.hadoop.yarn.server.federation.store.records.impl.pb; + +import org.apache.hadoop.classification.InterfaceAudience.Private; +import org.apache.hadoop.classification.InterfaceStability.Unstable; +import org.apache.hadoop.yarn.federation.proto.YarnServerFederationProtos.SubClusterHeartbeatResponseProto; +import org.apache.hadoop.yarn.server.federation.store.records.SubClusterHeartbeatResponse; + +import com.google.protobuf.TextFormat; + +/** + * Protocol buffer based implementation of {@link SubClusterHeartbeatResponse}. + */ +@Private +@Unstable +public class SubClusterHeartbeatResponsePBImpl + extends SubClusterHeartbeatResponse { + + private SubClusterHeartbeatResponseProto proto = + SubClusterHeartbeatResponseProto.getDefaultInstance(); + private SubClusterHeartbeatResponseProto.Builder builder = null; + private boolean viaProto = false; + + public SubClusterHeartbeatResponsePBImpl() { + builder = SubClusterHeartbeatResponseProto.newBuilder(); + } + + public SubClusterHeartbeatResponsePBImpl( + SubClusterHeartbeatResponseProto proto) { + this.proto = proto; + viaProto = true; + } + + public SubClusterHeartbeatResponseProto getProto() { + proto = viaProto ? proto : builder.build(); + viaProto = true; + return proto; + } + + @Override + public int hashCode() { + return getProto().hashCode(); + } + + @Override + public boolean equals(Object other) { + if (other == null) { + return false; + } + if (other.getClass().isAssignableFrom(this.getClass())) { + return this.getProto().equals(this.getClass().cast(other).getProto()); + } + return false; + } + + @Override + public String toString() { + return TextFormat.shortDebugString(getProto()); + } + +} diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-common/src/main/java/org/apache/hadoop/yarn/server/federation/store/records/impl/pb/SubClusterIdPBImpl.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-common/src/main/java/org/apache/hadoop/yarn/server/federation/store/records/impl/pb/SubClusterIdPBImpl.java new file mode 100644 index 00000000000..1bf96bfc503 --- /dev/null +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-common/src/main/java/org/apache/hadoop/yarn/server/federation/store/records/impl/pb/SubClusterIdPBImpl.java @@ -0,0 +1,75 @@ +/** + * 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.hadoop.yarn.server.federation.store.records.impl.pb; + +import org.apache.hadoop.classification.InterfaceAudience.Private; +import org.apache.hadoop.classification.InterfaceStability.Unstable; +import org.apache.hadoop.yarn.federation.proto.YarnServerFederationProtos.SubClusterIdProto; +import org.apache.hadoop.yarn.federation.proto.YarnServerFederationProtos.SubClusterIdProtoOrBuilder; +import org.apache.hadoop.yarn.server.federation.store.records.SubClusterId; + +/** + * Protocol buffer based implementation of {@link SubClusterId}. + */ +@Private +@Unstable +public class SubClusterIdPBImpl extends SubClusterId { + + private SubClusterIdProto proto = SubClusterIdProto.getDefaultInstance(); + private SubClusterIdProto.Builder builder = null; + private boolean viaProto = false; + + public SubClusterIdPBImpl() { + builder = SubClusterIdProto.newBuilder(); + } + + public SubClusterIdPBImpl(SubClusterIdProto proto) { + this.proto = proto; + viaProto = true; + } + + public SubClusterIdProto getProto() { + proto = viaProto ? proto : builder.build(); + viaProto = true; + return proto; + } + + private void maybeInitBuilder() { + if (viaProto || builder == null) { + builder = SubClusterIdProto.newBuilder(proto); + } + viaProto = false; + } + + @Override + public String getId() { + SubClusterIdProtoOrBuilder p = viaProto ? proto : builder; + return p.getId(); + } + + @Override + protected void setId(String subClusterId) { + maybeInitBuilder(); + if (subClusterId == null) { + builder.clearId(); + return; + } + builder.setId(subClusterId); + } + +} diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-common/src/main/java/org/apache/hadoop/yarn/server/federation/store/records/impl/pb/SubClusterInfoPBImpl.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-common/src/main/java/org/apache/hadoop/yarn/server/federation/store/records/impl/pb/SubClusterInfoPBImpl.java new file mode 100644 index 00000000000..b650b5f085c --- /dev/null +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-common/src/main/java/org/apache/hadoop/yarn/server/federation/store/records/impl/pb/SubClusterInfoPBImpl.java @@ -0,0 +1,267 @@ +/** + * 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.hadoop.yarn.server.federation.store.records.impl.pb; + +import org.apache.hadoop.classification.InterfaceAudience.Private; +import org.apache.hadoop.classification.InterfaceStability.Unstable; +import org.apache.hadoop.yarn.federation.proto.YarnServerFederationProtos.SubClusterIdProto; +import org.apache.hadoop.yarn.federation.proto.YarnServerFederationProtos.SubClusterInfoProto; +import org.apache.hadoop.yarn.federation.proto.YarnServerFederationProtos.SubClusterInfoProtoOrBuilder; +import org.apache.hadoop.yarn.federation.proto.YarnServerFederationProtos.SubClusterStateProto; +import org.apache.hadoop.yarn.server.federation.store.records.SubClusterId; +import org.apache.hadoop.yarn.server.federation.store.records.SubClusterInfo; +import org.apache.hadoop.yarn.server.federation.store.records.SubClusterState; + +import com.google.common.base.Preconditions; +import com.google.protobuf.TextFormat; + +/** + * Protocol buffer based implementation of {@link SubClusterInfo}. + */ +@Private +@Unstable +public class SubClusterInfoPBImpl extends SubClusterInfo { + + private SubClusterInfoProto proto = SubClusterInfoProto.getDefaultInstance(); + private SubClusterInfoProto.Builder builder = null; + private boolean viaProto = false; + + private SubClusterId subClusterId = null; + + public SubClusterInfoPBImpl() { + builder = SubClusterInfoProto.newBuilder(); + } + + public SubClusterInfoPBImpl(SubClusterInfoProto proto) { + this.proto = proto; + viaProto = true; + } + + public SubClusterInfoProto getProto() { + mergeLocalToProto(); + proto = viaProto ? proto : builder.build(); + viaProto = true; + return proto; + } + + private void mergeLocalToProto() { + if (viaProto) { + maybeInitBuilder(); + } + mergeLocalToBuilder(); + proto = builder.build(); + viaProto = true; + } + + private void maybeInitBuilder() { + if (viaProto || builder == null) { + builder = SubClusterInfoProto.newBuilder(proto); + } + viaProto = false; + } + + private void mergeLocalToBuilder() { + if (this.subClusterId != null) { + builder.setSubClusterId(convertToProtoFormat(this.subClusterId)); + } + } + + @Override + public int hashCode() { + return getProto().hashCode(); + } + + @Override + public boolean equals(Object other) { + if (other == null) { + return false; + } + if (other.getClass().isAssignableFrom(this.getClass())) { + return this.getProto().equals(this.getClass().cast(other).getProto()); + } + return false; + } + + @Override + public String toString() { + return TextFormat.shortDebugString(getProto()); + } + + @Override + public SubClusterId getSubClusterId() { + SubClusterInfoProtoOrBuilder p = viaProto ? proto : builder; + if (this.subClusterId != null) { + return this.subClusterId; + } + if (!p.hasSubClusterId()) { + return null; + } + this.subClusterId = convertFromProtoFormat(p.getSubClusterId()); + return this.subClusterId; + } + + @Override + public void setSubClusterId(SubClusterId subClusterId) { + maybeInitBuilder(); + if (subClusterId == null) { + builder.clearSubClusterId(); + } + this.subClusterId = subClusterId; + } + + @Override + public String getAMRMServiceAddress() { + SubClusterInfoProtoOrBuilder p = viaProto ? proto : builder; + return (p.hasAMRMServiceAddress()) ? p.getAMRMServiceAddress() : null; + } + + @Override + public void setAMRMServiceAddress(String amRMServiceAddress) { + maybeInitBuilder(); + if (amRMServiceAddress == null) { + builder.clearAMRMServiceAddress(); + return; + } + builder.setAMRMServiceAddress(amRMServiceAddress); + } + + @Override + public String getClientRMServiceAddress() { + SubClusterInfoProtoOrBuilder p = viaProto ? proto : builder; + return (p.hasClientRMServiceAddress()) ? p.getClientRMServiceAddress() + : null; + } + + @Override + public void setClientRMServiceAddress(String clientRMServiceAddress) { + maybeInitBuilder(); + if (clientRMServiceAddress == null) { + builder.clearClientRMServiceAddress(); + return; + } + builder.setClientRMServiceAddress(clientRMServiceAddress); + } + + @Override + public String getRMAdminServiceAddress() { + SubClusterInfoProtoOrBuilder p = viaProto ? proto : builder; + return (p.hasRMAdminServiceAddress()) ? p.getRMAdminServiceAddress() : null; + } + + @Override + public void setRMAdminServiceAddress(String rmAdminServiceAddress) { + maybeInitBuilder(); + if (rmAdminServiceAddress == null) { + builder.clearRMAdminServiceAddress(); + return; + } + builder.setRMAdminServiceAddress(rmAdminServiceAddress); + } + + @Override + public String getRMWebServiceAddress() { + SubClusterInfoProtoOrBuilder p = viaProto ? proto : builder; + return (p.hasRMWebServiceAddress()) ? p.getRMWebServiceAddress() : null; + } + + @Override + public void setRMWebServiceAddress(String rmWebServiceAddress) { + maybeInitBuilder(); + if (rmWebServiceAddress == null) { + builder.clearRMWebServiceAddress(); + return; + } + builder.setRMWebServiceAddress(rmWebServiceAddress); + } + + @Override + public long getLastHeartBeat() { + SubClusterInfoProtoOrBuilder p = viaProto ? proto : builder; + return p.getLastHeartBeat(); + } + + @Override + public void setLastHeartBeat(long time) { + maybeInitBuilder(); + builder.setLastHeartBeat(time); + } + + @Override + public SubClusterState getState() { + SubClusterInfoProtoOrBuilder p = viaProto ? proto : builder; + if (!p.hasState()) { + return null; + } + return convertFromProtoFormat(p.getState()); + } + + @Override + public void setState(SubClusterState state) { + maybeInitBuilder(); + if (state == null) { + builder.clearState(); + return; + } + builder.setState(convertToProtoFormat(state)); + } + + @Override + public long getLastStartTime() { + SubClusterInfoProtoOrBuilder p = viaProto ? proto : builder; + return (p.hasLastStartTime()) ? p.getLastStartTime() : 0; + } + + @Override + public void setLastStartTime(long lastStartTime) { + Preconditions.checkNotNull(builder); + builder.setLastStartTime(lastStartTime); + } + + @Override + public String getCapability() { + SubClusterInfoProtoOrBuilder p = viaProto ? proto : builder; + return (p.hasCapability()) ? p.getCapability() : null; + } + + @Override + public void setCapability(String capability) { + maybeInitBuilder(); + if (capability == null) { + builder.clearCapability(); + return; + } + builder.setCapability(capability); + } + + private SubClusterId convertFromProtoFormat(SubClusterIdProto clusterId) { + return new SubClusterIdPBImpl(clusterId); + } + + private SubClusterIdProto convertToProtoFormat(SubClusterId clusterId) { + return ((SubClusterIdPBImpl) clusterId).getProto(); + } + + private SubClusterState convertFromProtoFormat(SubClusterStateProto state) { + return SubClusterState.valueOf(state.name()); + } + + private SubClusterStateProto convertToProtoFormat(SubClusterState state) { + return SubClusterStateProto.valueOf(state.name()); + } + +} diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-common/src/main/java/org/apache/hadoop/yarn/server/federation/store/records/impl/pb/SubClusterRegisterRequestPBImpl.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-common/src/main/java/org/apache/hadoop/yarn/server/federation/store/records/impl/pb/SubClusterRegisterRequestPBImpl.java new file mode 100644 index 00000000000..3429cc91712 --- /dev/null +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-common/src/main/java/org/apache/hadoop/yarn/server/federation/store/records/impl/pb/SubClusterRegisterRequestPBImpl.java @@ -0,0 +1,134 @@ +/** + * 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.hadoop.yarn.server.federation.store.records.impl.pb; + +import org.apache.hadoop.classification.InterfaceAudience.Private; +import org.apache.hadoop.classification.InterfaceStability.Unstable; +import org.apache.hadoop.yarn.federation.proto.YarnServerFederationProtos.SubClusterInfoProto; +import org.apache.hadoop.yarn.federation.proto.YarnServerFederationProtos.SubClusterRegisterRequestProto; +import org.apache.hadoop.yarn.federation.proto.YarnServerFederationProtos.SubClusterRegisterRequestProtoOrBuilder; +import org.apache.hadoop.yarn.server.federation.store.records.SubClusterInfo; +import org.apache.hadoop.yarn.server.federation.store.records.SubClusterRegisterRequest; + +import com.google.protobuf.TextFormat; + +/** + * Protocol buffer based implementation of {@link SubClusterRegisterRequest}. + */ +@Private +@Unstable +public class SubClusterRegisterRequestPBImpl extends SubClusterRegisterRequest { + + private SubClusterRegisterRequestProto proto = + SubClusterRegisterRequestProto.getDefaultInstance(); + private SubClusterRegisterRequestProto.Builder builder = null; + private boolean viaProto = false; + + private SubClusterInfo subClusterInfo = null; + + public SubClusterRegisterRequestPBImpl() { + builder = SubClusterRegisterRequestProto.newBuilder(); + } + + public SubClusterRegisterRequestPBImpl(SubClusterRegisterRequestProto proto) { + this.proto = proto; + viaProto = true; + } + + public SubClusterRegisterRequestProto getProto() { + mergeLocalToProto(); + proto = viaProto ? proto : builder.build(); + viaProto = true; + return proto; + } + + private void mergeLocalToProto() { + if (viaProto) { + maybeInitBuilder(); + } + mergeLocalToBuilder(); + proto = builder.build(); + viaProto = true; + } + + private void maybeInitBuilder() { + if (viaProto || builder == null) { + builder = SubClusterRegisterRequestProto.newBuilder(proto); + } + viaProto = false; + } + + private void mergeLocalToBuilder() { + if (this.subClusterInfo != null) { + builder.setSubClusterInfo(convertToProtoFormat(this.subClusterInfo)); + } + } + + @Override + public int hashCode() { + return getProto().hashCode(); + } + + @Override + public boolean equals(Object other) { + if (other == null) { + return false; + } + if (other.getClass().isAssignableFrom(this.getClass())) { + return this.getProto().equals(this.getClass().cast(other).getProto()); + } + return false; + } + + @Override + public String toString() { + return TextFormat.shortDebugString(getProto()); + } + + @Override + public SubClusterInfo getSubClusterInfo() { + SubClusterRegisterRequestProtoOrBuilder p = viaProto ? proto : builder; + if (this.subClusterInfo != null) { + return this.subClusterInfo; + } + if (!p.hasSubClusterInfo()) { + return null; + } + this.subClusterInfo = convertFromProtoFormat(p.getSubClusterInfo()); + return this.subClusterInfo; + } + + @Override + public void setSubClusterInfo(SubClusterInfo subClusterInfo) { + maybeInitBuilder(); + if (subClusterInfo == null) { + builder.clearSubClusterInfo(); + } + this.subClusterInfo = subClusterInfo; + } + + private SubClusterInfo convertFromProtoFormat( + SubClusterInfoProto clusterInfo) { + return new SubClusterInfoPBImpl(clusterInfo); + } + + private SubClusterInfoProto convertToProtoFormat(SubClusterInfo clusterInfo) { + return ((SubClusterInfoPBImpl) clusterInfo).getProto(); + } + +} diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-common/src/main/java/org/apache/hadoop/yarn/server/federation/store/records/impl/pb/SubClusterRegisterResponsePBImpl.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-common/src/main/java/org/apache/hadoop/yarn/server/federation/store/records/impl/pb/SubClusterRegisterResponsePBImpl.java new file mode 100644 index 00000000000..68930e33b10 --- /dev/null +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-common/src/main/java/org/apache/hadoop/yarn/server/federation/store/records/impl/pb/SubClusterRegisterResponsePBImpl.java @@ -0,0 +1,77 @@ +/** + * 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.hadoop.yarn.server.federation.store.records.impl.pb; + +import org.apache.hadoop.classification.InterfaceAudience.Private; +import org.apache.hadoop.classification.InterfaceStability.Unstable; +import org.apache.hadoop.yarn.federation.proto.YarnServerFederationProtos.SubClusterRegisterResponseProto; +import org.apache.hadoop.yarn.server.federation.store.records.SubClusterRegisterResponse; + +import com.google.protobuf.TextFormat; + +/** + * Protocol buffer based implementation of {@link SubClusterRegisterResponse}. + */ +@Private +@Unstable +public class SubClusterRegisterResponsePBImpl + extends SubClusterRegisterResponse { + + private SubClusterRegisterResponseProto proto = + SubClusterRegisterResponseProto.getDefaultInstance(); + private SubClusterRegisterResponseProto.Builder builder = null; + private boolean viaProto = false; + + public SubClusterRegisterResponsePBImpl() { + builder = SubClusterRegisterResponseProto.newBuilder(); + } + + public SubClusterRegisterResponsePBImpl( + SubClusterRegisterResponseProto proto) { + this.proto = proto; + viaProto = true; + } + + public SubClusterRegisterResponseProto getProto() { + proto = viaProto ? proto : builder.build(); + viaProto = true; + return proto; + } + + @Override + public int hashCode() { + return getProto().hashCode(); + } + + @Override + public boolean equals(Object other) { + if (other == null) { + return false; + } + if (other.getClass().isAssignableFrom(this.getClass())) { + return this.getProto().equals(this.getClass().cast(other).getProto()); + } + return false; + } + + @Override + public String toString() { + return TextFormat.shortDebugString(getProto()); + } + +} diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-common/src/main/java/org/apache/hadoop/yarn/server/federation/store/records/impl/pb/package-info.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-common/src/main/java/org/apache/hadoop/yarn/server/federation/store/records/impl/pb/package-info.java new file mode 100644 index 00000000000..2f85c487366 --- /dev/null +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-common/src/main/java/org/apache/hadoop/yarn/server/federation/store/records/impl/pb/package-info.java @@ -0,0 +1,17 @@ +/** + * 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.hadoop.yarn.server.federation.store.records.impl.pb; \ No newline at end of file diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-common/src/main/java/org/apache/hadoop/yarn/server/federation/store/records/package-info.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-common/src/main/java/org/apache/hadoop/yarn/server/federation/store/records/package-info.java new file mode 100644 index 00000000000..9a9b28255ba --- /dev/null +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-common/src/main/java/org/apache/hadoop/yarn/server/federation/store/records/package-info.java @@ -0,0 +1,17 @@ +/** + * 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.hadoop.yarn.server.federation.store.records; \ No newline at end of file diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-common/src/main/proto/yarn_server_federation_protos.proto b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-common/src/main/proto/yarn_server_federation_protos.proto new file mode 100644 index 00000000000..1b2e53efc1d --- /dev/null +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-common/src/main/proto/yarn_server_federation_protos.proto @@ -0,0 +1,93 @@ +/** + * 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. + */ + +option java_package = "org.apache.hadoop.yarn.federation.proto"; +option java_outer_classname = "YarnServerFederationProtos"; +option java_generic_services = true; +option java_generate_equals_and_hash = true; +package hadoop.yarn; + +import "yarn_protos.proto"; +import "yarn_server_common_protos.proto"; + +message SubClusterIdProto { + optional string id = 1; +} + +enum SubClusterStateProto { + SC_NEW = 1; + SC_RUNNING = 2; + SC_UNHEALTHY = 3; + SC_DECOMMISSIONING = 4; + SC_LOST = 5; + SC_UNREGISTERED = 6; + SC_DECOMMISSIONED = 7; +} + +message SubClusterInfoProto { + optional SubClusterIdProto sub_cluster_id = 1; + optional string aMRM_service_address = 2; + optional string client_rM_service_address = 3; + optional string rM_admin_service_address = 4; + optional string rM_web_service_address = 5; + optional int64 lastHeartBeat = 6; + optional SubClusterStateProto state = 7; + optional int64 lastStartTime = 8; + optional string capability = 9; +} + +message SubClusterRegisterRequestProto { + optional SubClusterInfoProto sub_cluster_info = 1; +} + +message SubClusterRegisterResponseProto { +} + +message SubClusterHeartbeatRequestProto { + optional SubClusterIdProto sub_cluster_id = 1; + optional int64 lastHeartBeat = 2; + optional SubClusterStateProto state = 3; + optional string capability = 4; +} + +message SubClusterHeartbeatResponseProto { +} + +message SubClusterDeregisterRequestProto { + optional SubClusterIdProto sub_cluster_id = 1; + optional SubClusterStateProto state = 2; +} + +message SubClusterDeregisterResponseProto { +} + +message GetSubClusterInfoRequestProto { + optional SubClusterIdProto sub_cluster_id = 1; +} + +message GetSubClusterInfoResponseProto { + optional SubClusterInfoProto sub_cluster_info = 1; +} + +message GetSubClustersInfoRequestProto { + optional bool filter_inactive_subclusters = 1 [default = true]; +} + +message GetSubClustersInfoResponseProto { + repeated SubClusterInfoProto sub_cluster_infos = 1; +} \ No newline at end of file diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-common/src/test/java/org/apache/hadoop/yarn/server/federation/store/records/TestFederationProtocolRecords.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-common/src/test/java/org/apache/hadoop/yarn/server/federation/store/records/TestFederationProtocolRecords.java new file mode 100644 index 00000000000..681edb1ea4f --- /dev/null +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-common/src/test/java/org/apache/hadoop/yarn/server/federation/store/records/TestFederationProtocolRecords.java @@ -0,0 +1,133 @@ +/** + * 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.hadoop.yarn.server.federation.store.records; + +import org.apache.hadoop.yarn.api.BasePBImplRecordsTest; +import org.apache.hadoop.yarn.api.records.ApplicationId; +import org.apache.hadoop.yarn.federation.proto.YarnServerFederationProtos.GetSubClusterInfoRequestProto; +import org.apache.hadoop.yarn.federation.proto.YarnServerFederationProtos.GetSubClusterInfoResponseProto; +import org.apache.hadoop.yarn.federation.proto.YarnServerFederationProtos.GetSubClustersInfoRequestProto; +import org.apache.hadoop.yarn.federation.proto.YarnServerFederationProtos.GetSubClustersInfoResponseProto; +import org.apache.hadoop.yarn.federation.proto.YarnServerFederationProtos.SubClusterDeregisterRequestProto; +import org.apache.hadoop.yarn.federation.proto.YarnServerFederationProtos.SubClusterDeregisterResponseProto; +import org.apache.hadoop.yarn.federation.proto.YarnServerFederationProtos.SubClusterHeartbeatRequestProto; +import org.apache.hadoop.yarn.federation.proto.YarnServerFederationProtos.SubClusterHeartbeatResponseProto; +import org.apache.hadoop.yarn.federation.proto.YarnServerFederationProtos.SubClusterIdProto; +import org.apache.hadoop.yarn.federation.proto.YarnServerFederationProtos.SubClusterInfoProto; +import org.apache.hadoop.yarn.federation.proto.YarnServerFederationProtos.SubClusterRegisterRequestProto; +import org.apache.hadoop.yarn.federation.proto.YarnServerFederationProtos.SubClusterRegisterResponseProto; +import org.apache.hadoop.yarn.server.federation.store.records.impl.pb.GetSubClusterInfoRequestPBImpl; +import org.apache.hadoop.yarn.server.federation.store.records.impl.pb.GetSubClusterInfoResponsePBImpl; +import org.apache.hadoop.yarn.server.federation.store.records.impl.pb.GetSubClustersInfoRequestPBImpl; +import org.apache.hadoop.yarn.server.federation.store.records.impl.pb.GetSubClustersInfoResponsePBImpl; +import org.apache.hadoop.yarn.server.federation.store.records.impl.pb.SubClusterDeregisterRequestPBImpl; +import org.apache.hadoop.yarn.server.federation.store.records.impl.pb.SubClusterDeregisterResponsePBImpl; +import org.apache.hadoop.yarn.server.federation.store.records.impl.pb.SubClusterHeartbeatRequestPBImpl; +import org.apache.hadoop.yarn.server.federation.store.records.impl.pb.SubClusterHeartbeatResponsePBImpl; +import org.apache.hadoop.yarn.server.federation.store.records.impl.pb.SubClusterIdPBImpl; +import org.apache.hadoop.yarn.server.federation.store.records.impl.pb.SubClusterInfoPBImpl; +import org.apache.hadoop.yarn.server.federation.store.records.impl.pb.SubClusterRegisterRequestPBImpl; +import org.apache.hadoop.yarn.server.federation.store.records.impl.pb.SubClusterRegisterResponsePBImpl; +import org.apache.hadoop.yarn.server.records.Version; +import org.junit.BeforeClass; +import org.junit.Test; + +/** + * Test class for federation protocol records. + */ +public class TestFederationProtocolRecords extends BasePBImplRecordsTest { + + @BeforeClass + public static void setup() throws Exception { + generateByNewInstance(ApplicationId.class); + generateByNewInstance(Version.class); + generateByNewInstance(SubClusterId.class); + generateByNewInstance(SubClusterInfo.class); + } + + @Test + public void testSubClusterId() throws Exception { + validatePBImplRecord(SubClusterIdPBImpl.class, SubClusterIdProto.class); + } + + @Test + public void testSubClusterInfo() throws Exception { + validatePBImplRecord(SubClusterInfoPBImpl.class, SubClusterInfoProto.class); + } + + @Test + public void testSubClusterRegisterRequest() throws Exception { + validatePBImplRecord(SubClusterRegisterRequestPBImpl.class, + SubClusterRegisterRequestProto.class); + } + + @Test + public void testSubClusterRegisterResponse() throws Exception { + validatePBImplRecord(SubClusterRegisterResponsePBImpl.class, + SubClusterRegisterResponseProto.class); + } + + @Test + public void testSubClusterDeregisterRequest() throws Exception { + validatePBImplRecord(SubClusterDeregisterRequestPBImpl.class, + SubClusterDeregisterRequestProto.class); + } + + @Test + public void testSubClusterDeregisterResponse() throws Exception { + validatePBImplRecord(SubClusterDeregisterResponsePBImpl.class, + SubClusterDeregisterResponseProto.class); + } + + @Test + public void testSubClusterHeartbeatRequest() throws Exception { + validatePBImplRecord(SubClusterHeartbeatRequestPBImpl.class, + SubClusterHeartbeatRequestProto.class); + } + + @Test + public void testSubClusterHeartbeatResponse() throws Exception { + validatePBImplRecord(SubClusterHeartbeatResponsePBImpl.class, + SubClusterHeartbeatResponseProto.class); + } + + @Test + public void testGetSubClusterRequest() throws Exception { + validatePBImplRecord(GetSubClusterInfoRequestPBImpl.class, + GetSubClusterInfoRequestProto.class); + } + + @Test + public void testGetSubClusterResponse() throws Exception { + validatePBImplRecord(GetSubClusterInfoResponsePBImpl.class, + GetSubClusterInfoResponseProto.class); + } + + @Test + public void testGetSubClustersInfoRequest() throws Exception { + validatePBImplRecord(GetSubClustersInfoRequestPBImpl.class, + GetSubClustersInfoRequestProto.class); + } + + @Test + public void testGetSubClustersInfoResponse() throws Exception { + validatePBImplRecord(GetSubClustersInfoResponsePBImpl.class, + GetSubClustersInfoResponseProto.class); + } + +} \ No newline at end of file