Skip to content

Commit

Permalink
Use & display original rack and host values where possible
Browse files Browse the repository at this point in the history
(We replace - with _)
  • Loading branch information
wsorenson committed Jul 10, 2015
1 parent 0ce8f88 commit e615d7f
Show file tree
Hide file tree
Showing 4 changed files with 36 additions and 25 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -6,24 +6,31 @@

public class SingularityRack extends SingularityMachineAbstraction<SingularityRack> {

public SingularityRack(String rackId) {
private final String name;

public SingularityRack(String rackId, String name) {
super(rackId);

this.name = name;
}

@JsonCreator
public SingularityRack(@JsonProperty("rackId") String rackId, @JsonProperty("firstSeenAt") long firstSeenAt, @JsonProperty("currentState") SingularityMachineStateHistoryUpdate currentState) {
public SingularityRack(@JsonProperty("rackId") String rackId, @JsonProperty("firstSeenAt") long firstSeenAt,
@JsonProperty("currentState") SingularityMachineStateHistoryUpdate currentState, @JsonProperty("name") String name) {
super(rackId, firstSeenAt, currentState);

this.name = name;
}

@Override
public SingularityRack changeState(SingularityMachineStateHistoryUpdate newState) {
return new SingularityRack(getId(), getFirstSeenAt(), newState);
return new SingularityRack(getId(), getFirstSeenAt(), newState, getName());
}

@JsonIgnore
@Override
public String getName() {
return getId();
return name;
}

@JsonIgnore
Expand All @@ -34,7 +41,7 @@ public String getTypeName() {

@Override
public String toString() {
return "SingularityRack [getId()=" + getId() + ", getFirstSeenAt()=" + getFirstSeenAt() + ", getCurrentState()=" + getCurrentState() + "]";
return "SingularityRack [name=" + name + ", getId()=" + getId() + ", getFirstSeenAt()=" + getFirstSeenAt() + ", getCurrentState()=" + getCurrentState() + "]";
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
import org.apache.mesos.Protos.Environment.Variable;
import org.apache.mesos.Protos.ExecutorID;
import org.apache.mesos.Protos.ExecutorInfo;
import org.apache.mesos.Protos.Offer;
import org.apache.mesos.Protos.Resource;
import org.apache.mesos.Protos.TaskID;
import org.apache.mesos.Protos.TaskInfo;
Expand All @@ -41,7 +42,6 @@
import com.hubspot.singularity.SingularityTask;
import com.hubspot.singularity.SingularityTaskId;
import com.hubspot.singularity.SingularityTaskRequest;
import com.hubspot.singularity.config.SingularityConfiguration;
import com.hubspot.singularity.data.ExecutorIdGenerator;

@Singleton
Expand All @@ -52,21 +52,20 @@ class SingularityMesosTaskBuilder {
private final ObjectMapper objectMapper;
private final SingularitySlaveAndRackManager slaveAndRackManager;
private final ExecutorIdGenerator idGenerator;
private final SingularityConfiguration configuration;

@Inject
SingularityMesosTaskBuilder(ObjectMapper objectMapper, SingularitySlaveAndRackManager slaveAndRackManager, ExecutorIdGenerator idGenerator, SingularityConfiguration configuration) {
SingularityMesosTaskBuilder(ObjectMapper objectMapper, SingularitySlaveAndRackManager slaveAndRackManager, ExecutorIdGenerator idGenerator) {
this.objectMapper = objectMapper;
this.slaveAndRackManager = slaveAndRackManager;
this.idGenerator = idGenerator;
this.configuration = configuration;
}

public SingularityTask buildTask(Protos.Offer offer, List<Resource> availableResources, SingularityTaskRequest taskRequest, Resources desiredTaskResources, Resources desiredExecutorResources) {
final String rackId = slaveAndRackManager.getRackId(offer);
final String host = slaveAndRackManager.getSlaveHost(offer);
final String host = slaveAndRackManager.getSafeString(slaveAndRackManager.getSlaveHost(offer));

final SingularityTaskId taskId = new SingularityTaskId(taskRequest.getPendingTask().getPendingTaskId().getRequestId(), taskRequest.getDeploy().getId(), System.currentTimeMillis(), taskRequest.getPendingTask().getPendingTaskId().getInstanceNo(), host, rackId);
final SingularityTaskId taskId = new SingularityTaskId(taskRequest.getPendingTask().getPendingTaskId().getRequestId(), taskRequest.getDeploy().getId(), System.currentTimeMillis(),
taskRequest.getPendingTask().getPendingTaskId().getInstanceNo(), host, rackId);

final TaskInfo.Builder bldr = TaskInfo.newBuilder()
.setTaskId(TaskID.newBuilder().setValue(taskId.toString()));
Expand All @@ -81,7 +80,7 @@ public SingularityTask buildTask(Protos.Offer offer, List<Resource> availableRes

final Optional<SingularityContainerInfo> containerInfo = taskRequest.getDeploy().getContainerInfo();
if (containerInfo.isPresent()) {
prepareContainerInfo(taskId, bldr, containerInfo.get(), ports);
prepareContainerInfo(offer, taskId, bldr, containerInfo.get(), ports);
}

if (taskRequest.getDeploy().getCustomExecutorCmd().isPresent()) {
Expand Down Expand Up @@ -171,7 +170,7 @@ private Optional<DockerInfo.PortMapping> buildPortMapping(final SingularityDocke
.build());
}

private String fillInTaskIdValues(String string, SingularityTaskId taskId) {
private String fillInTaskIdValues(String string, Offer offer, SingularityTaskId taskId) {
if (!Strings.isNullOrEmpty(string)) {
string = string.replace("${TASK_REQUEST_ID}", taskId.getRequestId())
.replace("${TASK_DEPLOY_ID}", taskId.getDeployId())
Expand All @@ -185,7 +184,7 @@ private String fillInTaskIdValues(String string, SingularityTaskId taskId) {
return string;
}

private void prepareContainerInfo(final SingularityTaskId taskId, final TaskInfo.Builder bldr, final SingularityContainerInfo containerInfo, final Optional<long[]> ports) {
private void prepareContainerInfo(final Offer offer, final SingularityTaskId taskId, final TaskInfo.Builder bldr, final SingularityContainerInfo containerInfo, final Optional<long[]> ports) {
ContainerInfo.Builder containerBuilder = ContainerInfo.newBuilder();
containerBuilder.setType(containerInfo.getType());

Expand Down Expand Up @@ -216,9 +215,9 @@ private void prepareContainerInfo(final SingularityTaskId taskId, final TaskInfo

for (SingularityVolume volumeInfo : containerInfo.getVolumes().or(Collections.<SingularityVolume>emptyList())) {
final Volume.Builder volumeBuilder = Volume.newBuilder();
volumeBuilder.setContainerPath(fillInTaskIdValues(volumeInfo.getContainerPath(), taskId));
volumeBuilder.setContainerPath(fillInTaskIdValues(volumeInfo.getContainerPath(), offer, taskId));
if (volumeInfo.getHostPath().isPresent()) {
volumeBuilder.setHostPath(fillInTaskIdValues(volumeInfo.getHostPath().get(), taskId));
volumeBuilder.setHostPath(fillInTaskIdValues(volumeInfo.getHostPath().get(), offer, taskId));
}
if (volumeInfo.getMode().isPresent()) {
volumeBuilder.setMode(volumeInfo.getMode().get());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -93,7 +93,7 @@ private String getHost(String hostname) {
hostname = hostname.substring(0, hostname.length() - configuration.getCommonHostnameSuffixToOmit().get().length());
}
}
return getSafeString(hostname);
return hostname;
}

public String getSlaveHost(Offer offer) {
Expand Down Expand Up @@ -218,7 +218,8 @@ public void loadSlavesAndRacksFromMaster(MesosMasterStateObject state) {
for (MesosMasterSlaveObject slaveJsonObject : state.getSlaves()) {
Optional<String> maybeRackId = Optional.fromNullable(slaveJsonObject.getAttributes().get(rackIdAttributeKey));
String slaveId = slaveJsonObject.getId();
String rackId = getSafeString(maybeRackId.or(defaultRackId));
String rackName = maybeRackId.or(defaultRackId);
String rackId = getSafeString(rackName);
String host = getHost(slaveJsonObject.getHostname());

if (activeSlavesById.containsKey(slaveId)) {
Expand All @@ -234,7 +235,7 @@ public void loadSlavesAndRacksFromMaster(MesosMasterStateObject state) {
if (activeRacksById.containsKey(rackId)) {
remainingActiveRacks.remove(rackId);
} else {
SingularityRack rack = new SingularityRack(rackId);
SingularityRack rack = new SingularityRack(rackId, rackName);

if (check(rack, rackManager) == CheckResult.NEW) {
racks++;
Expand All @@ -253,17 +254,21 @@ public void loadSlavesAndRacksFromMaster(MesosMasterStateObject state) {
LOG.info("Found {} new racks ({} missing) and {} new slaves ({} missing)", racks, remainingActiveRacks.size(), slaves, activeSlavesById.size());
}

public String getRackId(Offer offer) {
private String getRackName(Offer offer) {
for (Attribute attribute : offer.getAttributesList()) {
if (attribute.getName().equals(rackIdAttributeKey)) {
return getSafeString(attribute.getText().getValue());
return attribute.getText().getValue();
}
}

return defaultRackId;
}

private String getSafeString(String string) {
public String getRackId(Offer offer) {
return getSafeString(getRackName(offer));
}

public String getSafeString(String string) {
return string.replace("-", "_");
}

Expand Down Expand Up @@ -300,6 +305,7 @@ private <T extends SingularityMachineAbstraction<T>> CheckResult check(T object,

public void checkOffer(Offer offer) {
final String slaveId = offer.getSlaveId().getValue();
final String rackName = getRackName(offer);
final String rackId = getRackId(offer);
final String host = getSlaveHost(offer);

Expand All @@ -309,7 +315,7 @@ public void checkOffer(Offer offer) {
LOG.info("Offer revealed a new slave {}", slave);
}

final SingularityRack rack = new SingularityRack(rackId);
final SingularityRack rack = new SingularityRack(rackId, rackName);

if (check(rack, rackManager) == CheckResult.NEW) {
LOG.info("Offer revealed a new rack {}", rack);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,6 @@
import com.hubspot.singularity.SingularityRequestBuilder;
import com.hubspot.singularity.SingularityTask;
import com.hubspot.singularity.SingularityTaskRequest;
import com.hubspot.singularity.config.SingularityConfiguration;
import com.hubspot.singularity.data.ExecutorIdGenerator;

public class SingularityMesosTaskBuilderTest {
Expand All @@ -59,7 +58,7 @@ public void createMocks() {

when(idGenerator.getNextExecutorId()).then(new CreateFakeId());

builder = new SingularityMesosTaskBuilder(new ObjectMapper(), slaveAndRackManager, idGenerator, new SingularityConfiguration());
builder = new SingularityMesosTaskBuilder(new ObjectMapper(), slaveAndRackManager, idGenerator);

taskResources = new Resources(1, 1, 0);
executorResources = new Resources(0.1, 1, 0);
Expand Down

0 comments on commit e615d7f

Please sign in to comment.