blob: c0a2574f643cc4b69d88dd878421dec4fb59e83f [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.tez.common;
import java.io.DataInput;
import java.io.DataOutput;
import java.io.IOException;
import java.util.Map;
import java.util.Map.Entry;
import org.apache.hadoop.io.Writable;
import org.apache.hadoop.security.Credentials;
import org.apache.tez.runtime.api.impl.TaskSpec;
import com.google.common.collect.Maps;
public class ContainerTask implements Writable {
TaskSpec taskSpec;
boolean shouldDie;
private Map<String, TezLocalResource> additionalResources;
private Credentials credentials;
private boolean credentialsChanged;
public ContainerTask() {
}
public ContainerTask(TaskSpec taskSpec, boolean shouldDie,
Map<String, TezLocalResource> additionalResources, Credentials credentials, boolean credentialsChanged) {
this.taskSpec = taskSpec;
this.shouldDie = shouldDie;
this.additionalResources = additionalResources;
this.credentials = credentials;
this.credentialsChanged = credentialsChanged;
}
public TaskSpec getTaskSpec() {
return taskSpec;
}
public boolean shouldDie() {
return shouldDie;
}
public Map<String, TezLocalResource> getAdditionalResources() {
return this.additionalResources;
}
public Credentials getCredentials() {
return this.credentials;
}
public boolean haveCredentialsChanged() {
return this.credentialsChanged;
}
@Override
public void write(DataOutput out) throws IOException {
out.writeBoolean(shouldDie);
if (taskSpec != null) {
out.writeBoolean(true);
taskSpec.write(out);
} else {
out.writeBoolean(false);
}
if (additionalResources != null) {
out.writeInt(additionalResources.size());
for (Entry<String, TezLocalResource> lrEntry : additionalResources.entrySet()) {
out.writeUTF(lrEntry.getKey());
lrEntry.getValue().write(out);
}
} else {
out.writeInt(-1);
}
out.writeBoolean(credentialsChanged);
if (credentialsChanged) {
out.writeBoolean(credentials != null);
if (credentials != null) {
credentials.write(out);
}
}
}
@Override
public void readFields(DataInput in) throws IOException {
shouldDie = in.readBoolean();
boolean taskComing = in.readBoolean();
if (taskComing) {
taskSpec = new TaskSpec();
taskSpec.readFields(in);
}
int numAdditionalResources = in.readInt();
additionalResources = Maps.newHashMap();
if (numAdditionalResources != -1) {
for (int i = 0 ; i < numAdditionalResources ; i++) {
String resourceName = in.readUTF();
TezLocalResource localResource = new TezLocalResource();
localResource.readFields(in);
additionalResources.put(resourceName, localResource);
}
}
credentialsChanged = in.readBoolean();
if (credentialsChanged) {
boolean hasCredentials = in.readBoolean();
if (hasCredentials) {
credentials = new Credentials();
credentials.readFields(in);
}
}
}
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append("shouldDie: ").append(shouldDie);
sb.append(", TaskSpec: ");
if (taskSpec == null) {
sb.append("none");
} else {
sb.append(taskSpec);
}
sb.append(", additionalResources: ");
if (additionalResources == null) {
sb.append("none");
} else {
sb.append(additionalResources);
}
sb.append(", credentialsChanged: ").append(credentialsChanged);
sb.append(", credentials: ");
if (credentials == null) {
sb.append("none");
} else {
sb.append("#tokens=").append(credentials.numberOfTokens())
.append(", #secretKeys: ").append(credentials.numberOfSecretKeys());
}
return sb.toString();
}
}