diff --git a/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/CheckFilterExpressionTypeRule.java b/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/CheckFilterExpressionTypeRule.java
index 874a1d6..3eadba3 100644
--- a/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/CheckFilterExpressionTypeRule.java
+++ b/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/CheckFilterExpressionTypeRule.java
@@ -70,7 +70,7 @@
 
     /**
      * Check if the type is optional boolean or not
-     * 
+     *
      * @param type
      * @return true if it is; false otherwise.
      */
diff --git a/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/DisjunctivePredicateToJoinRule.java b/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/DisjunctivePredicateToJoinRule.java
index 2e02c07..5b6a8b1 100644
--- a/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/DisjunctivePredicateToJoinRule.java
+++ b/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/DisjunctivePredicateToJoinRule.java
@@ -158,7 +158,7 @@
      * when joining. Right now this compatibility is defined as type equality, but it could we relaxed.
      * Once type promotion works correctly in all parts of the system, this check should not be needed anymore.
      * (see https://code.google.com/p/asterixdb/issues/detail?id=716)
-     * 
+     *
      * @param t1
      *            one type
      * @param t2
diff --git a/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/InlineUnnestFunctionRule.java b/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/InlineUnnestFunctionRule.java
index bd7c6ad..1c27a6e 100644
--- a/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/InlineUnnestFunctionRule.java
+++ b/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/InlineUnnestFunctionRule.java
@@ -84,7 +84,7 @@
 
     /**
      * This method is to inline one variable
-     * 
+     *
      * @param usedVar
      *            A variable that is used by the scan-collection function in the unnest operator
      * @param unnestOp
diff --git a/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/LoadRecordFieldsRule.java b/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/LoadRecordFieldsRule.java
index ecca996..598c775 100644
--- a/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/LoadRecordFieldsRule.java
+++ b/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/LoadRecordFieldsRule.java
@@ -223,7 +223,7 @@
 
     /**
      * Pushes one field-access assignment above toPushThroughChildRef
-     * 
+     *
      * @param toPush
      * @param toPushThroughChildRef
      */
@@ -243,7 +243,7 @@
      * into
      * assign $x := Expr
      * assign $y := record-constructor { "field": Expr, ... }
-     * 
+     *
      * @param toPush
      */
     private static boolean findAndEliminateRedundantFieldAccess(AssignOperator assign) throws AlgebricksException {
diff --git a/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/PushAggFuncIntoStandaloneAggregateRule.java b/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/PushAggFuncIntoStandaloneAggregateRule.java
index 833352a..7d768b2 100644
--- a/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/PushAggFuncIntoStandaloneAggregateRule.java
+++ b/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/PushAggFuncIntoStandaloneAggregateRule.java
@@ -87,7 +87,7 @@
 
     /**
      * Recursively check whether the list of expressions contains an aggregate function.
-     * 
+     *
      * @param exprRefs
      * @return true if the list contains an aggregate function and false otherwise.
      */
@@ -117,7 +117,7 @@
      * Check whether the join is aggregate-pushable, that is,
      * 1) the join condition is true;
      * 2) each join branch produces only one tuple.
-     * 
+     *
      * @param join
      * @return true if pushable
      */
@@ -145,7 +145,7 @@
 
     /**
      * Does the actual push of aggregates for qualified joins.
-     * 
+     *
      * @param join
      * @param assignOp
      *            that contains aggregate function calls.
@@ -213,7 +213,7 @@
             FunctionIdentifier aggFuncIdent = AsterixBuiltinFunctions.getAggregateFunction(assignFuncExpr
                     .getFunctionIdentifier());
 
-            // Push the agg func into the agg op.                
+            // Push the agg func into the agg op.
 
             List<Mutable<ILogicalExpression>> aggArgs = new ArrayList<Mutable<ILogicalExpression>>();
             aggArgs.add(aggOpExpr.getArguments().get(0));
diff --git a/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/RemoveRedundantSelectRule.java b/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/RemoveRedundantSelectRule.java
index fb25568..fe9e49e 100644
--- a/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/RemoveRedundantSelectRule.java
+++ b/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/RemoveRedundantSelectRule.java
@@ -66,7 +66,7 @@
 
     /**
      * Whether the condition expression always returns true.
-     * 
+     *
      * @param cond
      * @return true if the condition always holds; false otherwise.
      */
diff --git a/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/am/AccessMethodAnalysisContext.java b/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/am/AccessMethodAnalysisContext.java
index b17cdfe..ca5da98 100644
--- a/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/am/AccessMethodAnalysisContext.java
+++ b/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/am/AccessMethodAnalysisContext.java
@@ -39,7 +39,7 @@
     public List<IOptimizableFuncExpr> matchedFuncExprs = new ArrayList<IOptimizableFuncExpr>();
 
     // Contains candidate indexes and a list of (integer,integer) tuples that index into matchedFuncExprs and matched variable inside this expr.
-    // We are mapping from candidate indexes to a list of function expressions 
+    // We are mapping from candidate indexes to a list of function expressions
     // that match one of the index's expressions.
     public Map<Index, List<Pair<Integer, Integer>>> indexExprsAndVars = new TreeMap<Index, List<Pair<Integer, Integer>>>();
 
diff --git a/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/am/IAccessMethod.java b/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/am/IAccessMethod.java
index 432d933..6538ead 100644
--- a/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/am/IAccessMethod.java
+++ b/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/am/IAccessMethod.java
@@ -51,7 +51,7 @@
      * optimizable by this access method based on its function identifier. If
      * funcExpr has been found to be optimizable, this method adds an
      * OptimizableFunction to analysisCtx.matchedFuncExprs for further analysis.
-     * 
+     *
      * @return true if funcExpr is optimizable by this access method, false
      *         otherwise
      * @throws AlgebricksException
@@ -63,7 +63,7 @@
     /**
      * Indicates whether all index expressions must be matched in order for this
      * index to be applicable.
-     * 
+     *
      * @return boolean
      */
     public boolean matchAllIndexExprs();
@@ -71,7 +71,7 @@
     /**
      * Indicates whether this index is applicable if only a prefix of the index
      * expressions are matched.
-     * 
+     *
      * @return boolean
      */
     public boolean matchPrefixIndexExprs();
@@ -95,7 +95,7 @@
 
     /**
      * Analyzes expr to see whether it is optimizable by the given concrete index.
-     * 
+     *
      * @throws AlgebricksException
      */
     public boolean exprIsOptimizable(Index index, IOptimizableFuncExpr optFuncExpr) throws AlgebricksException;
diff --git a/asterix-algebra/src/main/java/org/apache/asterix/translator/TranslationException.java b/asterix-algebra/src/main/java/org/apache/asterix/translator/TranslationException.java
index 2928297..93586fc 100644
--- a/asterix-algebra/src/main/java/org/apache/asterix/translator/TranslationException.java
+++ b/asterix-algebra/src/main/java/org/apache/asterix/translator/TranslationException.java
@@ -22,7 +22,7 @@
 
 public class TranslationException extends AsterixException {
     /**
-     * 
+     *
      */
     private static final long serialVersionUID = 685960054131778068L;
 
diff --git a/asterix-app/src/main/java/org/apache/asterix/feed/FeedJobNotificationHandler.java b/asterix-app/src/main/java/org/apache/asterix/feed/FeedJobNotificationHandler.java
index b42ef1e..49b88ca 100644
--- a/asterix-app/src/main/java/org/apache/asterix/feed/FeedJobNotificationHandler.java
+++ b/asterix-app/src/main/java/org/apache/asterix/feed/FeedJobNotificationHandler.java
@@ -309,7 +309,7 @@
         intakeJobInfo.getIntakeFeedJoint().setState(State.ACTIVE);
         intakeJobInfo.setState(FeedJobState.ACTIVE);
 
-        // notify event listeners 
+        // notify event listeners
         notifyFeedEventSubscribers(intakeJobInfo, FeedLifecycleEvent.FEED_INTAKE_STARTED);
     }
 
@@ -424,7 +424,7 @@
         // remove feed joints
         deregisterFeedIntakeJob(message.jobId);
 
-        // notify event listeners 
+        // notify event listeners
         notifyFeedEventSubscribers(intakeInfo, event);
 
     }
@@ -458,7 +458,7 @@
         }
         deregisterFeedActivity(cInfo);
 
-        // notify event listeners 
+        // notify event listeners
         FeedLifecycleEvent event = failure ? FeedLifecycleEvent.FEED_COLLECT_FAILURE : FeedLifecycleEvent.FEED_ENDED;
         notifyFeedEventSubscribers(cInfo, event);
     }
@@ -739,4 +739,4 @@
         }
 
     }
-}
\ No newline at end of file
+}
diff --git a/asterix-app/src/main/java/org/apache/asterix/feed/FeedLoadManager.java b/asterix-app/src/main/java/org/apache/asterix/feed/FeedLoadManager.java
index ee4da11..18e885d 100644
--- a/asterix-app/src/main/java/org/apache/asterix/feed/FeedLoadManager.java
+++ b/asterix-app/src/main/java/org/apache/asterix/feed/FeedLoadManager.java
@@ -122,7 +122,7 @@
                 // Step 2) send prepare to  stall message
                 gracefullyTerminateDataFlow(message.getConnectionId(), Integer.MAX_VALUE);
 
-                // Step 3) run the altered job specification 
+                // Step 3) run the altered job specification
                 if (LOGGER.isLoggable(Level.INFO)) {
                     LOGGER.info("New Job after adjusting to the workload " + jobSpec);
                 }
diff --git a/asterix-app/src/main/java/org/apache/asterix/file/SecondaryRTreeOperationsHelper.java b/asterix-app/src/main/java/org/apache/asterix/file/SecondaryRTreeOperationsHelper.java
index 418d143..83f91a0 100644
--- a/asterix-app/src/main/java/org/apache/asterix/file/SecondaryRTreeOperationsHelper.java
+++ b/asterix-app/src/main/java/org/apache/asterix/file/SecondaryRTreeOperationsHelper.java
@@ -240,7 +240,7 @@
         JobSpecification spec = JobSpecificationUtils.createJobSpecification();
         boolean temp = dataset.getDatasetDetails().isTemp();
         if (dataset.getDatasetType() == DatasetType.INTERNAL) {
-            // Create dummy key provider for feeding the primary index scan. 
+            // Create dummy key provider for feeding the primary index scan.
             AbstractOperatorDescriptor keyProviderOp = createDummyKeyProviderOp(spec);
 
             // Create primary index scan op.
diff --git a/asterix-common/src/main/java/org/apache/asterix/common/api/IAsterixContextInfo.java b/asterix-common/src/main/java/org/apache/asterix/common/api/IAsterixContextInfo.java
index 2eb4fb2..d092df7 100644
--- a/asterix-common/src/main/java/org/apache/asterix/common/api/IAsterixContextInfo.java
+++ b/asterix-common/src/main/java/org/apache/asterix/common/api/IAsterixContextInfo.java
@@ -24,7 +24,7 @@
 
     /**
      * Returns an instance of the implementation for ICCApplicationContext.
-     * 
+     *
      * @return ICCApplicationContext implementation instance
      */
     public ICCApplicationContext getCCApplicationContext();
diff --git a/asterix-common/src/main/java/org/apache/asterix/common/api/IClusterEventsSubscriber.java b/asterix-common/src/main/java/org/apache/asterix/common/api/IClusterEventsSubscriber.java
index bb2c19a..3a98b82 100644
--- a/asterix-common/src/main/java/org/apache/asterix/common/api/IClusterEventsSubscriber.java
+++ b/asterix-common/src/main/java/org/apache/asterix/common/api/IClusterEventsSubscriber.java
@@ -46,6 +46,6 @@
      * @param newState
      */
     public void notifyStateChange(ClusterState previousState, ClusterState newState);
-    
+
 
 }
diff --git a/asterix-common/src/main/java/org/apache/asterix/common/api/IDatasetLifecycleManager.java b/asterix-common/src/main/java/org/apache/asterix/common/api/IDatasetLifecycleManager.java
index 803e708..7e02faf 100644
--- a/asterix-common/src/main/java/org/apache/asterix/common/api/IDatasetLifecycleManager.java
+++ b/asterix-common/src/main/java/org/apache/asterix/common/api/IDatasetLifecycleManager.java
@@ -39,14 +39,14 @@
 
     /**
      * Flushes all open datasets synchronously.
-     * 
+     *
      * @throws HyracksDataException
      */
     void flushAllDatasets() throws HyracksDataException;
 
     /**
      * Schedules asynchronous flush on datasets that have memory components with first LSN < nonSharpCheckpointTargetLSN.
-     * 
+     *
      * @param nonSharpCheckpointTargetLSN
      * @throws HyracksDataException
      */
@@ -54,7 +54,7 @@
 
     /**
      * creates (if necessary) and returns the dataset info.
-     * 
+     *
      * @param datasetID
      * @return
      */
@@ -71,7 +71,7 @@
 
     /**
      * creates (if necessary) and returns the primary index operation tracker of a dataset.
-     * 
+     *
      * @param datasetID
      * @return
      */
@@ -79,7 +79,7 @@
 
     /**
      * creates (if necessary) and returns the dataset virtual buffer caches.
-     * 
+     *
      * @param datasetID
      * @return
      */
diff --git a/asterix-common/src/main/java/org/apache/asterix/common/config/DatasetConfig.java b/asterix-common/src/main/java/org/apache/asterix/common/config/DatasetConfig.java
index ba3b30a..49ffa28 100644
--- a/asterix-common/src/main/java/org/apache/asterix/common/config/DatasetConfig.java
+++ b/asterix-common/src/main/java/org/apache/asterix/common/config/DatasetConfig.java
@@ -45,7 +45,7 @@
     public enum ExternalDatasetTransactionState {
         COMMIT, // The committed state <- nothing is required->
         BEGIN, // The state after starting the refresh transaction <- will either abort moving to committed state or move to ready to commit->
-        READY_TO_COMMIT // The transaction is ready to commit <- can only move forward to committed state-> 
+        READY_TO_COMMIT // The transaction is ready to commit <- can only move forward to committed state->
     };
 
     public enum ExternalFilePendingOp {
diff --git a/asterix-common/src/main/java/org/apache/asterix/common/config/GlobalConfig.java b/asterix-common/src/main/java/org/apache/asterix/common/config/GlobalConfig.java
index 14ffa3f..bc8fd5f 100644
--- a/asterix-common/src/main/java/org/apache/asterix/common/config/GlobalConfig.java
+++ b/asterix-common/src/main/java/org/apache/asterix/common/config/GlobalConfig.java
@@ -42,7 +42,7 @@
     public static int DEFAULT_INPUT_DATA_COLUMN = 0;
 
     public static final String DEFAULT_COMPACTION_POLICY_NAME = "prefix";
-    
+
     public static final String DEFAULT_FILTERED_DATASET_COMPACTION_POLICY_NAME = "correlated-prefix";
 
     public static final Map<String, String> DEFAULT_COMPACTION_POLICY_PROPERTIES;
diff --git a/asterix-common/src/main/java/org/apache/asterix/common/context/DatasetLifecycleManager.java b/asterix-common/src/main/java/org/apache/asterix/common/context/DatasetLifecycleManager.java
index 438db58..93d78e8 100644
--- a/asterix-common/src/main/java/org/apache/asterix/common/context/DatasetLifecycleManager.java
+++ b/asterix-common/src/main/java/org/apache/asterix/common/context/DatasetLifecycleManager.java
@@ -214,8 +214,8 @@
     }
 
     private boolean evictCandidateDataset() throws HyracksDataException {
-        // We will take a dataset that has no active transactions, it is open (a dataset consuming memory), 
-        // that is not being used (refcount == 0) and has been least recently used. The sort order defined 
+        // We will take a dataset that has no active transactions, it is open (a dataset consuming memory),
+        // that is not being used (refcount == 0) and has been least recently used. The sort order defined
         // for DatasetInfo maintains this. See DatasetInfo.compareTo().
         List<DatasetInfo> datasetInfosList = new ArrayList<DatasetInfo>(datasetInfos.values());
         Collections.sort(datasetInfosList);
@@ -572,7 +572,7 @@
             }
         } else {
             for (IndexInfo iInfo : dsInfo.indexes.values()) {
-                // TODO: This is not efficient since we flush the indexes sequentially. 
+                // TODO: This is not efficient since we flush the indexes sequentially.
                 // Think of a way to allow submitting the flush requests concurrently. We don't do them concurrently because this
                 // may lead to a deadlock scenario between the DatasetLifeCycleManager and the PrimaryIndexOperationTracker.
                 flushAndWaitForIO(dsInfo, iInfo);
diff --git a/asterix-common/src/main/java/org/apache/asterix/common/dataflow/AsterixLSMInvertedIndexInsertDeleteOperatorDescriptor.java b/asterix-common/src/main/java/org/apache/asterix/common/dataflow/AsterixLSMInvertedIndexInsertDeleteOperatorDescriptor.java
index 06b0729..0d7d1d7 100644
--- a/asterix-common/src/main/java/org/apache/asterix/common/dataflow/AsterixLSMInvertedIndexInsertDeleteOperatorDescriptor.java
+++ b/asterix-common/src/main/java/org/apache/asterix/common/dataflow/AsterixLSMInvertedIndexInsertDeleteOperatorDescriptor.java
@@ -40,7 +40,7 @@
     private static final long serialVersionUID = 1L;
 
     private final String indexName;
-    
+
     public AsterixLSMInvertedIndexInsertDeleteOperatorDescriptor(IOperatorDescriptorRegistry spec,
             RecordDescriptor recDesc, IStorageManagerInterface storageManager, IFileSplitProvider fileSplitProvider,
             IIndexLifecycleManagerProvider lifecycleManagerProvider, ITypeTraits[] tokenTypeTraits,
diff --git a/asterix-common/src/main/java/org/apache/asterix/common/dataflow/IAsterixApplicationContextInfo.java b/asterix-common/src/main/java/org/apache/asterix/common/dataflow/IAsterixApplicationContextInfo.java
index a5cd72b..9647452 100644
--- a/asterix-common/src/main/java/org/apache/asterix/common/dataflow/IAsterixApplicationContextInfo.java
+++ b/asterix-common/src/main/java/org/apache/asterix/common/dataflow/IAsterixApplicationContextInfo.java
@@ -31,21 +31,21 @@
 
     /**
      * Returns an instance of the implementation for IIndexLifecycleManagerProvider.
-     * 
+     *
      * @return IIndexLifecycleManagerProvider implementation instance
      */
     public IIndexLifecycleManagerProvider getIndexLifecycleManagerProvider();
 
     /**
      * Returns an instance of the implementation for IStorageManagerInterface.
-     * 
+     *
      * @return IStorageManagerInterface implementation instance
      */
     public IStorageManagerInterface getStorageManagerInterface();
 
     /**
      * Returns an instance of the implementation for ICCApplicationContext.
-     * 
+     *
      * @return ICCApplicationContext implementation instance
      */
     public ICCApplicationContext getCCApplicationContext();
diff --git a/asterix-common/src/main/java/org/apache/asterix/common/exceptions/TypeException.java b/asterix-common/src/main/java/org/apache/asterix/common/exceptions/TypeException.java
index 4f08322..f8795a4 100644
--- a/asterix-common/src/main/java/org/apache/asterix/common/exceptions/TypeException.java
+++ b/asterix-common/src/main/java/org/apache/asterix/common/exceptions/TypeException.java
@@ -21,7 +21,7 @@
 public class TypeException extends AsterixException {
 
     /**
-     * 
+     *
      */
     private static final long serialVersionUID = 6823056042083694786L;
 
diff --git a/asterix-common/src/main/java/org/apache/asterix/common/replication/IReplicationChannel.java b/asterix-common/src/main/java/org/apache/asterix/common/replication/IReplicationChannel.java
index 56ae20f..e77f792 100644
--- a/asterix-common/src/main/java/org/apache/asterix/common/replication/IReplicationChannel.java
+++ b/asterix-common/src/main/java/org/apache/asterix/common/replication/IReplicationChannel.java
@@ -29,9 +29,9 @@
 
     /**
      * Closes the replication channel.
-     * 
+     *
      * @throws IOException
      */
     public void close() throws IOException;
 
-}
\ No newline at end of file
+}
diff --git a/asterix-common/src/main/java/org/apache/asterix/common/replication/IReplicationManager.java b/asterix-common/src/main/java/org/apache/asterix/common/replication/IReplicationManager.java
index 276d498..76f8767 100644
--- a/asterix-common/src/main/java/org/apache/asterix/common/replication/IReplicationManager.java
+++ b/asterix-common/src/main/java/org/apache/asterix/common/replication/IReplicationManager.java
@@ -30,7 +30,7 @@
 
     /**
      * Asynchronously sends a serialized version of the record to remote replicas.
-     * 
+     *
      * @param logRecord
      *            The log record to be replicated,
      */
@@ -38,7 +38,7 @@
 
     /**
      * Checks whether a log record has been replicated
-     * 
+     *
      * @param logRecord
      *            the log to check for.
      * @return true, if all ACKs were received from remote replicas.
@@ -47,7 +47,7 @@
 
     /**
      * Requests txns logs from a remote replica.
-     * 
+     *
      * @param remoteReplicaId
      *            The replica id to send the request to.
      * @param replicasDataToRecover
@@ -63,7 +63,7 @@
 
     /**
      * Requests LSM components files from a remote replica.
-     * 
+     *
      * @param remoteReplicaId
      *            The replica id to send the request to.
      * @param replicasDataToRecover
@@ -74,7 +74,7 @@
 
     /**
      * Requests current maximum LSN from remote replicas.
-     * 
+     *
      * @param remoteReplicaIds
      *            remote replicas to send the request to.
      * @return The maximum of the received maximum LSNs.
@@ -84,7 +84,7 @@
 
     /**
      * Sends the IP address of the local replica to all remote replicas.
-     * 
+     *
      * @throws IOException
      */
     public void broadcastNewIPAddress() throws IOException;
@@ -111,7 +111,7 @@
 
     /**
      * Updates remote replica (in-memory) information.
-     * 
+     *
      * @param replica
      *            the replica to update.
      */
@@ -124,14 +124,14 @@
 
     /**
      * Submits a ReplicaEvent to ReplicationEventsMonitor thread.
-     * 
+     *
      * @param event
      */
     public void reportReplicaEvent(ReplicaEvent event);
 
     /**
      * Requests the current minimum LSN of a remote replica.
-     * 
+     *
      * @param replicaId
      *            The replica to send the request to.
      * @return The returned minimum LSN from the remote replica.
@@ -141,7 +141,7 @@
 
     /**
      * Sends a request to remote replicas to flush indexes that have LSN less than nonSharpCheckpointTargetLSN
-     * 
+     *
      * @param nonSharpCheckpointTargetLSN
      * @throws IOException
      */
diff --git a/asterix-common/src/main/java/org/apache/asterix/common/replication/IReplicationThread.java b/asterix-common/src/main/java/org/apache/asterix/common/replication/IReplicationThread.java
index 3e2569d..9226a66 100644
--- a/asterix-common/src/main/java/org/apache/asterix/common/replication/IReplicationThread.java
+++ b/asterix-common/src/main/java/org/apache/asterix/common/replication/IReplicationThread.java
@@ -24,9 +24,9 @@
 
     /**
      * Sends a notification to this thread that logRecord has been flushed.
-     * 
+     *
      * @param logRecord
      *            The log that has been flushed.
      */
     public void notifyLogReplicationRequester(LogRecord logRecord);
-}
\ No newline at end of file
+}
diff --git a/asterix-common/src/main/java/org/apache/asterix/common/transactions/DatasetId.java b/asterix-common/src/main/java/org/apache/asterix/common/transactions/DatasetId.java
index 4bcbada..81ece13 100644
--- a/asterix-common/src/main/java/org/apache/asterix/common/transactions/DatasetId.java
+++ b/asterix-common/src/main/java/org/apache/asterix/common/transactions/DatasetId.java
@@ -22,7 +22,7 @@
 
 public class DatasetId implements Serializable {
     /**
-     * 
+     *
      */
     private static final long serialVersionUID = 1L;
     /**
diff --git a/asterix-common/src/main/java/org/apache/asterix/common/transactions/ILockManager.java b/asterix-common/src/main/java/org/apache/asterix/common/transactions/ILockManager.java
index 05f76cb..7909622 100644
--- a/asterix-common/src/main/java/org/apache/asterix/common/transactions/ILockManager.java
+++ b/asterix-common/src/main/java/org/apache/asterix/common/transactions/ILockManager.java
@@ -41,7 +41,7 @@
      * has a "weaker" lock, then the request would be interpreted as a convert
      * request
      * Waiting transaction would eventually garb the lock, or get timed-out
-     * 
+     *
      * @param datasetId
      * @param entityHashValue
      * @param lockMode
@@ -56,7 +56,7 @@
      * transaction on "All" resources Upon releasing each lock on each resource,
      * potential waiters, which can be waken up based on their requested lock
      * mode and the waiting policy would be waken up
-     * 
+     *
      * @param txnContext
      * @throws ACIDException
      */
@@ -76,7 +76,7 @@
 
     /**
      * Call to lock and unlock a specific resource in a specific lock mode
-     * 
+     *
      * @param datasetId
      * @param entityHashValue
      * @param lockMode
@@ -112,7 +112,7 @@
 
     /**
      * Prints out the contents of the transactions' table in a readable fashion
-     * 
+     *
      * @return
      * @throws ACIDException
      */
diff --git a/asterix-common/src/main/java/org/apache/asterix/common/transactions/ILogManager.java b/asterix-common/src/main/java/org/apache/asterix/common/transactions/ILogManager.java
index 82a0cca..cff4184 100644
--- a/asterix-common/src/main/java/org/apache/asterix/common/transactions/ILogManager.java
+++ b/asterix-common/src/main/java/org/apache/asterix/common/transactions/ILogManager.java
@@ -27,7 +27,7 @@
 
     /**
      * Submits a logRecord to log Manager which appends it to the log tail
-     * 
+     *
      * @param logRecord
      * @throws ACIDException
      */
@@ -46,7 +46,7 @@
 
     /**
      * Deletes all log partitions which have a maximum LSN less than checkpointLSN
-     * 
+     *
      * @param checkpointLSN
      */
     public void deleteOldLogFiles(long checkpointLSN);
@@ -63,7 +63,7 @@
 
     /**
      * Delete all log files and start new log partition > LSNtoStartFrom
-     * 
+     *
      * @param LSNtoStartFrom
      * @throws IOException
      */
diff --git a/asterix-common/src/main/java/org/apache/asterix/common/transactions/IRecoveryManager.java b/asterix-common/src/main/java/org/apache/asterix/common/transactions/IRecoveryManager.java
index a2b7a82..cb3f8c3 100644
--- a/asterix-common/src/main/java/org/apache/asterix/common/transactions/IRecoveryManager.java
+++ b/asterix-common/src/main/java/org/apache/asterix/common/transactions/IRecoveryManager.java
@@ -51,7 +51,7 @@
      * The system is recovering HEALTHY: The system is in healthy state
      * CORRUPTEED: The system is in corrupted state. This happens when a
      * rollback or recovery task fails. In this state the system is unusable.
-     * 
+     *
      * @see SystemState
      * @return SystemState The state of the system
      * @throws ACIDException
@@ -60,7 +60,7 @@
 
     /**
      * Initiates a crash recovery.
-     * 
+     *
      * @param synchronous
      *            indicates if the recovery is to be done in a synchronous
      *            manner. In asynchronous mode, the recovery will happen as part
@@ -73,7 +73,7 @@
 
     /**
      * Rolls back a transaction.
-     * 
+     *
      * @param txnContext
      *            the transaction context associated with the transaction
      * @throws ACIDException
@@ -89,7 +89,7 @@
      * @throws HyracksDataException
      */
     public long checkpoint(boolean isSharpCheckpoint, long nonSharpCheckpointTargetLSN) throws ACIDException, HyracksDataException;
-    
+
     /**
      * Performs recovery based on the passed logs
      * @param remoteLogs the remote logs to be replayed
@@ -99,14 +99,14 @@
     public void replayRemoteLogs(ArrayList<ILogRecord> remoteLogs) throws HyracksDataException, ACIDException;
 
     /**
-     * 
+     *
      * @return min first LSN of the open indexes (including remote indexes if replication is enabled)
      * @throws HyracksDataException
      */
     public long getMinFirstLSN() throws HyracksDataException;
-    
+
     /**
-     * 
+     *
      * @return min first LSN of the open indexes
      * @throws HyracksDataException
      */
diff --git a/asterix-common/src/main/java/org/apache/asterix/common/transactions/ITransactionManager.java b/asterix-common/src/main/java/org/apache/asterix/common/transactions/ITransactionManager.java
index 73b43cd..c81faf0 100644
--- a/asterix-common/src/main/java/org/apache/asterix/common/transactions/ITransactionManager.java
+++ b/asterix-common/src/main/java/org/apache/asterix/common/transactions/ITransactionManager.java
@@ -41,7 +41,7 @@
     /**
      * Begins a transaction identified by a transaction id and returns the
      * associated transaction context.
-     * 
+     *
      * @param jobId
      *            a unique value for the transaction id.
      * @return the transaction context associated with the initiated transaction
@@ -53,7 +53,7 @@
     /**
      * Returns the transaction context of an active transaction given the
      * transaction id.
-     * 
+     *
      * @param jobId
      *            a unique value for the transaction id.
      * @param createIfNotExist
@@ -65,7 +65,7 @@
 
     /**
      * Commits a transaction.
-     * 
+     *
      * @param txnContext
      *            the transaction context associated with the transaction
      * @param datasetId
@@ -81,7 +81,7 @@
 
     /**
      * Aborts a transaction.
-     * 
+     *
      * @param txnContext
      *            the transaction context associated with the transaction
      * @param datasetId
@@ -99,7 +99,7 @@
      * Indicates end of all activity for a transaction. In other words, all
      * participating threads in the transaction have completed the intended
      * task.
-     * 
+     *
      * @param txnContext
      *            the transaction context associated with the transaction
      * @param datasetId
@@ -118,7 +118,7 @@
      * Returns the Transaction Provider for the transaction eco-system. A
      * transaction eco-system consists of a Log Manager, a Recovery Manager, a
      * Transaction Manager and a Lock Manager.
-     * 
+     *
      * @see ITransactionSubsystem
      * @return TransactionProvider
      */
diff --git a/asterix-common/src/main/java/org/apache/asterix/common/transactions/ITransactionSubsystem.java b/asterix-common/src/main/java/org/apache/asterix/common/transactions/ITransactionSubsystem.java
index daa1ee9..4ce84b5 100644
--- a/asterix-common/src/main/java/org/apache/asterix/common/transactions/ITransactionSubsystem.java
+++ b/asterix-common/src/main/java/org/apache/asterix/common/transactions/ITransactionSubsystem.java
@@ -32,5 +32,5 @@
     public IAsterixAppRuntimeContextProvider getAsterixAppRuntimeContextProvider();
 
     public String getId();
-    
+
 }
