Skip to content

Commit 04e7aa8

Browse files
committed
YARN-11536. Fix CheckStyle.
1 parent 1c2aabd commit 04e7aa8

File tree

8 files changed

+362
-11
lines changed

8 files changed

+362
-11
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
/**
2+
* Licensed to the Apache Software Foundation (ASF) under one
3+
* or more contributor license agreements. See the NOTICE file
4+
* distributed with this work for additional information
5+
* regarding copyright ownership. The ASF licenses this file
6+
* to you under the Apache License, Version 2.0 (the
7+
* "License"); you may not use this file except in compliance
8+
* with the License. You may obtain a copy of the License at
9+
*
10+
* http://www.apache.org/licenses/LICENSE-2.0
11+
*
12+
* Unless required by applicable law or agreed to in writing, software
13+
* distributed under the License is distributed on an "AS IS" BASIS,
14+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15+
* See the License for the specific language governing permissions and
16+
* limitations under the License.
17+
*/
18+
package org.apache.hadoop.yarn.server.api.protocolrecords;
19+
20+
import org.apache.hadoop.classification.InterfaceAudience.Public;
21+
import org.apache.hadoop.classification.InterfaceAudience.Private;
22+
import org.apache.hadoop.classification.InterfaceStability.Unstable;
23+
import org.apache.hadoop.yarn.util.Records;
24+
25+
@Private
26+
@Unstable
27+
public abstract class BatchSaveFederationQueuePoliciesResponse {
28+
29+
public static BatchSaveFederationQueuePoliciesResponse newInstance() {
30+
return Records.newRecord(BatchSaveFederationQueuePoliciesResponse.class);
31+
}
32+
33+
public static BatchSaveFederationQueuePoliciesResponse newInstance(String msg) {
34+
BatchSaveFederationQueuePoliciesResponse response =
35+
Records.newRecord(BatchSaveFederationQueuePoliciesResponse.class);
36+
response.setMessage(msg);
37+
return response;
38+
}
39+
40+
@Public
41+
@Unstable
42+
public abstract String getMessage();
43+
44+
@Public
45+
@Unstable
46+
public abstract void setMessage(String msg);
47+
}

hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/proto/server/resourcemanager_administration_protocol.proto

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,4 +49,5 @@ service ResourceManagerAdministrationProtocolService {
4949
rpc mapAttributesToNodes(NodesToAttributesMappingRequestProto) returns (NodesToAttributesMappingResponseProto);
5050
rpc deregisterSubCluster(DeregisterSubClusterRequestProto) returns (DeregisterSubClusterResponseProto);
5151
rpc saveFederationQueuePolicy(SaveFederationQueuePolicyRequestProto) returns (SaveFederationQueuePolicyResponseProto);
52+
rpc batchSaveFederationQueuePolicies(BatchSaveFederationQueuePoliciesRequestProto) returns (BatchSaveFederationQueuePoliciesResponseProto);
5253
}

hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/main/java/org/apache/hadoop/yarn/client/cli/RouterCLI.java

