blob: be53abc0f1d4ae36fa44464b466c421235d47597 [file] [log] [blame]
/**
* 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.util;
import java.net.URI;
import java.util.Comparator;
import org.apache.hadoop.yarn.api.records.ApplicationAttemptId;
import org.apache.hadoop.yarn.api.records.ApplicationId;
import org.apache.hadoop.yarn.api.records.ApplicationReport;
import org.apache.hadoop.yarn.api.records.ApplicationState;
import org.apache.hadoop.yarn.api.records.Container;
import org.apache.hadoop.yarn.api.records.ContainerId;
import org.apache.hadoop.yarn.api.records.ContainerState;
import org.apache.hadoop.yarn.api.records.ContainerStatus;
import org.apache.hadoop.yarn.api.records.LocalResource;
import org.apache.hadoop.yarn.api.records.LocalResourceType;
import org.apache.hadoop.yarn.api.records.LocalResourceVisibility;
import org.apache.hadoop.yarn.api.records.NodeId;
import org.apache.hadoop.yarn.api.records.Priority;
import org.apache.hadoop.yarn.api.records.Resource;
import org.apache.hadoop.yarn.api.records.ResourceRequest;
import org.apache.hadoop.yarn.factories.RecordFactory;
import org.apache.hadoop.yarn.factory.providers.RecordFactoryProvider;
/**
* Builder utilities to construct various objects.
*
*/
public class BuilderUtils {
private static final RecordFactory recordFactory = RecordFactoryProvider
.getRecordFactory(null);
public static class ApplicationIdComparator implements
Comparator<ApplicationId> {
@Override
public int compare(ApplicationId a1, ApplicationId a2) {
return a1.compareTo(a2);
}
}
public static class ContainerIdComparator implements
java.util.Comparator<ContainerId> {
@Override
public int compare(ContainerId c1,
ContainerId c2) {
return c1.compareTo(c2);
}
}
public static class ResourceRequestComparator
implements java.util.Comparator<org.apache.hadoop.yarn.api.records.ResourceRequest> {
@Override
public int compare(org.apache.hadoop.yarn.api.records.ResourceRequest r1,
org.apache.hadoop.yarn.api.records.ResourceRequest r2) {
// Compare priority, host and capability
int ret = r1.getPriority().compareTo(r2.getPriority());
if (ret == 0) {
String h1 = r1.getHostName();
String h2 = r2.getHostName();
ret = h1.compareTo(h2);
}
if (ret == 0) {
ret = r1.getCapability().compareTo(r2.getCapability());
}
return ret;
}
}
public static LocalResource newLocalResource(RecordFactory recordFactory,
URI uri, LocalResourceType type, LocalResourceVisibility visibility,
long size, long timestamp) {
LocalResource resource =
recordFactory.newRecordInstance(LocalResource.class);
resource.setResource(ConverterUtils.getYarnUrlFromURI(uri));
resource.setType(type);
resource.setVisibility(visibility);
resource.setSize(size);
resource.setTimestamp(timestamp);
return resource;
}
public static ApplicationId newApplicationId(RecordFactory recordFactory,
long clustertimestamp, CharSequence id) {
ApplicationId applicationId =
recordFactory.newRecordInstance(ApplicationId.class);
applicationId.setId(Integer.valueOf(id.toString()));
applicationId.setClusterTimestamp(clustertimestamp);
return applicationId;
}
public static ApplicationId newApplicationId(RecordFactory recordFactory,
long clusterTimeStamp, int id) {
ApplicationId applicationId =
recordFactory.newRecordInstance(ApplicationId.class);
applicationId.setId(id);
applicationId.setClusterTimestamp(clusterTimeStamp);
return applicationId;
}
public static ApplicationId newApplicationId(long clusterTimeStamp, int id) {
ApplicationId applicationId =
recordFactory.newRecordInstance(ApplicationId.class);
applicationId.setId(id);
applicationId.setClusterTimestamp(clusterTimeStamp);
return applicationId;
}
public static ApplicationId convert(long clustertimestamp, CharSequence id) {
ApplicationId applicationId =
recordFactory.newRecordInstance(ApplicationId.class);
applicationId.setId(Integer.valueOf(id.toString()));
applicationId.setClusterTimestamp(clustertimestamp);
return applicationId;
}
public static ContainerId newContainerId(RecordFactory recordFactory,
ApplicationId appId,
int containerId) {
ContainerId id = recordFactory.newRecordInstance(ContainerId.class);
id.setAppId(appId);
id.setId(containerId);
return id;
}
public static ContainerId newContainerId(RecordFactory recordFactory,
ApplicationAttemptId appAttemptId,
int containerId) {
ContainerId id = recordFactory.newRecordInstance(ContainerId.class);
id.setAppAttemptId(appAttemptId);
id.setAppId(appAttemptId.getApplicationId());
id.setId(containerId);
return id;
}
public static Container clone(Container c) {
Container container = recordFactory.newRecordInstance(Container.class);
container.setId(c.getId());
container.setContainerToken(c.getContainerToken());
container.setNodeId(c.getNodeId());
container.setNodeHttpAddress(c.getNodeHttpAddress());
container.setResource(c.getResource());
container.setState(c.getState());
return container;
}
public static Container newContainer(RecordFactory recordFactory,
ApplicationAttemptId appAttemptId, int containerId, NodeId nodeId,
String nodeHttpAddress, Resource resource) {
ContainerId containerID =
newContainerId(recordFactory, appAttemptId, containerId);
return newContainer(containerID, nodeId, nodeHttpAddress, resource);
}
public static Container newContainer(ContainerId containerId,
NodeId nodeId, String nodeHttpAddress, Resource resource) {
Container container = recordFactory.newRecordInstance(Container.class);
container.setId(containerId);
container.setNodeId(nodeId);
container.setNodeHttpAddress(nodeHttpAddress);
container.setResource(resource);
container.setState(ContainerState.NEW);
ContainerStatus containerStatus = Records.newRecord(ContainerStatus.class);
containerStatus.setContainerId(containerId);
containerStatus.setState(ContainerState.NEW);
container.setContainerStatus(containerStatus);
return container;
}
public static ResourceRequest newResourceRequest(Priority priority,
String hostName, Resource capability, int numContainers) {
ResourceRequest request = recordFactory
.newRecordInstance(ResourceRequest.class);
request.setPriority(priority);
request.setHostName(hostName);
request.setCapability(capability);
request.setNumContainers(numContainers);
return request;
}
public static ResourceRequest newResourceRequest(ResourceRequest r) {
ResourceRequest request = recordFactory
.newRecordInstance(ResourceRequest.class);
request.setPriority(r.getPriority());
request.setHostName(r.getHostName());
request.setCapability(r.getCapability());
request.setNumContainers(r.getNumContainers());
return request;
}
public static ApplicationReport newApplicationReport(
ApplicationId applicationId, String user, String queue, String name,
String host, int rpcPort, String clientToken, ApplicationState state,
String diagnostics, String url) {
ApplicationReport report = recordFactory
.newRecordInstance(ApplicationReport.class);
report.setApplicationId(applicationId);
report.setUser(user);
report.setQueue(queue);
report.setName(name);
report.setHost(host);
report.setRpcPort(rpcPort);
report.setClientToken(clientToken);
report.setState(state);
report.setDiagnostics(diagnostics);
report.setTrackingUrl(url);
return report;
}
}