Add @since tags and update change log for release 3.8.0
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 163c7ea..41c4ed5 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,6 +1,87 @@
 Apex Malhar Changelog
 ========================================================================================================================
 
+Version 3.8.0 - 2017-11-08
+------------------------------------------------------------------------------------------------------------------------
+
+### Sub-task
+* [APEXMALHAR-2458] - Move kafka related examples from datatorrent examples to apex-malhar examples
+* [APEXMALHAR-2462] - Move JDBC related examples from datatorrent examples to apex-malhar examples
+* [APEXMALHAR-2474] - FSLoader only returns value at the beginning
+* [APEXMALHAR-2475] - CacheStore needn't expire data if it read-only data
+* [APEXMALHAR-2480] - Move Amazon S3 related examples from datatorrent examples to apex-malhar examples
+
+### Bug
+* [APEXMALHAR-2397] - Malhar demo application PiDemoAppData fails apex get-app-package-info command
+* [APEXMALHAR-2404] - Avro file input operator should call beginWindow of AbstractFileInputOperator
+* [APEXMALHAR-2434] - JMSTransactionableStore uses Session.createQueue() which fails
+* [APEXMALHAR-2460] - Redshift output module tuples unable to emit tuples
+* [APEXMALHAR-2461] - Fix dependencies on libraries licensed under Category X
+* [APEXMALHAR-2465] - Travis build is failing because of excessive logging
+* [APEXMALHAR-2476] - Unable to override tupleSeparator property of GenericFileOutputOperator using configurations
+* [APEXMALHAR-2481] - High Level Stream API does not support lambda expressions
+* [APEXMALHAR-2491] - GenericFileOutputOperatorTest : runTestApplication() does not call shutdown() and can continue to run.
+* [APEXMALHAR-2492] - Correct usage of empty Slice in Malhar Library
+* [APEXMALHAR-2493] - KafkaSinglePortExactlyOnceOutputOperator going to the blocked state during recovery
+* [APEXMALHAR-2500] - Code comment for FSInputModule mentions "...is abstract class..." but the class is not abstract
+* [APEXMALHAR-2502] - Fix KuduOutput operator for extensibility
+* [APEXMALHAR-2505] - SnapshotSchema should retain original field order
+* [APEXMALHAR-2508] - CacheManager throws exception when the operator receives a shutdown request
+* [APEXMALHAR-2513] - JDBCPollInputOperator issues
+* [APEXMALHAR-2518] - Kafka input operator stops reading tuples when there is a UNKNOWN_MEMBER_ID error during committed offset processing
+* [APEXMALHAR-2519] - Performance Benchmark containers stop repeatedly as they exceed physical memory allocated
+* [APEXMALHAR-2525] - YahooFinance example crashes with java.lang.NumberFormatException because YHOO doesn't exist anymore
+* [APEXMALHAR-2526] - FunctionOperator deserialization failure in CLI
+* [APEXMALHAR-2532] - Transform Application Test flooding CI logs
+* [APEXMALHAR-2533] - In TopNWordsWithQueries example, input data from individual files is sorted and written in a single file instead of different files.
+* [APEXMALHAR-2534] - In TopNWordsWithQueries example, input data from individual files is sorted and written in a single file instead of different files.
+* [APEXMALHAR-2535] - Timeouts in AbstractEnricher specified as int which limits duration of time which could be specified.
+* [APEXMALHAR-2540] - Serialization exception with throttle example
+* [APEXMALHAR-2542] - enricher.ApplicationTest access to hard coded /tmp location
+* [APEXMALHAR-2544] - Flume test leads to Travis timeout
+
+### Dependency upgrade
+*  [APEXMALHAR-2516] - Fix few dependency issues in malhar-contrib
+
+### Documentation
+* [APEXMALHAR-2384] - Add documentation for FixedWIdthParser
+* [APEXMALHAR-2457] - Duplicate entries in navigation panel
+
+### Improvement
+* [APEXMALHAR-2324] - Add support for flume
+* [APEXMALHAR-2366] - Apply BloomFilter to Bucket
+* [APEXMALHAR-2435] - specify KeyedWindowedOperatorBenchmarkApp application name
+* [APEXMALHAR-2447] - No indication from AbstractFileInputOperator when directory is empty
+* [APEXMALHAR-2473] - Support for global cache meta information in db CacheManager
+* [APEXMALHAR-2487] - Malhar should support outputting data in Snappy compression
+* [APEXMALHAR-2489] - Change algorithm for average calculation in RunningAverage
+* [APEXMALHAR-2494] - Update demo apps with description
+* [APEXMALHAR-2504] - Allow for customization of TwitterSampleInput ConfigurationBuilder
+* [APEXMALHAR-2506] - Kafka Input operator - needs better handling of failure of Kafka reader thread
+* [APEXMALHAR-2514] - JDBCPollInputOperator support for offset rebase
+* [APEXMALHAR-2515] - HBase output operator Multi Table feature.
+* [APEXMALHAR-2529] - Allow subclass of AbstractFileInputOperator to control when to advance streaming window
+* [APEXMALHAR-2530] - Refactor AbstractAppDataSnapshotServer so that subclasses don't need schemas
+* [APEXMALHAR-2546] - Mocking dependencies should ideally be in the maven parent instead of individual modules
+
+### New Feature
+* [APEXMALHAR-2278] - Implement Kudu Output Operator for non-transactional streams
+* [APEXMALHAR-2453] - Add sort Accumulation for Windowed operator
+* [APEXMALHAR-2455] - Create example for Kafka 0.9 API exactly-once output operator
+* [APEXMALHAR-2472] - Implement Kudu Input Operator
+* [APEXMALHAR-2547] - Add ride data processing example to Apex Library
+
+### Task
+* [APEXMALHAR-2426] - Add user document for RegexParser operator
+* [APEXMALHAR-2431] - Create Kinesis Input operator which emits byte array as tuple
+* [APEXMALHAR-2459] - KafkaInputoperator using 0.10.* Kafka consumer API
+* [APEXMALHAR-2463] - FTP Input Operator Example app and documentation
+* [APEXMALHAR-2471] - Upgrade apex-core dependency to 3.6.0
+* [APEXMALHAR-2479] - Create example for RegexParser operator
+* [APEXMALHAR-2484] - BlockWriter for writing the part files into the specified directory
+* [APEXMALHAR-2541] - Fix travis-ci build
+
+
 Version 3.7.0 - 2017-03-31
 ------------------------------------------------------------------------------------------------------------------------
 
