package com.alibaba.jstorm.yarn.context;
import com.google.common.annotations.VisibleForTesting;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.security.Credentials;
import org.apache.hadoop.yarn.api.records.ApplicationAttemptId;
import org.apache.hadoop.yarn.api.records.ApplicationId;
import org.apache.hadoop.yarn.api.records.Container;
import org.apache.hadoop.yarn.api.records.ContainerId;
import org.apache.hadoop.yarn.client.api.AMRMClient;
import org.apache.hadoop.yarn.client.api.async.AMRMClientAsync;
import java.net.InetSocketAddress;
import java.nio.ByteBuffer;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.atomic.AtomicInteger;
/**
* Created by fengjian on 16/4/7.
*/
public class JstormMasterContext implements MasterContext {
private ContainerId containerId;
private ApplicationAttemptId attemptId;
private Credentials credentials;
public Configuration config;
private long submitTime;
private String address;
public BlockingQueue<Container> nimbusContainers = new LinkedBlockingQueue<Container>();
public BlockingQueue<Container> supervisorContainers = new LinkedBlockingQueue<Container>();
// Handle to communicate with the Resource Manager
public AMRMClientAsync amRMClient;
public BlockingQueue<AMRMClient.ContainerRequest> requestBlockingQueue;
public ApplicationAttemptId appAttemptID;
// Hostname of the container
public String appMasterHostname = "";
// Port on which the app master listens for status updates from clients
public int appMasterRpcPort = -1;
public int appMasterThriftPort = -1;
// Tracking url to which app master publishes info for clients to monitor
public String appMasterTrackingUrl = "";
public int maxMemory = 0;
public int maxVcores = 0;
// App Master configuration
// No. of containers to run shell command on
public int numTotalContainers = 1;
// Memory to request for the container on which the shell command will run
public int containerMemory = 2000;
// VirtualCores to request for the container on which the shell command will run
public int containerVirtualCores = 1;
// Counter for completed containers ( complete denotes successful or failed )
public AtomicInteger numCompletedContainers = new AtomicInteger();
public AtomicInteger numAllocatedContainers = new AtomicInteger();
public AtomicInteger numRequestedContainers = new AtomicInteger();
// Count of failed containers
public AtomicInteger numFailedContainers = new AtomicInteger();
// Shell command to be executed
public String shellCommand = "";
// Args to be passed to the shell command
public String shellArgs = "";
// Env variables to be setup for the shell command
public Map<String, String> shellEnv = new HashMap<String, String>();
// Location of shell script ( obtained from info set in env )
// Shell script path in fs
public String scriptPath = "";
public String appMasterJarPath = "";
// Timestamp needed for creating a local resource
public long shellScriptPathTimestamp = 0;
public long jarTimestamp = 0;
// File length needed for local resource
public long shellScriptPathLen = 0;
public long jarPathLen = 0;
// Timeline domain ID
public String domainId = null;
public volatile boolean done;
public ByteBuffer allTokens;
public String service_user_name;
public String instanceName = "";
public String nimbusDataDirPrefix = "";
public String nimbusHost = "";
public String previousNimbusHost = "";
public String user = "";
public String password = "";
public String oldPassword = "";
public String deployPath = "";
public InetSocketAddress rpcServiceAddress;
public JstormMasterContext() {
}
public JstormMasterContext(String user, ContainerId containerId,
ApplicationAttemptId applicationAttemptId,
long appSubmitTime, String nodeHostString,
Configuration yarnConfig) {
this.user = user;
this.containerId = containerId;
this.attemptId = applicationAttemptId;
this.credentials = new Credentials();
this.submitTime = appSubmitTime;
this.address = nodeHostString;
this.config = yarnConfig;
}
@Override
public String getUser() {
return this.user;
}
@Override
public Credentials getCredentials() {
return this.credentials;
}
@Override
public ApplicationId getApplicationID() {
return this.attemptId.getApplicationId();
}
@Override
public ApplicationAttemptId getApplicationAttemptId() {
return this.attemptId;
}
@Override
public ContainerId getContainerId() {
return this.containerId;
}
@Override
public long getSubmitTime() {
return this.submitTime;
}
@Override
public Configuration getConfiguration() {
return config;
}
@Override
public String getAddress() {
return this.address;
}
@Override
public Configuration getYarnConfiguration() {
return this.config;
}
@Override
public BlockingQueue<Container> getContainers() {
return null;
}
@Override
public BlockingQueue<Container> getSupervisorContainers() {
return this.supervisorContainers;
}
@Override
public BlockingQueue<Container> getNimbusContainers() {
return this.nimbusContainers;
}
@Override
public BlockingQueue<AMRMClient.ContainerRequest> getContainerRequest() {
return null;
}
@Override
public Set<String> getUpgradingContainerIds() {
return null;
}
@Override
public Map<String, String> getShellEnv() {
return shellEnv;
}
}