/** * 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.falcon.state; import org.apache.falcon.entity.v0.Entity; import org.apache.falcon.entity.v0.EntityType; import org.apache.falcon.execution.ExecutionInstance; import org.joda.time.DateTime; import org.joda.time.format.DateTimeFormat; import org.joda.time.format.DateTimeFormatter; /** * A unique ID for a given(wrapped) instance. * An instance is the execution unit of an entity and can be uniquely defined by * (entity, cluster, instanceTime). */ public class InstanceID extends ID { public static final String INSTANCE_FORMAT = "yyyy-MM-dd-HH-mm"; /** * Name of the cluster for the instance. */ private String clusterName; /** * */ private DateTime instanceTime; public InstanceID(EntityType entityType, String entityName, String clusterName, DateTime instanceTime) { this.entityType = entityType; this.entityName = entityName; this.clusterName = clusterName; this.instanceTime = new DateTime(instanceTime); DateTimeFormatter fmt = DateTimeFormat.forPattern(INSTANCE_FORMAT); this.key = this.entityType + KEY_SEPARATOR + this.entityName + KEY_SEPARATOR + this.clusterName + KEY_SEPARATOR + fmt.print(instanceTime); } public InstanceID(Entity entity, String clusterName, DateTime instanceTime) { this(entity.getEntityType(), entity.getName(), clusterName, instanceTime); } public InstanceID(ExecutionInstance instance) { this(instance.getEntity(), instance.getCluster(), instance.getInstanceTime()); assert instance.getInstanceTime() != null : "Instance time cannot be null."; } public String getClusterName() { return clusterName; } public DateTime getInstanceTime() { return instanceTime; } @Override public EntityID getEntityID() { return new EntityID(entityType, entityName); } public EntityClusterID getEntityClusterID() { return new EntityClusterID(entityType, entityName, clusterName); } public static EntityType getEntityType(String id) { if (id == null) { return null; } String[] values = id.split(KEY_SEPARATOR); String entityType = values[0]; return EntityType.valueOf(entityType); } public static String getEntityName(String id) { if (id == null) { return null; } String[] values = id.split(KEY_SEPARATOR); String entityName = values[1]; return entityName; } }