diff --git a/common/src/main/java/org/apache/drill/common/config/DrillProperties.java b/common/src/main/java/org/apache/drill/common/config/DrillProperties.java
index 7726808..0ea0fbb 100644
--- a/common/src/main/java/org/apache/drill/common/config/DrillProperties.java
+++ b/common/src/main/java/org/apache/drill/common/config/DrillProperties.java
@@ -115,7 +115,7 @@
   }
 
   @Override
-  public Object setProperty(final String key, final String value) {
+  public synchronized Object setProperty(final String key, final String value) {
     return super.setProperty(key.toLowerCase(), value);
   }
 
diff --git a/contrib/storage-kudu/src/main/java/org/apache/drill/exec/store/kudu/KuduGroupScan.java b/contrib/storage-kudu/src/main/java/org/apache/drill/exec/store/kudu/KuduGroupScan.java
index b66d684..7655f80 100644
--- a/contrib/storage-kudu/src/main/java/org/apache/drill/exec/store/kudu/KuduGroupScan.java
+++ b/contrib/storage-kudu/src/main/java/org/apache/drill/exec/store/kudu/KuduGroupScan.java
@@ -207,7 +207,7 @@
   // List<KuduSubScanSpec> tabletInfoList, List<SchemaPath> columns
   @Override
   public ScanStats getScanStats() {
-    long recordCount = 100000 * kuduWorkList.size();
+    long recordCount = 100000L * kuduWorkList.size();
     return new ScanStats(GroupScanProperty.NO_EXACT_ROW_COUNT, recordCount, 1, recordCount);
   }
 
diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/expr/ClassGenerator.java b/exec/java-exec/src/main/java/org/apache/drill/exec/expr/ClassGenerator.java
index 2c2b634..8082bfc 100644
--- a/exec/java-exec/src/main/java/org/apache/drill/exec/expr/ClassGenerator.java
+++ b/exec/java-exec/src/main/java/org/apache/drill/exec/expr/ClassGenerator.java
@@ -173,7 +173,7 @@
       innerClasses.put(innerClassName, new ClassGenerator<>(codeGenerator, mappingSet, child, eval, innerClazz, model, optionManager));
     }
     long maxExprsNumber = optionManager != null ? optionManager.getOption(ExecConstants.CODE_GEN_EXP_IN_METHOD_SIZE_VALIDATOR) : 50;
-    maxIndex = Math.round((0xFFFF / (1 + 3. / (3 * sig.size() + maxExprsNumber)) - 1000) / 3);
+    maxIndex = Math.round((0xFFFF / (1 + 3. / (3L * sig.size() + maxExprsNumber)) - 1000) / 3);
   }
 
   public ClassGenerator<T> getInnerGenerator(String name) {
diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/expr/fn/FunctionGenerationHelper.java b/exec/java-exec/src/main/java/org/apache/drill/exec/expr/fn/FunctionGenerationHelper.java
index f7c32aa..95827d8 100644
--- a/exec/java-exec/src/main/java/org/apache/drill/exec/expr/fn/FunctionGenerationHelper.java
+++ b/exec/java-exec/src/main/java/org/apache/drill/exec/expr/fn/FunctionGenerationHelper.java
@@ -95,10 +95,8 @@
   }
 
   private static LogicalExpression getFunctionExpression(String name, HoldingContainer... args) {
-    List<MajorType> argTypes = new ArrayList<MajorType>(args.length);
     List<LogicalExpression> argExpressions = new ArrayList<LogicalExpression>(args.length);
     for (HoldingContainer c : args) {
-      argTypes.add(c.getMajorType());
       argExpressions.add(new HoldingContainerExpression(c));
     }
 
diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/expr/fn/impl/StringFunctions.java b/exec/java-exec/src/main/java/org/apache/drill/exec/expr/fn/impl/StringFunctions.java
index 305cfcd..9a8446f 100644
--- a/exec/java-exec/src/main/java/org/apache/drill/exec/expr/fn/impl/StringFunctions.java
+++ b/exec/java-exec/src/main/java/org/apache/drill/exec/expr/fn/impl/StringFunctions.java
@@ -345,7 +345,7 @@
 
     @Override
     public void eval() {
-      out.value = (input.end - input.start) * 8;
+      out.value = (input.end - input.start) * 8L;
     }
   }
 
diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/physical/impl/join/HashJoinBatch.java b/exec/java-exec/src/main/java/org/apache/drill/exec/physical/impl/join/HashJoinBatch.java
index 00d5bae..a08e430 100644
--- a/exec/java-exec/src/main/java/org/apache/drill/exec/physical/impl/join/HashJoinBatch.java
+++ b/exec/java-exec/src/main/java/org/apache/drill/exec/physical/impl/join/HashJoinBatch.java
@@ -1322,10 +1322,8 @@
 
     rightExpr = new ArrayList<>(conditions.size());
     buildJoinColumns = Sets.newHashSet();
-    List<SchemaPath> rightConditionPaths = new ArrayList<>();
     for (int i = 0; i < conditions.size(); i++) {
       SchemaPath rightPath = (SchemaPath) conditions.get(i).getRight();
-      rightConditionPaths.add(rightPath);
     }
 
     for (int i = 0; i < conditions.size(); i++) {
diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/physical/impl/join/MergeJoinBatch.java b/exec/java-exec/src/main/java/org/apache/drill/exec/physical/impl/join/MergeJoinBatch.java
index f4ec939..5e03264 100644
--- a/exec/java-exec/src/main/java/org/apache/drill/exec/physical/impl/join/MergeJoinBatch.java
+++ b/exec/java-exec/src/main/java/org/apache/drill/exec/physical/impl/join/MergeJoinBatch.java
@@ -196,7 +196,7 @@
           break;
         case NO_MORE_DATA:
           status.resetOutputPos();
-          logger.debug("NO MORE DATA; returning {}  NONE");
+          logger.debug("NO MORE DATA; returning NONE");
           return IterOutcome.NONE;
         case FAILURE:
           status.left.clearInflightBatches();
diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/index/generators/AbstractIndexPlanGenerator.java b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/index/generators/AbstractIndexPlanGenerator.java
index 88e569a..c4b6c72 100644
--- a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/index/generators/AbstractIndexPlanGenerator.java
+++ b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/index/generators/AbstractIndexPlanGenerator.java
@@ -261,10 +261,6 @@
       DrillSortRel topSort = (DrillSortRel)top;
       input = topSort.getInput();
     }
-    else if ( top instanceof DrillSortRel) {
-      DrillSortRel topSort = (DrillSortRel) top;
-      input = topSort.getInput();
-    }
     else {
       return;
     }
diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/schema/ListSchema.java b/exec/java-exec/src/main/java/org/apache/drill/exec/schema/ListSchema.java
index bd32804..a767641 100644
--- a/exec/java-exec/src/main/java/org/apache/drill/exec/schema/ListSchema.java
+++ b/exec/java-exec/src/main/java/org/apache/drill/exec/schema/ListSchema.java
@@ -20,6 +20,7 @@
 import static org.apache.drill.shaded.guava.com.google.common.base.Preconditions.checkArgument;
 
 import java.util.List;
+import java.util.Objects;
 
 import org.apache.drill.common.types.TypeProtos.DataMode;
 
@@ -37,7 +38,7 @@
     @Override
     public void addField(Field field) {
         if (field.getFieldType().getMode() == DataMode.REPEATED || fields.isEmpty() || !isSingleTyped() ||
-                !Iterables.getOnlyElement(fields).equals(field.getFieldType())) {
+                !Objects.equals(Iterables.getOnlyElement(fields).getFieldType(), field.getFieldType())) {
             fields.add(field);
         }
     }
diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/server/Drillbit.java b/exec/java-exec/src/main/java/org/apache/drill/exec/server/Drillbit.java
index 8228550..ad68a60 100644
--- a/exec/java-exec/src/main/java/org/apache/drill/exec/server/Drillbit.java
+++ b/exec/java-exec/src/main/java/org/apache/drill/exec/server/Drillbit.java
@@ -306,7 +306,7 @@
       coord.unregister(registrationHandle);
     }
     try {
-      Thread.sleep(context.getConfig().getInt(ExecConstants.ZK_REFRESH) * 2);
+      Thread.sleep(context.getConfig().getInt(ExecConstants.ZK_REFRESH) * 2L);
     } catch (final InterruptedException e) {
       logger.warn("Interrupted while sleeping during coordination deregistration.");
 
diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/server/rest/profile/OperatorWrapper.java b/exec/java-exec/src/main/java/org/apache/drill/exec/server/rest/profile/OperatorWrapper.java
index 25fad85..0e93d43 100644
--- a/exec/java-exec/src/main/java/org/apache/drill/exec/server/rest/profile/OperatorWrapper.java
+++ b/exec/java-exec/src/main/java/org/apache/drill/exec/server/rest/profile/OperatorWrapper.java
@@ -24,8 +24,6 @@
 import java.util.List;
 import java.util.Map;
 import java.util.Objects;
-import java.util.Set;
-import java.util.TreeSet;
 import java.util.concurrent.TimeUnit;
 
 import org.apache.commons.lang3.tuple.ImmutablePair;
@@ -372,8 +370,6 @@
           .build());
 
       final Number[] values = new Number[metricNames.length];
-      //Track new/Unknown Metrics
-      final Set<Integer> unknownMetrics = new TreeSet<>();
       for (final MetricValue metric : op.getMetricList()) {
         if (metric.getMetricId() < metricNames.length) {
           if (metric.hasLongValue()) {
@@ -381,9 +377,6 @@
           } else if (metric.hasDoubleValue()) {
             values[metric.getMetricId()] = metric.getDoubleValue();
           }
-        } else {
-          //Tracking unknown metric IDs
-          unknownMetrics.add(metric.getMetricId());
         }
       }
       for (final Number value : values) {
diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/store/parquet/columnreaders/NullableColumnReader.java b/exec/java-exec/src/main/java/org/apache/drill/exec/store/parquet/columnreaders/NullableColumnReader.java
index 67531f2..c16b82a 100644
--- a/exec/java-exec/src/main/java/org/apache/drill/exec/store/parquet/columnreaders/NullableColumnReader.java
+++ b/exec/java-exec/src/main/java/org/apache/drill/exec/store/parquet/columnreaders/NullableColumnReader.java
@@ -163,7 +163,7 @@
         this.recordsReadInThisIteration += runLength;
 
         this.readStartInBytes = pageReader.readPosInBytes;
-        this.readLengthInBits = runLength * dataTypeLengthInBits;
+        this.readLengthInBits = (long) runLength * dataTypeLengthInBits;
         this.readLength = (int) Math.ceil(readLengthInBits / 8.0);
 
         readField(runLength);
@@ -278,7 +278,7 @@
         this.recordsReadInThisIteration += numNonNullValues;
 
         this.readStartInBytes = pageReader.readPosInBytes;
-        this.readLengthInBits = numNonNullValues * dataTypeLengthInBits;
+        this.readLengthInBits = (long) numNonNullValues * dataTypeLengthInBits;
         this.readLength = (int) Math.ceil(readLengthInBits / 8.0);
 
         readField(numNonNullValues);
diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/util/filereader/BufferedDirectBufInputStream.java b/exec/java-exec/src/main/java/org/apache/drill/exec/util/filereader/BufferedDirectBufInputStream.java
index c32ef55..a0effe8 100644
--- a/exec/java-exec/src/main/java/org/apache/drill/exec/util/filereader/BufferedDirectBufInputStream.java
+++ b/exec/java-exec/src/main/java/org/apache/drill/exec/util/filereader/BufferedDirectBufInputStream.java
@@ -395,7 +395,7 @@
     return curPosInBuffer + startOffset;
   }
 
-  public void close() throws IOException {
+  @Override public synchronized void close() throws IOException {
     DrillBuf buffer;
     InputStream inp;
     synchronized (this) {