diff --git a/asterix-common/src/main/java/org/apache/asterix/common/transactions/LogRecord.java b/asterix-common/src/main/java/org/apache/asterix/common/transactions/LogRecord.java
index f837df2..51eca0b 100644
--- a/asterix-common/src/main/java/org/apache/asterix/common/transactions/LogRecord.java
+++ b/asterix-common/src/main/java/org/apache/asterix/common/transactions/LogRecord.java
@@ -41,7 +41,7 @@
  * NodeIdLength(4)
  * NodeId(?)
  * ---------------------------
- * [Header2] (12 bytes + PKValueSize) : for entity_commit and update log types 
+ * [Header2] (12 bytes + PKValueSize) : for entity_commit and update log types
  * DatasetId(4) //stored in dataset_dataset in Metadata Node
  * PKHashValue(4)
  * PKValueSize(4)
@@ -230,7 +230,7 @@
 
     private void writeTuple(ByteBuffer buffer, ITupleReference tuple, int size) {
         tupleWriter.writeTuple(tuple, buffer.array(), buffer.position());
-        //writeTuple() doesn't change the position of the buffer. 
+        //writeTuple() doesn't change the position of the buffer.
         buffer.position(buffer.position() + size);
     }
 
@@ -614,7 +614,7 @@
         if (logType == LogType.FLUSH) {
             //LSN
             logSize += (Long.SIZE / 8);
-            //num of indexes 
+            //num of indexes
             logSize += (Integer.SIZE / 8);
         }
 
diff --git a/asterix-common/src/main/java/org/apache/asterix/common/utils/ANameSchema.java b/asterix-common/src/main/java/org/apache/asterix/common/utils/ANameSchema.java
index 2b12658..2ce3cca 100644
--- a/asterix-common/src/main/java/org/apache/asterix/common/utils/ANameSchema.java
+++ b/asterix-common/src/main/java/org/apache/asterix/common/utils/ANameSchema.java
@@ -20,7 +20,7 @@
 
 /*
  * Author: Guangqiang Li
- * Created on Nov 30, 2009 
+ * Created on Nov 30, 2009
  */
 public class ANameSchema {
     public static final int LOCALNAME_PROPERTY = 0;
diff --git a/asterix-external-data/src/main/java/org/apache/asterix/external/api/IAdapterFactory.java b/asterix-external-data/src/main/java/org/apache/asterix/external/api/IAdapterFactory.java
index bf2db9a..17916e5 100644
--- a/asterix-external-data/src/main/java/org/apache/asterix/external/api/IAdapterFactory.java
+++ b/asterix-external-data/src/main/java/org/apache/asterix/external/api/IAdapterFactory.java
@@ -34,7 +34,7 @@
 
     /**
      * Returns the display name corresponding to the Adapter type that is created by the factory.
-     * 
+     *
      * @return the display name
      */
     public String getAlias();
@@ -54,7 +54,7 @@
 
     /**
      * Creates an instance of IDatasourceAdapter.
-     * 
+     *
      * @param HyracksTaskContext
      * @param partition
      * @return An instance of IDatasourceAdapter.
@@ -71,7 +71,7 @@
 
     /**
      * Gets the record type associated with the output of the adapter
-     * 
+     *
      * @return
      */
     public ARecordType getAdapterOutputType();
diff --git a/asterix-external-data/src/main/java/org/apache/asterix/external/api/INodeResolver.java b/asterix-external-data/src/main/java/org/apache/asterix/external/api/INodeResolver.java
index 831cd69..b0f1ae7 100644
--- a/asterix-external-data/src/main/java/org/apache/asterix/external/api/INodeResolver.java
+++ b/asterix-external-data/src/main/java/org/apache/asterix/external/api/INodeResolver.java
@@ -27,7 +27,7 @@
 
     /**
      * Resolve a passed-in value to a node controller id.
-     * 
+     *
      * @param value
      *            string to be resolved
      * @return resolved result (a node controller id)
diff --git a/asterix-external-data/src/main/java/org/apache/asterix/external/api/INodeResolverFactory.java b/asterix-external-data/src/main/java/org/apache/asterix/external/api/INodeResolverFactory.java
index ce49596..0eda060 100644
--- a/asterix-external-data/src/main/java/org/apache/asterix/external/api/INodeResolverFactory.java
+++ b/asterix-external-data/src/main/java/org/apache/asterix/external/api/INodeResolverFactory.java
@@ -27,7 +27,7 @@
 
     /**
      * Create an instance of {@link INodeResolver}
-     * 
+     *
      * @return an instance of INodeResolver
      */
     public INodeResolver createNodeResolver();
diff --git a/asterix-external-data/src/main/java/org/apache/asterix/external/feed/api/IFeedConnectionManager.java b/asterix-external-data/src/main/java/org/apache/asterix/external/feed/api/IFeedConnectionManager.java
index 35d4cd7..32d551a 100644
--- a/asterix-external-data/src/main/java/org/apache/asterix/external/feed/api/IFeedConnectionManager.java
+++ b/asterix-external-data/src/main/java/org/apache/asterix/external/feed/api/IFeedConnectionManager.java
@@ -33,7 +33,7 @@
 
     /**
      * Allows registration of a feedRuntime.
-     * 
+     *
      * @param feedRuntime
      * @throws Exception
      */
@@ -41,7 +41,7 @@
 
     /**
      * Obtain feed runtime corresponding to a feedRuntimeId
-     * 
+     *
      * @param feedRuntimeId
      * @return
      */
@@ -49,7 +49,7 @@
 
     /**
      * De-register a feed
-     * 
+     *
      * @param feedConnection
      * @throws IOException
      */
@@ -57,7 +57,7 @@
 
     /**
      * Obtain the feed runtime manager associated with a feed.
-     * 
+     *
      * @param feedConnection
      * @return
      */
@@ -65,7 +65,7 @@
 
     /**
      * Allows de-registration of a feed runtime.
-     * 
+     *
      * @param feedRuntimeId
      */
     void deRegisterFeedRuntime(FeedConnectionId connectionId, FeedRuntimeId feedRuntimeId);
diff --git a/asterix-external-data/src/main/java/org/apache/asterix/external/feed/api/IFeedJoint.java b/asterix-external-data/src/main/java/org/apache/asterix/external/feed/api/IFeedJoint.java
index d990e45..2a3932d 100644
--- a/asterix-external-data/src/main/java/org/apache/asterix/external/feed/api/IFeedJoint.java
+++ b/asterix-external-data/src/main/java/org/apache/asterix/external/feed/api/IFeedJoint.java
@@ -80,7 +80,7 @@
 
     /**
      * Returns the feed subscriber {@link FeedSubscriber} corresponding to a given feed connection id.
-     * 
+     *
      * @param feedConnectionId
      *            the unique id of a feed connection
      * @return an instance of feedConnectionId {@link FeedConnectionId}
@@ -94,7 +94,7 @@
 
     /**
      * Remove the subscriber from the set of registered subscribers to the FeedJoint
-     * 
+     *
      * @param connectionId
      *            the connectionId that needs to be removed
      */
@@ -104,14 +104,14 @@
 
     /**
      * Add a feed connectionId to the set of registered subscribers
-     * 
+     *
      * @param connectionId
      */
     public void addReceiver(FeedConnectionId connectionId);
 
     /**
      * Add a feed subscription request {@link FeedConnectionRequest} for the FeedJoint
-     * 
+     *
      * @param request
      */
     public void addConnectionRequest(FeedConnectionRequest request);
diff --git a/asterix-external-data/src/main/java/org/apache/asterix/external/feed/api/IFeedLoadManager.java b/asterix-external-data/src/main/java/org/apache/asterix/external/feed/api/IFeedLoadManager.java
index f511979..1b6347a 100644
--- a/asterix-external-data/src/main/java/org/apache/asterix/external/feed/api/IFeedLoadManager.java
+++ b/asterix-external-data/src/main/java/org/apache/asterix/external/feed/api/IFeedLoadManager.java
@@ -52,7 +52,7 @@
     void reportFeedActivity(FeedConnectionId connectionId, FeedActivity activity);
 
     void removeFeedActivity(FeedConnectionId connectionId);
-    
+
     public FeedActivity getFeedActivity(FeedConnectionId connectionId);
 
     public Collection<FeedActivity> getFeedActivities();
diff --git a/asterix-external-data/src/main/java/org/apache/asterix/external/feed/api/IFeedMemoryComponent.java b/asterix-external-data/src/main/java/org/apache/asterix/external/feed/api/IFeedMemoryComponent.java
index 313dc1b..8e25b69 100644
--- a/asterix-external-data/src/main/java/org/apache/asterix/external/feed/api/IFeedMemoryComponent.java
+++ b/asterix-external-data/src/main/java/org/apache/asterix/external/feed/api/IFeedMemoryComponent.java
@@ -45,7 +45,7 @@
 
     /**
      * Expands this memory component by the speficied number of frames
-     * 
+     *
      * @param delta
      *            the amount (measured in number of frames) by which this memory component
      *            should be expanded
diff --git a/asterix-external-data/src/main/java/org/apache/asterix/external/feed/api/IFeedMemoryManager.java b/asterix-external-data/src/main/java/org/apache/asterix/external/feed/api/IFeedMemoryManager.java
index fb81373..508602c 100644
--- a/asterix-external-data/src/main/java/org/apache/asterix/external/feed/api/IFeedMemoryManager.java
+++ b/asterix-external-data/src/main/java/org/apache/asterix/external/feed/api/IFeedMemoryManager.java
@@ -30,7 +30,7 @@
 
     /**
      * Gets a memory component allocated from the feed memory budget
-     * 
+     *
      * @param type
      *            the kind of memory component that needs to be allocated
      * @return
@@ -40,7 +40,7 @@
 
     /**
      * Expand a memory component by the default increment
-     * 
+     *
      * @param memoryComponent
      * @return true if the expansion succeeded
      *         false if the requested expansion violates the configured budget
@@ -49,7 +49,7 @@
 
     /**
      * Releases the given memory component to reclaim the memory allocated for the component
-     * 
+     *
      * @param memoryComponent
      *            the memory component that is being reclaimed/released
      */
diff --git a/asterix-external-data/src/main/java/org/apache/asterix/external/feed/api/IFeedMessage.java b/asterix-external-data/src/main/java/org/apache/asterix/external/feed/api/IFeedMessage.java
index aa1af3a..bc2c938 100644
--- a/asterix-external-data/src/main/java/org/apache/asterix/external/feed/api/IFeedMessage.java
+++ b/asterix-external-data/src/main/java/org/apache/asterix/external/feed/api/IFeedMessage.java
@@ -44,7 +44,7 @@
 
     /**
      * Gets the type associated with this message
-     * 
+     *
      * @return MessageType type associated with this message
      */
     public MessageType getMessageType();
diff --git a/asterix-external-data/src/main/java/org/apache/asterix/external/feed/api/IFeedMessageService.java b/asterix-external-data/src/main/java/org/apache/asterix/external/feed/api/IFeedMessageService.java
index 42f71a7..a98cf2b 100644
--- a/asterix-external-data/src/main/java/org/apache/asterix/external/feed/api/IFeedMessageService.java
+++ b/asterix-external-data/src/main/java/org/apache/asterix/external/feed/api/IFeedMessageService.java
@@ -26,7 +26,7 @@
     /**
      * Sends a message ({@code IFeedMessage} to the {@code CentralFeedManager} running at the CC
      * The message is sent asynchronously.
-     * 
+     *
      * @param message
      *            the message to be sent
      */
diff --git a/asterix-external-data/src/main/java/org/apache/asterix/external/feed/api/IFeedWorkEventListener.java b/asterix-external-data/src/main/java/org/apache/asterix/external/feed/api/IFeedWorkEventListener.java
index e5797d0..e94ca46 100644
--- a/asterix-external-data/src/main/java/org/apache/asterix/external/feed/api/IFeedWorkEventListener.java
+++ b/asterix-external-data/src/main/java/org/apache/asterix/external/feed/api/IFeedWorkEventListener.java
@@ -33,7 +33,7 @@
     /**
      * A call back that is invokved after a failed execution of a feed
      * management task.
-     * 
+     *
      * @param e
      *            exception encountered during execution of the task.
      */
diff --git a/asterix-external-data/src/main/java/org/apache/asterix/external/feed/dataflow/FeedCollectRuntimeInputHandler.java b/asterix-external-data/src/main/java/org/apache/asterix/external/feed/dataflow/FeedCollectRuntimeInputHandler.java
index 6761d9a..4a361fb 100644
--- a/asterix-external-data/src/main/java/org/apache/asterix/external/feed/dataflow/FeedCollectRuntimeInputHandler.java
+++ b/asterix-external-data/src/main/java/org/apache/asterix/external/feed/dataflow/FeedCollectRuntimeInputHandler.java
@@ -56,7 +56,7 @@
     public void dropTill(int recordId) {
         feedFrameCache.dropTillRecordId(recordId);
     }
-    
+
     public void replayCached() throws HyracksDataException{
         feedFrameCache.replayAll();
     }
diff --git a/asterix-external-data/src/main/java/org/apache/asterix/external/feed/dataflow/FeedFrameCache.java b/asterix-external-data/src/main/java/org/apache/asterix/external/feed/dataflow/FeedFrameCache.java
index cd040c9..0a595b7 100644
--- a/asterix-external-data/src/main/java/org/apache/asterix/external/feed/dataflow/FeedFrameCache.java
+++ b/asterix-external-data/src/main/java/org/apache/asterix/external/feed/dataflow/FeedFrameCache.java
@@ -101,7 +101,7 @@
 
     /**
      * Replay the frame from the tuple (inclusive) with recordId as specified.
-     * 
+     *
      * @param recordId
      * @param frame
      * @throws HyracksDataException
@@ -132,7 +132,7 @@
 
     /**
      * Replay the frame
-     * 
+     *
      * @param frame
      * @throws HyracksDataException
      */
diff --git a/asterix-external-data/src/main/java/org/apache/asterix/external/feed/dataflow/FeedFrameTupleAccessor.java b/asterix-external-data/src/main/java/org/apache/asterix/external/feed/dataflow/FeedFrameTupleAccessor.java
index f08243e..d3897f3 100644
--- a/asterix-external-data/src/main/java/org/apache/asterix/external/feed/dataflow/FeedFrameTupleAccessor.java
+++ b/asterix-external-data/src/main/java/org/apache/asterix/external/feed/dataflow/FeedFrameTupleAccessor.java
@@ -44,8 +44,8 @@
                 + StatisticsConstants.INTAKE_PARTITION.length() + 2 + 1;
         return buffer.getInt(recordStart + partitionOffset);
     }
-    
-    
+
+
 
     @Override
     public int getFieldCount() {
diff --git a/asterix-external-data/src/main/java/org/apache/asterix/external/feed/management/FeedConnectionRequest.java b/asterix-external-data/src/main/java/org/apache/asterix/external/feed/management/FeedConnectionRequest.java
index 5f22a72..0175dcb 100644
--- a/asterix-external-data/src/main/java/org/apache/asterix/external/feed/management/FeedConnectionRequest.java
+++ b/asterix-external-data/src/main/java/org/apache/asterix/external/feed/management/FeedConnectionRequest.java
@@ -66,7 +66,7 @@
 
     private final FeedId receivingFeedId;
 
-    
+
     public FeedConnectionRequest(FeedJointKey feedPointKey, ConnectionLocation connectionLocation,
             List<String> functionsToApply, String targetDataset, String policy, Map<String, String> policyParameters,
             FeedId receivingFeedId) {
diff --git a/asterix-external-data/src/main/java/org/apache/asterix/external/feed/watch/SeriesAvg.java b/asterix-external-data/src/main/java/org/apache/asterix/external/feed/watch/SeriesAvg.java
index f75379d..6182753 100644
--- a/asterix-external-data/src/main/java/org/apache/asterix/external/feed/watch/SeriesAvg.java
+++ b/asterix-external-data/src/main/java/org/apache/asterix/external/feed/watch/SeriesAvg.java
@@ -39,7 +39,7 @@
         runningSum += value;
         count++;
     }
-    
+
     public  void reset(){
         count = 0;
     }
diff --git a/asterix-external-data/src/main/java/org/apache/asterix/external/indexing/ExternalFileIndexAccessor.java b/asterix-external-data/src/main/java/org/apache/asterix/external/indexing/ExternalFileIndexAccessor.java
index d94db08..5d98961 100644
--- a/asterix-external-data/src/main/java/org/apache/asterix/external/indexing/ExternalFileIndexAccessor.java
+++ b/asterix-external-data/src/main/java/org/apache/asterix/external/indexing/ExternalFileIndexAccessor.java
@@ -48,7 +48,7 @@
 import org.apache.hyracks.storage.am.lsm.common.api.ILSMIndexAccessorInternal;
 
 /*
- * This class was created specifically to facilitate accessing 
+ * This class was created specifically to facilitate accessing
  * external file index when doing external lookup during runtime
  */
 @SuppressWarnings({ "rawtypes", "unchecked" })
diff --git a/asterix-external-data/src/main/java/org/apache/asterix/external/input/record/reader/HDFSTextLineReader.java b/asterix-external-data/src/main/java/org/apache/asterix/external/input/record/reader/HDFSTextLineReader.java
index 9466a96..ea851a5 100644
--- a/asterix-external-data/src/main/java/org/apache/asterix/external/input/record/reader/HDFSTextLineReader.java
+++ b/asterix-external-data/src/main/java/org/apache/asterix/external/input/record/reader/HDFSTextLineReader.java
@@ -45,7 +45,7 @@
     /**
      * Create a line reader that reads from the given stream using the
      * default buffer-size (32k).
-     * 
+     *
      * @param in
      *            The input stream
      * @throws IOException
@@ -57,7 +57,7 @@
     /**
      * Create a line reader that reads from the given stream using the
      * given buffer-size.
-     * 
+     *
      * @param in
      *            The input stream
      * @param bufferSize
@@ -78,7 +78,7 @@
 
     /**
      * Create a line reader that reads from the given stream using the <code>io.file.buffer.size</code> specified in the given <code>Configuration</code>.
-     * 
+     *
      * @param in
      *            input stream
      * @param conf
@@ -176,7 +176,7 @@
 
     /**
      * Read from the InputStream into the given Text.
-     * 
+     *
      * @param str
      *            the object to store the given line
      * @param maxLineLength
@@ -191,7 +191,7 @@
 
     /**
      * Read from the InputStream into the given Text.
-     * 
+     *
      * @param str
      *            the object to store the given line
      * @return the number of bytes read including the newline
diff --git a/asterix-external-data/src/main/java/org/apache/asterix/external/operators/AbstractExternalDatasetIndexesOperatorDescriptor.java b/asterix-external-data/src/main/java/org/apache/asterix/external/operators/AbstractExternalDatasetIndexesOperatorDescriptor.java
index 371c603..9b37722 100644
--- a/asterix-external-data/src/main/java/org/apache/asterix/external/operators/AbstractExternalDatasetIndexesOperatorDescriptor.java
+++ b/asterix-external-data/src/main/java/org/apache/asterix/external/operators/AbstractExternalDatasetIndexesOperatorDescriptor.java
@@ -35,7 +35,7 @@
 import org.apache.hyracks.storage.am.lsm.rtree.dataflow.ExternalRTreeDataflowHelperFactory;
 
 // This is an operator that takes a single file index and an array of secondary indexes
-// it is intended to be used for 
+// it is intended to be used for
 // 1. commit transaction operation
 // 2. abort transaction operation
 // 3. recover transaction operation
diff --git a/asterix-external-data/src/main/java/org/apache/asterix/external/operators/ExternalLookupOperatorDescriptor.java b/asterix-external-data/src/main/java/org/apache/asterix/external/operators/ExternalLookupOperatorDescriptor.java
index c8881a3..9e35617 100644
--- a/asterix-external-data/src/main/java/org/apache/asterix/external/operators/ExternalLookupOperatorDescriptor.java
+++ b/asterix-external-data/src/main/java/org/apache/asterix/external/operators/ExternalLookupOperatorDescriptor.java
@@ -66,7 +66,7 @@
             final IRecordDescriptorProvider recordDescProvider, final int partition, int nPartitions)
                     throws HyracksDataException {
         // Create a file index accessor to be used for files lookup operations
-        // Note that all file index accessors will use partition 0 since we only have 1 files index per NC 
+        // Note that all file index accessors will use partition 0 since we only have 1 files index per NC
         final ExternalFileIndexAccessor snapshotAccessor = new ExternalFileIndexAccessor(
                 (ExternalBTreeDataflowHelper) dataflowHelperFactory.createIndexDataflowHelper(this, ctx, partition),
                 this);
diff --git a/asterix-external-data/src/main/java/org/apache/asterix/external/operators/IndexInfoOperatorDescriptor.java b/asterix-external-data/src/main/java/org/apache/asterix/external/operators/IndexInfoOperatorDescriptor.java
index 99c555a..2bc6043 100644
--- a/asterix-external-data/src/main/java/org/apache/asterix/external/operators/IndexInfoOperatorDescriptor.java
+++ b/asterix-external-data/src/main/java/org/apache/asterix/external/operators/IndexInfoOperatorDescriptor.java
@@ -49,7 +49,7 @@
         this.fileSplitProvider = fileSplitProvider;
         this.lifecycleManagerProvider = lifecycleManagerProvider;
         this.storageManager = storageManager;
-        
+
     }
 
     @Override
diff --git a/asterix-fuzzyjoin/src/main/java/org/apache/asterix/fuzzyjoin/FuzzyJoinConfig.java b/asterix-fuzzyjoin/src/main/java/org/apache/asterix/fuzzyjoin/FuzzyJoinConfig.java
index eca4563..8b1ab07 100644
--- a/asterix-fuzzyjoin/src/main/java/org/apache/asterix/fuzzyjoin/FuzzyJoinConfig.java
+++ b/asterix-fuzzyjoin/src/main/java/org/apache/asterix/fuzzyjoin/FuzzyJoinConfig.java
@@ -42,7 +42,7 @@
     public static final String RECORD_DATA1_VALUE = "1";
     //
     // data
-    //    
+    //
     public static final String DATA_TOKENS_PROPERTY = NAMESPACE + ".data.tokens";
     //
     // const
diff --git a/asterix-fuzzyjoin/src/main/java/org/apache/asterix/fuzzyjoin/FuzzyJoinUtil.java b/asterix-fuzzyjoin/src/main/java/org/apache/asterix/fuzzyjoin/FuzzyJoinUtil.java
index 41e7ca1..b540d16 100644
--- a/asterix-fuzzyjoin/src/main/java/org/apache/asterix/fuzzyjoin/FuzzyJoinUtil.java
+++ b/asterix-fuzzyjoin/src/main/java/org/apache/asterix/fuzzyjoin/FuzzyJoinUtil.java
@@ -28,11 +28,11 @@
     public static String clean(String in) {
         /*
          * - remove punctuation
-         * 
+         *
          * - normalize case
-         * 
+         *
          * - remove extra spaces
-         * 
+         *
          * - repalce space with FuzzyJoinDriver.TOKEN_SEPARATOR
          */
 
diff --git a/asterix-fuzzyjoin/src/main/java/org/apache/asterix/fuzzyjoin/similarity/SimilarityFiltersJaccard.java b/asterix-fuzzyjoin/src/main/java/org/apache/asterix/fuzzyjoin/similarity/SimilarityFiltersJaccard.java
index d8d9d7e..f16fed9 100644
--- a/asterix-fuzzyjoin/src/main/java/org/apache/asterix/fuzzyjoin/similarity/SimilarityFiltersJaccard.java
+++ b/asterix-fuzzyjoin/src/main/java/org/apache/asterix/fuzzyjoin/similarity/SimilarityFiltersJaccard.java
@@ -42,7 +42,7 @@
     }
 
     /**
-     * 
+     *
      */
     private static final long serialVersionUID = 1L;
 
