YARN-3662. Federation Membership State Store internal APIs.

This commit is contained in:
Subru Krishnan 2016-07-29 16:53:40 -07:00 committed by Carlo Curino
parent 9d23570172
commit 5424d0899c
32 changed files with 3139 additions and 0 deletions

View File

@ -58,6 +58,13 @@
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-yarn-common</artifactId>
</dependency>
<!-- 'mvn dependency:analyze' fails to detect use of this dependency -->
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-yarn-common</artifactId>
<type>test-jar</type>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.google.guava</groupId>
@ -140,6 +147,7 @@
<include>yarn_server_common_protos.proto</include>
<include>yarn_server_common_service_protos.proto</include>
<include>yarn_server_common_service_protos.proto</include>
<include>yarn_server_federation_protos.proto</include>
<include>ResourceTracker.proto</include>
<include>SCMUploader.proto</include>
<include>collectornodemanager_protocol.proto</include>

View File

@ -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
* <p>
* http://www.apache.org/licenses/LICENSE-2.0
* <p>
* 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
* <em>subcluster(s)</em> 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 <em>subcluster</em> 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 <code>ResourceManager</code>. Upon successful registration, an
* identifier for the <em>subcluster</em> 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 <em>subcluster</em> 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 <code>ResourceManager</code> 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 <em>subcluster</em> 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 <em>subclusters</em> 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;
}

View File

@ -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
* <p>
* http://www.apache.org/licenses/LICENSE-2.0
* <p>
* 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;

View File

@ -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
* <p>
* http://www.apache.org/licenses/LICENSE-2.0
* <p>
* 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);
}

View File

@ -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
* <p>
* http://www.apache.org/licenses/LICENSE-2.0
* <p>
* 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);
}

View File

@ -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);
}

View File

@ -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<SubClusterInfo> 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<SubClusterInfo> 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<SubClusterInfo> subClusters);
}

View File

@ -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
* <p>
* http://www.apache.org/licenses/LICENSE-2.0
* <p>
* 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;
/**
* <p>
* The request sent to set the state of a subcluster to either
* SC_DECOMMISSIONED, SC_LOST, or SC_DEREGISTERED.
*
* <p>
* The update includes details such as:
* <ul>
* <li>{@link SubClusterId}</li>
* <li>{@link SubClusterState}</li>
* </ul>
*/
@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);
}

View File

@ -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
* <p>
* http://www.apache.org/licenses/LICENSE-2.0
* <p>
* 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;
}
}

View File

@ -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
* <p>
* http://www.apache.org/licenses/LICENSE-2.0
* <p>
* 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;
/**
* <p>
* SubClusterHeartbeatRequest is a report of the runtime information of the
* subcluster that is participating in federation.
*
* <p>
* It includes information such as:
* <ul>
* <li>{@link SubClusterId}</li>
* <li>The URL of the subcluster</li>
* <li>The timestamp representing the last start time of the subCluster</li>
* <li>{@code FederationsubClusterState}</li>
* <li>The current capacity and utilization of the subCluster</li>
* </ul>
*/
@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 <code>ClusterMetrics</code>.
*
* @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 <code>ClusterMetrics</code>.
*
* @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() + "]";
}
}

View File

@ -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
* <p>
* http://www.apache.org/licenses/LICENSE-2.0
* <p>
* 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 <code>ResourceManager</code> participating in federation.
* Currently response is empty if the operation was successful, if not an
* exception reporting reason for a failure.
* <p>
* 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;
}
}

View File

@ -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
* <p>
* http://www.apache.org/licenses/LICENSE-2.0
* <p>
* 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;
/**
* <p>
* SubClusterId represents the <em>globally unique</em> identifier for a
* subcluster that is participating in federation.
*
* <p>
* The globally unique nature of the identifier is obtained from the
* <code>FederationMembershipStateStore</code> on initialization.
*/
@Private
@Unstable
public abstract class SubClusterId implements Comparable<SubClusterId> {
@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 <em>subcluster</em> 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 <em>subcluster</em> 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();
}
}

View File

