com.twitter.heron.spi.packing.PackingPlanProtoDeserializer Maven / Gradle / Ivy
// Copyright 2016 Twitter. All rights reserved.
//
// Licensed 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 com.twitter.heron.spi.packing;
import java.util.HashSet;
import java.util.Set;
import com.twitter.heron.common.basics.ByteAmount;
import com.twitter.heron.proto.system.PackingPlans;
/**
* Converts to a com.twitter.heron.spi.packing.PackingPlan object it's protobuf equivalent
*/
public class PackingPlanProtoDeserializer {
public PackingPlan fromProto(PackingPlans.PackingPlan packingPlan) {
Set containers = new HashSet<>();
for (PackingPlans.ContainerPlan containerPlan : packingPlan.getContainerPlansList()) {
containers.add(convert(containerPlan));
}
return new PackingPlan(packingPlan.getId(), containers);
}
private PackingPlan.ContainerPlan convert(PackingPlans.ContainerPlan containerPlan) {
Set instances = new HashSet<>();
for (PackingPlans.InstancePlan instancePlan : containerPlan.getInstancePlansList()) {
instances.add(convert(instancePlan));
}
return new PackingPlan.ContainerPlan(
containerPlan.getId(),
instances,
convert(containerPlan.getRequiredResource()),
convert(containerPlan.getScheduledResource()));
}
private PackingPlan.InstancePlan convert(PackingPlans.InstancePlan instancePlan) {
return new PackingPlan.InstancePlan(
new InstanceId(
instancePlan.getComponentName(),
instancePlan.getTaskId(),
instancePlan.getComponentIndex()),
convert(instancePlan.getResource()));
}
private Resource convert(PackingPlans.Resource resource) {
Resource result = null;
if (resource != null && resource.isInitialized()) {
result = new Resource(resource.getCpu(),
ByteAmount.fromBytes(resource.getRam()),
ByteAmount.fromBytes(resource.getDisk()));
}
return result;
}
}