diff --git a/asterix-fuzzyjoin/src/main/java/org/apache/asterix/fuzzyjoin/tokenizer/NGramTokenizer.java b/asterix-fuzzyjoin/src/main/java/org/apache/asterix/fuzzyjoin/tokenizer/NGramTokenizer.java
index e612364..5594e43 100644
--- a/asterix-fuzzyjoin/src/main/java/org/apache/asterix/fuzzyjoin/tokenizer/NGramTokenizer.java
+++ b/asterix-fuzzyjoin/src/main/java/org/apache/asterix/fuzzyjoin/tokenizer/NGramTokenizer.java
@@ -26,7 +26,7 @@
 public class NGramTokenizer implements Tokenizer {
 
     /**
-     * 
+     *
      */
     private static final long serialVersionUID = 1L;
 
diff --git a/asterix-fuzzyjoin/src/main/java/org/apache/asterix/fuzzyjoin/tokenizer/Token.java b/asterix-fuzzyjoin/src/main/java/org/apache/asterix/fuzzyjoin/tokenizer/Token.java
index ecdeff1..720d269 100644
--- a/asterix-fuzzyjoin/src/main/java/org/apache/asterix/fuzzyjoin/tokenizer/Token.java
+++ b/asterix-fuzzyjoin/src/main/java/org/apache/asterix/fuzzyjoin/tokenizer/Token.java
@@ -23,7 +23,7 @@
 
 public class Token implements Serializable {
     /**
-     * 
+     *
      */
     private static final long serialVersionUID = 1L;
 
diff --git a/asterix-fuzzyjoin/src/main/java/org/apache/asterix/fuzzyjoin/tokenizer/WordTokenizer.java b/asterix-fuzzyjoin/src/main/java/org/apache/asterix/fuzzyjoin/tokenizer/WordTokenizer.java
index 3470ac2..fa0bfe7 100644
--- a/asterix-fuzzyjoin/src/main/java/org/apache/asterix/fuzzyjoin/tokenizer/WordTokenizer.java
+++ b/asterix-fuzzyjoin/src/main/java/org/apache/asterix/fuzzyjoin/tokenizer/WordTokenizer.java
@@ -26,7 +26,7 @@
 public class WordTokenizer implements Tokenizer {
 
     /**
-     * 
+     *
      */
     private static final long serialVersionUID = 1L;
 
diff --git a/asterix-fuzzyjoin/src/main/java/org/apache/asterix/fuzzyjoin/tokenorder/IntTokenCountRankFrequency.java b/asterix-fuzzyjoin/src/main/java/org/apache/asterix/fuzzyjoin/tokenorder/IntTokenCountRankFrequency.java
index ea6e21d..d54c7d6 100644
--- a/asterix-fuzzyjoin/src/main/java/org/apache/asterix/fuzzyjoin/tokenorder/IntTokenCountRankFrequency.java
+++ b/asterix-fuzzyjoin/src/main/java/org/apache/asterix/fuzzyjoin/tokenorder/IntTokenCountRankFrequency.java
@@ -25,7 +25,7 @@
 
 public class IntTokenCountRankFrequency implements IntTokenCountRank {
     /**
-     * 
+     *
      */
     private static final long serialVersionUID = 1L;
 
diff --git a/asterix-fuzzyjoin/src/main/java/org/apache/asterix/fuzzyjoin/tokenorder/IntTokenRankFrequency.java b/asterix-fuzzyjoin/src/main/java/org/apache/asterix/fuzzyjoin/tokenorder/IntTokenRankFrequency.java
index ba9bf86..08d1c93 100644
--- a/asterix-fuzzyjoin/src/main/java/org/apache/asterix/fuzzyjoin/tokenorder/IntTokenRankFrequency.java
+++ b/asterix-fuzzyjoin/src/main/java/org/apache/asterix/fuzzyjoin/tokenorder/IntTokenRankFrequency.java
@@ -23,7 +23,7 @@
 
 public class IntTokenRankFrequency implements IntTokenRank {
     /**
-     * 
+     *
      */
     private static final long serialVersionUID = 1L;
 
diff --git a/asterix-fuzzyjoin/src/main/java/org/apache/asterix/fuzzyjoin/tokenorder/TokenRankBufferedFrequency.java b/asterix-fuzzyjoin/src/main/java/org/apache/asterix/fuzzyjoin/tokenorder/TokenRankBufferedFrequency.java
index 428f576..57fc325 100644
--- a/asterix-fuzzyjoin/src/main/java/org/apache/asterix/fuzzyjoin/tokenorder/TokenRankBufferedFrequency.java
+++ b/asterix-fuzzyjoin/src/main/java/org/apache/asterix/fuzzyjoin/tokenorder/TokenRankBufferedFrequency.java
@@ -26,7 +26,7 @@
 
 public class TokenRankBufferedFrequency implements TokenRank {
     /**
-     * 
+     *
      */
     private static final long serialVersionUID = 1L;
 
diff --git a/asterix-fuzzyjoin/src/main/java/org/apache/asterix/fuzzyjoin/tokenorder/TokenRankFrequency.java b/asterix-fuzzyjoin/src/main/java/org/apache/asterix/fuzzyjoin/tokenorder/TokenRankFrequency.java
index 2903336..97b95036 100644
--- a/asterix-fuzzyjoin/src/main/java/org/apache/asterix/fuzzyjoin/tokenorder/TokenRankFrequency.java
+++ b/asterix-fuzzyjoin/src/main/java/org/apache/asterix/fuzzyjoin/tokenorder/TokenRankFrequency.java
@@ -25,7 +25,7 @@
 
 public class TokenRankFrequency implements TokenRank {
     /**
-     * 
+     *
      */
     private static final long serialVersionUID = 1L;
 
diff --git a/asterix-installer/src/test/java/org/apache/asterix/installer/test/AbstractExecutionIT.java b/asterix-installer/src/test/java/org/apache/asterix/installer/test/AbstractExecutionIT.java
index 42827b4..5df074b 100644
--- a/asterix-installer/src/test/java/org/apache/asterix/installer/test/AbstractExecutionIT.java
+++ b/asterix-installer/src/test/java/org/apache/asterix/installer/test/AbstractExecutionIT.java
@@ -3,9 +3,9 @@
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
  * you may obtain a copy of the License from
- * 
+ *
  *     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.
diff --git a/asterix-installer/src/test/java/org/apache/asterix/installer/test/ClusterExecutionIT.java b/asterix-installer/src/test/java/org/apache/asterix/installer/test/ClusterExecutionIT.java
index cf69e1a..97709cb 100644
--- a/asterix-installer/src/test/java/org/apache/asterix/installer/test/ClusterExecutionIT.java
+++ b/asterix-installer/src/test/java/org/apache/asterix/installer/test/ClusterExecutionIT.java
@@ -3,9 +3,9 @@
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
  * you may obtain a copy of the License from
- * 
+ *
  *     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.
diff --git a/asterix-installer/src/test/java/org/apache/asterix/installer/test/ManagixExecutionIT.java b/asterix-installer/src/test/java/org/apache/asterix/installer/test/ManagixExecutionIT.java
index 492f173..14a1a58 100644
--- a/asterix-installer/src/test/java/org/apache/asterix/installer/test/ManagixExecutionIT.java
+++ b/asterix-installer/src/test/java/org/apache/asterix/installer/test/ManagixExecutionIT.java
@@ -3,9 +3,9 @@
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
  * you may obtain a copy of the License from
- * 
+ *
  *     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.
diff --git a/asterix-installer/src/test/java/org/apache/asterix/installer/test/ManagixSqlppExecutionIT.java b/asterix-installer/src/test/java/org/apache/asterix/installer/test/ManagixSqlppExecutionIT.java
index b9c2072..50d103a 100644
--- a/asterix-installer/src/test/java/org/apache/asterix/installer/test/ManagixSqlppExecutionIT.java
+++ b/asterix-installer/src/test/java/org/apache/asterix/installer/test/ManagixSqlppExecutionIT.java
@@ -3,9 +3,9 @@
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
  * you may obtain a copy of the License from
- * 
+ *
  *     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.
diff --git a/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/context/FunctionExpressionMap.java b/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/context/FunctionExpressionMap.java
index 4d98cc1..1a3d151 100644
--- a/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/context/FunctionExpressionMap.java
+++ b/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/context/FunctionExpressionMap.java
@@ -24,7 +24,7 @@
 
 public class FunctionExpressionMap extends HashMap<Integer, FunctionSignature> {
     /**
-     * 
+     *
      */
     private static final long serialVersionUID = 1L;
     private boolean varargs;
diff --git a/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/literal/DoubleLiteral.java b/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/literal/DoubleLiteral.java
index 98f1a19..1a5066d 100644
--- a/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/literal/DoubleLiteral.java
+++ b/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/literal/DoubleLiteral.java
@@ -22,7 +22,7 @@
 
 public class DoubleLiteral extends Literal {
     /**
-     * 
+     *
      */
     private static final long serialVersionUID = -5685491458356989250L;
     private Double value;
diff --git a/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/literal/FloatLiteral.java b/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/literal/FloatLiteral.java
index 70bc8fe..d7c54fa 100644
--- a/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/literal/FloatLiteral.java
+++ b/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/literal/FloatLiteral.java
@@ -22,7 +22,7 @@
 
 public class FloatLiteral extends Literal {
     /**
-     * 
+     *
      */
     private static final long serialVersionUID = 3273563021227964396L;
     private Float value;
diff --git a/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/literal/IntegerLiteral.java b/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/literal/IntegerLiteral.java
index 95173b5..e0c1de3 100644
--- a/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/literal/IntegerLiteral.java
+++ b/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/literal/IntegerLiteral.java
@@ -22,7 +22,7 @@
 
 public class IntegerLiteral extends Literal {
     /**
-     * 
+     *
      */
     private static final long serialVersionUID = -8633520244871361967L;
     private Integer value;
diff --git a/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/literal/LongIntegerLiteral.java b/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/literal/LongIntegerLiteral.java
index 4afc3b6..3320dac 100644
--- a/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/literal/LongIntegerLiteral.java
+++ b/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/literal/LongIntegerLiteral.java
@@ -22,7 +22,7 @@
 
 public class LongIntegerLiteral extends Literal {
     /**
-     * 
+     *
      */
     private static final long serialVersionUID = -8633520244871361967L;
     private Long value;
diff --git a/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/literal/NullLiteral.java b/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/literal/NullLiteral.java
index 242cbb6..e5fdb1d 100644
--- a/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/literal/NullLiteral.java
+++ b/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/literal/NullLiteral.java
@@ -23,7 +23,7 @@
 public class NullLiteral extends Literal {
 
     /**
-     * 
+     *
      */
     private static final long serialVersionUID = -7782153599294838739L;
 
diff --git a/asterix-maven-plugins/lexer-generator-maven-plugin/src/main/java/org/apache/asterix/lexergenerator/LexerGeneratorMojo.java b/asterix-maven-plugins/lexer-generator-maven-plugin/src/main/java/org/apache/asterix/lexergenerator/LexerGeneratorMojo.java
index c72eb0a..7b914bc 100644
--- a/asterix-maven-plugins/lexer-generator-maven-plugin/src/main/java/org/apache/asterix/lexergenerator/LexerGeneratorMojo.java
+++ b/asterix-maven-plugins/lexer-generator-maven-plugin/src/main/java/org/apache/asterix/lexergenerator/LexerGeneratorMojo.java
@@ -37,7 +37,7 @@
 public class LexerGeneratorMojo extends AbstractMojo {
     /**
      * parameter injected from pom.xml
-     * 
+     *
      * @parameter
      * @required
      */
@@ -45,7 +45,7 @@
 
     /**
      * parameter injected from pom.xml
-     * 
+     *
      * @parameter
      * @required
      */
@@ -93,4 +93,4 @@
         return fileData.toString();
     }
 
-}
\ No newline at end of file
+}
diff --git a/asterix-maven-plugins/lexer-generator-maven-plugin/src/main/resources/Lexer.java b/asterix-maven-plugins/lexer-generator-maven-plugin/src/main/resources/Lexer.java
index a113864..60e6e89 100644
--- a/asterix-maven-plugins/lexer-generator-maven-plugin/src/main/resources/Lexer.java
+++ b/asterix-maven-plugins/lexer-generator-maven-plugin/src/main/resources/Lexer.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package [PACKAGE]; 
+package [PACKAGE];
 
 import java.io.IOException;
 import [PACKAGE].[LEXER_NAME]Exception;
@@ -28,18 +28,18 @@
 
     // Human representation of tokens. Useful for debug.
     // Is possible to convert a TOKEN_CONSTANT in its image through
-    // [LEXER_NAME].tokenKindToString(TOKEN_CONSTANT); 
+    // [LEXER_NAME].tokenKindToString(TOKEN_CONSTANT);
     private static final String[] tokenImage = {
             "<EOF>", "<AUX_NOT_FOUND>" [TOKENS_IMAGES]
           };
-    
+
     private static final char EOF_CHAR = 4;
     protected java.io.Reader inputStream;
     protected int column;
     protected int line;
     protected boolean prevCharIsCR;
     protected boolean prevCharIsLF;
-    protected boolean containsEscapes; 
+    protected boolean containsEscapes;
     protected char[] buffer;
     protected int bufsize;
     protected int bufpos;
@@ -56,12 +56,12 @@
 
 // ================================================================================
 //  Main method. Return a TOKEN_CONSTANT
-// ================================================================================            
-            
+// ================================================================================
+
     public int next() throws [LEXER_NAME]Exception, IOException {
         char currentChar = buffer[bufpos];
         while (currentChar == ' ' || currentChar=='\t' || currentChar == '\n' || currentChar=='\r')
-            currentChar = readNextChar(); 
+            currentChar = readNextChar();
         tokenBegin = bufpos;
         containsEscapes = false;
         if (currentChar==EOF_CHAR) return TOKEN_EOF;
@@ -124,21 +124,21 @@
             return new String(buffer, tokenBegin, bufsize - tokenBegin) +
                                   new String(buffer, 0, bufpos);
     }
-    
+
     public int getColumn() {
         return column;
     }
-    
+
     public int getLine() {
         return line;
     }
-    
+
     public boolean containsEscapes() {
         return containsEscapes;
     }
 
     public static String tokenKindToString(int token) {
-        return tokenImage[token]; 
+        return tokenImage[token];
     }
 
     public void done(){
@@ -147,8 +147,8 @@
 
 // ================================================================================
 //  Parse error management
-// ================================================================================    
-    
+// ================================================================================
+
     protected int parseError(int ... tokens) throws [LEXER_NAME]Exception {
         StringBuilder message = new StringBuilder();
         message.append("Parse error at (").append(line).append(", ").append(column).append(")");
@@ -160,10 +160,10 @@
         }
         throw new [LEXER_NAME]Exception(message.toString());
     }
-    
+
     protected void updateLineColumn(char c){
         column++;
-    
+
         if (prevCharIsLF)
         {
             prevCharIsLF = false;
@@ -181,17 +181,17 @@
                 line += (column = 1);
             }
         }
-        
+
         if (c=='\r') {
             prevCharIsCR = true;
         } else if(c == '\n') {
             prevCharIsLF = true;
         }
     }
-    
+
 // ================================================================================
 //  Read data, buffer management. It uses a circular (and expandable) buffer
-// ================================================================================    
+// ================================================================================
 
     protected char readNextChar() throws IOException {
         if (++bufpos >= endOf_USED_Buffer)
@@ -202,13 +202,13 @@
     }
 
     protected boolean fillBuff() throws IOException {
-        if (endOf_UNUSED_Buffer == endOf_USED_Buffer) // If no more unused buffer space 
+        if (endOf_UNUSED_Buffer == endOf_USED_Buffer) // If no more unused buffer space
         {
           if (endOf_UNUSED_Buffer == bufsize)         // -- If the previous unused space was
           {                                           // -- at the end of the buffer
             if (tokenBegin > maxUnusedBufferSize)     // -- -- If the first N bytes before
             {                                         //       the current token are enough
-              bufpos = endOf_USED_Buffer = 0;         // -- -- -- setup buffer to use that fragment 
+              bufpos = endOf_USED_Buffer = 0;         // -- -- -- setup buffer to use that fragment
               endOf_UNUSED_Buffer = tokenBegin;
             }
             else if (tokenBegin < 0)                  // -- -- If no token yet
@@ -220,9 +220,9 @@
             endOf_UNUSED_Buffer = bufsize;            // -- set endOf_UNUSED_Buffer to the end of the buffer
           else if ((tokenBegin - endOf_UNUSED_Buffer) < maxUnusedBufferSize)
           {                                           // If between endOf_UNUSED_Buffer and the token
-            ExpandBuff(true);                         // there is NOT enough space expand the buffer                          
+            ExpandBuff(true);                         // there is NOT enough space expand the buffer
           }                                           // reorganizing it
-          else 
+          else
             endOf_UNUSED_Buffer = tokenBegin;         // Otherwise there is enough space at the start
         }                                             // so we set the buffer to use that fragment
         int i;
diff --git a/asterix-maven-plugins/lexer-generator-maven-plugin/src/main/resources/LexerException.java b/asterix-maven-plugins/lexer-generator-maven-plugin/src/main/resources/LexerException.java
index 8b37bae..9030eb2 100644
--- a/asterix-maven-plugins/lexer-generator-maven-plugin/src/main/resources/LexerException.java
+++ b/asterix-maven-plugins/lexer-generator-maven-plugin/src/main/resources/LexerException.java
@@ -19,11 +19,11 @@
 package [PACKAGE];
 
 public class [LEXER_NAME]Exception extends Exception {
-    
+
     public [LEXER_NAME]Exception(String message) {
         super(message);
     }
-    
+
     private static final long serialVersionUID = 1L;
 
 }
diff --git a/asterix-maven-plugins/lexer-generator-maven-plugin/src/test/java/org/apache/asterix/lexergenerator/Fixtures.java b/asterix-maven-plugins/lexer-generator-maven-plugin/src/test/java/org/apache/asterix/lexergenerator/Fixtures.java
index be792e4..a6d0267 100644
--- a/asterix-maven-plugins/lexer-generator-maven-plugin/src/test/java/org/apache/asterix/lexergenerator/Fixtures.java
+++ b/asterix-maven-plugins/lexer-generator-maven-plugin/src/test/java/org/apache/asterix/lexergenerator/Fixtures.java
@@ -34,18 +34,18 @@
     static  String rule2_action     = "myaction2";
     static  String rule2_name       = "myrule2";
     static  String rule2_match      = "matchCheck2("+rule_name+")";
-    
+
     static public Rule createRule(final String name){
         return new Rule(){
             String rule_name        = name;
             String rule_action      = "myaction";
             String rule_match       = "matchCheck("+rule_name+")";
-            
+
             @Override
             public Rule clone(){
                 return Fixtures.createRule(name+"_clone");
             }
-            
+
             @Override
             public String javaAction() {
                 return rule_action;
@@ -55,21 +55,21 @@
             public String javaMatch(String action) {
                 return rule_match+"{"+action+"}";
             }
-            
+
             @Override
             public String toString(){
                 return rule_name;
             }
-            
-        }; 
+
+        };
     }
-    
+
     static Rule rule = new Rule(){
-        
+
         public Rule clone(){
             return null;
         }
-        
+
         @Override
         public String javaAction() {
             return rule_action;
@@ -79,20 +79,20 @@
         public String javaMatch(String action) {
             return rule_match+"{"+action+"}";
         }
-        
+
         @Override
         public String toString(){
             return rule_name;
         }
-        
-    }; 
+
+    };
 
     static Rule rule2 = new Rule(){
 
         public Rule clone(){
             return null;
         }
-        
+
         @Override
         public String javaAction() {
             return rule2_action;
@@ -102,17 +102,17 @@
         public String javaMatch(String act) {
             return rule2_match+"{"+act+"}";
         }
-        
+
         @Override
         public String toString(){
             return rule2_name;
         }
-        
+
     };
-    
+
     static RuleChar ruleA = new RuleChar('a');
     static RuleChar ruleB = new RuleChar('b');
     static RuleChar ruleC = new RuleChar('c');
     static String ruleABC_action = "currentChar = readNextChar();";
-    
+
 }
diff --git a/asterix-maven-plugins/lexer-generator-maven-plugin/src/test/java/org/apache/asterix/lexergenerator/LexerNodeAddRuleTest.java b/asterix-maven-plugins/lexer-generator-maven-plugin/src/test/java/org/apache/asterix/lexergenerator/LexerNodeAddRuleTest.java
index 28812e8..dee1255 100644
--- a/asterix-maven-plugins/lexer-generator-maven-plugin/src/test/java/org/apache/asterix/lexergenerator/LexerNodeAddRuleTest.java
+++ b/asterix-maven-plugins/lexer-generator-maven-plugin/src/test/java/org/apache/asterix/lexergenerator/LexerNodeAddRuleTest.java
@@ -44,7 +44,7 @@
                      +"}"
                      +token_parseerror , node.toJava());
     }
-    
+
     @Test
     public void NodeSwitchCase() {
         LexerNode node = new LexerNode();
diff --git a/asterix-maven-plugins/lexer-generator-maven-plugin/src/test/java/org/apache/asterix/lexergenerator/LexerNodeAppendNodeTest.java b/asterix-maven-plugins/lexer-generator-maven-plugin/src/test/java/org/apache/asterix/lexergenerator/LexerNodeAppendNodeTest.java
index 9957776..206e69b 100644
--- a/asterix-maven-plugins/lexer-generator-maven-plugin/src/test/java/org/apache/asterix/lexergenerator/LexerNodeAppendNodeTest.java
+++ b/asterix-maven-plugins/lexer-generator-maven-plugin/src/test/java/org/apache/asterix/lexergenerator/LexerNodeAppendNodeTest.java
@@ -49,7 +49,7 @@
         node.append(node2);
         assertEquals("Arule_clone! ", node.toString());
     }
-    
+
     @Test
     public void AppendedNodesAreCloned() throws Exception {
         LexerNode node = new LexerNode();
@@ -61,7 +61,7 @@
         node.append(node2);
         // TODO
         // assertEquals("A! B_clone! ", node.toString());
-        
+
         LexerNode node3 = new LexerNode();
         node3.append(createRule("C"));
         node3.append(createRule("D"));
@@ -95,5 +95,5 @@
         // TODO
         // assertEquals(" ( A_clone! A_clone!  || A_clone!  ) ", node.toString());
   }
-    
+
 }
diff --git a/asterix-maven-plugins/lexer-generator-maven-plugin/src/test/java/org/apache/asterix/lexergenerator/LexerNodeAppendRuleTest.java b/asterix-maven-plugins/lexer-generator-maven-plugin/src/test/java/org/apache/asterix/lexergenerator/LexerNodeAppendRuleTest.java
index fb2bdba..e532cf8 100644
--- a/asterix-maven-plugins/lexer-generator-maven-plugin/src/test/java/org/apache/asterix/lexergenerator/LexerNodeAppendRuleTest.java
+++ b/asterix-maven-plugins/lexer-generator-maven-plugin/src/test/java/org/apache/asterix/lexergenerator/LexerNodeAppendRuleTest.java
@@ -25,7 +25,7 @@
 import org.apache.asterix.lexergenerator.LexerNode;
 import static org.apache.asterix.lexergenerator.Fixtures.*;
 
-public class LexerNodeAppendRuleTest {    
+public class LexerNodeAppendRuleTest {
     @Test
     public void SingleNode() {
         LexerNode node = new LexerNode();
@@ -62,4 +62,4 @@
                         +token_parseerror
                      +"}"+token_parseerror, node.toJava());
     }
-}
\ No newline at end of file
+}
diff --git a/asterix-maven-plugins/lexer-generator-maven-plugin/src/test/java/org/apache/asterix/lexergenerator/LexerNodeAuxFunctionsTest.java b/asterix-maven-plugins/lexer-generator-maven-plugin/src/test/java/org/apache/asterix/lexergenerator/LexerNodeAuxFunctionsTest.java
index 624af344..677d12e 100644
--- a/asterix-maven-plugins/lexer-generator-maven-plugin/src/test/java/org/apache/asterix/lexergenerator/LexerNodeAuxFunctionsTest.java
+++ b/asterix-maven-plugins/lexer-generator-maven-plugin/src/test/java/org/apache/asterix/lexergenerator/LexerNodeAuxFunctionsTest.java
@@ -34,8 +34,8 @@
 import org.apache.asterix.lexergenerator.rules.RulePartial;
 
 public class LexerNodeAuxFunctionsTest {
-    String expectedDifferentReturn = "return TOKEN_AUX_NOT_FOUND;\n"; 
-    
+    String expectedDifferentReturn = "return TOKEN_AUX_NOT_FOUND;\n";
+
     @Test
     public void NodeRuleRuleNodeNode() {
         LexerNode node = new LexerNode();
@@ -53,7 +53,7 @@
                      +"}"
                      +expectedDifferentReturn , node.toJavaAuxFunction());
     }
-    
+
     @Test
     public void NodeSwitchCase() {
         LexerNode node = new LexerNode();
@@ -88,7 +88,7 @@
         expectedNeededAuxFunctions.add("token1");
         expectedNeededAuxFunctions.add("token2");
         assertEquals(expectedNeededAuxFunctions, node.neededAuxFunctions());
-    }    
+    }
 
     @Test(expected=Exception.class)
     public void NodeExpandFirstActionError() throws Exception {
@@ -107,7 +107,7 @@
             assertEquals("Cannot find a token used as part of another definition, missing token: token1", e.getMessage());
             throw e;
         }
-    } 
+    }
 
     public void NodeExpandFirstAction() throws Exception {
         LexerNode node = new LexerNode();
diff --git a/asterix-maven-plugins/record-manager-generator-maven-plugin/src/main/java/org/apache/asterix/recordmanagergenerator/Generator.java b/asterix-maven-plugins/record-manager-generator-maven-plugin/src/main/java/org/apache/asterix/recordmanagergenerator/Generator.java
index 17a315e..ca53f66 100644
--- a/asterix-maven-plugins/record-manager-generator-maven-plugin/src/main/java/org/apache/asterix/recordmanagergenerator/Generator.java
+++ b/asterix-maven-plugins/record-manager-generator-maven-plugin/src/main/java/org/apache/asterix/recordmanagergenerator/Generator.java
@@ -27,19 +27,19 @@
 import org.apache.asterix.recordmanagergenerator.RecordType.Field;
 
 public class Generator {
-    
+
     public enum TemplateType {
         RECORD_MANAGER,
         ARENA_MANAGER,
         SUPPORT
     }
-    
+
     public static void generateSource(
-            TemplateType tmplType, 
+            TemplateType tmplType,
             String packageName,
-            RecordType rec, 
-            InputStream is, 
-            StringBuilder sb, 
+            RecordType rec,
+            InputStream is,
+            StringBuilder sb,
             boolean debug) {
         try {
             BufferedReader in = new BufferedReader(new InputStreamReader(is));
@@ -56,7 +56,7 @@
                     break;
                 default:
                     throw new IllegalArgumentException();
-            }        
+            }
         } catch (IOException ioe) {
             ioe.printStackTrace();
         }
@@ -65,9 +65,9 @@
 
     private static void generateMemoryManagerSource(
             String packageName,
-            RecordType resource, 
-            BufferedReader in, 
-            StringBuilder sb, 
+            RecordType resource,
+            BufferedReader in,
+            StringBuilder sb,
             boolean debug) throws IOException {
         String line = null;
         String indent = "    ";
@@ -96,12 +96,12 @@
                     }
                 }
             } else if (line.contains("@INIT_SLOT@")) {
-                for (int i = 0; i < resource.size(); ++i) {                        
+                for (int i = 0; i < resource.size(); ++i) {
                     final Field field = resource.fields.get(i);
                     field.appendInitializers(sb, indent, 3);
                 }
             } else if (line.contains("@CHECK_SLOT@")) {
-                for (int i = 0; i < resource.size(); ++i) {                        
+                for (int i = 0; i < resource.size(); ++i) {
                     final Field field = resource.fields.get(i);
                     field.appendChecks(sb, indent, 3);
                 }
@@ -116,9 +116,9 @@
 
     private static void generateArenaManagerSource(
             String packageName,
-            RecordType resource, 
-            BufferedReader in, 
-            StringBuilder sb, 
+            RecordType resource,
+            BufferedReader in,
+            StringBuilder sb,
             boolean debug) throws IOException {
         String line = null;
         String indent = "    ";
@@ -154,7 +154,7 @@
 
     private static void generateSupportFileSource(
             String packageName,
-            BufferedReader in, 
+            BufferedReader in,
             StringBuilder sb,
             boolean debug) throws IOException {
         String line = null;
diff --git a/asterix-maven-plugins/record-manager-generator-maven-plugin/src/main/java/org/apache/asterix/recordmanagergenerator/RecordManagerGeneratorMojo.java b/asterix-maven-plugins/record-manager-generator-maven-plugin/src/main/java/org/apache/asterix/recordmanagergenerator/RecordManagerGeneratorMojo.java
index 38c0dd3..bf981aa 100644
--- a/asterix-maven-plugins/record-manager-generator-maven-plugin/src/main/java/org/apache/asterix/recordmanagergenerator/RecordManagerGeneratorMojo.java
+++ b/asterix-maven-plugins/record-manager-generator-maven-plugin/src/main/java/org/apache/asterix/recordmanagergenerator/RecordManagerGeneratorMojo.java
@@ -40,23 +40,23 @@
  * @requiresDependencyResolution compile
  */
 public class RecordManagerGeneratorMojo extends AbstractMojo {
-    
+
     /**
      * parameter injected from pom.xml
-     * 
+     *
      * @parameter
      */
     private boolean debug;
     /**
      * parameter injected from pom.xml
-     * 
+     *
      * @parameter
      * @required
      */
     private String packageName;
     /**
      * parameter injected from pom.xml
-     * 
+     *
      * @parameter
      * @required
      */
@@ -67,15 +67,15 @@
      * @readonly
      */
     MavenProject project;
-    
-    
-    String recordManagerTemplate = "RecordManager.java"; 
+
+
+    String recordManagerTemplate = "RecordManager.java";
     String arenaManagerTemplate = "ArenaManager.java";
     String[] supportTemplates = { "RecordManagerStats.java", "AllocInfo.java", "TypeUtil.java" };
-    
+
     private Map<String, RecordType> typeMap;
 
-    public RecordManagerGeneratorMojo() {        
+    public RecordManagerGeneratorMojo() {
     }
 
     private void readRecordTypes() throws MojoExecutionException {
@@ -90,7 +90,7 @@
                 getLog().info("reading " + inputFiles[i].toString());
                 Reader read = new FileReader(inputFiles[i]);
                 RecordType type = RecordType.read(read);
-                // always add allocId to enable tracking of allocations 
+                // always add allocId to enable tracking of allocations
                 type.addField("alloc id", RecordType.Type.SHORT, null);
                 type.addToMap(typeMap);
             } catch (FileNotFoundException fnfe) {
@@ -102,7 +102,7 @@
     }
 
     public void execute() throws MojoExecutionException, MojoFailureException {
-        String outputPath = project.getBuild().getDirectory() + File.separator 
+        String outputPath = project.getBuild().getDirectory() + File.separator
                 + "generated-sources" + File.separator
                 + "java" + File.separator
                 + packageName.replace('.', File.separatorChar);
@@ -112,12 +112,12 @@
         }
 
         readRecordTypes();
-        
+
         for (String recordType : typeMap.keySet()) {
             generateSource(Generator.TemplateType.RECORD_MANAGER, recordManagerTemplate, recordType, outputPath);
             generateSource(Generator.TemplateType.ARENA_MANAGER, arenaManagerTemplate, recordType, outputPath);
         }
-        
+
         for (int i = 0; i < supportTemplates.length; ++i) {
             generateSource(Generator.TemplateType.SUPPORT, supportTemplates[i], "", outputPath);
         }
diff --git a/asterix-maven-plugins/record-manager-generator-maven-plugin/src/main/java/org/apache/asterix/recordmanagergenerator/RecordType.java b/asterix-maven-plugins/record-manager-generator-maven-plugin/src/main/java/org/apache/asterix/recordmanagergenerator/RecordType.java
index c3a6e1f..6702a8f 100644
--- a/asterix-maven-plugins/record-manager-generator-maven-plugin/src/main/java/org/apache/asterix/recordmanagergenerator/RecordType.java
+++ b/asterix-maven-plugins/record-manager-generator-maven-plugin/src/main/java/org/apache/asterix/recordmanagergenerator/RecordType.java
@@ -31,13 +31,13 @@
 import org.json.JSONTokener;
 
 public class RecordType {
-    
+
     enum Type {
         BYTE  (1, "byte",  "get",      "put",      "(byte)0xde",          "TypeUtil.Byte.append",   "TypeUtil.Byte.appendFixed"),
         SHORT (2, "short", "getShort", "putShort", "(short)0xdead",       "TypeUtil.Short.append",  "TypeUtil.Short.appendFixed"),
         INT   (4, "int",   "getInt",   "putInt",   "0xdeadbeef",          "TypeUtil.Int.append",    "TypeUtil.Int.appendFixed"),
         GLOBAL(8, "long",  "getLong",  "putLong",  "0xdeadbeefdeadbeefl", "TypeUtil.Global.append", "TypeUtil.Global.appendFixed");
-        
+
         Type(int size, String javaType, String bbGetter, String bbSetter, String deadMemInitializer, String appender, String tabAppender) {
             this.size = size;
             this.javaType = javaType;
@@ -47,7 +47,7 @@
             this.appender = appender;
             this.tabAppender = tabAppender;
         }
-        
+
         int size;
         String javaType;
         String bbGetter;
@@ -56,9 +56,9 @@
         String appender;
         String tabAppender;
     }
-    
+
     static class Field {
-                
+
         String name;
         Type type;
         String initial;
@@ -72,14 +72,14 @@
             this.offset = offset;
             this.accessible = accessible;
         }
-        
+
         public static Field fromJSON(JSONObject obj) throws JSONException {
             String name = obj.getString("name");
             Type type = parseType(obj.getString("type"));
             String initial = obj.optString("initial", null);
             return new Field(name, type, initial, -1, true);
         }
-        
+
         private static Type parseType(String string) {
             string = string.toUpperCase();
             if (string.equals("GLOBAL")) {
@@ -103,7 +103,7 @@
                 sb.append(word.substring(0, 1).toUpperCase());
                 sb.append(word.substring(1));
             }
-            return sb.toString();        
+            return sb.toString();
         }
 
         StringBuilder appendMemoryManagerGetMethod(StringBuilder sb, String indent, int level) {
@@ -129,7 +129,7 @@
             sb.append("}\n");
             return sb;
         }
-            
+
         StringBuilder appendMemoryManagerSetMethod(StringBuilder sb, String indent, int level) {
             sb = indent(sb, indent, level);
             sb.append("public void ")
@@ -173,7 +173,7 @@
             sb.append("}\n");
             return sb;
         }
-            
+
         StringBuilder appendArenaManagerSetMethod(StringBuilder sb, String indent, int level) {
             sb = indent(sb, indent, level);
             sb.append("public void ")
@@ -197,7 +197,7 @@
             sb.append("}\n");
             return sb;
         }
-        
+
         StringBuilder appendInitializers(StringBuilder sb, String indent, int level) {
             sb = indent(sb, indent, level);
             sb.append("bb.")
@@ -213,7 +213,7 @@
             sb.append(");\n");
             return sb;
         }
-        
+
         StringBuilder appendChecks(StringBuilder sb, String indent, int level) {
             if (initial == null) {
                 return sb;
@@ -236,7 +236,7 @@
             sb.append("}\n");
             return sb;
         }
-        
+
         String offsetName() {
             String words[] = name.split(" ");
             assert(words.length > 0);
@@ -247,7 +247,7 @@
             sb.append("_OFF");
             return sb.toString();
         }
-        
+
         int offset() {
             return offset;
         }
@@ -257,26 +257,26 @@
     ArrayList<Field> fields;
     int totalSize;
     boolean modifiable = true;
-    
+
     static StringBuilder indent(StringBuilder sb, String indent, int level) {
         for (int i = 0; i < level; ++i) {
             sb.append(indent);
         }
         return sb;
     }
-    
+
     public RecordType(String name) {
         this.name = name;
         fields = new ArrayList<Field>();
         addField("next free slot", Type.INT, "-1", false);
     }
-    
+
     public static RecordType read(Reader reader) throws JSONException {
         JSONTokener tok = new JSONTokener(reader);
         JSONObject obj = new JSONObject(tok);
         return fromJSON(obj);
     }
-    
+
     public static RecordType fromJSON(JSONObject obj) throws JSONException {
         RecordType result = new RecordType(obj.getString("name"));
         JSONArray fields = obj.getJSONArray("fields");
@@ -284,9 +284,9 @@
             JSONObject field = fields.getJSONObject(i);
             result.fields.add(Field.fromJSON(field));
         }
-        return result;        
+        return result;
     }
-    
+
     public void addToMap(Map<String, RecordType> map) {
         modifiable = false;
         calcOffsetsAndSize();
@@ -295,15 +295,15 @@
 
     public void addField(String name, Type type, String initial) {
         addField(name, type, initial, true);
-    }    
-    
+    }
+
     private void addField(String name, Type type, String initial, boolean accessible) {
         if (! modifiable) {
             throw new IllegalStateException("cannot modify type anmore");
         }
         fields.add(new Field(name, type, initial, -1, accessible));
     }
-     
+
     private void calcOffsetsAndSize() {
         Collections.sort(fields, new Comparator<Field>() {
             public int compare(Field left, Field right) {
@@ -313,7 +313,7 @@
         // sort fields by size and align the items
         totalSize = 0;
         int alignment = 0;
-        for (int i = 0; i < fields.size(); ++i) {            
+        for (int i = 0; i < fields.size(); ++i) {
             final Field field = fields.get(i);
             assert field.offset == -1;
             field.offset = totalSize;
@@ -322,22 +322,22 @@
             if (size > alignment) alignment = size;
         }
         if (totalSize % alignment != 0) {
-            totalSize = ((totalSize / alignment) + 1) * alignment; 
+            totalSize = ((totalSize / alignment) + 1) * alignment;
         }
     }
-    
+
     int size() {
         return fields.size();
     }
-    
+
     static String padRight(String s, int n) {
-        return String.format("%1$-" + n + "s", s);  
+        return String.format("%1$-" + n + "s", s);
     }
 
     static String padLeft(String s, int n) {
-        return String.format("%1$" + n + "s", s);  
+        return String.format("%1$" + n + "s", s);
     }
-    
+
     StringBuilder appendConstants(StringBuilder sb, String indent, int level) {
         sb = indent(sb, indent, level);
         sb.append("public static int ITEM_SIZE = ")
@@ -354,7 +354,7 @@
         }
         return sb;
     }
-    
+
     StringBuilder appendBufferPrinter(StringBuilder sb, String indent, int level) {
         int maxNameWidth = 0;
         for (int i = 0; i < fields.size(); ++i) {
@@ -391,20 +391,20 @@
         }
         return sb;
     }
-    
+
     StringBuilder appendRecordPrinter(StringBuilder sb, String indent, int level) {
         sb = indent(sb, indent, level);
         sb.append("public StringBuilder appendRecord(StringBuilder sb, long slotNum) {\n");
-        
+
         sb = indent(sb, indent, level + 1);
         sb.append("sb.append(\"{ \");\n\n");
-        
+
         for (int i = 0; i < fields.size(); ++i) {
             Field field = fields.get(i);
             if (field.accessible) {
                 if (i > 0) {
                     sb = indent(sb, indent, level + 1);
-                    sb.append("sb.append(\", \");\n\n");                
+                    sb.append("sb.append(\", \");\n\n");
                 }
                 sb = indent(sb, indent, level + 1);
                 sb.append("sb.append(\"\\\"").append(field.name).append("\\\" : \\\"\");\n");
@@ -421,7 +421,7 @@
 
         sb = indent(sb, indent, level);
         sb.append("}");
-        
+
         return sb;
     }
 }
diff --git a/asterix-maven-plugins/record-manager-generator-maven-plugin/src/main/resources/AllocInfo.java b/asterix-maven-plugins/record-manager-generator-maven-plugin/src/main/resources/AllocInfo.java
index 0bea5da..f415562 100644
--- a/asterix-maven-plugins/record-manager-generator-maven-plugin/src/main/resources/AllocInfo.java
+++ b/asterix-maven-plugins/record-manager-generator-maven-plugin/src/main/resources/AllocInfo.java
@@ -24,11 +24,11 @@
 public class AllocInfo {
     String alloc;
     String free;
-    
+
     void alloc() {
         alloc = getStackTrace();
     }
-    
+
     void free() {
         free = getStackTrace();
     }
@@ -42,11 +42,11 @@
         // remove first 3 lines
         int nlPos = 0;
         for (int i = 0; i < 3; ++i) {
-            nlPos = res.indexOf('\n', nlPos) + 1; 
+            nlPos = res.indexOf('\n', nlPos) + 1;
         }
         return res.substring(nlPos);
     }
-    
+
     public String toString() {
         return "allocation stack:\n" + alloc + "\nfree stack\n" + free;
     }
diff --git a/asterix-maven-plugins/record-manager-generator-maven-plugin/src/main/resources/ArenaManager.java b/asterix-maven-plugins/record-manager-generator-maven-plugin/src/main/resources/ArenaManager.java
index adb73af..be295d6 100644
--- a/asterix-maven-plugins/record-manager-generator-maven-plugin/src/main/resources/ArenaManager.java
+++ b/asterix-maven-plugins/record-manager-generator-maven-plugin/src/main/resources/ArenaManager.java
@@ -20,18 +20,18 @@
 package @PACKAGE@;
 
 public class @E@ArenaManager {
-    
+
     public static final boolean TRACK_ALLOC_ID = @DEBUG@;
 
     private final int noArenas;
     private final @E@RecordManager[] arenas;
     private ThreadLocal<LocalManager> local;
-    
+
     static class LocalManager {
         int arenaId;
         @E@RecordManager mgr;
     }
-    
+
     public @E@ArenaManager(final int noArenas, final long txnShrinkTimer) {
         this.noArenas = noArenas;
         arenas = new @E@RecordManager[noArenas];
@@ -39,7 +39,7 @@
             arenas[i] = new @E@RecordManager(txnShrinkTimer);
         }
         local = new ThreadLocal<LocalManager>() {
-            private int nextArena = 0; 
+            private int nextArena = 0;
 
             @Override
             protected synchronized LocalManager initialValue() {
@@ -58,7 +58,7 @@
         final @E@RecordManager recMgr = localManager.mgr;
         final int allocId = TRACK_ALLOC_ID ? (++recMgr.allocCounter % 0x7fff) : 0;
         final int localId = recMgr.allocate();
-        
+
         long result = TypeUtil.Global.build(localManager.arenaId, allocId, localId);
 
         if (TRACK_ALLOC_ID) setAllocId(result, (short) allocId);
@@ -68,23 +68,23 @@
         assert TypeUtil.Global.localId(result) == localId;
         return result;
     }
-    
+
     public void deallocate(long slotNum) {
         if (TRACK_ALLOC_ID) checkAllocId(slotNum);
         final int arenaId = TypeUtil.Global.arenaId(slotNum);
         get(arenaId).deallocate(TypeUtil.Global.localId(slotNum));
     }
-    
+
     public @E@RecordManager get(int i) {
         return arenas[i];
     }
-    
+
     public @E@RecordManager local() {
         return local.get().mgr;
     }
-    
+
     @METHODS@
-    
+
     private void checkAllocId(long slotNum) {
         final int refAllocId = TypeUtil.Global.allocId(slotNum);
         final short curAllocId = getAllocId(slotNum);
@@ -100,14 +100,14 @@
             throw new IllegalStateException(msg);
         }
     }
-    
+
     public AllocInfo getAllocInfo(long slotNum) {
         final int arenaId = TypeUtil.Global.arenaId(slotNum);
         return get(arenaId).getAllocInfo(TypeUtil.Global.localId(slotNum));
     }
-    
+
     @PRINT_RECORD@
-    
+
     public StringBuilder append(StringBuilder sb) {
         for (int i = 0; i < noArenas; ++i) {
             sb.append("++++ arena ").append(i).append(" ++++\n");
@@ -115,7 +115,7 @@
         }
         return sb;
     }
-    
+
     public String toString() {
         return append(new StringBuilder()).toString();
     }
diff --git a/asterix-maven-plugins/record-manager-generator-maven-plugin/src/main/resources/RecordManager.java b/asterix-maven-plugins/record-manager-generator-maven-plugin/src/main/resources/RecordManager.java
index b3c06f1..6e5041f 100644
--- a/asterix-maven-plugins/record-manager-generator-maven-plugin/src/main/resources/RecordManager.java
+++ b/asterix-maven-plugins/record-manager-generator-maven-plugin/src/main/resources/RecordManager.java
@@ -26,7 +26,7 @@
 
     public static final boolean CHECK_SLOTS = @DEBUG@;
     public static final boolean TRACK_ALLOC_LOC = @DEBUG@;
-    
+
     static final int NO_SLOTS = 1000;
 
     @CONSTS@
@@ -39,22 +39,22 @@
     private boolean isShrinkTimerOn;
 
     int allocCounter;
-    
+
     public @E@RecordManager(long txnShrinkTimer) {
         this.txnShrinkTimer = txnShrinkTimer;
         buffers = new ArrayList<Buffer>();
         buffers.add(new Buffer());
         current = 0;
-        
+
         allocCounter = 0;
     }
-    
+
     enum SlotSource {
         NON_FULL,
         UNINITIALIZED,
         NEW
     }
-    
+
     synchronized int allocate() {
         if (buffers.get(current).isFull()) {
             final int size = buffers.size();
@@ -74,7 +74,7 @@
                     current = i;
                 }
             }
-            
+
             switch (source) {
                 case NEW:
                     buffers.add(new Buffer());
@@ -114,7 +114,7 @@
      * buffers status : O O x x x x x
      * However, in the above case, if we subtract the deinitialized children's slots,
      * needShrink() will return false even if we shrink the buffers at this case.
-     * 
+     *
      * @return
      */
     private boolean needShrink() {
@@ -175,7 +175,7 @@
                 break;
             }
         }
-        
+
         //reset allocChild to the first buffer
         current = 0;
 
@@ -183,7 +183,7 @@
     }
 
     @METHODS@
-    
+
     public AllocInfo getAllocInfo(int slotNum) {
         final Buffer buf = buffers.get(slotNum / NO_SLOTS);
         if (buf.allocList == null) {
@@ -192,7 +192,7 @@
             return buf.allocList.get(slotNum % NO_SLOTS);
         }
     }
-    
+
     StringBuilder append(StringBuilder sb) {
         sb.append("+++ current: ")
           .append(current)
@@ -205,7 +205,7 @@
         }
         return sb;
     }
-    
+
     public String toString() {
         return append(new StringBuilder()).toString();
     }
@@ -220,14 +220,14 @@
         }
         return s;
     }
-    
+
     static class Buffer {
         private ByteBuffer bb = null; // null represents 'deinitialized' state.
         private int freeSlotNum;
         private int occupiedSlots;
-        
+
         ArrayList<AllocInfo> allocList;
-        
+
         Buffer() {
             initialize();
         }
@@ -241,7 +241,7 @@
                 setNextFreeSlot(i, i + 1);
             }
             setNextFreeSlot(NO_SLOTS - 1, -1); //-1 represents EOL(end of link)
-            
+
             if (TRACK_ALLOC_LOC) {
                 allocList = new ArrayList<AllocInfo>(NO_SLOTS);
                 for (int i = 0; i < NO_SLOTS; ++i) {
@@ -249,12 +249,12 @@
                 }
             }
         }
-        
+
         public void deinitialize() {
             if (TRACK_ALLOC_LOC) allocList = null;
             bb = null;
         }
-        
+
         public boolean isInitialized() {
             return bb != null;
         }
@@ -266,7 +266,7 @@
         public boolean isEmpty() {
             return occupiedSlots == 0;
         }
-        
+
         public int allocate() {
             int slotNum = freeSlotNum;
             freeSlotNum = getNextFreeSlot(slotNum);
@@ -275,7 +275,7 @@
             if (TRACK_ALLOC_LOC) allocList.get(slotNum).alloc();
             return slotNum;
         }
-    
+
         public void deallocate(int slotNum) {
             @INIT_SLOT@
             setNextFreeSlot(slotNum, freeSlotNum);
@@ -286,8 +286,8 @@
 
         public int getNextFreeSlot(int slotNum) {
             return bb.getInt(slotNum * ITEM_SIZE + NEXT_FREE_SLOT_OFF);
-        }    
-            
+        }
+
         public void setNextFreeSlot(int slotNum, int nextFreeSlot) {
             bb.putInt(slotNum * ITEM_SIZE + NEXT_FREE_SLOT_OFF, nextFreeSlot);
         }
@@ -301,17 +301,17 @@
             @PRINT_BUFFER@
             return sb;
         }
-        
+
         public String toString() {
             return append(new StringBuilder()).toString();
         }
-        
+
         public void addTo(RecordManagerStats s) {
             if (isInitialized()) {
                 s.items += occupiedSlots;
             }
         }
-        
+
         private void checkSlot(int slotNum) {
             if (! CHECK_SLOTS) {
                 return;
@@ -320,5 +320,5 @@
             // @CHECK_SLOT@
         }
     }
-    
+
 }
diff --git a/asterix-maven-plugins/record-manager-generator-maven-plugin/src/main/resources/RecordManagerStats.java b/asterix-maven-plugins/record-manager-generator-maven-plugin/src/main/resources/RecordManagerStats.java
index b5a3bbf..800b388 100644
--- a/asterix-maven-plugins/record-manager-generator-maven-plugin/src/main/resources/RecordManagerStats.java
+++ b/asterix-maven-plugins/record-manager-generator-maven-plugin/src/main/resources/RecordManagerStats.java
@@ -24,7 +24,7 @@
     int slots   = 0;
     int items   = 0;
     int size    = 0;
-    
+
     public String toString() {
         StringBuilder sb = new StringBuilder();
         sb.append("{ arenas : ").append(arenas);
diff --git a/asterix-maven-plugins/record-manager-generator-maven-plugin/src/main/resources/TypeUtil.java b/asterix-maven-plugins/record-manager-generator-maven-plugin/src/main/resources/TypeUtil.java
index 8108094..81d6958 100644
--- a/asterix-maven-plugins/record-manager-generator-maven-plugin/src/main/resources/TypeUtil.java
+++ b/asterix-maven-plugins/record-manager-generator-maven-plugin/src/main/resources/TypeUtil.java
@@ -19,7 +19,7 @@
 package @PACKAGE@;
 
 public class TypeUtil {
-    
+
     public static class Byte {
         public static StringBuilder append(StringBuilder sb, byte b) {
             return sb.append(String.format("%1$x", b));
@@ -71,7 +71,7 @@
         public static int localId(long l) {
             return (int) (l & 0xffffffffL);
         }
-        
+
         public static StringBuilder append(StringBuilder sb, long l) {
             sb.append(String.format("%1$x", TypeUtil.Global.arenaId(l)));
             sb.append(':');
@@ -80,7 +80,7 @@
             sb.append(String.format("%1$x", TypeUtil.Global.localId(l)));
             return sb;
         }
-        
+
         public static StringBuilder appendFixed(StringBuilder sb, long l) {
             sb.append(String.format("%1$4x", TypeUtil.Global.arenaId(l)));
             sb.append(':');
@@ -89,10 +89,10 @@
             sb.append(String.format("%1$8x", TypeUtil.Global.localId(l)));
             return sb;
         }
-        
+
         public static String toString(long l) {
             return append(new StringBuilder(), l).toString();
         }
-        
+
     }
 }
diff --git a/asterix-metadata/src/main/java/org/apache/asterix/metadata/MetadataCache.java b/asterix-metadata/src/main/java/org/apache/asterix/metadata/MetadataCache.java
index a3a81de..b1eaf0f 100644
--- a/asterix-metadata/src/main/java/org/apache/asterix/metadata/MetadataCache.java
+++ b/asterix-metadata/src/main/java/org/apache/asterix/metadata/MetadataCache.java
@@ -64,16 +64,16 @@
     protected final Map<String, NodeGroup> nodeGroups = new HashMap<String, NodeGroup>();
     // Key is function Identifier . Key of value map is function name.
     protected final Map<FunctionSignature, Function> functions = new HashMap<FunctionSignature, Function>();
-    // Key is adapter dataverse. Key of value map is the adapter name  
+    // Key is adapter dataverse. Key of value map is the adapter name
     protected final Map<String, Map<String, DatasourceAdapter>> adapters = new HashMap<String, Map<String, DatasourceAdapter>>();
 
-    // Key is DataverseName, Key of the value map is the Policy name   
+    // Key is DataverseName, Key of the value map is the Policy name
     protected final Map<String, Map<String, FeedPolicyEntity>> feedPolicies = new HashMap<String, Map<String, FeedPolicyEntity>>();
     // Key is library dataverse. Key of value map is the library name
     protected final Map<String, Map<String, Library>> libraries = new HashMap<String, Map<String, Library>>();
-    // Key is library dataverse. Key of value map is the feed name  
+    // Key is library dataverse. Key of value map is the feed name
     protected final Map<String, Map<String, Feed>> feeds = new HashMap<String, Map<String, Feed>>();
-    // Key is DataverseName, Key of the value map is the Policy name   
+    // Key is DataverseName, Key of the value map is the Policy name
     protected final Map<String, Map<String, CompactionPolicy>> compactionPolicies = new HashMap<String, Map<String, CompactionPolicy>>();
 
     // Atomically executes all metadata operations in ctx's log.
diff --git a/asterix-metadata/src/main/java/org/apache/asterix/metadata/api/IMetadataEntityTupleTranslator.java b/asterix-metadata/src/main/java/org/apache/asterix/metadata/api/IMetadataEntityTupleTranslator.java
index 0c08b55..7c115b8 100644
--- a/asterix-metadata/src/main/java/org/apache/asterix/metadata/api/IMetadataEntityTupleTranslator.java
+++ b/asterix-metadata/src/main/java/org/apache/asterix/metadata/api/IMetadataEntityTupleTranslator.java
@@ -36,7 +36,7 @@
      * Transforms a metadata entity of type T from a given tuple to a Java
      * object (deserializing the appropriate field(s) in the tuple as
      * necessary).
-     * 
+     *
      * @param tuple
      *            Tuple containing a serialized representation of a metadata
      *            entity of type T.
@@ -49,10 +49,10 @@
     /**
      * Serializes the given metadata entity of type T into an appropriate tuple
      * representation (i.e., some number of fields containing bytes).
-     * 
+     *
      * @param metadataEntity
      *            Metadata entity to be written into a tuple.
      * @throws IOException
      */
     public ITupleReference getTupleFromMetadataEntity(T metadataEntity) throws MetadataException, IOException;
-}
\ No newline at end of file
+}
diff --git a/asterix-metadata/src/main/java/org/apache/asterix/metadata/api/IMetadataNode.java b/asterix-metadata/src/main/java/org/apache/asterix/metadata/api/IMetadataNode.java
index 0d8818d..7070a88 100644
--- a/asterix-metadata/src/main/java/org/apache/asterix/metadata/api/IMetadataNode.java
+++ b/asterix-metadata/src/main/java/org/apache/asterix/metadata/api/IMetadataNode.java
@@ -55,7 +55,7 @@
 
     /**
      * Begins a local transaction against the metadata.
-     * 
+     *
      * @throws ACIDException
      * @throws RemoteException
      */
@@ -63,7 +63,7 @@
 
     /**
      * Commits a local transaction against the metadata.
-     * 
+     *
      * @throws ACIDException
      * @throws RemoteException
      */
@@ -71,7 +71,7 @@
 
     /**
      * Aborts a local transaction against the metadata.
-     * 
+     *
      * @throws ACIDException
      * @throws RemoteException
      */
@@ -80,7 +80,7 @@
     /**
      * Locally locks the entire metadata in given mode on behalf of given
      * transaction id.
-     * 
+     *
      * @throws ACIDException
      * @throws RemoteException
      */
@@ -88,7 +88,7 @@
 
     /**
      * Releases all local locks of given transaction id.
-     * 
+     *
      * @throws ACIDException
      * @throws RemoteException
      */
@@ -97,7 +97,7 @@
     /**
      * Inserts a new dataverse into the metadata, acquiring local locks on
      * behalf of the given transaction id.
-     * 
+     *
      * @param jobId
      *            A globally unique id for an active metadata transaction.
      * @param dataverse
@@ -111,7 +111,7 @@
     /**
      * Retrieves all dataverses, acquiring local locks on behalf of
      * the given transaction id.
-     * 
+     *
      * @param jobId
      *            A globally unique id for an active metadata transaction.
      * @return A list of dataverse instances.
@@ -124,7 +124,7 @@
     /**
      * Retrieves a dataverse with given name, acquiring local locks on behalf of
      * the given transaction id.
-     * 
+     *
      * @param jobId
      *            A globally unique id for an active metadata transaction.
      * @param dataverseName
@@ -139,7 +139,7 @@
     /**
      * Retrieves all datasets belonging to the given dataverse, acquiring local
      * locks on behalf of the given transaction id.
-     * 
+     *
      * @param jobId
      *            A globally unique id for an active metadata transaction.
      * @param dataverseName
@@ -155,7 +155,7 @@
      * Deletes the dataverse with given name, and all it's associated datasets,
      * indexes, and types, acquiring local locks on behalf of the given
      * transaction id.
-     * 
+     *
      * @param jobId
      *            A globally unique id for an active metadata transaction.
      * @return A list of dataset instances.
@@ -168,7 +168,7 @@
     /**
      * Inserts a new dataset into the metadata, acquiring local locks on behalf
      * of the given transaction id.
-     * 
+     *
      * @param jobId
      *            A globally unique id for an active metadata transaction.
      * @param dataset
@@ -182,7 +182,7 @@
     /**
      * Retrieves a dataset within a given dataverse, acquiring local locks on
      * behalf of the given transaction id.
-     * 
+     *
      * @param jobId
      *            A globally unique id for an active metadata transaction.
      * @param dataverseName
@@ -200,7 +200,7 @@
     /**
      * Retrieves all indexes of a dataset, acquiring local locks on behalf of
      * the given transaction id.
-     * 
+     *
      * @param jobId
      *            A globally unique id for an active metadata transaction.
      * @param dataverseName
@@ -218,7 +218,7 @@
     /**
      * Deletes the dataset with given name, and all it's associated indexes,
      * acquiring local locks on behalf of the given transaction id.
-     * 
+     *
      * @param jobId
      *            A globally unique id for an active metadata transaction.
      * @param dataverseName
@@ -236,7 +236,7 @@
      * Inserts an index into the metadata, acquiring local locks on behalf of
      * the given transaction id. The index itself knows its name, and which
      * dataset it belongs to.
-     * 
+     *
      * @param jobId
      *            A globally unique id for an active metadata transaction.
      * @param index
@@ -250,7 +250,7 @@
     /**
      * Retrieves the index with given name, in given dataverse and dataset,
      * acquiring local locks on behalf of the given transaction id.
-     * 
+     *
      * @param jobId
      *            A globally unique id for an active metadata transaction.
      * @param dataverseName
@@ -269,7 +269,7 @@
     /**
      * Deletes the index with given name, in given dataverse and dataset,
      * acquiring local locks on behalf of the given transaction id.
-     * 
+     *
      * @param jobId
      *            A globally unique id for an active metadata transaction.
      * @param dataverseName
@@ -287,7 +287,7 @@
     /**
      * Inserts a datatype, acquiring local locks on behalf of the given
      * transaction id.
-     * 
+     *
      * @param jobId
      *            A globally unique id for an active metadata transaction.
      * @param datatype
@@ -301,7 +301,7 @@
     /**
      * Retrieves the datatype with given name in given dataverse, acquiring
      * local locks on behalf of the given transaction id.
-     * 
+     *
      * @param jobId
      *            A globally unique id for an active metadata transaction.
      * @param dataverseName
@@ -319,7 +319,7 @@
     /**
      * Deletes the given datatype in given dataverse, acquiring local locks on
      * behalf of the given transaction id.
-     * 
+     *
      * @param jobId
      *            A globally unique id for an active metadata transaction.
      * @param dataverseName
@@ -337,7 +337,7 @@
     /**
      * Inserts a node group, acquiring local locks on behalf of the given
      * transaction id.
-     * 
+     *
      * @param jobId
      *            A globally unique id for an active metadata transaction.
      * @param nodeGroup
@@ -351,7 +351,7 @@
     /**
      * Retrieves a node group, acquiring local locks on behalf of the given
      * transaction id.
-     * 
+     *
      * @param jobId
      *            A globally unique id for an active metadata transaction.
      * @param nodeGroupName
@@ -365,7 +365,7 @@
     /**
      * Deletes a node group, acquiring local locks on behalf of the given
      * transaction id.
-     * 
+     *
      * @param jobId
      *            A globally unique id for an active metadata transaction.
      * @param nodeGroupName
@@ -380,7 +380,7 @@
     /**
      * Inserts a node (compute node), acquiring local locks on behalf of the
      * given transaction id.
-     * 
+     *
      * @param jobId
      *            A globally unique id for an active metadata transaction.
      * @param node
@@ -406,7 +406,7 @@
     /**
      * Deletes a function, acquiring local locks on behalf of the given
      * transaction id.
-     * 
+     *
      * @param jobId
      *            A globally unique id for an active metadata transaction.
      * @param functionSignature
@@ -465,7 +465,7 @@
     /**
      * Deletes a adapter , acquiring local locks on behalf of the given
      * transaction id.
-     * 
+     *
      * @param jobId
      *            A globally unique id for an active metadata transaction.
      * @param dataverseName
@@ -550,7 +550,7 @@
      */
     public void dropFeed(JobId jobId, String dataverse, String feedName) throws MetadataException, RemoteException;
 
-   
+
     /**
      * @param jobId
      * @param feedPolicy
@@ -570,11 +570,11 @@
     public FeedPolicyEntity getFeedPolicy(JobId jobId, String dataverse, String policy) throws MetadataException,
             RemoteException;
 
-   
+
     /**
      * Removes a library , acquiring local locks on behalf of the given
      * transaction id.
-     * 
+     *
      * @param txnId
      *            A globally unique id for an active metadata transaction.
      * @param dataverseName
@@ -590,7 +590,7 @@
     /**
      * Adds a library, acquiring local locks on behalf of the given
      * transaction id.
-     * 
+     *
      * @param txnId
      *            A globally unique id for an active metadata transaction.
      * @param library
@@ -617,7 +617,7 @@
 
     /**
      * Retireve libraries installed in a given dataverse.
-     * 
+     *
      * @param txnId
      *            A globally unique id for an active metadata transaction.
      * @param dataverseName
@@ -640,7 +640,7 @@
 
     /**
      * delete a give feed (ingestion) policy
-     * 
+     *
      * @param jobId
      * @param dataverseName
      * @param policyName
@@ -685,7 +685,7 @@
     /**
      * Deletes an externalFile , acquiring local locks on behalf of the given
      * transaction id.
-     * 
+     *
      * @param jobId
      *            A globally unique id for an active metadata transaction.
      * @param dataverseName
@@ -702,7 +702,7 @@
     /**
      * Deletes all external files belonging to a dataset, acquiring local locks on behalf of the given
      * transaction id.
-     * 
+     *
      * @param jobId
      *            A globally unique id for an active metadata transaction.
      * @param dataset
@@ -714,7 +714,7 @@
     /**
      * Retrieves the file with given number, in given dataverse and dataset,
      * acquiring local locks on behalf of the given transaction id.
-     * 
+     *
      * @param jobId
      *            A globally unique id for an active metadata transaction.
      * @param dataverseName
@@ -730,12 +730,12 @@
      */
     public ExternalFile getExternalFile(JobId jobId, String dataverseName, String datasetName, Integer fileNumber)
             throws MetadataException, RemoteException;
-    
-    
+
+
     /**
      * update an existing dataset in the metadata, acquiring local locks on behalf
      * of the given transaction id.
-     * 
+     *
      * @param jobId
      *            A globally unique id for an active metadata transaction.
      * @param dataset
diff --git a/asterix-metadata/src/main/java/org/apache/asterix/metadata/api/IValueExtractor.java b/asterix-metadata/src/main/java/org/apache/asterix/metadata/api/IValueExtractor.java
index 1722117..5effd7d 100644
--- a/asterix-metadata/src/main/java/org/apache/asterix/metadata/api/IValueExtractor.java
+++ b/asterix-metadata/src/main/java/org/apache/asterix/metadata/api/IValueExtractor.java
@@ -36,7 +36,7 @@
 public interface IValueExtractor<T> {
     /**
      * Extracts an object of type T from a given tuple.
-     * 
+     *
      * @param jobId
      *            A globally unique transaction id.
      * @param tuple
diff --git a/asterix-metadata/src/main/java/org/apache/asterix/metadata/cluster/AbstractClusterManagementWork.java b/asterix-metadata/src/main/java/org/apache/asterix/metadata/cluster/AbstractClusterManagementWork.java
index 2e47d1f..3c9e2d2 100644
--- a/asterix-metadata/src/main/java/org/apache/asterix/metadata/cluster/AbstractClusterManagementWork.java
+++ b/asterix-metadata/src/main/java/org/apache/asterix/metadata/cluster/AbstractClusterManagementWork.java
@@ -39,7 +39,7 @@
         this.workId = WorkIdGenerator.getNextWorkId();
     }
 
-   
+
 
     private static class WorkIdGenerator {
         private static AtomicInteger workId = new AtomicInteger(0);
diff --git a/asterix-metadata/src/main/java/org/apache/asterix/metadata/cluster/ClusterManagementWorkResponse.java b/asterix-metadata/src/main/java/org/apache/asterix/metadata/cluster/ClusterManagementWorkResponse.java
index 60fd796..61a35e3 100644
--- a/asterix-metadata/src/main/java/org/apache/asterix/metadata/cluster/ClusterManagementWorkResponse.java
+++ b/asterix-metadata/src/main/java/org/apache/asterix/metadata/cluster/ClusterManagementWorkResponse.java
@@ -32,7 +32,7 @@
         this.status = Status.IN_PROGRESS;
     }
 
-   
+
     @Override
     public IClusterManagementWork getWork() {
         return work;
diff --git a/asterix-metadata/src/main/java/org/apache/asterix/metadata/dataset/hints/DatasetHints.java b/asterix-metadata/src/main/java/org/apache/asterix/metadata/dataset/hints/DatasetHints.java
index a305155..9e65d62 100644
--- a/asterix-metadata/src/main/java/org/apache/asterix/metadata/dataset/hints/DatasetHints.java
+++ b/asterix-metadata/src/main/java/org/apache/asterix/metadata/dataset/hints/DatasetHints.java
@@ -33,7 +33,7 @@
 
     /**
      * validate the use of a hint
-     * 
+     *
      * @param hintName
      *            name of the hint
      * @param value
diff --git a/asterix-metadata/src/main/java/org/apache/asterix/metadata/dataset/hints/IHint.java b/asterix-metadata/src/main/java/org/apache/asterix/metadata/dataset/hints/IHint.java
index 502e0ab..fefc066 100644
--- a/asterix-metadata/src/main/java/org/apache/asterix/metadata/dataset/hints/IHint.java
+++ b/asterix-metadata/src/main/java/org/apache/asterix/metadata/dataset/hints/IHint.java
@@ -27,14 +27,14 @@
 
     /**
      * retrieve the name of the hint.
-     * 
+     *
      * @return
      */
     public String getName();
 
     /**
      * validate the value associated with the hint.
-     * 
+     *
      * @param value
      *            the value associated with the hint.
      * @return a Pair with
diff --git a/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/ExternalDatasetsRegistry.java b/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/ExternalDatasetsRegistry.java
index 5235484..5f4b11e 100644
--- a/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/ExternalDatasetsRegistry.java
+++ b/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/ExternalDatasetsRegistry.java
@@ -43,7 +43,7 @@
 
     /**
      * Get the current version of the dataset
-     * 
+     *
      * @param dataset
      * @return
      */
diff --git a/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/keynormalizers/AWrappedAscNormalizedKeyComputerFactory.java b/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/keynormalizers/AWrappedAscNormalizedKeyComputerFactory.java
index f1f4f0f..de214fc 100644
--- a/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/keynormalizers/AWrappedAscNormalizedKeyComputerFactory.java
+++ b/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/keynormalizers/AWrappedAscNormalizedKeyComputerFactory.java
@@ -42,7 +42,7 @@
 
             @Override
             public int normalize(byte[] bytes, int start, int length) {
-                // start +1, length -1 is because in ASTERIX data format, there is always a type tag before the value 
+                // start +1, length -1 is because in ASTERIX data format, there is always a type tag before the value
                 return nkc.normalize(bytes, start + 1, length - 1);
             }
         };
diff --git a/asterix-om/src/main/java/org/apache/asterix/om/base/temporal/ADateParserFactory.java b/asterix-om/src/main/java/org/apache/asterix/om/base/temporal/ADateParserFactory.java
index 9f7ee00..6897cb6 100644
--- a/asterix-om/src/main/java/org/apache/asterix/om/base/temporal/ADateParserFactory.java
+++ b/asterix-om/src/main/java/org/apache/asterix/om/base/temporal/ADateParserFactory.java
@@ -55,7 +55,7 @@
 
     /**
      * Parse the given char sequence as a date string, and return the milliseconds represented by the date.
-     * 
+     *
      * @param charAccessor
      *            accessor for the char sequence
      * @param isDateOnly
@@ -153,7 +153,7 @@
     /**
      * A copy-and-paste of {@link #parseDatePart(String, int, int)} but for a char array, in order
      * to avoid object creation.
-     * 
+     *
      * @param dateString
      * @param start
      * @param length
@@ -249,7 +249,7 @@
     /**
      * A copy-and-paste of {@link #parseDatePart(String, int, int)} but for a byte array, in order
      * to avoid object creation.
-     * 
+     *
      * @param dateString
      * @param start
      * @param length
diff --git a/asterix-om/src/main/java/org/apache/asterix/om/base/temporal/ATimeParserFactory.java b/asterix-om/src/main/java/org/apache/asterix/om/base/temporal/ATimeParserFactory.java
index f4431a9..2b97005 100644
--- a/asterix-om/src/main/java/org/apache/asterix/om/base/temporal/ATimeParserFactory.java
+++ b/asterix-om/src/main/java/org/apache/asterix/om/base/temporal/ATimeParserFactory.java
@@ -55,7 +55,7 @@
 
     /**
      * Parse the given string as a time string, and return the milliseconds represented by the time.
-     * 
+     *
      * @param timeString
      * @param start
      * @param length
@@ -160,7 +160,7 @@
 
     /**
      * Parse the given string as a time string, and parse the timezone field.
-     * 
+     *
      * @param timeString
      * @param start
      * @return
@@ -209,7 +209,7 @@
     /**
      * Similar to {@link #parseTimePart(String, int, int)} but use a char array as input; although this is almost
      * a copy-and-past code but it avoids object creation.
-     * 
+     *
      * @param timeString
      * @param start
      * @param length
@@ -314,7 +314,7 @@
     /**
      * Similar to {@link #parseTimezonePart(String, int)} but use a char array as input; although this is almost
      * a copy-and-past code but it avoids object creation.
-     * 
+     *
      * @param timeString
      * @param start
      * @param length
@@ -363,7 +363,7 @@
     /**
      * Similar to {@link #parseTimePart(String, int, int)} but use a byte array as input; although this is almost
      * a copy-and-past code but it avoids object creation.
-     * 
+     *
      * @param timeString
      * @param start
      * @param length
@@ -468,7 +468,7 @@
     /**
      * Similar to {@link #parseTimezonePart(String, int)} but use a byte array as input; although this is almost
      * a copy-and-past code but it avoids object creation.
-     * 
+     *
      * @param timeString
      * @param start
      * @param length
diff --git a/asterix-om/src/main/java/org/apache/asterix/om/base/temporal/DurationArithmeticOperations.java b/asterix-om/src/main/java/org/apache/asterix/om/base/temporal/DurationArithmeticOperations.java
index cf91db5..404bf42 100644
--- a/asterix-om/src/main/java/org/apache/asterix/om/base/temporal/DurationArithmeticOperations.java
+++ b/asterix-om/src/main/java/org/apache/asterix/om/base/temporal/DurationArithmeticOperations.java
@@ -32,7 +32,7 @@
      * <p/>
      * The basic algorithm is like this: duration is applied to the time point as two separated fields: year-month field and day-time field. Year-month field is applied firstly by reserving the correct day within the month's range (for example add 1M to 03-31 will return 04-30). Then day-time field is applied.
      * <p/>
-     * 
+     *
      * @param pointChronon
      *            The time instance where the duration will be added, represented as the milliseconds since the anchored time (00:00:00 for time type, 1970-01-01T00:00:00Z for datetime and date types).
      * @param yearMonthDuration
diff --git a/asterix-om/src/main/java/org/apache/asterix/om/base/temporal/GregorianCalendarSystem.java b/asterix-om/src/main/java/org/apache/asterix/om/base/temporal/GregorianCalendarSystem.java
index e3be400..7f79478 100644
--- a/asterix-om/src/main/java/org/apache/asterix/om/base/temporal/GregorianCalendarSystem.java
+++ b/asterix-om/src/main/java/org/apache/asterix/om/base/temporal/GregorianCalendarSystem.java
@@ -20,8 +20,8 @@
  */
 
 /*
- *Portions of this code are based off of Joda API 
- * (http://joda-time.sourceforge.net/) 
+ *Portions of this code are based off of Joda API
+ * (http://joda-time.sourceforge.net/)
  *
  * Copyright 2001-2005 Stephen Colebourne
  *
@@ -115,7 +115,7 @@
 
     /**
      * Check whether the given date time value is a valid date time following the gregorian calendar system.
-     * 
+     *
      * @param fields
      * @return
      */
@@ -167,7 +167,7 @@
      * <p/>
      * Reference: http://www.timeanddate.com/library/abbreviations/timezones/
      * <p/>
-     * 
+     *
      * @param timezone
      * @return
      */
@@ -182,7 +182,7 @@
 
     /**
      * Validate the given chronon time and time zone.
-     * 
+     *
      * @param year
      * @param month
      * @param day
@@ -199,7 +199,7 @@
 
     /**
      * Get the UTC chronon time of the given date time and time zone.
-     * 
+     *
      * @param year
      * @param month
      * @param day
@@ -215,7 +215,7 @@
         long chrononTime = chrononizeBeginningOfYear(year) + hour * CHRONON_OF_HOUR + min * CHRONON_OF_MINUTE + sec
                 * CHRONON_OF_SECOND + millis + timezone;
 
-        // Added milliseconds for days of the month. 
+        // Added milliseconds for days of the month.
         chrononTime += (day - 1 + DAYS_SINCE_MONTH_BEGIN_ORDI[month - 1]) * CHRONON_OF_DAY;
 
         // Adjust the leap year
@@ -228,7 +228,7 @@
 
     /**
      * Get the chronon time (number of milliseconds) of the given time and time zone.
-     * 
+     *
      * @param hour
      * @param min
      * @param sec
@@ -266,7 +266,7 @@
      * <p/>
      * The extended string representation is like:<br/>
      * [-]YYYY-MM-DDThh:mm:ss.xxx[Z|[+|-]hh:mm]
-     * 
+     *
      * @param chrononTime
      * @param timezone
      * @param sbder
@@ -344,7 +344,7 @@
 
     /**
      * Get the basic string representation of a chronon time with the given time zone.
-     * 
+     *
      * @param chrononTime
      * @param timezone
      * @param sbder
@@ -408,7 +408,7 @@
      * <p/>
      * The extended and simple string representation is like:<br/>
      * [-]PnYnMnDTnHnMnS
-     * 
+     *
      * @param milliseconds
      * @param months
      * @param sbder
@@ -452,7 +452,7 @@
 
     /**
      * Check whether a given year is a leap year.
-     * 
+     *
      * @param year
      * @return
      */
@@ -464,7 +464,7 @@
      * From Joda library GregorianChronology class: The basic calculation is
      * (y / 4) - (y / 100) + (y / 400). <br/>
      * Use y >> 2 ( (y + 3) >> 2 for negative y value) to replace y / 4 reveals eliminates two divisions.
-     * 
+     *
      * @param year
      * @return
      */
@@ -489,7 +489,7 @@
      * <p/>
      * This code is directly from the Joda library BadicChronology.java.<br/>
      * The original authers are Stephen Colebourne, Brain S O'Neill and Guy Allard, and modified by JArod Wen on May 7th, 2012.
-     * 
+     *
      * @param chrononTime
      * @return
      */
@@ -537,7 +537,7 @@
      * This code is directly from the Joda library BasicGJChronology.java.<br/>
      * The original authers are Stephen Colebourne, Brain S O'Neill and Guy Allard, and modified by JArod Wen on May 7th, 2012 and commented by Theodoros Ioannou on July 2012.
      * <p/>
-     * 
+     *
      * @param millis
      * @param year
      * @return
@@ -601,7 +601,7 @@
      * This function is directly from Joda Library BasicChronology.java.<br/>
      * The original authers are Stephen Colebourne, Brain S O'Neill and Guy Allard, and modified by JArod Wen on May 7th, 2012.
      * <p/>
-     * 
+     *
      * @param millis
      * @param year
      * @param month
@@ -618,7 +618,7 @@
 
     /**
      * Get the hour of the day for the given chronon time.
-     * 
+     *
      * @param millis
      * @return
      */
@@ -640,7 +640,7 @@
 
     /**
      * Get the minute of the hour for the given chronon time.
-     * 
+     *
      * @param millis
      * @return
      */
@@ -660,7 +660,7 @@
 
     /**
      * Get the second of the minute for the given chronon time.
-     * 
+     *
      * @param millis
      * @return
      */
@@ -680,7 +680,7 @@
 
     /**
      * Get the millisecond of the second for the given chronon time.
-     * 
+     *
      * @param millis
      * @return
      */
diff --git a/asterix-om/src/main/java/org/apache/asterix/om/base/temporal/ICalendarSystem.java b/asterix-om/src/main/java/org/apache/asterix/om/base/temporal/ICalendarSystem.java
index b0ed77a..5fd785d 100644
--- a/asterix-om/src/main/java/org/apache/asterix/om/base/temporal/ICalendarSystem.java
+++ b/asterix-om/src/main/java/org/apache/asterix/om/base/temporal/ICalendarSystem.java
@@ -22,7 +22,7 @@
 
     /**
      * check whether the given time stamp is valid in the calendar system.
-     * 
+     *
      * @param year
      * @param month
      * @param day
@@ -37,7 +37,7 @@
 
     /**
      * get the chronon time for the given time stamp in the calendar system.
-     * 
+     *
      * @param year
      * @param month
      * @param day
@@ -52,7 +52,7 @@
 
     /**
      * get the chronon time for the given time in the calendar system
-     * 
+     *
      * @param hour
      * @param min
      * @param sec
diff --git a/asterix-om/src/main/java/org/apache/asterix/om/functions/IFunctionDescriptorFactory.java b/asterix-om/src/main/java/org/apache/asterix/om/functions/IFunctionDescriptorFactory.java
index 767c7d6..526eab6 100644
--- a/asterix-om/src/main/java/org/apache/asterix/om/functions/IFunctionDescriptorFactory.java
+++ b/asterix-om/src/main/java/org/apache/asterix/om/functions/IFunctionDescriptorFactory.java
@@ -23,7 +23,7 @@
 
     /**
      * the artifact registered in function manager
-     * 
+     *
      * @return a new IFunctionDescriptor instance
      */
     public IFunctionDescriptor createFunctionDescriptor();
diff --git a/asterix-om/src/main/java/org/apache/asterix/om/io/AsterixIOException.java b/asterix-om/src/main/java/org/apache/asterix/om/io/AsterixIOException.java
index b5c40a8..498db12 100644
--- a/asterix-om/src/main/java/org/apache/asterix/om/io/AsterixIOException.java
+++ b/asterix-om/src/main/java/org/apache/asterix/om/io/AsterixIOException.java
@@ -23,7 +23,7 @@
 public abstract class AsterixIOException extends AsterixException {
 
     /**
-     * 
+     *
      */
     private static final long serialVersionUID = -6833106041007638556L;
 
diff --git a/asterix-om/src/main/java/org/apache/asterix/om/pointables/AListVisitablePointable.java b/asterix-om/src/main/java/org/apache/asterix/om/pointables/AListVisitablePointable.java
index f5fd0c1..42371ea 100644
--- a/asterix-om/src/main/java/org/apache/asterix/om/pointables/AListVisitablePointable.java
+++ b/asterix-om/src/main/java/org/apache/asterix/om/pointables/AListVisitablePointable.java
@@ -67,7 +67,7 @@
 
     /**
      * private constructor, to prevent constructing it arbitrarily
-     * 
+     *
      * @param inputType
      */
     public AListVisitablePointable(AbstractCollectionType inputType) {
diff --git a/asterix-om/src/main/java/org/apache/asterix/om/pointables/PointableAllocator.java b/asterix-om/src/main/java/org/apache/asterix/om/pointables/PointableAllocator.java
index d9caeeb..0f66a57 100644
--- a/asterix-om/src/main/java/org/apache/asterix/om/pointables/PointableAllocator.java
+++ b/asterix-om/src/main/java/org/apache/asterix/om/pointables/PointableAllocator.java
@@ -64,7 +64,7 @@
 
     /**
      * allocate closed part value pointable
-     * 
+     *
      * @param type
      * @return the pointable object
      */
@@ -81,7 +81,7 @@
 
     /**
      * allocate open part value pointable
-     * 
+     *
      * @param typeTag
      * @return the pointable object
      */
diff --git a/asterix-om/src/main/java/org/apache/asterix/om/types/TypeHierarchy.java b/asterix-om/src/main/java/org/apache/asterix/om/types/TypeHierarchy.java
index b5e56c8..ded3d5c 100644
--- a/asterix-om/src/main/java/org/apache/asterix/om/types/TypeHierarchy.java
+++ b/asterix-om/src/main/java/org/apache/asterix/om/types/TypeHierarchy.java
@@ -22,7 +22,7 @@
 
 /*
  * Author: Guangqiang Li
- * Created on Sep 24, 2009 
+ * Created on Sep 24, 2009
  */
 public class TypeHierarchy {
     private static Hashtable<String, String> parentMap = new Hashtable<String, String>();
diff --git a/asterix-om/src/main/java/org/apache/asterix/om/util/AsterixAppContextInfo.java b/asterix-om/src/main/java/org/apache/asterix/om/util/AsterixAppContextInfo.java
index 082618b..33584d4 100644
--- a/asterix-om/src/main/java/org/apache/asterix/om/util/AsterixAppContextInfo.java
+++ b/asterix-om/src/main/java/org/apache/asterix/om/util/AsterixAppContextInfo.java
@@ -41,7 +41,7 @@
 
 /*
  * Acts as an holder class for IndexRegistryProvider, AsterixStorageManager
- * instances that are accessed from the NCs. In addition an instance of ICCApplicationContext 
+ * instances that are accessed from the NCs. In addition an instance of ICCApplicationContext
  * is stored for access by the CC.
  */
 public class AsterixAppContextInfo implements IAsterixApplicationContextInfo, IAsterixPropertiesProvider {
diff --git a/asterix-om/src/main/java/org/apache/asterix/om/util/container/IObjectFactory.java b/asterix-om/src/main/java/org/apache/asterix/om/util/container/IObjectFactory.java
index ecd7d21..48dcbfb 100644
--- a/asterix-om/src/main/java/org/apache/asterix/om/util/container/IObjectFactory.java
+++ b/asterix-om/src/main/java/org/apache/asterix/om/util/container/IObjectFactory.java
@@ -26,7 +26,7 @@
 
     /**
      * create an element of type E
-     * 
+     *
      * @param arg
      * @return an E element
      */
diff --git a/asterix-om/src/main/java/org/apache/asterix/om/util/container/IObjectPool.java b/asterix-om/src/main/java/org/apache/asterix/om/util/container/IObjectPool.java
index d8cfffa..d3d76e6 100644
--- a/asterix-om/src/main/java/org/apache/asterix/om/util/container/IObjectPool.java
+++ b/asterix-om/src/main/java/org/apache/asterix/om/util/container/IObjectPool.java
@@ -26,7 +26,7 @@
 
     /**
      * Give client an E instance
-     * 
+     *
      * @param arg
      *            the argument to create E
      * @return an E instance
diff --git a/asterix-replication/src/main/java/org/apache/asterix/replication/functions/ReplicationProtocol.java b/asterix-replication/src/main/java/org/apache/asterix/replication/functions/ReplicationProtocol.java
index be8f8e3..790df66 100644
--- a/asterix-replication/src/main/java/org/apache/asterix/replication/functions/ReplicationProtocol.java
+++ b/asterix-replication/src/main/java/org/apache/asterix/replication/functions/ReplicationProtocol.java
@@ -43,7 +43,7 @@
     public final static int REPLICATION_REQUEST_TYPE_SIZE = Integer.BYTES;
     public final static int REPLICATION_REQUEST_HEADER_SIZE = REPLICATION_REQUEST_TYPE_SIZE + Integer.BYTES;
 
-    /* 
+    /*
      * ReplicationRequestType:
      * REPLICATE_LOG: txn log replication
      * REPLICATE_FILE: replicate a file(s)
@@ -329,7 +329,7 @@
 
     /**
      * Sends a goodbye request to a remote replica indicating the end of a replication request.
-     * 
+     *
      * @param socketChannel
      *            the remote replica socket.
      * @throws IOException
@@ -343,4 +343,4 @@
         ByteBuffer ackBuffer = ReplicationProtocol.getAckBuffer();
         NetworkingUtil.transferBufferToChannel(socketChannel, ackBuffer);
     }
-}
\ No newline at end of file
+}
diff --git a/asterix-replication/src/main/java/org/apache/asterix/replication/management/NetworkingUtil.java b/asterix-replication/src/main/java/org/apache/asterix/replication/management/NetworkingUtil.java
index 90291d7..6023cb1 100644
--- a/asterix-replication/src/main/java/org/apache/asterix/replication/management/NetworkingUtil.java
+++ b/asterix-replication/src/main/java/org/apache/asterix/replication/management/NetworkingUtil.java
@@ -93,7 +93,7 @@
             socketChannel.write(requestBuffer);
         }
     }
-    
+
     //unused
     public static void sendFileNIO(FileChannel fileChannel, SocketChannel socketChannel) throws IOException {
         long fileSize = fileChannel.size();
@@ -107,4 +107,4 @@
         long fileSize = fileChannel.size();
         fileChannel.transferFrom(socketChannel, pos, fileSize);
     }
-}
\ No newline at end of file
+}
diff --git a/asterix-replication/src/main/java/org/apache/asterix/replication/management/ReplicationChannel.java b/asterix-replication/src/main/java/org/apache/asterix/replication/management/ReplicationChannel.java
index c97fe94..fd1df0b 100644
--- a/asterix-replication/src/main/java/org/apache/asterix/replication/management/ReplicationChannel.java
+++ b/asterix-replication/src/main/java/org/apache/asterix/replication/management/ReplicationChannel.java
@@ -571,7 +571,7 @@
             long remoteLSN = lsmCompProp.getOriginalLSN();
             //LSN=0 (bulkload) does not need to be updated and there is no flush log corresponding to it
             if (remoteLSN == 0) {
-                //since this is the first LSM component of this index, 
+                //since this is the first LSM component of this index,
                 //then set the mapping in the LSN_MAP to the current log LSN because
                 //no other log could've been received for this index since bulkload replication is synchronous.
                 lsmCompProp.setReplicaLSN(logManager.getAppendLSN());
@@ -606,12 +606,12 @@
                     Long mappingLSN = lsmMap.get(lsmCompProp.getOriginalLSN());
                     if (mappingLSN == null) {
                         /*
-                         * this shouldn't happen unless this node just recovered and the first component it received 
+                         * this shouldn't happen unless this node just recovered and the first component it received
                          * is a merged component due to an on-going merge operation while recovery on the remote replica.
                          * In this case, we use the current append LSN since no new records exist for this index,
                          * otherwise they would've been flushed.
                          * This could be prevented by waiting for any IO to finish on the remote replica during recovery.
-                         * 
+                         *
                          */
                         mappingLSN = logManager.getAppendLSN();
                     } else {
@@ -623,8 +623,8 @@
             Path path = Paths.get(syncTask.getComponentFilePath());
             if (Files.notExists(path)) {
                 /*
-                 * This could happen when a merged component arrives and deletes the flushed 
-                 * component (which we are trying to update) before its flush log arrives since logs and components are received 
+                 * This could happen when a merged component arrives and deletes the flushed
+                 * component (which we are trying to update) before its flush log arrives since logs and components are received
                  * on different threads.
                  */
                 return;
@@ -647,4 +647,4 @@
             }
         }
     }
-}
\ No newline at end of file
+}
diff --git a/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/std/SqlSumAggregateFunction.java b/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/std/SqlSumAggregateFunction.java
index 91234e0..f6a7c4a 100644
--- a/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/std/SqlSumAggregateFunction.java
+++ b/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/std/SqlSumAggregateFunction.java
@@ -30,7 +30,7 @@
 
 public class SqlSumAggregateFunction extends AbstractSumAggregateFunction {
     private final boolean isLocalAgg;
-    
+
     public SqlSumAggregateFunction(ICopyEvaluatorFactory[] args, IDataOutputProvider provider, boolean isLocalAgg)
             throws AlgebricksException {
         super(args, provider);
diff --git a/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/std/SumAggregateFunction.java b/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/std/SumAggregateFunction.java
index 0296949..959a71d 100644
--- a/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/std/SumAggregateFunction.java
+++ b/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/std/SumAggregateFunction.java
@@ -38,7 +38,7 @@
     }
 
     @Override
-    protected boolean skipStep() { 
+    protected boolean skipStep() {
         return (aggType == ATypeTag.NULL);
     }
 
diff --git a/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/AbstractNumericArithmeticEval.java b/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/AbstractNumericArithmeticEval.java
index a6a1a92..780ec99 100644
--- a/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/AbstractNumericArithmeticEval.java
+++ b/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/AbstractNumericArithmeticEval.java
@@ -69,7 +69,7 @@
     /**
      * abstract method for arithmetic operation between a time instance (date/time/datetime)
      * and a duration (duration/year-month-duration/day-time-duration)
-     * 
+     *
      * @param chronon
      * @param yearMonth
      * @param dayTime
@@ -81,7 +81,7 @@
 
     /**
      * abstract method for arithmetic operation between two time instances (date/time/datetime)
-     * 
+     *
      * @param chronon0
      * @param chronon1
      * @return
diff --git a/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/IntervalLogic.java b/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/IntervalLogic.java
index cb66765..b662c5b 100644
--- a/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/IntervalLogic.java
+++ b/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/IntervalLogic.java
@@ -29,7 +29,7 @@
      * <p/>
      * |------|<br/>
      * &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|------|<br/>
-     * 
+     *
      * @param s1
      * @param e1
      * @param s2
@@ -49,7 +49,7 @@
      * <p/>
      * |------|<br/>
      * &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|------|<br/>
-     * 
+     *
      * @param s1
      * @param e1
      * @param s2
@@ -69,7 +69,7 @@
      * <p/>
      * |------|<br/>
      * &nbsp;&nbsp;&nbsp;&nbsp;|------|<br/>
-     * 
+     *
      * @param s1
      * @param e1
      * @param s2
@@ -87,7 +87,7 @@
     /**
      * Something is shared by both interval 1 and interval 2.
      * <p/>
-     * 
+     *
      * @param s1
      * @param e1
      * @param s2
@@ -103,7 +103,7 @@
      * <p/>
      * |------|<br/>
      * |-------|<br/>
-     * 
+     *
      * @param s1
      * @param e1
      * @param s2
@@ -123,7 +123,7 @@
      * <p/>
      * |------|<br/>
      * &nbsp;&nbsp;|----|<br/>
-     * 
+     *
      * @param s1
      * @param e1
      * @param s2
@@ -143,7 +143,7 @@
      * <p/>
      * &nbsp;&nbsp;|-----|<br/>
      * |------|<br/>
-     * 
+     *
      * @param s1
      * @param e1
      * @param s2
diff --git a/asterix-transactions/src/main/java/org/apache/asterix/transaction/management/resource/PersistentLocalResourceRepository.java b/asterix-transactions/src/main/java/org/apache/asterix/transaction/management/resource/PersistentLocalResourceRepository.java
index 9f59148..655fd2a 100644
--- a/asterix-transactions/src/main/java/org/apache/asterix/transaction/management/resource/PersistentLocalResourceRepository.java
+++ b/asterix-transactions/src/main/java/org/apache/asterix/transaction/management/resource/PersistentLocalResourceRepository.java
@@ -104,7 +104,7 @@
 
         //create storage metadata file (This file is used to locate the root storage directory after instance restarts).
         //TODO with the existing cluster configuration file being static and distributed on all NCs, we can find out the storage root
-        //directory without looking at this file. This file could potentially store more information, otherwise no need to keep it. 
+        //directory without looking at this file. This file could potentially store more information, otherwise no need to keep it.
         for (int i = 0; i < mountPoints.length; i++) {
             File storageMetadataFile = getStorageMetadataFile(mountPoints[i], nodeId, i);
             File storageMetadataDir = storageMetadataFile.getParentFile();
@@ -404,4 +404,4 @@
         //currently each partition is replicated on the same IO device number on all NCs.
         return mountPoints[clusterPartitions.get(partition).getIODeviceNum()];
     }
-}
\ No newline at end of file
+}
diff --git a/asterix-transactions/src/main/java/org/apache/asterix/transaction/management/service/locking/DatasetLockInfo.java b/asterix-transactions/src/main/java/org/apache/asterix/transaction/management/service/locking/DatasetLockInfo.java
index db187fb..dfb5d1e 100644
--- a/asterix-transactions/src/main/java/org/apache/asterix/transaction/management/service/locking/DatasetLockInfo.java
+++ b/asterix-transactions/src/main/java/org/apache/asterix/transaction/management/service/locking/DatasetLockInfo.java
@@ -178,7 +178,7 @@
             }
             entityInfo = entityLockInfoManager.findEntityInfoFromHolderList(eLockInfo, jobId, hashVal);
             if (entityInfo == -1) {
-                //find the entityInfo from the waiter list of entityLockInfo. 
+                //find the entityInfo from the waiter list of entityLockInfo.
                 //There is a case where dataset-granule lock is acquired, but entity-granule lock is not acquired yet.
                 //In this case, the waiter of the entityLockInfo represents the holder of the datasetLockInfo.
                 waiterObjId = entityLockInfoManager.findWaiterFromWaiterList(eLockInfo, jobId, hashVal);
@@ -241,7 +241,7 @@
      * Remove holder from linked list of Actor.
      * Also, remove the corresponding resource from linked list of resource
      * in order to minimize JobInfo's resource link traversal.
-     * 
+     *
      * @param holder
      * @param jobInfo
      */
@@ -298,7 +298,7 @@
 
     /**
      * append new waiter to the end of waiters
-     * 
+     *
      * @param waiterObjId
      */
     public void addWaiter(int waiterObjId) {
@@ -533,4 +533,4 @@
         return entityResourceHT;
     }
 
-}
\ No newline at end of file
+}
diff --git a/asterix-transactions/src/main/java/org/apache/asterix/transaction/management/service/locking/DeadlockDetector.java b/asterix-transactions/src/main/java/org/apache/asterix/transaction/management/service/locking/DeadlockDetector.java
index 13768bd..f8a4f5e 100644
--- a/asterix-transactions/src/main/java/org/apache/asterix/transaction/management/service/locking/DeadlockDetector.java
+++ b/asterix-transactions/src/main/java/org/apache/asterix/transaction/management/service/locking/DeadlockDetector.java
@@ -75,7 +75,7 @@
         visitedHolderList.clear(true);
 
         //holderlist contains jobId
-        //resourceList contains entityInfo's slot numbers instead of resourceId in order to avoid object creation 
+        //resourceList contains entityInfo's slot numbers instead of resourceId in order to avoid object creation
         //since resourceId consists of datasetId and PKHashValue
 
         //get holder list(jobId list)
@@ -93,7 +93,7 @@
             if (isUpgrade && dLockInfo.getFirstUpgrader() != -1) {
                 return false;
             }
-            //there is no case such that while a job is holding any mode of lock on a dataset and waits for the same dataset as an waiter. 
+            //there is no case such that while a job is holding any mode of lock on a dataset and waits for the same dataset as an waiter.
             //But the job may wait for the same dataset as an upgrader.
         }
 
@@ -153,7 +153,7 @@
     /**
      * Get holder list of dataset if hashValue == -1. Get holder list of entity otherwise.
      * Where, a holder is a jobId, not entityInfo's slotNum
-     * 
+     *
      * @param datasetId
      * @param hashValue
      * @param holderList
@@ -223,7 +223,7 @@
 
     /**
      * Get waiting resource list of jobId, where a resource is represented with entityInfo's slot number
-     * 
+     *
      * @param jobId
      * @param resourceList
      */
diff --git a/asterix-transactions/src/main/java/org/apache/asterix/transaction/management/service/locking/EntityInfoManager.java b/asterix-transactions/src/main/java/org/apache/asterix/transaction/management/service/locking/EntityInfoManager.java
index ab008a4..0e607ee 100644
--- a/asterix-transactions/src/main/java/org/apache/asterix/transaction/management/service/locking/EntityInfoManager.java
+++ b/asterix-transactions/src/main/java/org/apache/asterix/transaction/management/service/locking/EntityInfoManager.java
@@ -127,7 +127,7 @@
     //            System.out.println(eiMgr.prettyPrint());
     //        }
     //    }
-    //    
+    //
     //    ////////////////////////////////////////////////
     //    // end of unit test
     //    ////////////////////////////////////////////////
@@ -200,7 +200,7 @@
      * pArray status : O O x x x x x
      * However, in the above case, if we subtract the deinitialized children's slots,
      * needShrink() will return false even if we shrink the pArray at this case.
-     * 
+     *
      * @return
      */
     private boolean needShrink() {
@@ -514,7 +514,7 @@
     //public static final int DATASET_ACTOR_OFFSET = 28;
 
     //byte offset of nextFreeSlotNum which shares the same space of JobId
-    //If a slot is in use, the space is used for JobId. Otherwise, it is used for nextFreeSlotNum. 
+    //If a slot is in use, the space is used for JobId. Otherwise, it is used for nextFreeSlotNum.
     public static final int NEXT_FREE_SLOT_OFFSET = 0;
 
     private ByteBuffer buffer;
@@ -727,4 +727,4 @@
     //    public int getNextDatasetActor(int slotNum) {
     //        return buffer.getInt(slotNum * ENTITY_INFO_SIZE + DATASET_ACTOR_OFFSET);
     //    }
-}
\ No newline at end of file
+}
diff --git a/asterix-transactions/src/main/java/org/apache/asterix/transaction/management/service/locking/EntityLockInfoManager.java b/asterix-transactions/src/main/java/org/apache/asterix/transaction/management/service/locking/EntityLockInfoManager.java
index be47101..c3de3c4 100644
--- a/asterix-transactions/src/main/java/org/apache/asterix/transaction/management/service/locking/EntityLockInfoManager.java
+++ b/asterix-transactions/src/main/java/org/apache/asterix/transaction/management/service/locking/EntityLockInfoManager.java
@@ -49,30 +49,30 @@
     //        ////////////////////////////////////////////////
     //        // begin of unit test
     //        ////////////////////////////////////////////////
-    //    
+    //
     //        public static final int SHRINK_TIMER_THRESHOLD = 0; //for unit test
-    //    
+    //
     //        /**
     //         * @param args
     //         */
     //        public static void main(String[] args) {
     //            final int DataSize = 5000;
-    //    
+    //
     //            int i, j;
     //            int slots = ChildEntityLockInfoArrayManager.NUM_OF_SLOTS;
     //            int data[] = new int[DataSize];
     //            EntityLockInfoManager eliMgr = new EntityLockInfoManager();
-    //    
+    //
     //            //allocate: 50
     //            System.out.println("allocate: 50");
     //            for (i = 0; i < 5; i++) {
     //                for (j = i * slots; j < i * slots + slots; j++) {
     //                    data[j] = eliMgr.allocate();
     //                }
-    //    
+    //
     //                System.out.println(eliMgr.prettyPrint());
     //            }
-    //    
+    //
     //            //deallocate from the last child to the first child
     //            System.out.println("deallocate from the last child to the first child");
     //            for (i = 4; i >= 0; i--) {
@@ -81,58 +81,58 @@
     //                }
     //                System.out.println(eliMgr.prettyPrint());
     //            }
-    //    
+    //
     //            //allocate: 50
     //            System.out.println("allocate: 50");
     //            for (i = 0; i < 5; i++) {
     //                for (j = i * slots; j < i * slots + slots; j++) {
     //                    data[j] = eliMgr.allocate();
     //                }
-    //    
+    //
     //                System.out.println(eliMgr.prettyPrint());
     //            }
-    //    
+    //
     //            //deallocate from the first child to last child
     //            System.out.println("deallocate from the first child to last child");
     //            for (i = 0; i < 5; i++) {
     //                for (j = i * slots; j < i * slots + slots; j++) {
     //                    eliMgr.deallocate(data[j]);
     //                }
-    //    
+    //
     //                System.out.println(eliMgr.prettyPrint());
     //            }
-    //    
+    //
     //            //allocate: 50
     //            System.out.println("allocate: 50");
     //            for (i = 0; i < 5; i++) {
     //                for (j = i * slots; j < i * slots + slots; j++) {
     //                    data[j] = eliMgr.allocate();
     //                }
-    //    
+    //
     //                System.out.println(eliMgr.prettyPrint());
     //            }
-    //    
+    //
     //            //deallocate from the first child to 4th child
     //            System.out.println("deallocate from the first child to 4th child");
     //            for (i = 0; i < 4; i++) {
     //                for (j = i * slots; j < i * slots + slots; j++) {
     //                    eliMgr.deallocate(data[j]);
     //                }
-    //    
+    //
     //                System.out.println(eliMgr.prettyPrint());
     //            }
-    //    
+    //
     //            //allocate: 40
     //            System.out.println("allocate: 40");
     //            for (i = 0; i < 4; i++) {
     //                for (j = i * slots; j < i * slots + slots; j++) {
     //                    data[j] = eliMgr.allocate();
     //                }
-    //    
+    //
     //                System.out.println(eliMgr.prettyPrint());
     //            }
     //        }
-    //        
+    //
     //        ////////////////////////////////////////////////
     //        // end of unit test
     //        ////////////////////////////////////////////////
@@ -199,7 +199,7 @@
      * pArray status : O O x x x x x
      * However, in the above case, if we subtract the deinitialized children's slots,
      * needShrink() will return false even if we shrink the pArray at this case.
-     * 
+     *
      * @return
      */
     private boolean needShrink() {
@@ -339,7 +339,7 @@
      * Remove holder from linked list of Actor.
      * Also, remove the corresponding resource from linked list of resource
      * in order to minimize JobInfo's resource link traversal.
-     * 
+     *
      * @param slotNum
      * @param holder
      * @param jobInfo
@@ -684,7 +684,7 @@
     public static final int UPGRADER_OFFSET = 12;
 
     //byte offset of nextFreeSlotNum which shares the same space with LastHolder field
-    //If a slot is in use, the space is used for LastHolder. Otherwise, it is used for nextFreeSlotNum. 
+    //If a slot is in use, the space is used for LastHolder. Otherwise, it is used for nextFreeSlotNum.
     public static final int NEXT_FREE_SLOT_OFFSET = 4;
 
     private ByteBuffer buffer;
@@ -824,4 +824,4 @@
     public int getUpgrader(int slotNum) {
         return buffer.getInt(slotNum * ENTITY_LOCK_INFO_SIZE + UPGRADER_OFFSET);
     }
-}
\ No newline at end of file
+}
diff --git a/asterix-transactions/src/main/java/org/apache/asterix/transaction/management/service/locking/JobInfo.java b/asterix-transactions/src/main/java/org/apache/asterix/transaction/management/service/locking/JobInfo.java
index 39eb213..ebbb0b8 100644
--- a/asterix-transactions/src/main/java/org/apache/asterix/transaction/management/service/locking/JobInfo.java
+++ b/asterix-transactions/src/main/java/org/apache/asterix/transaction/management/service/locking/JobInfo.java
@@ -29,7 +29,7 @@
     private int firstWaitingResource; //resource(entity or dataset) which this job is waiting for
     private int upgradingResource; //resource(entity or dataset) which this job is waiting for to upgrade
 
-    private PrimitiveIntHashMap datasetISLockHT; //used for keeping dataset-granule-lock's count acquired by this job. 
+    private PrimitiveIntHashMap datasetISLockHT; //used for keeping dataset-granule-lock's count acquired by this job.
 
     public JobInfo(EntityInfoManager entityInfoManager, LockWaiterManager lockWaiterManager, ITransactionContext txnCtx) {
         this.entityInfoManager = entityInfoManager;
@@ -144,7 +144,7 @@
         lastObj.setNextWaitingResourceObjId(-1);
 
         //        if (LockManager.IS_DEBUG_MODE) {
-        //            System.out.println(Thread.currentThread().getName()+"\tJobInfo_AddWaiter:"+ waiterObjId + ", FirstWaiter:"+firstWaitingResource);            
+        //            System.out.println(Thread.currentThread().getName()+"\tJobInfo_AddWaiter:"+ waiterObjId + ", FirstWaiter:"+firstWaitingResource);
         //        }
     }
 
@@ -197,7 +197,7 @@
         }
 
         //        if (LockManager.IS_DEBUG_MODE) {
-        //            System.out.println(Thread.currentThread().getName()+"\tJobInfo_RemoveWaiter:"+ waiterObjId + ", FirstWaiter:"+firstWaitingResource);            
+        //            System.out.println(Thread.currentThread().getName()+"\tJobInfo_RemoveWaiter:"+ waiterObjId + ", FirstWaiter:"+firstWaitingResource);
         //        }
     }
 
diff --git a/asterix-transactions/src/main/java/org/apache/asterix/transaction/management/service/locking/LockManager.java b/asterix-transactions/src/main/java/org/apache/asterix/transaction/management/service/locking/LockManager.java
index ee9fd84..f1e1915 100644
--- a/asterix-transactions/src/main/java/org/apache/asterix/transaction/management/service/locking/LockManager.java
+++ b/asterix-transactions/src/main/java/org/apache/asterix/transaction/management/service/locking/LockManager.java
@@ -54,10 +54,10 @@
 public class LockManager implements ILockManager, ILifeCycleComponent {
 
     public static final boolean IS_DEBUG_MODE = false;//true
-    //This variable indicates that the dataset granule X lock request is allowed when 
-    //there are concurrent lock requests. As of 4/16/2013, we only allow the dataset granule X lock 
+    //This variable indicates that the dataset granule X lock request is allowed when
+    //there are concurrent lock requests. As of 4/16/2013, we only allow the dataset granule X lock
     //during DDL operation which is preceded by holding X latch on metadata.
-    //Therefore, we don't allow the concurrent lock requests with the dataset granule X lock. 
+    //Therefore, we don't allow the concurrent lock requests with the dataset granule X lock.
     public static final boolean ALLOW_DATASET_GRANULE_X_LOCK_WITH_OTHER_CONCURRENT_LOCK_REQUESTS = false;
 
     public static final boolean ALLOW_ESCALATE_FROM_ENTITY_TO_DATASET = true;
@@ -69,7 +69,7 @@
 
     //all threads accessing to LockManager's tables such as jobHT and datasetResourceHT
     //are serialized through LockTableLatch. All threads waiting the latch will be fairly served
-    //in FIFO manner when the latch is available. 
+    //in FIFO manner when the latch is available.
     private final ReadWriteLock lockTableLatch;
     private final ReadWriteLock waiterLatch;
     private final HashMap<JobId, JobInfo> jobHT;
@@ -165,7 +165,7 @@
                 }
             }
 
-            //#. if the datasetLockInfo doesn't exist in datasetResourceHT 
+            //#. if the datasetLockInfo doesn't exist in datasetResourceHT
             if (dLockInfo == null || dLockInfo.isNoHolder()) {
                 if (dLockInfo == null) {
                     dLockInfo = new DatasetLockInfo(entityLockInfoManager, entityInfoManager, lockWaiterManager);
@@ -269,7 +269,7 @@
         int entityHashValue;
         int did;//int-type dataset id
 
-        //while traversing all holding resources, 
+        //while traversing all holding resources,
         //release IS locks on the escalated dataset and
         //release S locks on the corresponding enttites
         //by calling unlock() method.
@@ -290,7 +290,7 @@
     }
 
     private int needEscalateFromEntityToDataset(JobInfo jobInfo, int datasetId, byte lockMode) {
-        //we currently allow upgrade only if the lockMode is S. 
+        //we currently allow upgrade only if the lockMode is S.
         if (lockMode != LockMode.S) {
             return DONOT_ESCALATE;
         }
@@ -403,10 +403,10 @@
                 //[Notice] Mimicking SIX mode
                 //When the lock escalation from IS to S in dataset-level is allowed, the following case occurs
                 //DatasetLockInfo's SCount = 1 and the same job who carried out the escalation tries to insert,
-                //then the job should be able to insert without being blocked by itself. 
-                //Our approach is to introduce SIX mode, but we don't have currently, 
-                //so I simply mimicking SIX by allowing S and IX coexist in the dataset level 
-                //only if their job id is identical for the requests. 
+                //then the job should be able to insert without being blocked by itself.
+                //Our approach is to introduce SIX mode, but we don't have currently,
+                //so I simply mimicking SIX by allowing S and IX coexist in the dataset level
+                //only if their job id is identical for the requests.
                 if (ALLOW_ESCALATE_FROM_ENTITY_TO_DATASET) {
                     if (datasetLockMode == LockMode.IX && dLockInfo.getSCount() == 1
                             && jobInfo.isDatasetLockGranted(dId, LockMode.S)) {
@@ -422,20 +422,20 @@
 
                 /////////////////////////////////////////////////////////////////////////////////////////////
                 if (ALLOW_DATASET_GRANULE_X_LOCK_WITH_OTHER_CONCURRENT_LOCK_REQUESTS) {
-                    //The following case only may occur when the dataset level X lock is requested 
+                    //The following case only may occur when the dataset level X lock is requested
                     //with the other lock
 
                     //[Notice]
                     //There has been no same caller as (jId, dId, entityHashValue) triplet.
                     //But there could be the same caller in terms of (jId, dId) pair.
-                    //For example, 
+                    //For example,
                     //1) (J1, D1, E1) acquires IS in Dataset D1
                     //2) (J2, D1, -1) requests X  in Dataset D1, but waits
-                    //3) (J1, D1, E2) requests IS in Dataset D1, but should wait 
+                    //3) (J1, D1, E2) requests IS in Dataset D1, but should wait
                     //The 3) may cause deadlock if 1) and 3) are under the same thread.
                     //Even if (J1, D1, E1) and (J1, D1, E2) are two different thread, instead of
                     //aborting (J1, D1, E1) triggered by the deadlock, we give higher priority to 3) than 2)
-                    //as long as the dataset level lock D1 is being held by the same jobId. 
+                    //as long as the dataset level lock D1 is being held by the same jobId.
                     //The above consideration is covered in the following code.
                     //find the same dataset-granule lock request, that is, (J1, D1) pair in the above example.
                     if (jobInfo.isDatasetLockGranted(dId, LockMode.IS)) {
@@ -494,7 +494,7 @@
             }
         } else {
             isUpgrade = isLockUpgrade(entityInfoManager.getDatasetLockMode(entityInfo), lockMode);
-            if (isUpgrade) { //upgrade call 
+            if (isUpgrade) { //upgrade call
                 //wait if any upgrader exists or upgrading lock mode is not compatible
                 if (dLockInfo.getFirstUpgrader() != -1 || !dLockInfo.isUpgradeCompatible(datasetLockMode, entityInfo)) {
                     waiterCount = handleLockWaiter(dLockInfo, -1, entityInfo, true, true, txnContext, jobInfo, -1);
@@ -567,7 +567,7 @@
 
                     entityLockInfoManager.increaseLockCount(eLockInfo, LockMode.X, (short) (weakerModeLockCount
                             + waiterCount - 1));//new lock mode
-                    entityLockInfoManager.decreaseLockCount(eLockInfo, LockMode.S, (short) weakerModeLockCount);//old lock mode 
+                    entityLockInfoManager.decreaseLockCount(eLockInfo, LockMode.S, (short) weakerModeLockCount);//old lock mode
                 }
                 return;
             }
@@ -608,7 +608,7 @@
 
                         entityLockInfoManager.increaseLockCount(eLockInfo, LockMode.X, (short) (weakerModeLockCount
                                 + waiterCount - 1));//new lock mode
-                        entityLockInfoManager.decreaseLockCount(eLockInfo, LockMode.S, (short) weakerModeLockCount);//old lock mode 
+                        entityLockInfoManager.decreaseLockCount(eLockInfo, LockMode.S, (short) weakerModeLockCount);//old lock mode
                     }
 
                 } else {//duplicated call
@@ -706,7 +706,7 @@
 
             if (entityInfoManager.getEntityLockCount(entityInfo) == 0
                     && entityInfoManager.getDatasetLockCount(entityInfo) == 0) {
-                int threadCount = 0; //number of threads(in the same job) waiting on the same resource 
+                int threadCount = 0; //number of threads(in the same job) waiting on the same resource
                 int waiterObjId = jobInfo.getFirstWaitingResource();
                 int waitingEntityInfo;
                 LockWaiter waiterObj;
@@ -720,9 +720,9 @@
                 //this can be done in the following single function call.
                 entityLockInfoManager.removeHolder(eLockInfo, entityInfo, jobInfo);
 
-                //2) if 
+                //2) if
                 //      there is no waiting thread on the same resource (this can be checked through jobInfo)
-                //   then 
+                //   then
                 //      a) delete the corresponding entityInfo
                 //      b) write commit log for the unlocked resource(which is a committed txn).
                 while (waiterObjId != -1) {
@@ -795,10 +795,10 @@
                 return;
             }
 
-            //remove waiterObj of JobInfo 
+            //remove waiterObj of JobInfo
             //[Notice]
             //waiterObjs may exist if aborted thread is the caller of this function.
-            //Even if there are the waiterObjs, there is no waiting thread on the objects. 
+            //Even if there are the waiterObjs, there is no waiting thread on the objects.
             //If the caller of this function is an aborted thread, it is guaranteed that there is no waiting threads
             //on the waiterObjs since when the aborted caller thread is waken up, all other waiting threads are
             //also waken up at the same time through 'notifyAll()' call.
@@ -883,8 +883,8 @@
                         wakeUpDatasetLockWaiters(dLockInfo);
 
                         //remove the holder from datasetLockInfo only if the lock is dataset-granule lock.
-                        //--> this also removes the holding resource from jobInfo               
-                        //(Because the IX and IS lock's holders are handled implicitly, 
+                        //--> this also removes the holding resource from jobInfo
+                        //(Because the IX and IS lock's holders are handled implicitly,
                         //those are not in the holder list of datasetLockInfo.)
                         dLockInfo.removeHolder(entityInfo, jobInfo);
                     }
@@ -921,7 +921,7 @@
                         //wakeup waiters of entityLock
                         wakeUpEntityLockWaiters(eLockInfo);
 
-                        //remove the holder from entityLockInfo 
+                        //remove the holder from entityLockInfo
                         //--> this also removes the holding resource from jobInfo
                         entityLockInfoManager.removeHolder(eLockInfo, entityInfo, jobInfo);
                     }
@@ -1000,7 +1000,7 @@
 
             dLockInfo = datasetResourceHT.get(datasetId);
 
-            //#. if the datasetLockInfo doesn't exist in datasetResourceHT 
+            //#. if the datasetLockInfo doesn't exist in datasetResourceHT
             if (dLockInfo == null || dLockInfo.isNoHolder()) {
                 if (IS_DEBUG_MODE) {
                     trackLockRequest("Granted", RequestType.INSTANT_TRY_LOCK, datasetId, entityHashValue, lockMode,
@@ -1016,9 +1016,9 @@
             if (datasetLockMode == LockMode.IS) {
                 //[Notice]
                 //Skip checking the dataset level lock compatibility if the requested LockMode is IS lock.
-                //We know that this internalInstantTryLock() call with IS lock mode will be always granted 
-                //because we don't allow X lock on dataset-level except DDL operation. 
-                //During DDL operation, all other operations will be pending, so there is no conflict. 
+                //We know that this internalInstantTryLock() call with IS lock mode will be always granted
+                //because we don't allow X lock on dataset-level except DDL operation.
+                //During DDL operation, all other operations will be pending, so there is no conflict.
                 isSuccess = true;
             } else {
                 isSuccess = instantTryLockDatasetGranule(datasetId, entityHashValue, lockMode, txnContext, dLockInfo,
@@ -1082,20 +1082,20 @@
                     || !dLockInfo.isCompatible(datasetLockMode)) {
 
                 if (ALLOW_DATASET_GRANULE_X_LOCK_WITH_OTHER_CONCURRENT_LOCK_REQUESTS) {
-                    //The following case only may occur when the dataset level X lock is requested 
+                    //The following case only may occur when the dataset level X lock is requested
                     //with the other lock
 
                     //[Notice]
                     //There has been no same caller as (jId, dId, entityHashValue) triplet.
                     //But there could be the same caller in terms of (jId, dId) pair.
-                    //For example, 
+                    //For example,
                     //1) (J1, D1, E1) acquires IS in Dataset D1
                     //2) (J2, D1, -1) requests X  in Dataset D1, but waits
-                    //3) (J1, D1, E2) requests IS in Dataset D1, but should wait 
+                    //3) (J1, D1, E2) requests IS in Dataset D1, but should wait
                     //The 3) may cause deadlock if 1) and 3) are under the same thread.
                     //Even if (J1, D1, E1) and (J1, D1, E2) are two different thread, instead of
                     //aborting (J1, D1, E1) triggered by the deadlock, we give higher priority to 3) than 2)
-                    //as long as the dataset level lock D1 is being held by the same jobId. 
+                    //as long as the dataset level lock D1 is being held by the same jobId.
                     //The above consideration is covered in the following code.
                     //find the same dataset-granule lock request, that is, (J1, D1) pair in the above example.
                     if (jobInfo != null && jobInfo.isDatasetLockGranted(dId, LockMode.IS)) {
@@ -1110,7 +1110,7 @@
             }
         } else {
             isUpgrade = isLockUpgrade(entityInfoManager.getDatasetLockMode(entityInfo), lockMode);
-            if (isUpgrade) { //upgrade call 
+            if (isUpgrade) { //upgrade call
                 //return fail if any upgrader exists or upgrading lock mode is not compatible
                 if (dLockInfo.getFirstUpgrader() != -1 || !dLockInfo.isUpgradeCompatible(datasetLockMode, entityInfo)) {
                     return false;
@@ -1230,7 +1230,7 @@
                 }
             }
 
-            //#. if the datasetLockInfo doesn't exist in datasetResourceHT 
+            //#. if the datasetLockInfo doesn't exist in datasetResourceHT
             if (dLockInfo == null || dLockInfo.isNoHolder()) {
                 if (dLockInfo == null) {
                     dLockInfo = new DatasetLockInfo(entityLockInfoManager, entityInfoManager, lockWaiterManager);
@@ -1265,7 +1265,7 @@
                         jobInfo.increaseDatasetISLockCount(dId);
                         if (doEscalate) {
                             //This exception is thrown when the threshold value is set to 1.
-                            //We don't want to allow the lock escalation when there is a first lock request on a dataset. 
+                            //We don't want to allow the lock escalation when there is a first lock request on a dataset.
                             throw new IllegalStateException(
                                     "ESCALATE_TRHESHOLD_ENTITY_TO_DATASET should not be set to "
                                             + txnSubsystem.getTransactionProperties()
@@ -1514,20 +1514,20 @@
                     || !dLockInfo.isCompatible(datasetLockMode)) {
 
                 if (ALLOW_DATASET_GRANULE_X_LOCK_WITH_OTHER_CONCURRENT_LOCK_REQUESTS) {
-                    //The following case only may occur when the dataset level X lock is requested 
+                    //The following case only may occur when the dataset level X lock is requested
                     //with the other lock
 
                     //[Notice]
                     //There has been no same caller as (jId, dId, entityHashValue) triplet.
                     //But there could be the same caller in terms of (jId, dId) pair.
-                    //For example, 
+                    //For example,
                     //1) (J1, D1, E1) acquires IS in Dataset D1
                     //2) (J2, D1, -1) requests X  in Dataset D1, but waits
-                    //3) (J1, D1, E2) requests IS in Dataset D1, but should wait 
+                    //3) (J1, D1, E2) requests IS in Dataset D1, but should wait
                     //The 3) may cause deadlock if 1) and 3) are under the same thread.
                     //Even if (J1, D1, E1) and (J1, D1, E2) are two different thread, instead of
                     //aborting (J1, D1, E1) triggered by the deadlock, we give higher priority to 3) than 2)
-                    //as long as the dataset level lock D1 is being held by the same jobId. 
+                    //as long as the dataset level lock D1 is being held by the same jobId.
                     //The above consideration is covered in the following code.
                     //find the same dataset-granule lock request, that is, (J1, D1) pair in the above example.
                     if (jobInfo.isDatasetLockGranted(dId, LockMode.IS)) {
@@ -1580,7 +1580,7 @@
 
         } else {
             isUpgrade = isLockUpgrade(entityInfoManager.getDatasetLockMode(entityInfo), lockMode);
-            if (isUpgrade) { //upgrade call 
+            if (isUpgrade) { //upgrade call
                 //return fail if any upgrader exists or upgrading lock mode is not compatible
                 if (dLockInfo.getFirstUpgrader() != -1 || !dLockInfo.isUpgradeCompatible(datasetLockMode, entityInfo)) {
                     return -2;
@@ -1860,7 +1860,7 @@
 
     /**
      * For now, upgrading lock granule from entity-granule to dataset-granule is not supported!!
-     * 
+     *
      * @param fromLockMode
      * @param toLockMode
      * @return
@@ -2286,4 +2286,4 @@
 
     }
 
-}
\ No newline at end of file
+}
diff --git a/asterix-transactions/src/main/java/org/apache/asterix/transaction/management/service/locking/LockManagerDeterministicUnitTest.java b/asterix-transactions/src/main/java/org/apache/asterix/transaction/management/service/locking/LockManagerDeterministicUnitTest.java
index 1dbf16b..7ccd6b9 100644
--- a/asterix-transactions/src/main/java/org/apache/asterix/transaction/management/service/locking/LockManagerDeterministicUnitTest.java
+++ b/asterix-transactions/src/main/java/org/apache/asterix/transaction/management/service/locking/LockManagerDeterministicUnitTest.java
@@ -516,14 +516,14 @@
     public void log(String s) {
         System.out.println(s);
     }
-    
+
     public String toString() {
         StringBuilder sb = new StringBuilder();
         sb.append("{ t : \"").append(threadName).append("\", r : ");
         if (lockRequest == null) {
             sb.append("null");
         } else {
-            sb.append("\"").append(lockRequest.toString()).append("\""); 
+            sb.append("\"").append(lockRequest.toString()).append("\"");
         }
         sb.append(" }");
         return sb.toString();
diff --git a/asterix-transactions/src/main/java/org/apache/asterix/transaction/management/service/locking/LockManagerStats.java b/asterix-transactions/src/main/java/org/apache/asterix/transaction/management/service/locking/LockManagerStats.java
index 7a4203f..1050d54 100644
--- a/asterix-transactions/src/main/java/org/apache/asterix/transaction/management/service/locking/LockManagerStats.java
+++ b/asterix-transactions/src/main/java/org/apache/asterix/transaction/management/service/locking/LockManagerStats.java
@@ -25,7 +25,7 @@
 
 final class LockManagerStats {
     private final int loggingPeriod;
-    
+
     private final AtomicLong lCnt = new AtomicLong();
     private final AtomicLong ilCnt = new AtomicLong();
     private final AtomicLong tlCnt = new AtomicLong();
@@ -36,16 +36,16 @@
     LockManagerStats(int loggingPeriod) {
         this.loggingPeriod = loggingPeriod;
     }
-    
+
     final void lock()           { lCnt.incrementAndGet(); }
     final void instantLock()    { ilCnt.incrementAndGet(); }
     final void tryLock()        { tlCnt.incrementAndGet(); }
     final void instantTryLock() { itlCnt.incrementAndGet(); }
     final void unlock()         { ulCnt.incrementAndGet(); }
     final void releaseLocks()   { rlCnt.incrementAndGet(); }
-    
+
     final int requestSum() {
-        return lCnt.intValue() + ilCnt.intValue() + tlCnt.intValue() 
+        return lCnt.intValue() + ilCnt.intValue() + tlCnt.intValue()
                 + itlCnt.intValue() + ulCnt.intValue() + rlCnt.intValue();
     }
 
@@ -59,7 +59,7 @@
         .append(", releaseLocks : ").append(rlCnt)
         .append(" }");
         return sb;
-    }        
+    }
 
     @Override
     public String toString() {
@@ -67,7 +67,7 @@
     }
 
     final void logCounters(final Logger logger, final Level lvl, boolean always) {
-        if (logger.isLoggable(lvl) 
+        if (logger.isLoggable(lvl)
             && (always || requestSum()  % loggingPeriod == 0)) {
             logger.log(lvl, toString());
         }
diff --git a/asterix-transactions/src/main/java/org/apache/asterix/transaction/management/service/locking/LockWaiterManager.java b/asterix-transactions/src/main/java/org/apache/asterix/transaction/management/service/locking/LockWaiterManager.java
index a06fbd1..ae971fb 100644
--- a/asterix-transactions/src/main/java/org/apache/asterix/transaction/management/service/locking/LockWaiterManager.java
+++ b/asterix-transactions/src/main/java/org/apache/asterix/transaction/management/service/locking/LockWaiterManager.java
@@ -192,7 +192,7 @@
      * pArray status : O O x x x x x
      * However, in the above case, if we subtract the deinitialized children's slots,
      * needShrink() will return false even if we shrink the pArray at this case.
-     * 
+     *
      * @return
      */
     private boolean needShrink() {
@@ -308,7 +308,7 @@
 
 class ChildLockWaiterArrayManager {
     public static final int NUM_OF_SLOTS = 100; //number of LockWaiter objects in 'childArray'.
-    //    public static final int NUM_OF_SLOTS = 10; //for unit test 
+    //    public static final int NUM_OF_SLOTS = 10; //for unit test
 
     private int freeSlotNum;
     private int occupiedSlots; //-1 represents 'deinitialized' state.
@@ -400,4 +400,4 @@
         }
         return sb.toString();
     }
-}
\ No newline at end of file
+}
diff --git a/asterix-transactions/src/main/java/org/apache/asterix/transaction/management/service/locking/PrimitiveIntHashMap.java b/asterix-transactions/src/main/java/org/apache/asterix/transaction/management/service/locking/PrimitiveIntHashMap.java
index afa688c..5bf5ad6 100644
--- a/asterix-transactions/src/main/java/org/apache/asterix/transaction/management/service/locking/PrimitiveIntHashMap.java
+++ b/asterix-transactions/src/main/java/org/apache/asterix/transaction/management/service/locking/PrimitiveIntHashMap.java
@@ -59,26 +59,26 @@
     //        int val[] = new int[500];
     //        KeyValuePair pair;
     //        PrimitiveIntHashMap map = new PrimitiveIntHashMap(1<<4, 1<<3, 5);
-    //        
+    //
     //        for (j=0; j < num; j++) {
-    //            
+    //
     //            k += 100;
     //            //generate data
     //            for (i=0; i < k; i++) {
     //                key[i] = i;
     //                val[i] = i;
     //            }
-    //            
+    //
     //            //put data to map
     //            for (i=0; i < k-30; i++) {
     //                map.put(key[i], val[i]);
     //            }
-    //            
+    //
     //            //put data to map
     //            for (i=0; i < k-30; i++) {
     //                map.put(key[i], val[i]);
     //            }
-    //            
+    //
     //            map.beginIterate();
     //            pair = map.getNextKeyValue();
     //            i = 0;
@@ -87,17 +87,17 @@
     //                System.out.println("["+i+"] key:"+ pair.key + ", val:"+ pair.value);
     //                pair = map.getNextKeyValue();
     //            }
-    //            
+    //
     //            //System.out.println(map.prettyPrint());
-    //            
+    //
     //            for (i=k-20; i< k; i++) { //skip X70~X79
     //                map.put(key[i], val[i]);
     //            }
-    //            
+    //
     //            System.out.println(map.prettyPrint());
-    //            
+    //
     //            //remove data to map
-    //            for (i=0; i < k-10; i++) { 
+    //            for (i=0; i < k-10; i++) {
     //                map.remove(key[i]);
     //                try {
     //                    Thread.currentThread().sleep(1);
@@ -105,7 +105,7 @@
     //                    e.printStackTrace();
     //                }
     //            }
-    //            
+    //
     //            map.beginIterate();
     //            pair = map.getNextKeyValue();
     //            i = 0;
@@ -114,9 +114,9 @@
     //                System.out.println("["+i+"] key:"+ pair.key + ", val:"+ pair.value);
     //                pair = map.getNextKeyValue();
     //            }
-    //            
+    //
     //            //remove data to map
-    //            for (i=0; i < k-10; i++) { 
+    //            for (i=0; i < k-10; i++) {
     //                map.remove(key[i]);
     //                try {
     //                    Thread.currentThread().sleep(1);
@@ -125,15 +125,15 @@
     //                    e.printStackTrace();
     //                }
     //            }
-    //            
+    //
     //            System.out.println(map.prettyPrint());
-    //            
+    //
     //            //get data from map
     //            for (i=0; i < k; i++) {
-    //                System.out.println(""+i+"=> key:"+ key[i] + ", val:"+val[i] +", result: " + map.get(key[i]));  
+    //                System.out.println(""+i+"=> key:"+ key[i] + ", val:"+val[i] +", result: " + map.get(key[i]));
     //            }
     //        }
-    //        
+    //
     //        map.beginIterate();
     //        pair = map.getNextKeyValue();
     //        i = 0;
@@ -259,7 +259,7 @@
                         //Notice! To avoid bucket iteration, child.remove() is not used.
                         child.cArray[j][k * 2] = -1;
                         child.cArray[j][0]--;
-                        //re-hash it 
+                        //re-hash it
                         pArray.get(hash(key) / CHILD_BUCKETS).put(hash(key) % CHILD_BUCKETS, key, value, false);
                     }
                 }
@@ -289,7 +289,7 @@
     /**
      * Shrink policy:
      * Shrink when the resource under-utilization lasts for a certain amount of time.
-     * 
+     *
      * @return
      */
     private boolean needShrink() {
@@ -319,8 +319,8 @@
     private boolean isSafeToShrink() {
         int i, j;
         int size = pArray.size();
-        //Child: 0, 1, 2, 3, 4, 5, 6, 7 
-        //[HChild(Head Child):0 and TChild(Tail Child): 4], [1(H),5(T)], [2(H),6(T)] and so on. 
+        //Child: 0, 1, 2, 3, 4, 5, 6, 7
+        //[HChild(Head Child):0 and TChild(Tail Child): 4], [1(H),5(T)], [2(H),6(T)] and so on.
         //When the map shrinks, the sum of occupied slots in H/TChild should not exceed the NUM_OF_SLOTS-1.
         //Then it is safe to shrink. Otherwise, unsafe.
         ChildIntArrayManager HChild, TChild;
@@ -514,7 +514,7 @@
      * Update value if the key exists and if isUpsert is true
      * No need to call get() to check the existence of the key before calling put().
      * Notice! Caller should make sure that there is an available slot.
-     * 
+     *
      * @param bucketNum
      * @param key
      * @param value
@@ -570,7 +570,7 @@
 
     /**
      * remove key if it exists. Otherwise, ignore it.
-     * 
+     *
      * @param bucketNum
      * @param key
      * @return 1 for success, 0 if the key doesn't exist
diff --git a/asterix-transactions/src/main/java/org/apache/asterix/transaction/management/service/recovery/CheckpointObject.java b/asterix-transactions/src/main/java/org/apache/asterix/transaction/management/service/recovery/CheckpointObject.java
index 82f4609..3356298 100644
--- a/asterix-transactions/src/main/java/org/apache/asterix/transaction/management/service/recovery/CheckpointObject.java
+++ b/asterix-transactions/src/main/java/org/apache/asterix/transaction/management/service/recovery/CheckpointObject.java
@@ -29,7 +29,7 @@
     private final int maxJobId;
     private final long timeStamp;
     private final boolean sharp;
-    
+
     public CheckpointObject(long checkpointLsn, long minMCTFirstLsn, int maxJobId, long timeStamp, boolean sharp) {
         this.checkpointLsn = checkpointLsn;
         this.minMCTFirstLsn = minMCTFirstLsn;
@@ -57,7 +57,7 @@
     public boolean isSharp() {
         return sharp;
     }
-    
+
     @Override
     public int compareTo(CheckpointObject checkpointObject) {
         long compareTimeStamp = checkpointObject.getTimeStamp();
diff --git a/asterix-transactions/src/main/java/org/apache/asterix/transaction/management/service/recovery/CheckpointThread.java b/asterix-transactions/src/main/java/org/apache/asterix/transaction/management/service/recovery/CheckpointThread.java
index 0dfe5f5..c3cf3e0 100644
--- a/asterix-transactions/src/main/java/org/apache/asterix/transaction/management/service/recovery/CheckpointThread.java
+++ b/asterix-transactions/src/main/java/org/apache/asterix/transaction/management/service/recovery/CheckpointThread.java
@@ -42,7 +42,7 @@
 
     @Override
     public void run() {
-        
+
         Thread.currentThread().setName("Checkpoint Thread");
 
         long currentCheckpointAttemptMinLSN = -1;
@@ -55,21 +55,21 @@
             } catch (InterruptedException e) {
                 //ignore
             }
-            
-            
+
+
             if(lastCheckpointLSN == -1)
             {
                 try {
                     //Since the system just started up after sharp checkpoint, last checkpoint LSN is considered as the min LSN of the current log partition
                     lastCheckpointLSN = logManager.getReadableSmallestLSN();
                 } catch (Exception e) {
-                    lastCheckpointLSN = 0; 
+                    lastCheckpointLSN = 0;
                 }
             }
-            
+
             //1. get current log LSN
             currentLogLSN = logManager.getAppendLSN();
-            
+
             //2. if current log LSN - previous checkpoint > threshold, do checkpoint
             if (currentLogLSN - lastCheckpointLSN > lsnThreshold) {
                 try {
@@ -77,16 +77,16 @@
                     //1. get minimum first LSN (MFL) from open indexes.
                     //2. if current MinFirstLSN < targetCheckpointLSN, schedule async flush for any open index witch has first LSN < force flush delta
                     //3. next time checkpoint comes, it will be able to remove log files which have end range less than current targetCheckpointLSN
-                   
+
                     targetCheckpointLSN = lastCheckpointLSN + lsnThreshold;
                     currentCheckpointAttemptMinLSN = recoveryMgr.checkpoint(false, targetCheckpointLSN);
-                    
+
                     //checkpoint was completed at target LSN or above
                     if(currentCheckpointAttemptMinLSN >= targetCheckpointLSN)
                     {
-                        lastCheckpointLSN = currentCheckpointAttemptMinLSN; 
+                        lastCheckpointLSN = currentCheckpointAttemptMinLSN;
                     }
-                    
+
                 } catch (ACIDException | HyracksDataException e) {
                     throw new Error("failed to checkpoint", e);
                 }
@@ -94,4 +94,4 @@
         }
     }
 
-}
\ No newline at end of file
+}
diff --git a/asterix-transactions/src/main/java/org/apache/asterix/transaction/management/service/recovery/RecoveryManager.java b/asterix-transactions/src/main/java/org/apache/asterix/transaction/management/service/recovery/RecoveryManager.java
index 8fe75f2..2f824df 100644
--- a/asterix-transactions/src/main/java/org/apache/asterix/transaction/management/service/recovery/RecoveryManager.java
+++ b/asterix-transactions/src/main/java/org/apache/asterix/transaction/management/service/recovery/RecoveryManager.java
@@ -163,7 +163,7 @@
                         LOGGER.info("[Warning] ---------------------------------------------------");
                         LOGGER.info("[Warning] Some(or all) of transaction log files are lost.");
                         LOGGER.info("[Warning] ---------------------------------------------------");
-                        //No choice but continuing when the log files are lost. 
+                        //No choice but continuing when the log files are lost.
                     }
                 }
                 state = SystemState.HEALTHY;
@@ -210,7 +210,7 @@
 
         //-------------------------------------------------------------------------
         //  [ analysis phase ]
-        //  - collect all committed Lsn 
+        //  - collect all committed Lsn
         //-------------------------------------------------------------------------
         LOGGER.log(Level.INFO, "[RecoveryMgr] in analysis phase");
 
@@ -431,7 +431,7 @@
 
         //-------------------------------------------------------------------------
         //  [ analysis phase ]
-        //  - collect all committed Lsn 
+        //  - collect all committed Lsn
         //-------------------------------------------------------------------------
         if (LOGGER.isLoggable(Level.INFO)) {
             LOGGER.info("[RecoveryMgr] in analysis phase");
@@ -499,7 +499,7 @@
         Map<Long, Long> resourceId2MaxLSNMap = new HashMap<Long, Long>();
         boolean foundWinner = false;
 
-        //#. get indexLifeCycleManager 
+        //#. get indexLifeCycleManager
         IAsterixAppRuntimeContextProvider appRuntimeContext = txnSubsystem.getAsterixAppRuntimeContextProvider();
         IDatasetLifecycleManager datasetLifecycleManager = appRuntimeContext.getDatasetLifecycleManager();
         PersistentLocalResourceRepository localResourceRepository = (PersistentLocalResourceRepository) appRuntimeContext
@@ -625,7 +625,7 @@
         TransactionManager txnMgr = (TransactionManager) txnSubsystem.getTransactionManager();
         String logDir = logMgr.getLogManagerProperties().getLogDir();
 
-        //get the filename of the previous checkpoint files which are about to be deleted 
+        //get the filename of the previous checkpoint files which are about to be deleted
         //right after the new checkpoint file is written.
         File[] prevCheckpointFiles = getPreviousCheckpointFiles();
 
@@ -650,7 +650,7 @@
                         minMCTFirstLSN = remoteResourcesManager.getMinRemoteLSN(deadReplicaIds);
                     }
                 } else {
-                    //start up complete checkpoint. Avoid deleting remote recovery logs. 
+                    //start up complete checkpoint. Avoid deleting remote recovery logs.
                     minMCTFirstLSN = getMinFirstLSN();
                 }
             }
@@ -900,7 +900,7 @@
 
     /**
      * Rollback a transaction
-     * 
+     *
      * @see org.apache.transaction.management.service.recovery.IRecoveryManager# rollbackTransaction (org.apache.TransactionContext.management.service.transaction .TransactionContext)
      */
     @Override
@@ -997,7 +997,7 @@
 
             IDatasetLifecycleManager datasetLifecycleManager = txnSubsystem.getAsterixAppRuntimeContextProvider()
                     .getDatasetLifecycleManager();
-            //TODO sort loser entities by smallest LSN to undo in one pass. 
+            //TODO sort loser entities by smallest LSN to undo in one pass.
             Iterator<Entry<TxnId, List<Long>>> iter = jobLoserEntity2LSNsMap.entrySet().iterator();
             int undoCount = 0;
             while (iter.hasNext()) {
@@ -1406,7 +1406,7 @@
             ArrayList<File> candidiatePartitions = new ArrayList<File>();
             for (File partition : jobEntitCommitOnDiskPartitionsFiles) {
                 String partitionName = partition.getName();
-                //entity commit log must come after the update log, therefore, consider only partitions with max LSN > logLSN 
+                //entity commit log must come after the update log, therefore, consider only partitions with max LSN > logLSN
                 if (getPartitionMaxLSNFromName(partitionName) > logLSN) {
                     candidiatePartitions.add(partition);
                 }
@@ -1637,4 +1637,4 @@
         }
         return size;
     }
-}
\ No newline at end of file
+}
diff --git a/asterix-transactions/src/main/java/org/apache/asterix/transaction/management/service/transaction/TransactionManagementConstants.java b/asterix-transactions/src/main/java/org/apache/asterix/transaction/management/service/transaction/TransactionManagementConstants.java
index 4600561..5df230b 100644
--- a/asterix-transactions/src/main/java/org/apache/asterix/transaction/management/service/transaction/TransactionManagementConstants.java
+++ b/asterix-transactions/src/main/java/org/apache/asterix/transaction/management/service/transaction/TransactionManagementConstants.java
@@ -41,16 +41,16 @@
             public static final byte IX  =  2;
             public static final byte S   =  3;
             public static final byte X   =  4;
-            
+
             public static byte intentionMode(byte mode) {
                 switch (mode) {
                     case S:  return IS;
                     case X:  return IX;
                     default: throw new IllegalArgumentException(
                             "no intention lock mode for " + toString(mode));
-                }                
+                }
             }
-            
+
             public static String toString(byte mode) {
                 switch (mode) {
                     case ANY: return "ANY";
diff --git a/asterix-transactions/src/main/java/org/apache/asterix/transaction/management/service/transaction/TransactionManager.java b/asterix-transactions/src/main/java/org/apache/asterix/transaction/management/service/transaction/TransactionManager.java
index 7eddb0d..57ced9c 100644
--- a/asterix-transactions/src/main/java/org/apache/asterix/transaction/management/service/transaction/TransactionManager.java
+++ b/asterix-transactions/src/main/java/org/apache/asterix/transaction/management/service/transaction/TransactionManager.java
@@ -103,7 +103,7 @@
 
     @Override
     public void commitTransaction(ITransactionContext txnCtx, DatasetId datasetId, int PKHashVal) throws ACIDException {
-        //Only job-level commits call this method. 
+        //Only job-level commits call this method.
         try {
             if (txnCtx.isWriteTxn()) {
                 LogRecord logRecord = ((TransactionContext) txnCtx).getLogRecord();
diff --git a/asterix-yarn/src/main/java/org/apache/asterix/aoya/AsterixApplicationMaster.java b/asterix-yarn/src/main/java/org/apache/asterix/aoya/AsterixApplicationMaster.java
index 4664fb1..22534e0 100644
--- a/asterix-yarn/src/main/java/org/apache/asterix/aoya/AsterixApplicationMaster.java
+++ b/asterix-yarn/src/main/java/org/apache/asterix/aoya/AsterixApplicationMaster.java
@@ -361,7 +361,7 @@
         dfsBasePath = envs.get(AConstants.DFS_BASE);
         //If the NM has an odd environment where the proper hadoop XML configs dont get imported, we can end up not being able to talk to the RM
         // this solves that!
-        //in a testing environment these can be null however. 
+        //in a testing environment these can be null however.
         if (envs.get(AConstants.RMADDRESS) != null) {
             conf.set("yarn.resourcemanager.address", envs.get(AConstants.RMADDRESS));
             LOG.info("RM Address: " + envs.get(AConstants.RMADDRESS));
@@ -402,7 +402,7 @@
 
     /**
      * Sets up the parameters for the Asterix config.
-     * 
+     *
      * @throws IOException
      */
     private void distributeAsterixConfig() throws IOException {
@@ -447,7 +447,7 @@
         LOG.info("Asked for CC: " + Arrays.toString(ccAsk.getNodes().toArray()));
         numNodes++;
         //now we wait to be given the CC before starting the NCs...
-        //we will wait a minute. 
+        //we will wait a minute.
         int deathClock = 60;
         while (ccUp.get() == false && deathClock > 0) {
             try {
@@ -486,7 +486,7 @@
 
     /**
      * Asks the RM for a particular host, nicely.
-     * 
+     *
      * @param host
      *            The host to request
      * @param cc
@@ -515,7 +515,7 @@
 
     /**
      * Determines whether or not a container is the one on which the CC should reside
-     * 
+     *
      * @param c
      *            The container in question
      * @return True if the container should have the CC process on it, false otherwise.
@@ -535,7 +535,7 @@
 
     /**
      * Attempts to find the Node in the Cluster Description that matches this container
-     * 
+     *
      * @param c
      *            The container to resolve
      * @return The node this container corresponds to
@@ -559,14 +559,14 @@
     /**
      * Here I am just pointing the Containers to the exisiting HDFS resources given by the Client
      * filesystem of the nodes.
-     * 
+     *
      * @throws IOException
      */
     private void localizeDFSResources() throws IOException {
         //if performing an 'offline' task, skip a lot of resource distribution
         if (obliterate || backup || restore) {
             if (appMasterJar == null || ("").equals(appMasterJar)) {
-                //this can happen in a jUnit testing environment. we don't need to set it there. 
+                //this can happen in a jUnit testing environment. we don't need to set it there.
                 if (!conf.getBoolean(YarnConfiguration.IS_MINI_YARN_CLUSTER, false)) {
                     throw new IllegalStateException("AM jar not provided in environment.");
                 } else {
@@ -616,7 +616,7 @@
             LOG.error("Error locating Asterix config" + " in env, path=" + asterixConfPath);
             throw new IOException(e);
         }
-        //TODO: I could avoid localizing this everywhere by only calling this block on the metadata node. 
+        //TODO: I could avoid localizing this everywhere by only calling this block on the metadata node.
         asterixConf.setTimestamp(asterixConfTimestamp);
         asterixConf.setSize(asterixConfLen);
         localResources.put("cluster-config.xml", asterixConf);
@@ -661,7 +661,7 @@
 
     /**
      * Start the AM and request all necessary resources.
-     * 
+     *
      * @return True if the run fully succeeded, false otherwise.
      * @throws YarnException
      * @throws IOException
@@ -823,7 +823,7 @@
                         containerListener);
                 Thread launchThread = new Thread(runnableLaunchContainer, "Asterix CC/NC");
 
-                // I want to know if this node is the CC, because it must start before the NCs. 
+                // I want to know if this node is the CC, because it must start before the NCs.
                 LOG.info("Allocated: " + allocatedContainer.getNodeId().getHost());
                 LOG.info("CC : " + cC.getId());
                 synchronized(pendingNCs){
@@ -1013,7 +1013,7 @@
         /**
          * Determines for a given container what the necessary command line
          * arguments are to start the Asterix processes on that instance
-         * 
+         *
          * @param container
          *            The container to produce the commands for
          * @return A list of the commands that should be executed
@@ -1081,7 +1081,7 @@
         }
 
         private List<String> produceObliterateCommand(Container container) {
-            //if this container has no NCs on it, nothing will be there to delete. 
+            //if this container has no NCs on it, nothing will be there to delete.
             Node local = null;
             List<String> iodevices = null;
             try {
diff --git a/asterix-yarn/src/main/java/org/apache/asterix/aoya/AsterixYARNClient.java b/asterix-yarn/src/main/java/org/apache/asterix/aoya/AsterixYARNClient.java
index f1123aa..f9d10af 100644
--- a/asterix-yarn/src/main/java/org/apache/asterix/aoya/AsterixYARNClient.java
+++ b/asterix-yarn/src/main/java/org/apache/asterix/aoya/AsterixYARNClient.java
@@ -347,7 +347,7 @@
 
         this.conf = conf;
         yarnClient = YarnClient.createYarnClient();
-        //If the HDFS jars aren't on the classpath this won't be set 
+        //If the HDFS jars aren't on the classpath this won't be set
         if (conf.get("fs.hdfs.impl", null) == conf.get("fs.file.impl", null)) { //only would happen if both are null
             conf.set("fs.hdfs.impl", "org.apache.hadoop.hdfs.DistributedFileSystem");
             conf.set("fs.file.impl", "org.apache.hadoop.fs.LocalFileSystem");
@@ -400,7 +400,7 @@
 
     /**
      * Initialize the client's arguments and parameters before execution.
-     * 
+     *
      * @param args
      *            - Standard command-line arguments.
      * @throws ParseException
@@ -458,7 +458,7 @@
 
     /**
      * Cursory sanity checks for argument sanity, without considering the mode of the client
-     * 
+     *
      * @param args
      * @param cliParser
      *            The parsed arguments.
@@ -467,7 +467,7 @@
     private void checkConfSanity(String[] args, CommandLine cliParser) throws ParseException {
         String message = null;
 
-        //Sanity check for no args 
+        //Sanity check for no args
         if (args.length == 0) {
             message = "No args specified for client to initialize";
         }
@@ -486,7 +486,7 @@
 
     /**
      * Initialize the mode of the client from the arguments.
-     * 
+     *
      * @param args
      * @param cliParser
      * @throws ParseException
@@ -515,7 +515,7 @@
 
     /**
      * Determine if the command line arguments are sufficient for the requested client mode.
-     * 
+     *
      * @param args
      *            The command line arguments.
      * @param cliParser
@@ -550,7 +550,7 @@
 
     /**
      * Find the distributable asterix bundle, be it in the default location or in a user-specified location.
-     * 
+     *
      * @return
      */
     private File getAsterixDistributableLocation() {
@@ -571,7 +571,7 @@
 
     /**
      * Initialize and register the application attempt with the YARN ResourceManager.
-     * 
+     *
      * @return
      * @throws IOException
      * @throws YarnException
@@ -626,7 +626,7 @@
 
     /**
      * Upload the Asterix cluster description on to the DFS. This will persist the state of the instance.
-     * 
+     *
      * @return
      * @throws YarnException
      * @throws IOException
@@ -664,7 +664,7 @@
 
     /**
      * Install the current Asterix parameters to the DFS. This can be modified via alter.
-     * 
+     *
      * @throws YarnException
      * @throws IOException
      */
@@ -691,7 +691,7 @@
 
     /**
      * Upload External libraries and functions to HDFS for an instance to use when started
-     * 
+     *
      * @throws IllegalStateException
      * @throws IOException
      */
@@ -716,7 +716,7 @@
 
     /**
      * Finds the minimal classes and JARs needed to start the AM only.
-     * 
+     *
      * @return Resources the AM needs to start on the initial container.
      * @throws IllegalStateException
      * @throws IOException
diff --git a/asterix-yarn/src/main/java/org/apache/asterix/aoya/Deleter.java b/asterix-yarn/src/main/java/org/apache/asterix/aoya/Deleter.java
index 97f3f20..8c92cd1 100644
--- a/asterix-yarn/src/main/java/org/apache/asterix/aoya/Deleter.java
+++ b/asterix-yarn/src/main/java/org/apache/asterix/aoya/Deleter.java
@@ -33,8 +33,8 @@
 
     public static void main(String[] args) throws IOException {
 
-	LogManager.getRootLogger().setLevel(Level.DEBUG); 
-	
+	LogManager.getRootLogger().setLevel(Level.DEBUG);
+
         LOG.info("Obliterator args: " + Arrays.toString(args));
         for (int i = 0; i < args.length; i++) {
             File f = new File(args[i]);
diff --git a/asterix-yarn/src/main/java/org/apache/asterix/aoya/Utils.java b/asterix-yarn/src/main/java/org/apache/asterix/aoya/Utils.java
index 7d9bf0b..de9ec90 100644
--- a/asterix-yarn/src/main/java/org/apache/asterix/aoya/Utils.java
+++ b/asterix-yarn/src/main/java/org/apache/asterix/aoya/Utils.java
@@ -67,7 +67,7 @@
 
     /**
      * Gets the metadata node from an AsterixDB cluster description file
-     * 
+     *
      * @param cluster
      *            The cluster description in question.
      * @return
@@ -90,7 +90,7 @@
 
     /**
      * Sends a "poison pill" message to an AsterixDB instance for it to shut down safely.
-     * 
+     *
      * @param host
      *            The host to shut down.
      * @throws IOException
@@ -116,7 +116,7 @@
     /**
      * Simple test via the AsterixDB Javascript API to determine if an instance is truly live or not.
      * Queries the Metadata dataset and returns true if the query completes successfully, false otherwise.
-     * 
+     *
      * @param host
      *            The host to run the query against
      * @return
@@ -192,7 +192,7 @@
 
     /**
      * Lists the deployed instances of AsterixDB on a YARN cluster
-     * 
+     *
      * @param conf
      *            Hadoop configuration object
      * @param confDirRel
@@ -227,7 +227,7 @@
 
     /**
      * Lists the backups in the DFS.
-     * 
+     *
      * @param conf
      *            YARN configuration
      * @param confDirRel
@@ -248,8 +248,8 @@
         }
     }
    /**
-    * Return the available snapshot names 
-    * @param conf 
+    * Return the available snapshot names
+    * @param conf
     * @param confDirRel
     * @param instance
     * @return
@@ -268,7 +268,7 @@
 
     /**
      * Removes backup snapshots from the DFS
-     * 
+     *
      * @param conf
      *            DFS Configuration
      * @param confDirRel
@@ -308,7 +308,7 @@
 
     /**
      * Simply parses out the YARN cluster config and instantiates it into a nice object.
-     * 
+     *
      * @return The object representing the configuration
      * @throws FileNotFoundException
      * @throws JAXBException
@@ -338,7 +338,7 @@
 
     /**
      * Looks in the current class path for AsterixDB libraries and gets the version number from the name of the first match.
-     * 
+     *
      * @return The version found, as a string.
      */
 