Lines changed: 54 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
import org.apache.hadoop.util.ToolRunner;
3333
import org.apache.hadoop.yarn.client.ClientRMProxy;
3434
import org.apache.hadoop.yarn.client.util.FormattingCLIUtils;
35+
import org.apache.hadoop.yarn.client.util.MemoryPageUtils;
3536
import org.apache.hadoop.yarn.conf.YarnConfiguration;
3637
import org.apache.hadoop.yarn.exceptions.YarnException;
3738
import org.apache.hadoop.yarn.server.api.ResourceManagerAdministrationProtocol;
@@ -113,21 +114,20 @@ public class RouterCLI extends Configured implements Tool {
113114
// Command2: policy
114115
// save policy
115116
private static final String OPTION_S = "s";
116-
117117
private static final String OPTION_BATCH_S = "bs";
118-
119118
private static final String OPTION_SAVE = "save";
120-
121119
private static final String OPTION_BATCH_SAVE = "batch-save";
122-
123120
private static final String OPTION_FORMAT = "format";
121+
private static final String OPTION_FILE = "f";
122+
private static final String OPTION_INPUT_FILE = "input-file";
124123

125124
private static final String CMD_POLICY = "-policy";
126125
private static final String FORMAT_XML = "xml";
127126
private static final String FORMAT_JSON = "json";
128127
private static final String XML_TAG_SUBCLUSTERIDINFO = "subClusterIdInfo";
129128
private static final String XML_TAG_AMRMPOLICYWEIGHTS = "amrmPolicyWeights";
130129
private static final String XML_TAG_ROUTERPOLICYWEIGHTS = "routerPolicyWeights";
130+
private static final String XML_TAG_HEADROOMALPHA = "headroomAlpha";
131131

132132
public RouterCLI() {
133133
super();
@@ -338,6 +338,10 @@ private int handlePolicy(String[] args)
338338
"Users can specify the file format using this option. " +
339339
"Currently, there are two supported file formats: XML and JSON. " +
340340
"These files contain the policy information for storing queue policies.");
341+
Option fileOpt = new Option(null, "file", true,
342+
"Users can specify the file format using this option. " +
343+
"Currently, there are two supported file formats: XML and JSON. " +
344+
"These files contain the policy information for storing queue policies.");
341345
formatOpt.setOptionalArg(true);
342346

343347
opts.addOption(saveOpt);
@@ -366,16 +370,31 @@ private int handlePolicy(String[] args)
366370

367371
// Save Queue Policies in Batches
368372
if (cliParser.hasOption(OPTION_BATCH_S) || cliParser.hasOption(OPTION_BATCH_SAVE)) {
373+
374+
// Determine whether the file format is accurate, XML or JSON format.
375+
// If it is not XML or JSON, we will directly prompt the user with an error message.
376+
String format = null;
369377
if (cliParser.hasOption(OPTION_FORMAT)) {
370-
String format = cliParser.getOptionValue(OPTION_FORMAT);
378+
format = cliParser.getOptionValue(OPTION_FORMAT);
371379
if (StringUtils.isBlank(format) ||
372380
StringUtils.equalsAnyIgnoreCase(format, FORMAT_XML, FORMAT_JSON)) {
373381
System.out.println("We currently only support policy configuration files " +
374382
"in XML and JSON formats.");
375383
return EXIT_ERROR;
376384
}
377-
System.out.println("format:" + format);
378385
}
386+
387+
// Parse configuration file path
388+
String filePath = null;
389+
if (cliParser.hasOption(OPTION_FILE) || cliParser.hasOption(OPTION_INPUT_FILE)) {
390+
filePath = cliParser.getOptionValue(OPTION_FILE);
391+
if (StringUtils.isBlank(filePath)) {
392+
filePath = cliParser.getOptionValue(OPTION_INPUT_FILE);
393+
}
394+
}
395+
396+
handBatchSavePolicies(format, filePath);
397+
379398
System.out.println("We need to specify the format of the input file.");
380399
}
381400

@@ -399,7 +418,16 @@ private int handleSavePolicy(String policy) {
399418
private int handBatchSavePolicies(String format, String policyFile) {
400419
LOG.info("Batch Save Federation Policies. Format = {}, PolicyFile = {}.",
401420
format, policyFile);
402-
return 1;
421+
switch (format) {
422+
case FORMAT_JSON:
423+
break;
424+
case FORMAT_XML:
425+
return parseXml2Policies(policyFile);
426+
default:
427+
System.out.println("We currently only support JSON and XML formats.");
428+
return EXIT_ERROR;
429+
}
430+
return EXIT_ERROR;
403431
}
404432

405433
/**
@@ -444,6 +472,22 @@ protected SaveFederationQueuePolicyRequest parsePolicy(String policy) throws Yar
444472
return request;
445473
}
446474

475+
protected int parseXml2Policies(String policiesXml) {
476+
try {
477+
List<FederationQueueWeight> federationQueueWeights = parsePoliciesByXml(policiesXml);
478+
MemoryPageUtils<FederationQueueWeight> memoryPageUtils = new MemoryPageUtils<>(20);
479+
federationQueueWeights.forEach(federationQueueWeight ->
480+
memoryPageUtils.addToMemory(federationQueueWeight));
481+
int pages = memoryPageUtils.getPages();
482+
for (int i = 0; i < pages; i++) {
483+
484+
}
485+
} catch (Exception e) {
486+
487+
}
488+
return 0;
489+
}
490+
447491
protected List<FederationQueueWeight> parsePoliciesByXml(String policiesXml)
448492
throws IOException, SAXException, ParserConfigurationException {
449493

@@ -474,10 +518,11 @@ protected List<FederationQueueWeight> parsePoliciesByXml(String policiesXml)
474518

475519
// parse amrmPolicyWeights / routerPolicyWeights.
476520
String amrmWeight = parsePolicyWeightsNode(queueElement, XML_TAG_AMRMPOLICYWEIGHTS);
477-
String routerWeight = parsePolicyWeightsNode(queueElement, "routerPolicyWeights");
521+
String routerWeight = parsePolicyWeightsNode(queueElement, XML_TAG_ROUTERPOLICYWEIGHTS);
478522

479523
// parse headroomAlpha.
480-
String headroomAlpha = queueElement.getElementsByTagName("headroomAlpha").item(0).getTextContent();
524+
String headroomAlpha = queueElement.getElementsByTagName(XML_TAG_HEADROOMALPHA)
525+
.item(0).getTextContent();
481526

482527
String policyManager = getConf().get(YarnConfiguration.FEDERATION_POLICY_MANAGER,
483528
YarnConfiguration.DEFAULT_FEDERATION_POLICY_MANAGER);

hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/main/java/org/apache/hadoop/yarn/client/util/MemoryPageUtils.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,4 +51,8 @@ public List<T> readFromMemory(int pageNumber) {
5151
}
5252
return dataList.subList(startIndex, endIndex);
5353
}
54+
55+
public int getPages() {
56+
return (dataList.size() / pageSize + 1);
57+
}
5458
}

hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/test/java/org/apache/hadoop/yarn/client/cli/TestRouterCLI.java

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -221,7 +221,7 @@ public void testSavePolicy() throws Exception {
221221
}
222222

223223
@Test
224-
public void testSavePolicies() throws Exception {
224+
public void testParsePoliciesByXml() throws Exception {
225225
String filePath =
226226
TestRouterCLI.class.getClassLoader().getResource("federation-weights.xml").getFile();
227227
List<FederationQueueWeight> federationQueueWeights = rmAdminCLI.parsePoliciesByXml(filePath);
@@ -231,10 +231,15 @@ public void testSavePolicies() throws Exception {
231231
// Queue1: root.a
232232
FederationQueueWeight queueWeight1 = federationQueueWeights.get(0);
233233
assertNotNull(queueWeight1);
234-
assertEquals("", queueWeight1);
234+
assertEquals("root.a", queueWeight1.getQueue());
235+
assertEquals("SC-1:0.7,SC-2:0.3", queueWeight1.getAmrmWeight());
236+
assertEquals("SC-1:0.6,SC-2:0.4", queueWeight1.getRouterWeight());
235237

236238
// Queue2: root.b
237239
FederationQueueWeight queueWeight2 = federationQueueWeights.get(1);
238240
assertNotNull(queueWeight2);
241+
assertEquals("root.b", queueWeight2.getQueue());
242+
assertEquals("SC-1:0.8,SC-2:0.2", queueWeight2.getAmrmWeight());
243+
assertEquals("SC-1:0.6,SC-2:0.4", queueWeight2.getRouterWeight());
239244
}
240245
}

hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/server/api/impl/pb/service/ResourceManagerAdministrationProtocolPBServiceImpl.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222

2323
import org.apache.hadoop.classification.InterfaceAudience.Private;
2424
import org.apache.hadoop.yarn.exceptions.YarnException;
25+
import org.apache.hadoop.yarn.proto.YarnServerResourceManagerServiceProtos;
2526
import org.apache.hadoop.yarn.proto.YarnServerResourceManagerServiceProtos.AddToClusterNodeLabelsRequestProto;
2627
import org.apache.hadoop.yarn.proto.YarnServerResourceManagerServiceProtos.AddToClusterNodeLabelsResponseProto;
2728
import org.apache.hadoop.yarn.proto.YarnServerResourceManagerServiceProtos.CheckForDecommissioningNodesRequestProto;
@@ -399,4 +400,9 @@ public SaveFederationQueuePolicyResponseProto saveFederationQueuePolicy(RpcContr
399400
throw new ServiceException(e);
400401
}
401402
}
403+
404+
@Override
405+
public YarnServerResourceManagerServiceProtos.BatchSaveFederationQueuePoliciesResponseProto batchSaveFederationQueuePolicies(RpcController controller, YarnServerResourceManagerServiceProtos.BatchSaveFederationQueuePoliciesRequestProto request) throws ServiceException {
406+
return null;
407+
}
402408
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,146 @@
1+
/**
2+
* Licensed to the Apache Software Foundation (ASF) under one
3+
* or more contributor license agreements. See the NOTICE file
4+
* distributed with this work for additional information
5+
* regarding copyright ownership. The ASF licenses this file
6+
* to you under the Apache License, Version 2.0 (the
7+
* "License"); you may not use this file except in compliance
8+
* with the License. You may obtain a copy of the License at
9+
*
10+
* http://www.apache.org/licenses/LICENSE-2.0
11+
*
12+
* Unless required by applicable law or agreed to in writing, software
13+
* distributed under the License is distributed on an "AS IS" BASIS,
14+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15+
* See the License for the specific language governing permissions and
16+
* limitations under the License.
17+
*/
18+
package org.apache.hadoop.yarn.server.api.protocolrecords.impl.pb;
19+
20+
import org.apache.commons.lang3.builder.EqualsBuilder;
21+
import org.apache.hadoop.classification.InterfaceAudience.Private;
22+
import org.apache.hadoop.classification.InterfaceStability.Unstable;
23+
import org.apache.hadoop.thirdparty.protobuf.TextFormat;
24+
import org.apache.hadoop.yarn.proto.YarnProtos.FederationQueueWeightProto;
25+
import org.apache.hadoop.yarn.proto.YarnServerResourceManagerServiceProtos.BatchSaveFederationQueuePoliciesRequestProtoOrBuilder;
26+
import org.apache.hadoop.yarn.proto.YarnServerResourceManagerServiceProtos.BatchSaveFederationQueuePoliciesRequestProto;
27+
import org.apache.hadoop.yarn.server.api.protocolrecords.BatchSaveFederationQueuePoliciesRequest;
28+
import org.apache.hadoop.yarn.server.api.protocolrecords.FederationQueueWeight;
29+
30+
import java.util.ArrayList;
31+
import java.util.List;
32+
33+
@Private
34+
@Unstable
35+
public class BatchSaveFederationQueuePoliciesRequestPBImpl
36+
extends BatchSaveFederationQueuePoliciesRequest {
37+
38+
private BatchSaveFederationQueuePoliciesRequestProto proto =
39+
BatchSaveFederationQueuePoliciesRequestProto.getDefaultInstance();
40+
private BatchSaveFederationQueuePoliciesRequestProto.Builder builder = null;
41+
private boolean viaProto = false;
42+
private List<FederationQueueWeight> federationQueueWeights = null;
43+
44+
public BatchSaveFederationQueuePoliciesRequestPBImpl() {
45+
this.builder = BatchSaveFederationQueuePoliciesRequestProto.newBuilder();
46+
}
47+
48+
public BatchSaveFederationQueuePoliciesRequestPBImpl(
49+
BatchSaveFederationQueuePoliciesRequestProto proto) {
50+
this.proto = proto;
51+
viaProto = true;
52+
}
53+
54+
private synchronized void maybeInitBuilder() {
55+
if (viaProto || builder == null) {
56+
builder = BatchSaveFederationQueuePoliciesRequestProto.newBuilder(proto);
57+
}
58+
viaProto = false;
59+
}
60+
61+
private void mergeLocalToProto() {
62+
if (viaProto) {
63+
maybeInitBuilder();
64+
}
65+
if (this.federationQueueWeights != null) {
66+
for (FederationQueueWeight federationQueueWeight : federationQueueWeights) {
67+
FederationQueueWeightPBImpl federationQueueWeightPBImpl =
68+
(FederationQueueWeightPBImpl) federationQueueWeight;
69+
builder.addFederationQueueWeights(federationQueueWeightPBImpl.getProto());
70+
}
71+
}
72+
proto = builder.build();
73+
viaProto = true;
74+
}
75+
76+
public BatchSaveFederationQueuePoliciesRequestProto getProto() {
77+
mergeLocalToProto();
78+
proto = viaProto ? proto : builder.build();
79+
viaProto = true;
80+
return proto;
81+
}
82+
83+
private void initDeregisterSubClustersMapping() {
84+
if (this.federationQueueWeights != null) {
85+
return;
86+
}
87+
88+
BatchSaveFederationQueuePoliciesRequestProtoOrBuilder p = viaProto ? proto : builder;
89+
List<FederationQueueWeightProto> batchSaveFederationQueuePoliciesProtoList =
90+
p.getFederationQueueWeightsList();
91+
92+
List<FederationQueueWeight> attributes = new ArrayList<>();
93+
if (batchSaveFederationQueuePoliciesProtoList == null ||
94+
batchSaveFederationQueuePoliciesProtoList.size() == 0) {
95+
this.federationQueueWeights = attributes;
96+
return;
97+
}
98+
99+
for (FederationQueueWeightProto federationQueueWeightProto :
100+
batchSaveFederationQueuePoliciesProtoList) {
101+
attributes.add(new FederationQueueWeightPBImpl(federationQueueWeightProto));
102+
}
103+
104+
this.federationQueueWeights = attributes;
105+
}
106+
107+
@Override
108+
public List<FederationQueueWeight> getFederationQueueWeights() {
109+
initDeregisterSubClustersMapping();
110+
return this.federationQueueWeights;
111+
}
112+
113+
@Override
114+
public void setFederationQueueWeights(List<FederationQueueWeight> pFederationQueueWeights) {
115+
if (federationQueueWeights == null) {
116+
federationQueueWeights = new ArrayList<>();
117+
}
118+
if(federationQueueWeights == null) {
119+
throw new IllegalArgumentException("federationQueueWeights cannot be null");
120+
}
121+
federationQueueWeights.clear();
122+
federationQueueWeights.addAll(pFederationQueueWeights);
123+
}
124+
125+
@Override
126+
public int hashCode() {
127+
return getProto().hashCode();
128+
}
129+
130+
@Override
131+
public boolean equals(Object other) {
132+
if (!(other instanceof BatchSaveFederationQueuePoliciesRequest)) {
133+
return false;
134+
}
135+
136+
BatchSaveFederationQueuePoliciesRequestPBImpl otherImpl = this.getClass().cast(other);
137+
return new EqualsBuilder()
138+
.append(this.getProto(), otherImpl.getProto())
139+
.isEquals();
140+
}
141+
142+
@Override
143+
public String toString() {
144+
return TextFormat.shortDebugString(getProto());
145+
}
146+
}

0 commit comments

Comments
 (0)