You are viewing a plain text version of this content. The canonical link for it is here.
Posted to yarn-commits@hadoop.apache.org by vi...@apache.org on 2014/02/03 21:07:02 UTC
svn commit: r1564037 - in /hadoop/common/trunk/hadoop-yarn-project: ./
hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/api/records/apptimeline/
hadoop-yarn/hadoop-yarn-common/src/test/java/org/apache/hadoop/yarn/api/records/apptimeline...
Author: vinodkv
Date: Mon Feb 3 20:07:01 2014
New Revision: 1564037
URL: http://svn.apache.org/r1564037
Log:
YARN-1659. Defined the ApplicationTimelineStore store as an abstraction for implementing different storage impls for storing timeline information. Contributed by Billie Rinaldi.
Added:
hadoop/common/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/api/records/apptimeline/ATSPutErrors.java
hadoop/common/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-applicationhistoryservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/apptimeline/
hadoop/common/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-applicationhistoryservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/apptimeline/ApplicationTimelineReader.java
hadoop/common/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-applicationhistoryservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/apptimeline/ApplicationTimelineStore.java
hadoop/common/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-applicationhistoryservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/apptimeline/ApplicationTimelineWriter.java
hadoop/common/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-applicationhistoryservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/apptimeline/NameValuePair.java
hadoop/common/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-applicationhistoryservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/apptimeline/package-info.java
Modified:
hadoop/common/trunk/hadoop-yarn-project/CHANGES.txt
hadoop/common/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/api/records/apptimeline/ATSEntity.java
hadoop/common/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/api/records/apptimeline/ATSEvent.java
hadoop/common/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/api/records/apptimeline/ATSEvents.java
hadoop/common/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/test/java/org/apache/hadoop/yarn/api/records/apptimeline/TestApplicationTimelineRecords.java
Modified: hadoop/common/trunk/hadoop-yarn-project/CHANGES.txt
URL: http://svn.apache.org/viewvc/hadoop/common/trunk/hadoop-yarn-project/CHANGES.txt?rev=1564037&r1=1564036&r2=1564037&view=diff
==============================================================================
--- hadoop/common/trunk/hadoop-yarn-project/CHANGES.txt (original)
+++ hadoop/common/trunk/hadoop-yarn-project/CHANGES.txt Mon Feb 3 20:07:01 2014
@@ -86,6 +86,10 @@ Release 2.4.0 - UNRELEASED
used by ResourceManager to read configuration locally or from remote systems
so as to help RM failover. (Xuan Gong via vinodkv)
+ YARN-1659. Defined the ApplicationTimelineStore store as an abstraction for
+ implementing different storage impls for storing timeline information.
+ (Billie Rinaldi via vinodkv)
+
IMPROVEMENTS
YARN-1007. Enhance History Reader interface for Containers. (Mayank Bansal via
Modified: hadoop/common/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/api/records/apptimeline/ATSEntity.java
URL: http://svn.apache.org/viewvc/hadoop/common/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/api/records/apptimeline/ATSEntity.java?rev=1564037&r1=1564036&r2=1564037&view=diff
==============================================================================
--- hadoop/common/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/api/records/apptimeline/ATSEntity.java (original)
+++ hadoop/common/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/api/records/apptimeline/ATSEntity.java Mon Feb 3 20:07:01 2014
@@ -22,6 +22,7 @@ import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
+import java.util.Map.Entry;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
@@ -53,10 +54,10 @@ public class ATSEntity {
private String entityType;
private String entityId;
- private long startTime;
+ private Long startTime;
private List<ATSEvent> events = new ArrayList<ATSEvent>();
- private Map<String, List<Object>> relatedEntities =
- new HashMap<String, List<Object>>();
+ private Map<String, List<String>> relatedEntities =
+ new HashMap<String, List<String>>();
private Map<String, Object> primaryFilters =
new HashMap<String, Object>();
private Map<String, Object> otherInfo =
@@ -112,7 +113,7 @@ public class ATSEntity {
* @return the start time of the entity
*/
@XmlElement(name = "starttime")
- public long getStartTime() {
+ public Long getStartTime() {
return startTime;
}
@@ -122,7 +123,7 @@ public class ATSEntity {
* @param startTime
* the start time of the entity
*/
- public void setStartTime(long startTime) {
+ public void setStartTime(Long startTime) {
this.startTime = startTime;
}
@@ -172,26 +173,25 @@ public class ATSEntity {
* @return the related entities
*/
@XmlElement(name = "relatedentities")
- public Map<String, List<Object>> getRelatedEntities() {
+ public Map<String, List<String>> getRelatedEntities() {
return relatedEntities;
}
/**
- * Add a list of entity of the same type to the existing related entity map
+ * Add an entity to the existing related entity map
*
* @param entityType
* the entity type
- * @param entityIds
- * a list of entity Ids
+ * @param entityId
+ * the entity Id
*/
- public void addRelatedEntity(String entityType, List<Object> entityIds) {
- List<Object> thisRelatedEntity = relatedEntities.get(entityType);
- relatedEntities.put(entityType, entityIds);
+ public void addRelatedEntity(String entityType, String entityId) {
+ List<String> thisRelatedEntity = relatedEntities.get(entityType);
if (thisRelatedEntity == null) {
- relatedEntities.put(entityType, entityIds);
- } else {
- thisRelatedEntity.addAll(entityIds);
+ thisRelatedEntity = new ArrayList<String>();
+ relatedEntities.put(entityType, thisRelatedEntity);
}
+ thisRelatedEntity.add(entityId);
}
/**
@@ -200,11 +200,10 @@ public class ATSEntity {
* @param relatedEntities
* a map of related entities
*/
- public void addRelatedEntities(
- Map<String, List<Object>> relatedEntities) {
- for (Map.Entry<String, List<Object>> relatedEntity : relatedEntities
- .entrySet()) {
- List<Object> thisRelatedEntity =
+ public void addRelatedEntities(Map<String, List<String>> relatedEntities) {
+ for (Entry<String, List<String>> relatedEntity :
+ relatedEntities.entrySet()) {
+ List<String> thisRelatedEntity =
this.relatedEntities.get(relatedEntity.getKey());
if (thisRelatedEntity == null) {
this.relatedEntities.put(
@@ -222,7 +221,7 @@ public class ATSEntity {
* a map of related entities
*/
public void setRelatedEntities(
- Map<String, List<Object>> relatedEntities) {
+ Map<String, List<String>> relatedEntities) {
this.relatedEntities = relatedEntities;
}
Modified: hadoop/common/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/api/records/apptimeline/ATSEvent.java
URL: http://svn.apache.org/viewvc/hadoop/common/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/api/records/apptimeline/ATSEvent.java?rev=1564037&r1=1564036&r2=1564037&view=diff
==============================================================================
--- hadoop/common/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/api/records/apptimeline/ATSEvent.java (original)
+++ hadoop/common/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/api/records/apptimeline/ATSEvent.java Mon Feb 3 20:07:01 2014
@@ -39,7 +39,7 @@ import org.apache.hadoop.classification.
@XmlAccessorType(XmlAccessType.NONE)
@Public
@Unstable
-public class ATSEvent {
+public class ATSEvent implements Comparable<ATSEvent> {
private long timestamp;
private String eventType;
@@ -131,4 +131,42 @@ public class ATSEvent {
this.eventInfo = eventInfo;
}
+ @Override
+ public int compareTo(ATSEvent other) {
+ if (timestamp > other.timestamp) {
+ return -1;
+ } else if (timestamp < other.timestamp) {
+ return 1;
+ } else {
+ return eventType.compareTo(other.eventType);
+ }
+ }
+
+ @Override
+ public boolean equals(Object o) {
+ if (this == o)
+ return true;
+ if (o == null || getClass() != o.getClass())
+ return false;
+
+ ATSEvent atsEvent = (ATSEvent) o;
+
+ if (timestamp != atsEvent.timestamp)
+ return false;
+ if (!eventType.equals(atsEvent.eventType))
+ return false;
+ if (eventInfo != null ? !eventInfo.equals(atsEvent.eventInfo) :
+ atsEvent.eventInfo != null)
+ return false;
+
+ return true;
+ }
+
+ @Override
+ public int hashCode() {
+ int result = (int) (timestamp ^ (timestamp >>> 32));
+ result = 31 * result + eventType.hashCode();
+ result = 31 * result + (eventInfo != null ? eventInfo.hashCode() : 0);
+ return result;
+ }
}
Modified: hadoop/common/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/api/records/apptimeline/ATSEvents.java
URL: http://svn.apache.org/viewvc/hadoop/common/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/api/records/apptimeline/ATSEvents.java?rev=1564037&r1=1564036&r2=1564037&view=diff
==============================================================================
--- hadoop/common/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/api/records/apptimeline/ATSEvents.java (original)
+++ hadoop/common/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/api/records/apptimeline/ATSEvents.java Mon Feb 3 20:07:01 2014
@@ -160,7 +160,7 @@ public class ATSEvents {
* @param event
* a single event
*/
- public void addEntity(ATSEvent event) {
+ public void addEvent(ATSEvent event) {
events.add(event);
}
Added: hadoop/common/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/api/records/apptimeline/ATSPutErrors.java
URL: http://svn.apache.org/viewvc/hadoop/common/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/api/records/apptimeline/ATSPutErrors.java?rev=1564037&view=auto
==============================================================================
--- hadoop/common/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/api/records/apptimeline/ATSPutErrors.java (added)
+++ hadoop/common/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/api/records/apptimeline/ATSPutErrors.java Mon Feb 3 20:07:01 2014
@@ -0,0 +1,163 @@
+/**
+ * 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.hadoop.yarn.api.records.apptimeline;
+
+import org.apache.hadoop.classification.InterfaceAudience.Public;
+import org.apache.hadoop.classification.InterfaceStability.Unstable;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlRootElement;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * A class that holds a list of put errors. This is the response returned
+ * when a list of {@link ATSEntity} objects is added to the application
+ * timeline. If there are errors in storing individual entity objects,
+ * they will be indicated in the list of errors.
+ */
+@XmlRootElement(name = "errors")
+@XmlAccessorType(XmlAccessType.NONE)
+@Public
+@Unstable
+public class ATSPutErrors {
+
+ private List<ATSPutError> errors = new ArrayList<ATSPutError>();
+
+ public ATSPutErrors() {
+
+ }
+
+ /**
+ * Get a list of {@link ATSPutError} instances
+ *
+ * @return a list of {@link ATSPutError} instances
+ */
+ @XmlElement(name = "errors")
+ public List<ATSPutError> getErrors() {
+ return errors;
+ }
+
+ /**
+ * Add a single {@link ATSPutError} instance into the existing list
+ *
+ * @param error
+ * a single {@link ATSPutError} instance
+ */
+ public void addError(ATSPutError error) {
+ errors.add(error);
+ }
+
+ /**
+ * Add a list of {@link ATSPutError} instances into the existing list
+ *
+ * @param errors
+ * a list of {@link ATSPutError} instances
+ */
+ public void addErrors(List<ATSPutError> errors) {
+ this.errors.addAll(errors);
+ }
+
+ /**
+ * Set the list to the given list of {@link ATSPutError} instances
+ *
+ * @param errors
+ * a list of {@link ATSPutError} instances
+ */
+ public void setErrors(List<ATSPutError> errors) {
+ this.errors.clear();
+ this.errors.addAll(errors);
+ }
+
+ /**
+ * A class that holds the error code for one entity.
+ */
+ @XmlRootElement(name = "error")
+ @XmlAccessorType(XmlAccessType.NONE)
+ @Public
+ @Unstable
+ public static class ATSPutError {
+ private String entityId;
+ private String entityType;
+ private Integer errorCode;
+
+ /**
+ * Get the entity Id
+ *
+ * @return the entity Id
+ */
+ @XmlElement(name = "entity")
+ public String getEntityId() {
+ return entityId;
+ }
+
+ /**
+ * Set the entity Id
+ *
+ * @param entityId
+ * the entity Id
+ */
+ public void setEntityId(String entityId) {
+ this.entityId = entityId;
+ }
+
+ /**
+ * Get the entity type
+ *
+ * @return the entity type
+ */
+ @XmlElement(name = "entitytype")
+ public String getEntityType() {
+ return entityType;
+ }
+
+ /**
+ * Set the entity type
+ *
+ * @param entityType
+ * the entity type
+ */
+ public void setEntityType(String entityType) {
+ this.entityType = entityType;
+ }
+
+ /**
+ * Get the error code
+ *
+ * @return an error code
+ */
+ @XmlElement(name = "errorcode")
+ public Integer getErrorCode() {
+ return errorCode;
+ }
+
+ /**
+ * Set the error code to the given error code
+ *
+ * @param errorCode
+ * an error code
+ */
+ public void setErrorCode(Integer errorCode) {
+ this.errorCode = errorCode;
+ }
+
+ }
+
+}
Modified: hadoop/common/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/test/java/org/apache/hadoop/yarn/api/records/apptimeline/TestApplicationTimelineRecords.java
URL: http://svn.apache.org/viewvc/hadoop/common/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/test/java/org/apache/hadoop/yarn/api/records/apptimeline/TestApplicationTimelineRecords.java?rev=1564037&r1=1564036&r2=1564037&view=diff
==============================================================================
--- hadoop/common/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/test/java/org/apache/hadoop/yarn/api/records/apptimeline/TestApplicationTimelineRecords.java (original)
+++ hadoop/common/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/test/java/org/apache/hadoop/yarn/api/records/apptimeline/TestApplicationTimelineRecords.java Mon Feb 3 20:07:01 2014
@@ -18,10 +18,13 @@
package org.apache.hadoop.yarn.api.records.apptimeline;
+import java.util.ArrayList;
import java.util.Arrays;
+import java.util.List;
import junit.framework.Assert;
+import org.apache.hadoop.yarn.api.records.apptimeline.ATSPutErrors.ATSPutError;
import org.junit.Test;
public class TestApplicationTimelineRecords {
@@ -42,10 +45,8 @@ public class TestApplicationTimelineReco
event.addEventInfo("key2", "val2");
entity.addEvent(event);
}
- entity.addRelatedEntity(
- "test ref type 1", Arrays.asList((Object) "test ref id 1"));
- entity.addRelatedEntity(
- "test ref type 2", Arrays.asList((Object) "test ref id 2"));
+ entity.addRelatedEntity("test ref type 1", "test ref id 1");
+ entity.addRelatedEntity("test ref type 2", "test ref id 2");
entity.addPrimaryFilter("pkey1", "pval1");
entity.addPrimaryFilter("pkey2", "pval2");
entity.addOtherInfo("okey1", "oval1");
@@ -83,7 +84,7 @@ public class TestApplicationTimelineReco
event.setEventType("event type " + i);
event.addEventInfo("key1", "val1");
event.addEventInfo("key2", "val2");
- partEvents.addEntity(event);
+ partEvents.addEvent(event);
}
events.addEvent(partEvents);
}
@@ -110,4 +111,36 @@ public class TestApplicationTimelineReco
Assert.assertEquals(2, event22.getEventInfo().size());
}
+ @Test
+ public void testATSPutErrors() {
+ ATSPutErrors atsPutErrors = new ATSPutErrors();
+ ATSPutError error1 = new ATSPutError();
+ error1.setEntityId("entity id 1");
+ error1.setEntityId("entity type 1");
+ error1.setErrorCode(1);
+ atsPutErrors.addError(error1);
+ List<ATSPutError> errors = new ArrayList<ATSPutError>();
+ errors.add(error1);
+ ATSPutError error2 = new ATSPutError();
+ error2.setEntityId("entity id 2");
+ error2.setEntityId("entity type 2");
+ error2.setErrorCode(2);
+ errors.add(error2);
+ atsPutErrors.addErrors(errors);
+
+ Assert.assertEquals(3, atsPutErrors.getErrors().size());
+ ATSPutError e = atsPutErrors.getErrors().get(0);
+ Assert.assertEquals(error1.getEntityId(), e.getEntityId());
+ Assert.assertEquals(error1.getEntityType(), e.getEntityType());
+ Assert.assertEquals(error1.getErrorCode(), e.getErrorCode());
+ e = atsPutErrors.getErrors().get(1);
+ Assert.assertEquals(error1.getEntityId(), e.getEntityId());
+ Assert.assertEquals(error1.getEntityType(), e.getEntityType());
+ Assert.assertEquals(error1.getErrorCode(), e.getErrorCode());
+ e = atsPutErrors.getErrors().get(2);
+ Assert.assertEquals(error2.getEntityId(), e.getEntityId());
+ Assert.assertEquals(error2.getEntityType(), e.getEntityType());
+ Assert.assertEquals(error2.getErrorCode(), e.getErrorCode());
+ }
+
}
Added: hadoop/common/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-applicationhistoryservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/apptimeline/ApplicationTimelineReader.java
URL: http://svn.apache.org/viewvc/hadoop/common/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-applicationhistoryservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/apptimeline/ApplicationTimelineReader.java?rev=1564037&view=auto
==============================================================================
--- hadoop/common/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-applicationhistoryservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/apptimeline/ApplicationTimelineReader.java (added)
+++ hadoop/common/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-applicationhistoryservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/apptimeline/ApplicationTimelineReader.java Mon Feb 3 20:07:01 2014
@@ -0,0 +1,125 @@
+/**
+ * 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.hadoop.yarn.server.applicationhistoryservice.apptimeline;
+
+import java.util.Collection;
+import java.util.EnumSet;
+import java.util.Set;
+import java.util.SortedSet;
+
+import org.apache.hadoop.classification.InterfaceAudience;
+import org.apache.hadoop.classification.InterfaceStability;
+import org.apache.hadoop.yarn.api.records.apptimeline.ATSEntities;
+import org.apache.hadoop.yarn.api.records.apptimeline.ATSEntity;
+import org.apache.hadoop.yarn.api.records.apptimeline.ATSEvents;
+
+/**
+ * This interface is for retrieving application timeline information.
+ */
+@InterfaceAudience.Private
+@InterfaceStability.Unstable
+public interface ApplicationTimelineReader {
+
+ /**
+ * Possible fields to retrieve for {@link #getEntities} and {@link
+ * #getEntity}.
+ */
+ enum Field {
+ EVENTS,
+ RELATED_ENTITIES,
+ PRIMARY_FILTERS,
+ OTHER_INFO,
+ LAST_EVENT_ONLY
+ }
+
+ /**
+ * Default limit for {@link #getEntities} and {@link #getEntityTimelines}.
+ */
+ final long DEFAULT_LIMIT = 100;
+
+ /**
+ * This method retrieves a list of entity information, {@link ATSEntity},
+ * sorted by the starting timestamp for the entity, descending.
+ *
+ * @param entityType The type of entities to return (required).
+ * @param limit A limit on the number of entities to return. If null,
+ * defaults to {@link #DEFAULT_LIMIT}.
+ * @param windowStart The earliest start timestamp to retrieve (exclusive).
+ * If null, defaults to retrieving all entities until the
+ * limit is reached.
+ * @param windowEnd The latest start timestamp to retrieve (inclusive).
+ * If null, defaults to {@link Long#MAX_VALUE}
+ * @param primaryFilter Retrieves only entities that have the specified
+ * primary filter. If null, retrieves all entities.
+ * This is an indexed retrieval, and no entities that
+ * do not match the filter are scanned.
+ * @param secondaryFilters Retrieves only entities that have exact matches
+ * for all the specified filters in their primary
+ * filters or other info. This is not an indexed
+ * retrieval, so all entities are scanned but only
+ * those matching the filters are returned.
+ * @param fieldsToRetrieve Specifies which fields of the entity object to
+ * retrieve (see {@link Field}). If the set of fields
+ * contains {@link Field#LAST_EVENT_ONLY} and not
+ * {@link Field#EVENTS}, the most recent event for
+ * each entity is retrieved.
+ * @return An {@link ATSEntities} object.
+ */
+ ATSEntities getEntities(String entityType,
+ Long limit, Long windowStart, Long windowEnd,
+ NameValuePair primaryFilter, Collection<NameValuePair> secondaryFilters,
+ EnumSet<Field> fieldsToRetrieve);
+
+ /**
+ * This method retrieves the entity information for a given entity.
+ *
+ * @param entity The entity whose information will be retrieved.
+ * @param entityType The type of the entity.
+ * @param fieldsToRetrieve Specifies which fields of the entity object to
+ * retrieve (see {@link Field}). If the set of
+ * fields contains {@link Field#LAST_EVENT_ONLY} and
+ * not {@link Field#EVENTS}, the most recent event
+ * for each entity is retrieved.
+ * @return An {@link ATSEntity} object.
+ */
+ ATSEntity getEntity(String entity, String entityType, EnumSet<Field>
+ fieldsToRetrieve);
+
+ /**
+ * This method retrieves the events for a list of entities all of the same
+ * entity type. The events for each entity are sorted in order of their
+ * timestamps, descending.
+ *
+ * @param entityType The type of entities to retrieve events for.
+ * @param entityIds The entity IDs to retrieve events for.
+ * @param limit A limit on the number of events to return for each entity.
+ * If null, defaults to {@link #DEFAULT_LIMIT} events per
+ * entity.
+ * @param windowStart If not null, retrieves only events later than the
+ * given time (exclusive)
+ * @param windowEnd If not null, retrieves only events earlier than the
+ * given time (inclusive)
+ * @param eventTypes Restricts the events returned to the given types. If
+ * null, events of all types will be returned.
+ * @return An {@link ATSEvents} object.
+ */
+ ATSEvents getEntityTimelines(String entityType,
+ SortedSet<String> entityIds, Long limit, Long windowStart,
+ Long windowEnd, Set<String> eventTypes);
+}
Added: hadoop/common/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-applicationhistoryservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/apptimeline/ApplicationTimelineStore.java
URL: http://svn.apache.org/viewvc/hadoop/common/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-applicationhistoryservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/apptimeline/ApplicationTimelineStore.java?rev=1564037&view=auto
==============================================================================
--- hadoop/common/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-applicationhistoryservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/apptimeline/ApplicationTimelineStore.java (added)
+++ hadoop/common/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-applicationhistoryservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/apptimeline/ApplicationTimelineStore.java Mon Feb 3 20:07:01 2014
@@ -0,0 +1,29 @@
+/**
+ * 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.hadoop.yarn.server.applicationhistoryservice.apptimeline;
+
+import org.apache.hadoop.classification.InterfaceAudience;
+import org.apache.hadoop.classification.InterfaceStability;
+import org.apache.hadoop.service.Service;
+
+@InterfaceAudience.Private
+@InterfaceStability.Unstable
+public interface ApplicationTimelineStore extends
+ Service, ApplicationTimelineReader, ApplicationTimelineWriter {
+}
Added: hadoop/common/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-applicationhistoryservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/apptimeline/ApplicationTimelineWriter.java
URL: http://svn.apache.org/viewvc/hadoop/common/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-applicationhistoryservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/apptimeline/ApplicationTimelineWriter.java?rev=1564037&view=auto
==============================================================================
--- hadoop/common/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-applicationhistoryservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/apptimeline/ApplicationTimelineWriter.java (added)
+++ hadoop/common/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-applicationhistoryservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/apptimeline/ApplicationTimelineWriter.java Mon Feb 3 20:07:01 2014
@@ -0,0 +1,43 @@
+/**
+ * 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.hadoop.yarn.server.applicationhistoryservice.apptimeline;
+
+import org.apache.hadoop.classification.InterfaceAudience;
+import org.apache.hadoop.classification.InterfaceStability;
+import org.apache.hadoop.yarn.api.records.apptimeline.ATSEntities;
+import org.apache.hadoop.yarn.api.records.apptimeline.ATSPutErrors;
+
+/**
+ * This interface is for storing application timeline information.
+ */
+@InterfaceAudience.Private
+@InterfaceStability.Unstable
+public interface ApplicationTimelineWriter {
+
+ /**
+ * Stores entity information to the application timeline store. Any errors
+ * occurring for individual put request objects will be reported in the
+ * response.
+ *
+ * @param data An {@link ATSEntities} object.
+ * @return An {@link ATSPutErrors} object.
+ */
+ ATSPutErrors put(ATSEntities data);
+
+}
Added: hadoop/common/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-applicationhistoryservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/apptimeline/NameValuePair.java
URL: http://svn.apache.org/viewvc/hadoop/common/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-applicationhistoryservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/apptimeline/NameValuePair.java?rev=1564037&view=auto
==============================================================================
--- hadoop/common/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-applicationhistoryservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/apptimeline/NameValuePair.java (added)
+++ hadoop/common/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-applicationhistoryservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/apptimeline/NameValuePair.java Mon Feb 3 20:07:01 2014
@@ -0,0 +1,59 @@
+/**
+ * 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.hadoop.yarn.server.applicationhistoryservice.apptimeline;
+
+import org.apache.hadoop.classification.InterfaceAudience;
+import org.apache.hadoop.classification.InterfaceStability;
+
+/**
+ * A class holding a name and value pair, used for specifying filters in
+ * {@link ApplicationTimelineReader}.
+ */
+@InterfaceAudience.Private
+@InterfaceStability.Unstable
+public class NameValuePair {
+ String name;
+ Object value;
+
+ public NameValuePair(String name, Object value) {
+ this.name = name;
+ this.value = value;
+ }
+
+ /**
+ * Get the name.
+ * @return The name.
+ */
+ public String getName() {
+
+ return name;
+ }
+
+ /**
+ * Get the value.
+ * @return The value.
+ */
+ public Object getValue() {
+ return value;
+ }
+
+ @Override
+ public String toString() {
+ return "{ name: " + name + ", value: " + value + " }";
+ }
+}
Added: hadoop/common/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-applicationhistoryservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/apptimeline/package-info.java
URL: http://svn.apache.org/viewvc/hadoop/common/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-applicationhistoryservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/apptimeline/package-info.java?rev=1564037&view=auto
==============================================================================
--- hadoop/common/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-applicationhistoryservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/apptimeline/package-info.java (added)
+++ hadoop/common/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-applicationhistoryservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/apptimeline/package-info.java Mon Feb 3 20:07:01 2014
@@ -0,0 +1,20 @@
+/**
+ * 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.
+ */
+@InterfaceAudience.Private
+package org.apache.hadoop.yarn.server.applicationhistoryservice.apptimeline;
+import org.apache.hadoop.classification.InterfaceAudience;