diff --git a/contrib/src/main/java/com/datatorrent/contrib/hbase/AbstractHBaseOutputOperator.java b/contrib/src/main/java/com/datatorrent/contrib/hbase/AbstractHBaseOutputOperator.java
index f7155f2..b9d3c49 100644
--- a/contrib/src/main/java/com/datatorrent/contrib/hbase/AbstractHBaseOutputOperator.java
+++ b/contrib/src/main/java/com/datatorrent/contrib/hbase/AbstractHBaseOutputOperator.java
@@ -26,6 +26,8 @@
 /**
  * A base implementation of a HBase output operator that stores tuples in HBase and offers 
  * non-transactional Insert.  Subclasses should provide implementation for specific Hbase operations.
+ *
+ * @since 3.8.0
  */
 public abstract class AbstractHBaseOutputOperator<T> extends AbstractStoreOutputOperator<T, HBaseStore> implements OutputAdapter.Driver<T>, Operator.CheckpointNotificationListener
 {
diff --git a/contrib/src/main/java/com/datatorrent/contrib/hbase/AbstractHBaseWindowOutputOperator.java b/contrib/src/main/java/com/datatorrent/contrib/hbase/AbstractHBaseWindowOutputOperator.java
index 896e156..665b463 100644
--- a/contrib/src/main/java/com/datatorrent/contrib/hbase/AbstractHBaseWindowOutputOperator.java
+++ b/contrib/src/main/java/com/datatorrent/contrib/hbase/AbstractHBaseWindowOutputOperator.java
@@ -29,6 +29,8 @@
 /**
  * A base implementation of an AggregateTransactionableStoreOutputOperator that stores tuples in HBase
  * and provides batch insert.&nbsp; Subclasses should provide implementation for specific Hbase operations. <br>
+ *
+ * @since 3.8.0
  */
 public abstract class AbstractHBaseWindowOutputOperator<T> extends AbstractPassThruTransactionableStoreOutputOperator<T, HBaseWindowStore> implements OutputAdapter.Driver<T>,  Operator.CheckpointNotificationListener
 {
diff --git a/contrib/src/main/java/com/datatorrent/contrib/hbase/OutputAdapter.java b/contrib/src/main/java/com/datatorrent/contrib/hbase/OutputAdapter.java
index 55fc4ee..31317bd 100644
--- a/contrib/src/main/java/com/datatorrent/contrib/hbase/OutputAdapter.java
+++ b/contrib/src/main/java/com/datatorrent/contrib/hbase/OutputAdapter.java
@@ -31,6 +31,8 @@
 /**
  * Delegating handling to an adapter so that the same adapter can be reused
  * from different inheritance hierarchies.
+ *
+ * @since 3.8.0
  */
 public class OutputAdapter<T>
 {
diff --git a/contrib/src/main/java/com/datatorrent/contrib/kinesis/KinesisByteArrayInputOperator.java b/contrib/src/main/java/com/datatorrent/contrib/kinesis/KinesisByteArrayInputOperator.java
index 04e80b6..ed05a54 100644
--- a/contrib/src/main/java/com/datatorrent/contrib/kinesis/KinesisByteArrayInputOperator.java
+++ b/contrib/src/main/java/com/datatorrent/contrib/kinesis/KinesisByteArrayInputOperator.java
@@ -27,6 +27,8 @@
  *
  * @category Input
  * @tags Kinesis, input, ByteArray
+ *
+ * @since 3.8.0
  */
 
 public class KinesisByteArrayInputOperator extends AbstractKinesisInputOperator<byte[]>
diff --git a/examples/exactly-once/src/main/java/org/apache/apex/examples/exactlyonce/ExactlyOnceFileOutputApp.java b/examples/exactly-once/src/main/java/org/apache/apex/examples/exactlyonce/ExactlyOnceFileOutputApp.java
index 9aa2870..98786df 100644
--- a/examples/exactly-once/src/main/java/org/apache/apex/examples/exactlyonce/ExactlyOnceFileOutputApp.java
+++ b/examples/exactly-once/src/main/java/org/apache/apex/examples/exactlyonce/ExactlyOnceFileOutputApp.java
@@ -31,6 +31,9 @@
 import com.datatorrent.lib.util.KeyValPair;
 
 @ApplicationAnnotation(name = "ExactlyOnceFileOutput")
+/**
+ * @since 3.8.0
+ */
 public class ExactlyOnceFileOutputApp implements StreamingApplication
 {
   @Override
diff --git a/examples/exactly-once/src/main/java/org/apache/apex/examples/exactlyonce/ExactlyOnceJdbcOutputApp.java b/examples/exactly-once/src/main/java/org/apache/apex/examples/exactlyonce/ExactlyOnceJdbcOutputApp.java
index 6982833..2ae5b07 100644
--- a/examples/exactly-once/src/main/java/org/apache/apex/examples/exactlyonce/ExactlyOnceJdbcOutputApp.java
+++ b/examples/exactly-once/src/main/java/org/apache/apex/examples/exactlyonce/ExactlyOnceJdbcOutputApp.java
@@ -42,6 +42,9 @@
 import com.datatorrent.lib.util.KeyValPair;
 
 @ApplicationAnnotation(name = "ExactlyOnceJbdcOutput")
+/**
+ * @since 3.8.0
+ */
 public class ExactlyOnceJdbcOutputApp implements StreamingApplication
 {
 
diff --git a/examples/ftp/src/main/java/org/apache/apex/examples/ftp/Application.java b/examples/ftp/src/main/java/org/apache/apex/examples/ftp/Application.java
index 5488970..f7d854f 100644
--- a/examples/ftp/src/main/java/org/apache/apex/examples/ftp/Application.java
+++ b/examples/ftp/src/main/java/org/apache/apex/examples/ftp/Application.java
@@ -29,6 +29,8 @@
 /**
  * This application demonstrates the FTPStringInputOperator. It uses the FTPStringInputOperator which reads
  * data from a directory on an FTP server, and then writes it to a file using the  StringFileOutputOperator.
+ *
+ * @since 3.8.0
  */
 @ApplicationAnnotation(name = "FTPInputExample")
 public class Application implements StreamingApplication
diff --git a/examples/jdbc/src/main/java/org/apache/apex/examples/FileToJdbcApp/CustomParser.java b/examples/jdbc/src/main/java/org/apache/apex/examples/FileToJdbcApp/CustomParser.java
old mode 100755
new mode 100644
index d5fc509..f804e62
--- a/examples/jdbc/src/main/java/org/apache/apex/examples/FileToJdbcApp/CustomParser.java
+++ b/examples/jdbc/src/main/java/org/apache/apex/examples/FileToJdbcApp/CustomParser.java
@@ -28,6 +28,9 @@
 import com.datatorrent.common.util.BaseOperator;
 
 // parse input line into pojo event
+/**
+ * @since 3.8.0
+ */
 public class CustomParser extends BaseOperator
 {
   private static final Logger LOG = LoggerFactory.getLogger(CustomParser.class);
diff --git a/examples/jdbc/src/main/java/org/apache/apex/examples/FileToJdbcApp/FileReader.java b/examples/jdbc/src/main/java/org/apache/apex/examples/FileToJdbcApp/FileReader.java
old mode 100755
new mode 100644
index 89515f7..bfe2f11
--- a/examples/jdbc/src/main/java/org/apache/apex/examples/FileToJdbcApp/FileReader.java
+++ b/examples/jdbc/src/main/java/org/apache/apex/examples/FileToJdbcApp/FileReader.java
@@ -22,6 +22,9 @@
 
 import com.datatorrent.api.DefaultOutputPort;
 
+/**
+ * @since 3.8.0
+ */
 public class FileReader extends LineByLineFileInputOperator
 {
   /**
diff --git a/examples/jdbc/src/main/java/org/apache/apex/examples/FileToJdbcApp/FileToJdbcCsvParser.java b/examples/jdbc/src/main/java/org/apache/apex/examples/FileToJdbcApp/FileToJdbcCsvParser.java
old mode 100755
new mode 100644
index be1db6b..778c6e3
--- a/examples/jdbc/src/main/java/org/apache/apex/examples/FileToJdbcApp/FileToJdbcCsvParser.java
+++ b/examples/jdbc/src/main/java/org/apache/apex/examples/FileToJdbcApp/FileToJdbcCsvParser.java
@@ -37,6 +37,9 @@
 import static java.sql.Types.VARCHAR;
 
 @ApplicationAnnotation(name = "FileToJdbcCsvParser")
+/**
+ * @since 3.8.0
+ */
 public class FileToJdbcCsvParser implements StreamingApplication
 {
   @Override
diff --git a/examples/jdbc/src/main/java/org/apache/apex/examples/FileToJdbcApp/FileToJdbcCustomParser.java b/examples/jdbc/src/main/java/org/apache/apex/examples/FileToJdbcApp/FileToJdbcCustomParser.java
old mode 100755
new mode 100644
index 037ca51..e0d8bca
--- a/examples/jdbc/src/main/java/org/apache/apex/examples/FileToJdbcApp/FileToJdbcCustomParser.java
+++ b/examples/jdbc/src/main/java/org/apache/apex/examples/FileToJdbcApp/FileToJdbcCustomParser.java
@@ -35,6 +35,9 @@
 import static java.sql.Types.VARCHAR;
 
 @ApplicationAnnotation(name = "FileToJdbcCustomParser")
+/**
+ * @since 3.8.0
+ */
 public class FileToJdbcCustomParser implements StreamingApplication
 {
   @Override
diff --git a/examples/jdbc/src/main/java/org/apache/apex/examples/FileToJdbcApp/PojoEvent.java b/examples/jdbc/src/main/java/org/apache/apex/examples/FileToJdbcApp/PojoEvent.java
old mode 100755
new mode 100644
index 2ce2d9f..b336475
--- a/examples/jdbc/src/main/java/org/apache/apex/examples/FileToJdbcApp/PojoEvent.java
+++ b/examples/jdbc/src/main/java/org/apache/apex/examples/FileToJdbcApp/PojoEvent.java
@@ -18,6 +18,9 @@
  */
 package org.apache.apex.examples.FileToJdbcApp;
 
+/**
+ * @since 3.8.0
+ */
 public class PojoEvent
 {
   @Override
diff --git a/examples/jdbc/src/main/java/org/apache/apex/examples/JdbcIngest/FileLineOutputOperator.java b/examples/jdbc/src/main/java/org/apache/apex/examples/JdbcIngest/FileLineOutputOperator.java
index 93bd8a4..3c3c49c 100644
--- a/examples/jdbc/src/main/java/org/apache/apex/examples/JdbcIngest/FileLineOutputOperator.java
+++ b/examples/jdbc/src/main/java/org/apache/apex/examples/JdbcIngest/FileLineOutputOperator.java
@@ -20,6 +20,9 @@
 
 import com.datatorrent.lib.io.fs.AbstractFileOutputOperator;
 
+/**
+ * @since 3.8.0
+ */
 public class FileLineOutputOperator extends AbstractFileOutputOperator<Object>
 {
   @Override
diff --git a/examples/jdbc/src/main/java/org/apache/apex/examples/JdbcIngest/JdbcHDFSApp.java b/examples/jdbc/src/main/java/org/apache/apex/examples/JdbcIngest/JdbcHDFSApp.java
index 5e1efff..4eafae2 100644
--- a/examples/jdbc/src/main/java/org/apache/apex/examples/JdbcIngest/JdbcHDFSApp.java
+++ b/examples/jdbc/src/main/java/org/apache/apex/examples/JdbcIngest/JdbcHDFSApp.java
@@ -34,6 +34,9 @@
 import com.datatorrent.lib.util.FieldInfo.SupportType;
 
 @ApplicationAnnotation(name = "SimpleJdbcToHDFSApp")
+/**
+ * @since 3.8.0
+ */
 public class JdbcHDFSApp implements StreamingApplication
 {
   @Override
diff --git a/examples/jdbc/src/main/java/org/apache/apex/examples/JdbcIngest/JdbcPollerApplication.java b/examples/jdbc/src/main/java/org/apache/apex/examples/JdbcIngest/JdbcPollerApplication.java
index 2a5ff29..45f6ad4 100644
--- a/examples/jdbc/src/main/java/org/apache/apex/examples/JdbcIngest/JdbcPollerApplication.java
+++ b/examples/jdbc/src/main/java/org/apache/apex/examples/JdbcIngest/JdbcPollerApplication.java
@@ -34,6 +34,9 @@
 import com.datatorrent.lib.util.FieldInfo.SupportType;
 
 @ApplicationAnnotation(name = "PollJdbcToHDFSApp")
+/**
+ * @since 3.8.0
+ */
 public class JdbcPollerApplication implements StreamingApplication
 {
   @Override
diff --git a/examples/jdbc/src/main/java/org/apache/apex/examples/JdbcIngest/PojoEvent.java b/examples/jdbc/src/main/java/org/apache/apex/examples/JdbcIngest/PojoEvent.java
index 5a66464..22eff63 100644
--- a/examples/jdbc/src/main/java/org/apache/apex/examples/JdbcIngest/PojoEvent.java
+++ b/examples/jdbc/src/main/java/org/apache/apex/examples/JdbcIngest/PojoEvent.java
@@ -18,6 +18,9 @@
  */
 package org.apache.apex.examples.JdbcIngest;
 
+/**
+ * @since 3.8.0
+ */
 public class PojoEvent
 {
   @Override
diff --git a/examples/jdbc/src/main/java/org/apache/apex/examples/JdbcToJdbc/JdbcToJdbcApp.java b/examples/jdbc/src/main/java/org/apache/apex/examples/JdbcToJdbc/JdbcToJdbcApp.java
index 53a41ea..92ad49b 100644
--- a/examples/jdbc/src/main/java/org/apache/apex/examples/JdbcToJdbc/JdbcToJdbcApp.java
+++ b/examples/jdbc/src/main/java/org/apache/apex/examples/JdbcToJdbc/JdbcToJdbcApp.java
@@ -36,6 +36,9 @@
 import com.datatorrent.lib.util.FieldInfo.SupportType;
 
 @ApplicationAnnotation(name = "JdbcToJdbcApp")
+/**
+ * @since 3.8.0
+ */
 public class JdbcToJdbcApp implements StreamingApplication
 {
   @Override
diff --git a/examples/jdbc/src/main/java/org/apache/apex/examples/JdbcToJdbc/PojoEvent.java b/examples/jdbc/src/main/java/org/apache/apex/examples/JdbcToJdbc/PojoEvent.java
index f40d930..bb7ffa1 100644
--- a/examples/jdbc/src/main/java/org/apache/apex/examples/JdbcToJdbc/PojoEvent.java
+++ b/examples/jdbc/src/main/java/org/apache/apex/examples/JdbcToJdbc/PojoEvent.java
@@ -18,6 +18,9 @@
  */
 package org.apache.apex.examples.JdbcToJdbc;
 
+/**
+ * @since 3.8.0
+ */
 public class PojoEvent
 {
   @Override
diff --git a/examples/kafka/src/main/java/org/apache/apex/examples/kafka/exactlyonceoutput/Application.java b/examples/kafka/src/main/java/org/apache/apex/examples/kafka/exactlyonceoutput/Application.java
index da03645..2cca184 100644
--- a/examples/kafka/src/main/java/org/apache/apex/examples/kafka/exactlyonceoutput/Application.java
+++ b/examples/kafka/src/main/java/org/apache/apex/examples/kafka/exactlyonceoutput/Application.java
@@ -58,6 +58,8 @@
  * **ValidationToFile:**
  * Puts values of input into list depending on topic. If value of maxTuplesTotal is reached it will calculate duplicates
  * and write validation output to HDFS. (output line will be printed in container dt.log as well).
+ *
+ * @since 3.8.0
  */
 
 @ApplicationAnnotation(name = "KafkaExactlyOnceOutput")
diff --git a/examples/kafka/src/main/java/org/apache/apex/examples/kafka/exactlyonceoutput/BatchSequenceGenerator.java b/examples/kafka/src/main/java/org/apache/apex/examples/kafka/exactlyonceoutput/BatchSequenceGenerator.java
index 1654434..f9da792 100644
--- a/examples/kafka/src/main/java/org/apache/apex/examples/kafka/exactlyonceoutput/BatchSequenceGenerator.java
+++ b/examples/kafka/src/main/java/org/apache/apex/examples/kafka/exactlyonceoutput/BatchSequenceGenerator.java
@@ -29,6 +29,8 @@
 
 /**
  * Simple operator that emits Strings from 1 to maxTuplesTotal
+ *
+ * @since 3.8.0
  */
 public class BatchSequenceGenerator extends BaseOperator implements InputOperator
 {
diff --git a/examples/kafka/src/main/java/org/apache/apex/examples/kafka/exactlyonceoutput/PassthroughFailOperator.java b/examples/kafka/src/main/java/org/apache/apex/examples/kafka/exactlyonceoutput/PassthroughFailOperator.java
index 487c773..f488a5a 100644
--- a/examples/kafka/src/main/java/org/apache/apex/examples/kafka/exactlyonceoutput/PassthroughFailOperator.java
+++ b/examples/kafka/src/main/java/org/apache/apex/examples/kafka/exactlyonceoutput/PassthroughFailOperator.java
@@ -38,6 +38,8 @@
  * To produce an exactly-once scenario the PassthroughFailOperator kills itself after a certain number
  * of processed lines by throwing an exception. YARN will deploy the Operator in a new container,
  * hence not checkpointed tuples will be passed to the OutputOperators more than once.
+ *
+ * @since 3.8.0
  */
 public class PassthroughFailOperator extends BaseOperator
 {
diff --git a/examples/kafka/src/main/java/org/apache/apex/examples/kafka/exactlyonceoutput/ValidationToFile.java b/examples/kafka/src/main/java/org/apache/apex/examples/kafka/exactlyonceoutput/ValidationToFile.java
index 0dd7818..eb621d4 100644
--- a/examples/kafka/src/main/java/org/apache/apex/examples/kafka/exactlyonceoutput/ValidationToFile.java
+++ b/examples/kafka/src/main/java/org/apache/apex/examples/kafka/exactlyonceoutput/ValidationToFile.java
@@ -34,6 +34,9 @@
 import com.datatorrent.api.annotation.InputPortFieldAnnotation;
 import com.datatorrent.lib.io.fs.AbstractSingleFileOutputOperator;
 
+/**
+ * @since 3.8.0
+ */
 public class ValidationToFile extends AbstractSingleFileOutputOperator<byte[]>
 {
   private static final Logger LOG = LoggerFactory.getLogger(ValidationToFile.class);
diff --git a/examples/kafka/src/main/java/org/apache/apex/examples/kafka/hdfs2kafka/Application.java b/examples/kafka/src/main/java/org/apache/apex/examples/kafka/hdfs2kafka/Application.java
index 4b7d029..ba2a781 100644
--- a/examples/kafka/src/main/java/org/apache/apex/examples/kafka/hdfs2kafka/Application.java
+++ b/examples/kafka/src/main/java/org/apache/apex/examples/kafka/hdfs2kafka/Application.java
@@ -28,6 +28,9 @@
 import com.datatorrent.contrib.kafka.KafkaSinglePortOutputOperator;
 
 @ApplicationAnnotation(name = "Hdfs2Kafka")
+/**
+ * @since 3.8.0
+ */
 public class Application implements StreamingApplication
 {
 
diff --git a/examples/kafka/src/main/java/org/apache/apex/examples/kafka/kafka2hdfs/KafkaApp.java b/examples/kafka/src/main/java/org/apache/apex/examples/kafka/kafka2hdfs/KafkaApp.java
index 6e0c5eb..1e07d16 100644
--- a/examples/kafka/src/main/java/org/apache/apex/examples/kafka/kafka2hdfs/KafkaApp.java
+++ b/examples/kafka/src/main/java/org/apache/apex/examples/kafka/kafka2hdfs/KafkaApp.java
@@ -27,6 +27,9 @@
 import com.datatorrent.api.annotation.ApplicationAnnotation;
 
 @ApplicationAnnotation(name = "Kafka2HDFS")
+/**
+ * @since 3.8.0
+ */
 public class KafkaApp implements StreamingApplication
 {
 
diff --git a/examples/kafka/src/main/java/org/apache/apex/examples/kafka/kafka2hdfs/LineOutputOperator.java b/examples/kafka/src/main/java/org/apache/apex/examples/kafka/kafka2hdfs/LineOutputOperator.java
index dec0f7e..7ee179a 100644
--- a/examples/kafka/src/main/java/org/apache/apex/examples/kafka/kafka2hdfs/LineOutputOperator.java
+++ b/examples/kafka/src/main/java/org/apache/apex/examples/kafka/kafka2hdfs/LineOutputOperator.java
@@ -27,6 +27,8 @@
 
 /**
  * Converts each tuple to a string and writes it as a new line to the output file
+ *
+ * @since 3.8.0
  */
 public class LineOutputOperator extends AbstractFileOutputOperator<byte[]>
 {
diff --git a/examples/nyctaxi/src/main/java/org/apache/apex/examples/nyctaxi/Application.java b/examples/nyctaxi/src/main/java/org/apache/apex/examples/nyctaxi/Application.java
index 63abe0b..a484ec7 100644
--- a/examples/nyctaxi/src/main/java/org/apache/apex/examples/nyctaxi/Application.java
+++ b/examples/nyctaxi/src/main/java/org/apache/apex/examples/nyctaxi/Application.java
@@ -44,6 +44,8 @@
 
 /**
  * The DAG definition of the example that illustrates New York City taxi ride data processing.
+ *
+ * @since 3.8.0
  */
 @ApplicationAnnotation(name = "NycTaxiExample")
 public class Application implements StreamingApplication
diff --git a/examples/nyctaxi/src/main/java/org/apache/apex/examples/nyctaxi/NycLocationUtils.java b/examples/nyctaxi/src/main/java/org/apache/apex/examples/nyctaxi/NycLocationUtils.java
index 08f59b4..be2c330 100644
--- a/examples/nyctaxi/src/main/java/org/apache/apex/examples/nyctaxi/NycLocationUtils.java
+++ b/examples/nyctaxi/src/main/java/org/apache/apex/examples/nyctaxi/NycLocationUtils.java
@@ -32,6 +32,8 @@
 
 /**
  * Provides utilities for zip codes and lat-lon coordinates in New York City.
+ *
+ * @since 3.8.0
  */
 public class NycLocationUtils
 {
diff --git a/examples/nyctaxi/src/main/java/org/apache/apex/examples/nyctaxi/NycTaxiCsvParser.java b/examples/nyctaxi/src/main/java/org/apache/apex/examples/nyctaxi/NycTaxiCsvParser.java
index f65e816..3e13e76 100644
--- a/examples/nyctaxi/src/main/java/org/apache/apex/examples/nyctaxi/NycTaxiCsvParser.java
+++ b/examples/nyctaxi/src/main/java/org/apache/apex/examples/nyctaxi/NycTaxiCsvParser.java
@@ -30,6 +30,8 @@
 /**
  * Operator that parses historical New York City Yellow Cab ride data
  * from http://www.nyc.gov/html/tlc/html/about/trip_record_data.shtml.
+ *
+ * @since 3.8.0
  */
 public class NycTaxiCsvParser extends BaseOperator
 {
diff --git a/examples/nyctaxi/src/main/java/org/apache/apex/examples/nyctaxi/NycTaxiDataReader.java b/examples/nyctaxi/src/main/java/org/apache/apex/examples/nyctaxi/NycTaxiDataReader.java
index 01313ca..b2168f4 100644
--- a/examples/nyctaxi/src/main/java/org/apache/apex/examples/nyctaxi/NycTaxiDataReader.java
+++ b/examples/nyctaxi/src/main/java/org/apache/apex/examples/nyctaxi/NycTaxiDataReader.java
@@ -28,6 +28,8 @@
  *
  * Note that unlike the raw LineByLineFileInputOperator, we advance the streaming
  * window whenever we see a difference in the timestamp in the data.
+ *
+ * @since 3.8.0
  */
 public class NycTaxiDataReader extends LineByLineFileInputOperator
 {
diff --git a/examples/nyctaxi/src/main/java/org/apache/apex/examples/nyctaxi/NycTaxiDataServer.java b/examples/nyctaxi/src/main/java/org/apache/apex/examples/nyctaxi/NycTaxiDataServer.java
index fd94e20..56be293 100644
--- a/examples/nyctaxi/src/main/java/org/apache/apex/examples/nyctaxi/NycTaxiDataServer.java
+++ b/examples/nyctaxi/src/main/java/org/apache/apex/examples/nyctaxi/NycTaxiDataServer.java
@@ -44,6 +44,8 @@
  *
  * The KeyValPair input tuples are zip to total payment of the window. They are collected by an internal map so that
  * the data can be served.
+ *
+ * @since 3.8.0
  */
 public class NycTaxiDataServer extends AbstractAppDataServer<String>
 {
diff --git a/examples/nyctaxi/src/main/java/org/apache/apex/examples/nyctaxi/NycTaxiZipFareExtractor.java b/examples/nyctaxi/src/main/java/org/apache/apex/examples/nyctaxi/NycTaxiZipFareExtractor.java
index 57b7d45..3e0c515 100644
--- a/examples/nyctaxi/src/main/java/org/apache/apex/examples/nyctaxi/NycTaxiZipFareExtractor.java
+++ b/examples/nyctaxi/src/main/java/org/apache/apex/examples/nyctaxi/NycTaxiZipFareExtractor.java
@@ -39,6 +39,8 @@
 /**
  * Operator that fills in the zip code based on the lat-lon coordinates in the incoming tuples and prepares
  * the tuples for the WindowedOperator downstream. It also generates a watermark that is t - 1 minute.
+ *
+ * @since 3.8.0
  */
 public class NycTaxiZipFareExtractor extends BaseOperator
 {
diff --git a/examples/parser/src/main/java/org/apache/apex/examples/parser/regexparser/FileOutputOperator.java b/examples/parser/src/main/java/org/apache/apex/examples/parser/regexparser/FileOutputOperator.java
index b37d3f6..28caa59 100644
--- a/examples/parser/src/main/java/org/apache/apex/examples/parser/regexparser/FileOutputOperator.java
+++ b/examples/parser/src/main/java/org/apache/apex/examples/parser/regexparser/FileOutputOperator.java
@@ -23,6 +23,9 @@
 
 import com.datatorrent.lib.io.fs.AbstractFileOutputOperator;
 
+/**
+ * @since 3.8.0
+ */
 public class FileOutputOperator extends AbstractFileOutputOperator<Object>
 {
   @NotNull
diff --git a/examples/parser/src/main/java/org/apache/apex/examples/parser/regexparser/RegexParserApplication.java b/examples/parser/src/main/java/org/apache/apex/examples/parser/regexparser/RegexParserApplication.java
index 3935793..c42f231 100644
--- a/examples/parser/src/main/java/org/apache/apex/examples/parser/regexparser/RegexParserApplication.java
+++ b/examples/parser/src/main/java/org/apache/apex/examples/parser/regexparser/RegexParserApplication.java
@@ -27,6 +27,9 @@
 import com.datatorrent.contrib.parser.RegexParser;
 
 @ApplicationAnnotation(name = "RegexParser")
+/**
+ * @since 3.8.0
+ */
 public class RegexParserApplication implements StreamingApplication
 {
   @Override
diff --git a/examples/parser/src/main/java/org/apache/apex/examples/parser/regexparser/ServerLog.java b/examples/parser/src/main/java/org/apache/apex/examples/parser/regexparser/ServerLog.java
index b446f8d..fc71a93 100644
--- a/examples/parser/src/main/java/org/apache/apex/examples/parser/regexparser/ServerLog.java
+++ b/examples/parser/src/main/java/org/apache/apex/examples/parser/regexparser/ServerLog.java
@@ -20,6 +20,9 @@
 
 import java.util.Date;
 
+/**
+ * @since 3.8.0
+ */
 public class ServerLog
 {
   private Date date;
diff --git a/examples/parser/src/main/java/org/apache/apex/examples/parser/regexparser/ServerLogGenerator.java b/examples/parser/src/main/java/org/apache/apex/examples/parser/regexparser/ServerLogGenerator.java
index 9db1b51..0e19fe8 100644
--- a/examples/parser/src/main/java/org/apache/apex/examples/parser/regexparser/ServerLogGenerator.java
+++ b/examples/parser/src/main/java/org/apache/apex/examples/parser/regexparser/ServerLogGenerator.java
@@ -22,6 +22,9 @@
 import com.datatorrent.api.InputOperator;
 import com.datatorrent.common.util.BaseOperator;
 
+/**
+ * @since 3.8.0
+ */
 public class ServerLogGenerator extends BaseOperator implements InputOperator
 {
   public transient DefaultOutputPort<byte[]> outputPort = new DefaultOutputPort<byte[]>();
diff --git a/examples/s3/src/main/java/org/apache/apex/examples/s3Output/Application.java b/examples/s3/src/main/java/org/apache/apex/examples/s3Output/Application.java
index a8d2574..55bf69a 100644
--- a/examples/s3/src/main/java/org/apache/apex/examples/s3Output/Application.java
+++ b/examples/s3/src/main/java/org/apache/apex/examples/s3Output/Application.java
@@ -28,6 +28,8 @@
 
 /**
  * Application illustrating copy files from HDFS to S3 bucket.
+ *
+ * @since 3.8.0
  */
 @ApplicationAnnotation(name = "HDFSToS3App")
 public class Application implements StreamingApplication
diff --git a/examples/s3/src/main/java/org/apache/apex/examples/s3ToHdfsSync/S3ToHDFSSyncApplication.java b/examples/s3/src/main/java/org/apache/apex/examples/s3ToHdfsSync/S3ToHDFSSyncApplication.java
index 472341c..7b0024d 100644
--- a/examples/s3/src/main/java/org/apache/apex/examples/s3ToHdfsSync/S3ToHDFSSyncApplication.java
+++ b/examples/s3/src/main/java/org/apache/apex/examples/s3ToHdfsSync/S3ToHDFSSyncApplication.java
@@ -29,6 +29,8 @@
 
 /**
  * Simple application illustrating file copy from S3. S3 Input
+ *
+ * @since 3.8.0
  */
 @ApplicationAnnotation(name = "S3-to-HDFS-Sync")
 public class S3ToHDFSSyncApplication implements StreamingApplication
diff --git a/examples/s3/src/main/java/org/apache/apex/examples/s3TupleOutput/Application.java b/examples/s3/src/main/java/org/apache/apex/examples/s3TupleOutput/Application.java
index cba776c..8c25c98 100644
--- a/examples/s3/src/main/java/org/apache/apex/examples/s3TupleOutput/Application.java
+++ b/examples/s3/src/main/java/org/apache/apex/examples/s3TupleOutput/Application.java
@@ -28,6 +28,8 @@
 
 /**
  * Simple application illustrating file copy from S3
+ *
+ * @since 3.8.0
  */
 @ApplicationAnnotation(name = "s3-output-line")
 public class Application implements StreamingApplication
diff --git a/kafka/kafka-common/src/main/java/org/apache/apex/malhar/kafka/AbstractKafkaConsumer.java b/kafka/kafka-common/src/main/java/org/apache/apex/malhar/kafka/AbstractKafkaConsumer.java
index ebb46e5..30f33ca 100644
--- a/kafka/kafka-common/src/main/java/org/apache/apex/malhar/kafka/AbstractKafkaConsumer.java
+++ b/kafka/kafka-common/src/main/java/org/apache/apex/malhar/kafka/AbstractKafkaConsumer.java
@@ -31,6 +31,8 @@
 
 /**
  * Interface for Kafka Consumer. It wraps around the KafkaConsumer.
+ *
+ * @since 3.8.0
  */
 public interface AbstractKafkaConsumer
 {
diff --git a/kafka/kafka010/src/main/java/org/apache/apex/malhar/kafka/KafkaConsumer010.java b/kafka/kafka010/src/main/java/org/apache/apex/malhar/kafka/KafkaConsumer010.java
index fb4115a..1f7b023 100644
--- a/kafka/kafka010/src/main/java/org/apache/apex/malhar/kafka/KafkaConsumer010.java
+++ b/kafka/kafka010/src/main/java/org/apache/apex/malhar/kafka/KafkaConsumer010.java
@@ -35,6 +35,8 @@
 
 /**
  * Wrapper for 0.10.x version of Kafka consumer
+ *
+ * @since 3.8.0
  */
 @InterfaceStability.Evolving
 public class KafkaConsumer010 implements AbstractKafkaConsumer
diff --git a/kafka/kafka010/src/main/java/org/apache/apex/malhar/kafka/KafkaSinglePortInputOperator.java b/kafka/kafka010/src/main/java/org/apache/apex/malhar/kafka/KafkaSinglePortInputOperator.java
index f314660..87f3b2a 100644
--- a/kafka/kafka010/src/main/java/org/apache/apex/malhar/kafka/KafkaSinglePortInputOperator.java
+++ b/kafka/kafka010/src/main/java/org/apache/apex/malhar/kafka/KafkaSinglePortInputOperator.java
@@ -30,6 +30,8 @@
  * The key and cluster information are ignored
  * This class emit the value to the single output port
  *
+ *
+ * @since 3.8.0
  */
 @InterfaceStability.Evolving
 public class KafkaSinglePortInputOperator extends AbstractKafkaInputOperator
diff --git a/kafka/kafka09/src/main/java/org/apache/apex/malhar/kafka/KafkaConsumer09.java b/kafka/kafka09/src/main/java/org/apache/apex/malhar/kafka/KafkaConsumer09.java
index faa5171..2547645 100644
--- a/kafka/kafka09/src/main/java/org/apache/apex/malhar/kafka/KafkaConsumer09.java
+++ b/kafka/kafka09/src/main/java/org/apache/apex/malhar/kafka/KafkaConsumer09.java
@@ -36,6 +36,8 @@
 
 /**
  * Wrapper for 0.9.x version of Kafka consumer
+ *
+ * @since 3.8.0
  */
 @InterfaceStability.Evolving
 public class KafkaConsumer09 implements AbstractKafkaConsumer
diff --git a/kudu/src/main/java/org/apache/apex/malhar/kudu/AbstractKuduOutputOperator.java b/kudu/src/main/java/org/apache/apex/malhar/kudu/AbstractKuduOutputOperator.java
index b171d52..754e569 100644
--- a/kudu/src/main/java/org/apache/apex/malhar/kudu/AbstractKuduOutputOperator.java
+++ b/kudu/src/main/java/org/apache/apex/malhar/kudu/AbstractKuduOutputOperator.java
@@ -93,6 +93,8 @@
  * mandatory columns. In such scenarios, the method setDoNotWriteColumns() in {@link KuduExecutionContext} can be
  * used to specify only those columns that need an update. This ways a read and Update pattern can be merged to a
  * simple update pattern thus avoiding a read if required.</p>
+ *
+ * @since 3.8.0
  * */
 @InterfaceStability.Evolving
 public abstract class AbstractKuduOutputOperator extends BaseOperator
diff --git a/kudu/src/main/java/org/apache/apex/malhar/kudu/ApexKuduConnection.java b/kudu/src/main/java/org/apache/apex/malhar/kudu/ApexKuduConnection.java
index 4dddf82..ef57efc 100644
--- a/kudu/src/main/java/org/apache/apex/malhar/kudu/ApexKuduConnection.java
+++ b/kudu/src/main/java/org/apache/apex/malhar/kudu/ApexKuduConnection.java
@@ -37,6 +37,8 @@
 /**
  * <p>Represents a connection to the Kudu cluster. An instance of this class is to be supplied (via a builder pattern to)
  * {@link AbstractKuduOutputOperator} to connect to a Kudu cluster.</p>
+ *
+ * @since 3.8.0
  */
 
 public class ApexKuduConnection implements AutoCloseable, Serializable
diff --git a/kudu/src/main/java/org/apache/apex/malhar/kudu/BaseKuduOutputOperator.java b/kudu/src/main/java/org/apache/apex/malhar/kudu/BaseKuduOutputOperator.java
index 794d7e7..a7d8b0a 100644
--- a/kudu/src/main/java/org/apache/apex/malhar/kudu/BaseKuduOutputOperator.java
+++ b/kudu/src/main/java/org/apache/apex/malhar/kudu/BaseKuduOutputOperator.java
@@ -49,6 +49,8 @@
  * <br>pojoclassname=somepojoclasswithgettersandsetters; # Do not append name with .class at the end and
  *  do not forget to give the complete class name including the package</br>
  * </p>
+ *
+ * @since 3.8.0
  */
 public class BaseKuduOutputOperator extends AbstractKuduOutputOperator
 {
diff --git a/kudu/src/main/java/org/apache/apex/malhar/kudu/IncrementalStepScanInputOperator.java b/kudu/src/main/java/org/apache/apex/malhar/kudu/IncrementalStepScanInputOperator.java
index a9de1d4..3e2f027 100644
--- a/kudu/src/main/java/org/apache/apex/malhar/kudu/IncrementalStepScanInputOperator.java
+++ b/kudu/src/main/java/org/apache/apex/malhar/kudu/IncrementalStepScanInputOperator.java
@@ -62,6 +62,8 @@
  *   Note that the implementation assumes the templated column data type is of type long. Considering other types
  *    is a trivial extenstion and perhaps best achieved by extending the Abstract implementation.
  * </p>
+ *
+ * @since 3.8.0
  */
 public class IncrementalStepScanInputOperator<T,C extends InputOperatorControlTuple>
     extends AbstractKuduInputOperator<T,C>
diff --git a/kudu/src/main/java/org/apache/apex/malhar/kudu/InputOperatorControlTuple.java b/kudu/src/main/java/org/apache/apex/malhar/kudu/InputOperatorControlTuple.java
index b591acf..59e6221 100644
--- a/kudu/src/main/java/org/apache/apex/malhar/kudu/InputOperatorControlTuple.java
+++ b/kudu/src/main/java/org/apache/apex/malhar/kudu/InputOperatorControlTuple.java
@@ -22,6 +22,8 @@
 
 /**
  * A simple control tuple class that is used to represent a begin or end of a given SQL expression.
+ *
+ * @since 3.8.0
  */
 public class InputOperatorControlTuple implements ControlTuple
 {
diff --git a/kudu/src/main/java/org/apache/apex/malhar/kudu/KuduExecutionContext.java b/kudu/src/main/java/org/apache/apex/malhar/kudu/KuduExecutionContext.java
index ca6b2ff..16b6bb7 100644
--- a/kudu/src/main/java/org/apache/apex/malhar/kudu/KuduExecutionContext.java
+++ b/kudu/src/main/java/org/apache/apex/malhar/kudu/KuduExecutionContext.java
@@ -29,6 +29,8 @@
  * <p>Represents a summary of the mutation that needs to be done on the Kudu table. The type of mutation is
  * decided by the KuduMutation Type field. The actual data that is mutated inside the kudu table row is
  * represented by the payload. The execution context itself a templated class based on the payload class.</p>
+ *
+ * @since 3.8.0
  */
 public class KuduExecutionContext<T>
 {
diff --git a/kudu/src/main/java/org/apache/apex/malhar/kudu/KuduMutationType.java b/kudu/src/main/java/org/apache/apex/malhar/kudu/KuduMutationType.java
index eda0ac5..924421d 100644
--- a/kudu/src/main/java/org/apache/apex/malhar/kudu/KuduMutationType.java
+++ b/kudu/src/main/java/org/apache/apex/malhar/kudu/KuduMutationType.java
@@ -21,6 +21,8 @@
 /**
  * <p>Used in {@link KuduExecutionContext} to denote the type of mutation we would like to be executed for the
  * mutation being represented by the current tuple</p>
+ *
+ * @since 3.8.0
  */
 public enum KuduMutationType
 {
diff --git a/kudu/src/main/java/org/apache/apex/malhar/kudu/partitioner/AbstractKuduInputPartitioner.java b/kudu/src/main/java/org/apache/apex/malhar/kudu/partitioner/AbstractKuduInputPartitioner.java
index de3859b..e2ba64f 100644
--- a/kudu/src/main/java/org/apache/apex/malhar/kudu/partitioner/AbstractKuduInputPartitioner.java
+++ b/kudu/src/main/java/org/apache/apex/malhar/kudu/partitioner/AbstractKuduInputPartitioner.java
@@ -43,6 +43,8 @@
 
 /**
  * An abstract class that contains logic that is common across all partitioners available for the Kudu input operator.
+ *
+ * @since 3.8.0
  */
 public abstract class AbstractKuduInputPartitioner implements Partitioner<AbstractKuduInputOperator>
 {
diff --git a/kudu/src/main/java/org/apache/apex/malhar/kudu/partitioner/KuduOneToManyPartitioner.java b/kudu/src/main/java/org/apache/apex/malhar/kudu/partitioner/KuduOneToManyPartitioner.java
index 1313778..1435742 100644
--- a/kudu/src/main/java/org/apache/apex/malhar/kudu/partitioner/KuduOneToManyPartitioner.java
+++ b/kudu/src/main/java/org/apache/apex/malhar/kudu/partitioner/KuduOneToManyPartitioner.java
@@ -34,6 +34,8 @@
 
 /**
  * Used when a user would like to assign multiple kudu tablets to a single physical instance of the Kudu input operator
+ *
+ * @since 3.8.0
  */
 public class KuduOneToManyPartitioner extends AbstractKuduInputPartitioner
 {
diff --git a/kudu/src/main/java/org/apache/apex/malhar/kudu/partitioner/KuduOneToOnePartitioner.java b/kudu/src/main/java/org/apache/apex/malhar/kudu/partitioner/KuduOneToOnePartitioner.java
index e477e83..1f9bb9b 100644
--- a/kudu/src/main/java/org/apache/apex/malhar/kudu/partitioner/KuduOneToOnePartitioner.java
+++ b/kudu/src/main/java/org/apache/apex/malhar/kudu/partitioner/KuduOneToOnePartitioner.java
@@ -34,6 +34,8 @@
 
 /**
  * A partitioner that assigns one to one mapping of each kudu tablet to one physical instance of Kudu input operator.
+ *
+ * @since 3.8.0
  */
 public class KuduOneToOnePartitioner extends AbstractKuduInputPartitioner
 {
diff --git a/kudu/src/main/java/org/apache/apex/malhar/kudu/partitioner/KuduPartitionScanStrategy.java b/kudu/src/main/java/org/apache/apex/malhar/kudu/partitioner/KuduPartitionScanStrategy.java
index c7e1bc4..d306b86 100644
--- a/kudu/src/main/java/org/apache/apex/malhar/kudu/partitioner/KuduPartitionScanStrategy.java
+++ b/kudu/src/main/java/org/apache/apex/malhar/kudu/partitioner/KuduPartitionScanStrategy.java
@@ -20,6 +20,8 @@
 
 /**
  * Used to set the partition scan.
+ *
+ * @since 3.8.0
  */
 public enum KuduPartitionScanStrategy
 {
diff --git a/kudu/src/main/java/org/apache/apex/malhar/kudu/scanner/AbstractKuduPartitionScanner.java b/kudu/src/main/java/org/apache/apex/malhar/kudu/scanner/AbstractKuduPartitionScanner.java
index b998f60..d878792 100644
--- a/kudu/src/main/java/org/apache/apex/malhar/kudu/scanner/AbstractKuduPartitionScanner.java
+++ b/kudu/src/main/java/org/apache/apex/malhar/kudu/scanner/AbstractKuduPartitionScanner.java
@@ -47,6 +47,8 @@
  * An abstract class that contains logic common to all types of Scanner. A scanner is responsible for scanning rows from
  * the kudu table based on the incoming SQL query. See {@link KuduPartitionConsistentOrderScanner}
  *  and {@link KuduPartitionRandomOrderScanner} for options available as scanners.
+ *
+ * @since 3.8.0
  */
 public abstract class AbstractKuduPartitionScanner<T,C extends InputOperatorControlTuple>
 {
diff --git a/kudu/src/main/java/org/apache/apex/malhar/kudu/scanner/KuduPartitionConsistentOrderScanner.java b/kudu/src/main/java/org/apache/apex/malhar/kudu/scanner/KuduPartitionConsistentOrderScanner.java
index a3ed595..b0e7cbe 100644
--- a/kudu/src/main/java/org/apache/apex/malhar/kudu/scanner/KuduPartitionConsistentOrderScanner.java
+++ b/kudu/src/main/java/org/apache/apex/malhar/kudu/scanner/KuduPartitionConsistentOrderScanner.java
@@ -41,6 +41,8 @@
  *   <li>The consistent order scanner always scans one tablet after another ( and hence less performant compared to
  *   that of the Random order scanner {@link KuduPartitionRandomOrderScanner}) </li>
  * </ol>
+ *
+ * @since 3.8.0
  */
 public class KuduPartitionConsistentOrderScanner<T,C extends InputOperatorControlTuple>
     extends AbstractKuduPartitionScanner<T,C>
diff --git a/kudu/src/main/java/org/apache/apex/malhar/kudu/scanner/KuduPartitionRandomOrderScanner.java b/kudu/src/main/java/org/apache/apex/malhar/kudu/scanner/KuduPartitionRandomOrderScanner.java
index 9054c46..5c5464f 100644
--- a/kudu/src/main/java/org/apache/apex/malhar/kudu/scanner/KuduPartitionRandomOrderScanner.java
+++ b/kudu/src/main/java/org/apache/apex/malhar/kudu/scanner/KuduPartitionRandomOrderScanner.java
@@ -31,6 +31,8 @@
  * sequence of tuples in case of restart after a crash/kill. The nature of unordered scans is because
  * of an eager approach to scan kudu tablets as all the thread pool based threads scan in parallel and hence
  * ordering cannot be guaranteed to the same for each run on the same data set.
+ *
+ * @since 3.8.0
  */
 public class KuduPartitionRandomOrderScanner<T,C extends InputOperatorControlTuple>
     extends AbstractKuduPartitionScanner<T,C>
diff --git a/kudu/src/main/java/org/apache/apex/malhar/kudu/scanner/KuduPartitionScanAssignmentMeta.java b/kudu/src/main/java/org/apache/apex/malhar/kudu/scanner/KuduPartitionScanAssignmentMeta.java
index 1875aaa..b23890f 100644
--- a/kudu/src/main/java/org/apache/apex/malhar/kudu/scanner/KuduPartitionScanAssignmentMeta.java
+++ b/kudu/src/main/java/org/apache/apex/malhar/kudu/scanner/KuduPartitionScanAssignmentMeta.java
@@ -24,6 +24,8 @@
 /**
  * The main metadata class that is used to hold the information about the scan token and also the ordinal
  * position out of the total.
+ *
+ * @since 3.8.0
  */
 public class KuduPartitionScanAssignmentMeta implements Serializable
 {
diff --git a/kudu/src/main/java/org/apache/apex/malhar/kudu/scanner/KuduPartitionScannerCallable.java b/kudu/src/main/java/org/apache/apex/malhar/kudu/scanner/KuduPartitionScannerCallable.java
index e664de2..7510502 100644
--- a/kudu/src/main/java/org/apache/apex/malhar/kudu/scanner/KuduPartitionScannerCallable.java
+++ b/kudu/src/main/java/org/apache/apex/malhar/kudu/scanner/KuduPartitionScannerCallable.java
@@ -48,6 +48,9 @@
  * scan token range from a single Kudu tablet. The rows are sent to the input operator buffer so that they
  * can be emitted as windows progress.
  */
+/**
+ * @since 3.8.0
+ */
 public class KuduPartitionScannerCallable<T,C extends InputOperatorControlTuple> implements Callable<Long>
 {
   private AbstractKuduInputOperator<T,C> operatorUsingThisScanner;
diff --git a/kudu/src/main/java/org/apache/apex/malhar/kudu/scanner/KuduRecordWithMeta.java b/kudu/src/main/java/org/apache/apex/malhar/kudu/scanner/KuduRecordWithMeta.java
index 77b7314..8dd985a 100644
--- a/kudu/src/main/java/org/apache/apex/malhar/kudu/scanner/KuduRecordWithMeta.java
+++ b/kudu/src/main/java/org/apache/apex/malhar/kudu/scanner/KuduRecordWithMeta.java
@@ -22,6 +22,8 @@
  * Represents a Kudu row and metadata for the row that was consumed by the Kudu scanner client.
  * The metadata includes information like the ordinal position for this scan instance, the query and the scan
  * token was scheduled.
+ *
+ * @since 3.8.0
  */
 public class KuduRecordWithMeta<T>
 {
diff --git a/kudu/src/main/java/org/apache/apex/malhar/kudu/scanner/KuduScanOrderStrategy.java b/kudu/src/main/java/org/apache/apex/malhar/kudu/scanner/KuduScanOrderStrategy.java
index 130a8ef..6a8e813 100644
--- a/kudu/src/main/java/org/apache/apex/malhar/kudu/scanner/KuduScanOrderStrategy.java
+++ b/kudu/src/main/java/org/apache/apex/malhar/kudu/scanner/KuduScanOrderStrategy.java
@@ -20,6 +20,8 @@
 
 /**
  * Used to define the scan order strategy when multiple scan tokens are assigned to a single Apex partition
+ *
+ * @since 3.8.0
  */
 public enum KuduScanOrderStrategy
 {
diff --git a/kudu/src/main/java/org/apache/apex/malhar/kudu/sqltranslator/KuduSQLExpressionErrorListener.java b/kudu/src/main/java/org/apache/apex/malhar/kudu/sqltranslator/KuduSQLExpressionErrorListener.java
index 5ff08c5..6bb94fb 100644
--- a/kudu/src/main/java/org/apache/apex/malhar/kudu/sqltranslator/KuduSQLExpressionErrorListener.java
+++ b/kudu/src/main/java/org/apache/apex/malhar/kudu/sqltranslator/KuduSQLExpressionErrorListener.java
@@ -27,6 +27,8 @@
 
 /**
  * A simple error listener that is plugged into the Kudu expression parser
+ *
+ * @since 3.8.0
  */
 public class KuduSQLExpressionErrorListener extends BaseErrorListener
 {
diff --git a/kudu/src/main/java/org/apache/apex/malhar/kudu/sqltranslator/KuduSQLParseTreeListener.java b/kudu/src/main/java/org/apache/apex/malhar/kudu/sqltranslator/KuduSQLParseTreeListener.java
index a1e0ec5..8004e09 100644
--- a/kudu/src/main/java/org/apache/apex/malhar/kudu/sqltranslator/KuduSQLParseTreeListener.java
+++ b/kudu/src/main/java/org/apache/apex/malhar/kudu/sqltranslator/KuduSQLParseTreeListener.java
@@ -44,6 +44,8 @@
  * This listener then start building the Kudu scanner constructs as it listens to the tree walk steps.
  * Note that it only only overrides required methods from its base class {@code KuduSQLExpressionBaseListener}
  * The KuduSQLExpressionBaseListener class is an autogenerated class by the Antlr4 compiler
+ *
+ * @since 3.8.0
  * */
 public class KuduSQLParseTreeListener extends KuduSQLExpressionBaseListener
 {
diff --git a/kudu/src/main/java/org/apache/apex/malhar/kudu/sqltranslator/KuduSQLParser.java b/kudu/src/main/java/org/apache/apex/malhar/kudu/sqltranslator/KuduSQLParser.java
index acb221e..7fcbb34 100644
--- a/kudu/src/main/java/org/apache/apex/malhar/kudu/sqltranslator/KuduSQLParser.java
+++ b/kudu/src/main/java/org/apache/apex/malhar/kudu/sqltranslator/KuduSQLParser.java
@@ -24,6 +24,8 @@
 
 /**
  * A simple wrapper on the top of the auto-generated KuduSQL expression parser.
+ *
+ * @since 3.8.0
  */
 public class KuduSQLParser extends KuduSQLExpressionParser
 {
diff --git a/kudu/src/main/java/org/apache/apex/malhar/kudu/sqltranslator/SQLToKuduPredicatesTranslator.java b/kudu/src/main/java/org/apache/apex/malhar/kudu/sqltranslator/SQLToKuduPredicatesTranslator.java
index e34f381..86ee8d8 100644
--- a/kudu/src/main/java/org/apache/apex/malhar/kudu/sqltranslator/SQLToKuduPredicatesTranslator.java
+++ b/kudu/src/main/java/org/apache/apex/malhar/kudu/sqltranslator/SQLToKuduPredicatesTranslator.java
@@ -35,6 +35,8 @@
 /**
  * A class responsible for parsing an SQL expression and return parsed Kudu Client equivalent objects.
  * This class is not Thread safe.
+ *
+ * @since 3.8.0
  */
 public class SQLToKuduPredicatesTranslator
 {
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/appdata/AbstractAppDataServer.java b/library/src/main/java/org/apache/apex/malhar/lib/appdata/AbstractAppDataServer.java
index 4b57d66..4b8bfad 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/appdata/AbstractAppDataServer.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/appdata/AbstractAppDataServer.java
@@ -36,6 +36,8 @@
  * Subclasses are expected to implement the processQuery method for the logic of handling the query. Note that
  * processQuery cannot directly emit to the operator's output port because it's called from the thread of the
  * embeddable query info provider.
+ *
+ * @since 3.8.0
  */
 public abstract class AbstractAppDataServer<QueryType> implements Operator, AppData.Store<QueryType>
 {
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/function/FunctionOperatorUtil.java b/library/src/main/java/org/apache/apex/malhar/lib/function/FunctionOperatorUtil.java
index e288c36..a9693f5 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/function/FunctionOperatorUtil.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/function/FunctionOperatorUtil.java
@@ -26,6 +26,9 @@
  * A utility class that can be used in conjunction with the FunctionOperator class
  */
 @InterfaceStability.Evolving
+/**
+ * @since 3.8.0
+ */
 public class FunctionOperatorUtil
 {
 
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/io/block/PartFileWriter.java b/library/src/main/java/org/apache/apex/malhar/lib/io/block/PartFileWriter.java
index 010e8ff..99e1ae1 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/io/block/PartFileWriter.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/io/block/PartFileWriter.java
@@ -41,6 +41,8 @@
  * Writes the blocks into the specified directory.
  * If f1 is the file of size 10 MB and the block size is 1 MB then this operator writes the blocks into the
  * specified directory as f1.part1, f1.part2 , ...., f1.part10. Here, size of each part is 1 MB.
+ *
+ * @since 3.8.0
  */
 public class PartFileWriter extends BlockWriter implements Operator.IdleTimeHandler
 {
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/state/managed/SliceBloomFilter.java b/library/src/main/java/org/apache/apex/malhar/lib/state/managed/SliceBloomFilter.java
index 5cbc03e..aa22458 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/state/managed/SliceBloomFilter.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/state/managed/SliceBloomFilter.java
@@ -71,6 +71,8 @@
  * <a href="https://github.com/sangupta/bloomfilter/blob/master/src/main/java/com/sangupta/bloomfilter/BloomFilter.java">BloomFilter.java</a>
  * <a href="https://github.com/sangupta/murmur/blob/master/src/main/java/com/sangupta/murmur/Murmur3.java">Murmur3.java</a>
  *
+ *
+ * @since 3.8.0
  */
 public class SliceBloomFilter
 {
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/utils/KryoJavaSerializer.java b/library/src/main/java/org/apache/apex/malhar/lib/utils/KryoJavaSerializer.java
index f06e90d..6077cf4 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/utils/KryoJavaSerializer.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/utils/KryoJavaSerializer.java
@@ -34,6 +34,8 @@
  *
  * <p>This class can be removed after upgrade to a Kryo release > 4.0
  * see https://github.com/EsotericSoftware/kryo/commit/19a6b5edee7125fbaf54c64084a8d0e13509920b
+ *
+ * @since 3.8.0
  */
 public class KryoJavaSerializer extends JavaSerializer
 {
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/window/accumulation/Sort.java b/library/src/main/java/org/apache/apex/malhar/lib/window/accumulation/Sort.java
index 7dc684f..86d70e4 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/window/accumulation/Sort.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/window/accumulation/Sort.java
@@ -28,6 +28,8 @@
 
 /**
  * Sort accumulation
+ *
+ * @since 3.8.0
  */
 @InterfaceStability.Evolving
 public class Sort<T> implements Accumulation<T, List<T>, List<T>>