@ -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
* <p>
* http://www.apache.org/licenses/LICENSE-2.0
* <p>
* 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;
/**
* <p>
* SubClusterInfo is a report of the runtime information of the subcluster that
* is participating in federation.
*
* <p>
* It includes information such as:
* <ul>
* <li>{@link SubClusterId}</li>
* <li>The URL of the subcluster</li>
* <li>The timestamp representing the last start time of the subCluster</li>
* <li>{@code FederationsubClusterState}</li>
* <li>The current capacity and utilization of the subCluster</li>
* </ul>
*/
@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
* <code>ResourceManager</code>.
*
* @return the URL of the AM-RM service endpoint of the subcluster
* <code>ResourceManager</code>
*/
@Public
@Unstable
public abstract String getAMRMServiceAddress();
/**
* Set the URL of the AM-RM service endpoint of the subcluster
* <code>ResourceManager</code>.
*
* @param amRMServiceAddress the URL of the AM-RM service endpoint of the
* subcluster <code>ResourceManager</code>
*/
@Private
@Unstable
public abstract void setAMRMServiceAddress(String amRMServiceAddress);
/**
* Get the URL of the client-RM service endpoint of the subcluster
* <code>ResourceManager</code>.
*
* @return the URL of the client-RM service endpoint of the subcluster
* <code>ResourceManager</code>
*/
@Public
@Unstable
public abstract String getClientRMServiceAddress();
/**
* Set the URL of the client-RM service endpoint of the subcluster
* <code>ResourceManager</code>.
*
* @param clientRMServiceAddress the URL of the client-RM service endpoint of
* the subCluster <code>ResourceManager</code>
*/
@Private
@Unstable
public abstract void setClientRMServiceAddress(String clientRMServiceAddress);
/**
* Get the URL of the <code>ResourceManager</code> administration service.
*
* @return the URL of the <code>ResourceManager</code> administration service
*/
@Public
@Unstable
public abstract String getRMAdminServiceAddress();
/**
* Set the URL of the <code>ResourceManager</code> administration service.
*
* @param rmAdminServiceAddress the URL of the <code>ResourceManager</code>
* administration service.
*/
@Private
@Unstable
public abstract void setRMAdminServiceAddress(String rmAdminServiceAddress);
/**
* Get the URL of the <code>ResourceManager</code> web application interface.
*
* @return the URL of the <code>ResourceManager</code> web application
* interface.
*/
@Public
@Unstable
public abstract String getRMWebServiceAddress();
/**
* Set the URL of the <code>ResourceManager</code> web application interface.
*
* @param rmWebServiceAddress the URL of the <code>ResourceManager</code> 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 <code>ClusterMetrics</code>.
*
* @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 <code>ClusterMetrics</code>.
*
* @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() + "]";
}
}

View File

@ -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
* <p>
* http://www.apache.org/licenses/LICENSE-2.0
* <p>
* 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;
/**
* <p>
* SubClusterRegisterRequest is a request by a sub-cluster
* {@code ResourceManager} to participate in federation.
*
* <p>
* It includes information such as:
* <ul>
* <li>{@link SubClusterId}</li>
* <li>The URL of the subcluster</li>
* <li>The timestamp representing the last start time of the subCluster</li>
* <li>{@code FederationsubClusterState}</li>
* <li>The current capacity and utilization of the subCluster</li>
* </ul>
*/
@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);
}

View File

@ -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
* <p>
* http://www.apache.org/licenses/LICENSE-2.0
* <p>
* 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
* <code>ResourceManager</code> 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;
}
}

View File

@ -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
* <p>
* http://www.apache.org/licenses/LICENSE-2.0
* <p>
* 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;
/**
* <p>
* State of a <code>SubCluster</code>.
* </p>
*/
@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);
}
}

View File

@ -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
* <p>
* http://www.apache.org/licenses/LICENSE-2.0
* <p>
* 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();
}
}

View File

@ -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
* <p>
* http://www.apache.org/licenses/LICENSE-2.0
* <p>
* 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();
}
}

View File

@ -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
* <p>
* http://www.apache.org/licenses/LICENSE-2.0
* <p>
* 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);
}
}

View File

@ -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<SubClusterInfo> 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<SubClusterInfo> getSubClusters() {
initSubClustersInfoList();
return subClusterInfos;
}
@Override
public void setSubClusters(List<SubClusterInfo> subClusters) {
if (subClusters == null) {
builder.clearSubClusterInfos();
return;
}
this.subClusterInfos = subClusters;
}
private void initSubClustersInfoList() {
if (this.subClusterInfos != null) {
return;
}
GetSubClustersInfoResponseProtoOrBuilder p = viaProto ? proto : builder;
List<SubClusterInfoProto> subClusterInfosList = p.getSubClusterInfosList();
subClusterInfos = new ArrayList<SubClusterInfo>();
for (SubClusterInfoProto r : subClusterInfosList) {
subClusterInfos.add(convertFromProtoFormat(r));
}
}
private void addReservationResourcesToProto() {
maybeInitBuilder();
builder.clearSubClusterInfos();
if (subClusterInfos == null) {
return;
}
Iterable<SubClusterInfoProto> iterable =
new Iterable<SubClusterInfoProto>() {
@Override
public Iterator<SubClusterInfoProto> iterator() {
return new Iterator<SubClusterInfoProto>() {
private Iterator<SubClusterInfo> 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());
}
}

View File

@ -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
* <p>
* http://www.apache.org/licenses/LICENSE-2.0
* <p>
* 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());
}
}

View File

@ -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
* <p>
* http://www.apache.org/licenses/LICENSE-2.0
* <p>
* 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());
}
}

View File

@ -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
* <p>
* http://www.apache.org/licenses/LICENSE-2.0
* <p>
* 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());
}
}

View File

@ -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
* <p>
* http://www.apache.org/licenses/LICENSE-2.0
* <p>
* 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());
}
}

View File

@ -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
* <p>
* http://www.apache.org/licenses/LICENSE-2.0
* <p>
* 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);
}
}

View File

@ -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
* <p>
* http://www.apache.org/licenses/LICENSE-2.0
* <p>
* 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());
}
}

View File

@ -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
* <p>
* http://www.apache.org/licenses/LICENSE-2.0
* <p>
* 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();
}
}

View File

@ -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
* <p>
* http://www.apache.org/licenses/LICENSE-2.0
* <p>
* 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());
}
}

View File

@ -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
* <p>
* http://www.apache.org/licenses/LICENSE-2.0
* <p>
* 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;

View File

@ -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
* <p>
* http://www.apache.org/licenses/LICENSE-2.0
* <p>
* 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;

View File

@ -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;
}

View File

@ -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
* <p>
* http://www.apache.org/licenses/LICENSE-2.0
* <p>
* 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);
}
}