From 2c135130402255ce41e1ef958989e746f21ae1ab Mon Sep 17 00:00:00 2001 From: Vrushali C Date: Fri, 1 Feb 2019 14:26:50 -0800 Subject: [PATCH] YARN-8549 Adding a NoOp timeline writer and reader plugin classes for ATSv2. Contributed by Prabha Manepalli. --- .../storage/NoOpTimelineReaderImpl.java | 80 +++++++++++++++++ .../storage/NoOpTimelineWriterImpl.java | 88 +++++++++++++++++++ 2 files changed, 168 insertions(+) create mode 100644 hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-timelineservice/src/main/java/org/apache/hadoop/yarn/server/timelineservice/storage/NoOpTimelineReaderImpl.java create mode 100644 hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-timelineservice/src/main/java/org/apache/hadoop/yarn/server/timelineservice/storage/NoOpTimelineWriterImpl.java diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-timelineservice/src/main/java/org/apache/hadoop/yarn/server/timelineservice/storage/NoOpTimelineReaderImpl.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-timelineservice/src/main/java/org/apache/hadoop/yarn/server/timelineservice/storage/NoOpTimelineReaderImpl.java new file mode 100644 index 00000000000..53bf058e724 --- /dev/null +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-timelineservice/src/main/java/org/apache/hadoop/yarn/server/timelineservice/storage/NoOpTimelineReaderImpl.java @@ -0,0 +1,80 @@ +/** + * 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.timelineservice.storage; + +import org.apache.hadoop.service.AbstractService; +import org.apache.hadoop.yarn.api.records.timelineservice.TimelineEntity; +import org.apache.hadoop.yarn.server.timelineservice.reader.TimelineDataToRetrieve; +import org.apache.hadoop.yarn.server.timelineservice.reader.TimelineEntityFilters; +import org.apache.hadoop.yarn.server.timelineservice.reader.TimelineReaderContext; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.io.IOException; +import java.util.HashSet; +import java.util.Set; + +/** + * Stub based implementation for TimelineReader. This implementation will + * not provide a complete implementation of all the necessary features. This + * implementation is provided solely for basic testing purposes. + */ + +public class NoOpTimelineReaderImpl extends AbstractService + implements TimelineReader { + private static final Logger LOG = + LoggerFactory.getLogger(NoOpTimelineReaderImpl.class); + + public NoOpTimelineReaderImpl() { + super(NoOpTimelineReaderImpl.class.getName()); + LOG.info("NoOpTimelineReader is configured. Response to all the read " + + "requests would be empty"); + } + + @Override + public TimelineEntity getEntity(TimelineReaderContext context, + TimelineDataToRetrieve dataToRetrieve) throws IOException { + if(LOG.isDebugEnabled()){ + LOG.debug("NoOpTimelineReader is configured. Response to all the read " + + "requests would be empty"); + } + return new TimelineEntity(); + } + + @Override + public Set getEntities(TimelineReaderContext context, + TimelineEntityFilters filters, TimelineDataToRetrieve dataToRetrieve) + throws IOException { + if(LOG.isDebugEnabled()){ + LOG.debug("NoOpTimelineReader is configured. Response to all the read " + + "requests would be empty"); + } + return new HashSet<>(); + } + + @Override + public Set getEntityTypes(TimelineReaderContext context) + throws IOException { + if(LOG.isDebugEnabled()){ + LOG.debug("NoOpTimelineReader is configured. Response to all the read " + + "requests would be empty"); + } + return new HashSet<>(); + } +} diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-timelineservice/src/main/java/org/apache/hadoop/yarn/server/timelineservice/storage/NoOpTimelineWriterImpl.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-timelineservice/src/main/java/org/apache/hadoop/yarn/server/timelineservice/storage/NoOpTimelineWriterImpl.java new file mode 100644 index 00000000000..44d2cfad218 --- /dev/null +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-timelineservice/src/main/java/org/apache/hadoop/yarn/server/timelineservice/storage/NoOpTimelineWriterImpl.java @@ -0,0 +1,88 @@ +/** + * 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.timelineservice.storage; + +import org.apache.hadoop.security.UserGroupInformation; +import org.apache.hadoop.service.AbstractService; +import org.apache.hadoop.yarn.api.records.timelineservice.TimelineDomain; +import org.apache.hadoop.yarn.api.records.timelineservice.TimelineEntities; +import org.apache.hadoop.yarn.api.records.timelineservice.TimelineEntity; +import org.apache.hadoop.yarn.api.records.timelineservice.TimelineWriteResponse; +import org.apache.hadoop.yarn.server.timelineservice.collector.TimelineCollectorContext; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.io.IOException; + +/** + * Stub based implementation for TimelineWriter. This implementation will + * not provide a complete implementation of all the necessary features. This + * implementation is provided solely for basic testing purposes. + */ + +public class NoOpTimelineWriterImpl extends AbstractService implements + TimelineWriter{ + private static final Logger LOG = + LoggerFactory.getLogger(NoOpTimelineWriterImpl.class); + + public NoOpTimelineWriterImpl() { + super(NoOpTimelineWriterImpl.class.getName()); + LOG.info("NoOpTimelineWriter is configured. All the writes to the backend" + + " are ignored"); + } + + @Override + public TimelineWriteResponse write(TimelineCollectorContext context, + TimelineEntities data, + UserGroupInformation callerUgi) + throws IOException { + if(LOG.isDebugEnabled()){ + LOG.debug("NoOpTimelineWriter is configured. Not storing " + + "TimelineEntities."); + } + return new TimelineWriteResponse(); + } + + @Override + public TimelineWriteResponse write(TimelineCollectorContext context, + TimelineDomain domain) throws IOException { + if(LOG.isDebugEnabled()){ + LOG.debug("NoOpTimelineWriter is configured. Not storing " + + "TimelineEntities."); + } + return new TimelineWriteResponse(); + } + + @Override + public TimelineWriteResponse aggregate(TimelineEntity data, + TimelineAggregationTrack track) + throws IOException { + if(LOG.isDebugEnabled()){ + LOG.debug("NoOpTimelineWriter is configured. Not aggregating " + + "TimelineEntities."); + } + return new TimelineWriteResponse(); + } + + @Override + public void flush() throws IOException { + if(LOG.isDebugEnabled()){ + LOG.debug("NoOpTimelineWriter is configured. Ignoring flush call"); + } + } +}