diff --git a/asterix-app/src/main/java/org/apache/asterix/api/http/servlet/APIServlet.java b/asterix-app/src/main/java/org/apache/asterix/api/http/servlet/APIServlet.java
index 2f998bb..ba8644a 100644
--- a/asterix-app/src/main/java/org/apache/asterix/api/http/servlet/APIServlet.java
+++ b/asterix-app/src/main/java/org/apache/asterix/api/http/servlet/APIServlet.java
@@ -171,38 +171,38 @@
             resourcePath = requestURI;
         }
 
-        InputStream is = APIServlet.class.getResourceAsStream(resourcePath);
-        if (is == null) {
-            response.sendError(HttpServletResponse.SC_NOT_FOUND);
-            return;
+        try (InputStream is = APIServlet.class.getResourceAsStream(resourcePath)) {
+            if (is == null) {
+                response.sendError(HttpServletResponse.SC_NOT_FOUND);
+                return;
+            }
+
+            // Special handler for font files and .png resources
+            if (resourcePath.endsWith(".png")) {
+
+                BufferedImage img = ImageIO.read(is);
+                OutputStream outputStream = response.getOutputStream();
+                String formatName = "png";
+                response.setContentType("image/png");
+                ImageIO.write(img, formatName, outputStream);
+                outputStream.close();
+                return;
+            }
+
+            response.setCharacterEncoding("utf-8");
+            InputStreamReader isr = new InputStreamReader(is);
+            StringBuilder sb = new StringBuilder();
+            BufferedReader br = new BufferedReader(isr);
+            String line = br.readLine();
+
+            while (line != null) {
+                sb.append(line);
+                line = br.readLine();
+            }
+
+            PrintWriter out = response.getWriter();
+            out.println(sb.toString());
         }
-
-        // Special handler for font files and .png resources
-        if (resourcePath.endsWith(".png")) {
-
-            BufferedImage img = ImageIO.read(is);
-            OutputStream outputStream = response.getOutputStream();
-            String formatName = "png";
-            response.setContentType("image/png");
-            ImageIO.write(img, formatName, outputStream);
-            outputStream.close();
-            return;
-
-        }
-
-        response.setCharacterEncoding("utf-8");
-        InputStreamReader isr = new InputStreamReader(is);
-        StringBuilder sb = new StringBuilder();
-        BufferedReader br = new BufferedReader(isr);
-        String line = br.readLine();
-
-        while (line != null) {
-            sb.append(line);
-            line = br.readLine();
-        }
-
-        PrintWriter out = response.getWriter();
-        out.println(sb.toString());
     }
 
     private static boolean isSet(String requestParameter) {
diff --git a/asterix-app/src/main/java/org/apache/asterix/app/external/FeedLoadManager.java b/asterix-app/src/main/java/org/apache/asterix/app/external/FeedLoadManager.java
index 5a590b4..b6be1e7 100644
--- a/asterix-app/src/main/java/org/apache/asterix/app/external/FeedLoadManager.java
+++ b/asterix-app/src/main/java/org/apache/asterix/app/external/FeedLoadManager.java
@@ -222,7 +222,6 @@
     public int getOutflowRate(FeedConnectionId connectionId, FeedRuntimeType runtimeType) {
         int rVal;
         String key = "" + connectionId + ":" + runtimeType;
-        feedMetrics.get(key);
         Pair<Integer, Integer> value = feedMetrics.get(key);
         if (value == null) {
             rVal = UNKNOWN;
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 8f9b5b0..f667bd8 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
@@ -141,7 +141,7 @@
         long resourceID = getResourceIDfromResourcePath(resourcePath);
 
         DatasetInfo dsInfo = datasetInfos.get(did);
-        IndexInfo iInfo = dsInfo.indexes.get(resourceID);
+        IndexInfo iInfo = dsInfo == null ? null : dsInfo.indexes.get(resourceID);
 
         if (dsInfo == null || iInfo == null) {
             throw new HyracksDataException("Index with resource ID " + resourceID + " does not exist.");
diff --git a/asterix-external-data/src/main/java/org/apache/asterix/external/feed/dataflow/FeedRuntimeInputHandler.java b/asterix-external-data/src/main/java/org/apache/asterix/external/feed/dataflow/FeedRuntimeInputHandler.java
index c4f7543..3370118 100644
--- a/asterix-external-data/src/main/java/org/apache/asterix/external/feed/dataflow/FeedRuntimeInputHandler.java
+++ b/asterix-external-data/src/main/java/org/apache/asterix/external/feed/dataflow/FeedRuntimeInputHandler.java
@@ -70,7 +70,7 @@
     private final IFeedManager feedManager;
     private boolean bufferingEnabled;
     private IFrameWriter coreOperator;
-    private MonitoredBuffer mBuffer;
+    private final MonitoredBuffer mBuffer;
     private DataBucketPool pool;
     private FrameCollection frameCollection;
     private Mode mode;
@@ -186,7 +186,8 @@
                 if (fpa.spillToDiskOnCongestion()) {
                     if (frame != null) {
                         spiller.processMessage(frame);
-                    } // TODO handle the else case
+                    } // TODO handle the else casec
+
                 } else {
                     discarder.processMessage(frame);
                 }
@@ -366,19 +367,17 @@
 
     @Override
     public void close() {
-        if (mBuffer != null) {
-            boolean disableMonitoring = !this.mode.equals(Mode.STALL);
-            if (frameCollection != null) {
-                feedManager.getFeedMemoryManager().releaseMemoryComponent(frameCollection);
-            }
-            if (pool != null) {
-                feedManager.getFeedMemoryManager().releaseMemoryComponent(pool);
-            }
-            mBuffer.close(false, disableMonitoring);
-            if (LOGGER.isLoggable(Level.INFO)) {
-                LOGGER.info("Closed input side handler for " + this.runtimeId + " disabled monitoring "
-                        + disableMonitoring + " Mode for runtime " + this.mode);
-            }
+        boolean disableMonitoring = !this.mode.equals(Mode.STALL);
+        if (frameCollection != null) {
+            feedManager.getFeedMemoryManager().releaseMemoryComponent(frameCollection);
+        }
+        if (pool != null) {
+            feedManager.getFeedMemoryManager().releaseMemoryComponent(pool);
+        }
+        mBuffer.close(false, disableMonitoring);
+        if (LOGGER.isLoggable(Level.INFO)) {
+            LOGGER.info("Closed input side handler for " + this.runtimeId + " disabled monitoring "
+                    + disableMonitoring + " Mode for runtime " + this.mode);
         }
     }
 
@@ -424,9 +423,7 @@
         if (LOGGER.isLoggable(Level.INFO)) {
             LOGGER.info("Reset number of partitions to " + nPartitions + " for " + this.runtimeId);
         }
-        if (mBuffer != null) {
-            mBuffer.reset();
-        }
+        mBuffer.reset();
     }
 
     public FeedConnectionId getConnectionId() {
diff --git a/asterix-external-data/src/main/java/org/apache/asterix/external/operators/FeedMessageOperatorNodePushable.java b/asterix-external-data/src/main/java/org/apache/asterix/external/operators/FeedMessageOperatorNodePushable.java
index 36c11e9..a92544b 100644
--- a/asterix-external-data/src/main/java/org/apache/asterix/external/operators/FeedMessageOperatorNodePushable.java
+++ b/asterix-external-data/src/main/java/org/apache/asterix/external/operators/FeedMessageOperatorNodePushable.java
@@ -168,7 +168,6 @@
             }
         }
 
-        commitResponseMessage.getIntakePartition();
         SubscribableFeedRuntimeId sid = new SubscribableFeedRuntimeId(connectionId.getFeedId(), FeedRuntimeType.INTAKE,
                 partition);
         IngestionRuntime ingestionRuntime = (IngestionRuntime) feedManager.getFeedSubscriptionManager()
diff --git a/asterix-external-data/src/main/java/org/apache/asterix/external/operators/FeedMetaComputeNodePushable.java b/asterix-external-data/src/main/java/org/apache/asterix/external/operators/FeedMetaComputeNodePushable.java
index d41179f..66b520f 100644
--- a/asterix-external-data/src/main/java/org/apache/asterix/external/operators/FeedMetaComputeNodePushable.java
+++ b/asterix-external-data/src/main/java/org/apache/asterix/external/operators/FeedMetaComputeNodePushable.java
@@ -185,20 +185,18 @@
         boolean stalled = inputSideHandler.getMode().equals(Mode.STALL);
         boolean end = inputSideHandler.getMode().equals(Mode.END);
         try {
-            if (inputSideHandler != null) {
-                if (!(stalled || end)) {
-                    inputSideHandler.nextFrame(null); // signal end of data
-                    while (!inputSideHandler.isFinished()) {
-                        synchronized (coreOperator) {
-                            if (inputSideHandler.isFinished()) {
-                                break;
-                            }
-                            coreOperator.wait();
+            if (!(stalled || end)) {
+                inputSideHandler.nextFrame(null); // signal end of data
+                while (!inputSideHandler.isFinished()) {
+                    synchronized (coreOperator) {
+                        if (inputSideHandler.isFinished()) {
+                            break;
                         }
+                        coreOperator.wait();
                     }
-                } else {
-                    inputSideHandler.setFinished(true);
                 }
+            } else {
+                inputSideHandler.setFinished(true);
             }
             coreOperator.close();
             System.out.println("CLOSED " + coreOperator + " STALLED ?" + stalled + " ENDED " + end);
@@ -211,9 +209,7 @@
             } else {
                 System.out.println("NOT DEREGISTERING " + this.feedRuntime.getRuntimeId());
             }
-            if (inputSideHandler != null) {
-                inputSideHandler.close();
-            }
+            inputSideHandler.close();
             if (LOGGER.isLoggable(Level.INFO)) {
                 LOGGER.info("Ending Operator  " + this.feedRuntime.getRuntimeId());
             }
diff --git a/asterix-external-data/src/main/java/org/apache/asterix/external/provider/DataflowControllerProvider.java b/asterix-external-data/src/main/java/org/apache/asterix/external/provider/DataflowControllerProvider.java
index 6b4b6ba..d4d9a18 100644
--- a/asterix-external-data/src/main/java/org/apache/asterix/external/provider/DataflowControllerProvider.java
+++ b/asterix-external-data/src/main/java/org/apache/asterix/external/provider/DataflowControllerProvider.java
@@ -78,22 +78,27 @@
                 IDataFlowController recordDataFlowController = null;
                 IRecordReaderFactory<?> recordReaderFactory = (IRecordReaderFactory<?>) dataSourceFactory;
                 IRecordReader<?> recordReader = recordReaderFactory.createRecordReader(ctx, partition);
-                recordReader.configure(configuration);
-                IRecordDataParserFactory<?> recordParserFactory = (IRecordDataParserFactory<?>) dataParserFactory;
-                IRecordDataParser<?> dataParser = recordParserFactory.createRecordParser(ctx);
-                dataParser.configure(configuration, recordType);
-                if (indexingOp) {
-                    recordDataFlowController = new IndexingDataFlowController(dataParser, recordReader);
-                } else if (isFeed) {
-                    recordDataFlowController = new FeedRecordDataFlowController(feedLogManager, dataParser,
-                            recordReader);
-                } else {
-                    recordDataFlowController = new RecordDataFlowController(dataParser, recordReader);
+                try {
+                    recordReader.configure(configuration);
+                    IRecordDataParserFactory<?> recordParserFactory = (IRecordDataParserFactory<?>) dataParserFactory;
+                    IRecordDataParser<?> dataParser = recordParserFactory.createRecordParser(ctx);
+                    dataParser.configure(configuration, recordType);
+                    if (indexingOp) {
+                        recordDataFlowController = new IndexingDataFlowController(dataParser, recordReader);
+                    } else if (isFeed) {
+                        recordDataFlowController = new FeedRecordDataFlowController(feedLogManager, dataParser,
+                                recordReader);
+                    } else {
+                        recordDataFlowController = new RecordDataFlowController(dataParser, recordReader);
+                    }
+                    recordDataFlowController.configure(configuration, ctx);
+                    recordDataFlowController
+                            .setTupleForwarder(DataflowUtils.getTupleForwarder(configuration, feedLogManager));
+                    return recordDataFlowController;
+                } catch (Exception e) {
+                    recordReader.close();
+                    throw e;
                 }
-                recordDataFlowController.configure(configuration, ctx);
-                recordDataFlowController
-                        .setTupleForwarder(DataflowUtils.getTupleForwarder(configuration, feedLogManager));
-                return recordDataFlowController;
             case STREAM:
                 IStreamFlowController streamDataFlowController = null;
                 if (isFeed) {
diff --git a/asterix-fuzzyjoin/src/main/java/org/apache/asterix/fuzzyjoin/recordgroup/RecordGroupLengthRange.java b/asterix-fuzzyjoin/src/main/java/org/apache/asterix/fuzzyjoin/recordgroup/RecordGroupLengthRange.java
index db62783..872d1f4 100644
--- a/asterix-fuzzyjoin/src/main/java/org/apache/asterix/fuzzyjoin/recordgroup/RecordGroupLengthRange.java
+++ b/asterix-fuzzyjoin/src/main/java/org/apache/asterix/fuzzyjoin/recordgroup/RecordGroupLengthRange.java
@@ -33,8 +33,7 @@
 
     public RecordGroupLengthRange(int noGroups, SimilarityFilters fuzzyFilters, String lengthstatsPath) {
         super(noGroups, fuzzyFilters);
-        try {
-            DataInputStream in = new DataInputStream(new FileInputStream(lengthstatsPath.toString()));
+        try (DataInputStream in = new DataInputStream(new FileInputStream(lengthstatsPath))) {
             min = in.readInt();
             max = in.readInt();
             groupSize = (int) Math.ceil((max - min + 1f) / noGroups);
diff --git a/asterix-fuzzyjoin/src/main/java/org/apache/asterix/fuzzyjoin/tokenorder/TokenLoad.java b/asterix-fuzzyjoin/src/main/java/org/apache/asterix/fuzzyjoin/tokenorder/TokenLoad.java
index ceb6ba0..3578d94 100644
--- a/asterix-fuzzyjoin/src/main/java/org/apache/asterix/fuzzyjoin/tokenorder/TokenLoad.java
+++ b/asterix-fuzzyjoin/src/main/java/org/apache/asterix/fuzzyjoin/tokenorder/TokenLoad.java
@@ -41,10 +41,9 @@
     }
 
     public void loadTokenRank(int factor) {
-        try {
-            BufferedReader fis = new BufferedReader(
-            // new FileReader(path.toString())
-                    new InputStreamReader(new FileInputStream(path), "UTF-8"));
+        try (BufferedReader fis = new BufferedReader(
+                // new FileReader(path.toString())
+                new InputStreamReader(new FileInputStream(path), "UTF-8"))) {
             String token = null;
             while ((token = fis.readLine()) != null) {
                 rank.add(token);
diff --git a/asterix-installer/src/main/java/org/apache/asterix/installer/command/HelpCommand.java b/asterix-installer/src/main/java/org/apache/asterix/installer/command/HelpCommand.java
index a9c0592..e8a93be 100644
--- a/asterix-installer/src/main/java/org/apache/asterix/installer/command/HelpCommand.java
+++ b/asterix-installer/src/main/java/org/apache/asterix/installer/command/HelpCommand.java
@@ -64,6 +64,7 @@
                 break;
             case UNINSTALL:
                 helpMessage = new UninstallCommand().getUsageDescription();
+                break;
             case ALTER:
                 helpMessage = new AlterCommand().getUsageDescription();
                 break;
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 bf981aa..d7479bc 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
@@ -23,6 +23,7 @@
 import java.io.FileNotFoundException;
 import java.io.FileReader;
 import java.io.FileWriter;
+import java.io.IOException;
 import java.io.InputStream;
 import java.io.Reader;
 import java.util.HashMap;
@@ -86,17 +87,18 @@
         typeMap = new HashMap<String, RecordType>();
 
         for (int i = 0; i < inputFiles.length; ++i) {
-            try {
-                getLog().info("reading " + inputFiles[i].toString());
-                Reader read = new FileReader(inputFiles[i]);
+            getLog().info("reading " + inputFiles[i].toString());
+            try (Reader read = new FileReader(inputFiles[i])) {
                 RecordType type = RecordType.read(read);
                 // always add allocId to enable tracking of allocations
                 type.addField("alloc id", RecordType.Type.SHORT, null);
                 type.addToMap(typeMap);
             } catch (FileNotFoundException fnfe) {
-                throw new MojoExecutionException("cound not find type description file " + inputFiles[i], fnfe);
+                throw new MojoExecutionException("could not find type description file " + inputFiles[i], fnfe);
             } catch (JSONException jse) {
-                throw new MojoExecutionException("cound not parse type description file " + inputFiles[i], jse);
+                throw new MojoExecutionException("could not parse type description file " + inputFiles[i], jse);
+            } catch (IOException e) {
+                throw new MojoExecutionException("error closing type description file " + inputFiles[i], e);
             }
         }
     }
diff --git a/asterix-om/src/main/java/org/apache/asterix/om/types/runtime/RuntimeRecordTypeInfo.java b/asterix-om/src/main/java/org/apache/asterix/om/types/runtime/RuntimeRecordTypeInfo.java
index 07773d8..a34bd40 100644
--- a/asterix-om/src/main/java/org/apache/asterix/om/types/runtime/RuntimeRecordTypeInfo.java
+++ b/asterix-om/src/main/java/org/apache/asterix/om/types/runtime/RuntimeRecordTypeInfo.java
@@ -131,7 +131,7 @@
         int fIndex;
         int probeFieldHash = fieldNameHashFunction.hash(bytes, start, length);
         int i = Arrays.binarySearch(hashCodeIndexPairs, ((long) probeFieldHash) << 32);
-        i = (i < 0) ? (i = -1 * (i + 1)) : i;
+        i = (i < 0) ? -1 * (i + 1) : i;
 
         while (i < hashCodeIndexPairs.length && (int) (hashCodeIndexPairs[i] >>> 32) == probeFieldHash) {
             fIndex = (int) hashCodeIndexPairs[i];
diff --git a/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/common/SimilarityJaccardEvaluator.java b/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/common/SimilarityJaccardEvaluator.java
index cb7ba8c..e59c04f 100644
--- a/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/common/SimilarityJaccardEvaluator.java
+++ b/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/common/SimilarityJaccardEvaluator.java
@@ -199,7 +199,7 @@
         }
     }
 
-    protected int probeHashMap(AbstractAsterixListIterator probeIter, int probeListSize, int buildListSize)
+    protected int probeHashMap(AbstractAsterixListIterator probeIter, int buildListSize, int probeListSize)
             throws HyracksDataException {
         // Probe phase: Probe items from second list, and compute intersection size.
         int intersectionSize = 0;
