DRILL-8485: HashJoinPOP memory leak is caused by an oom exception when read data from InputStream (#2891)

diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/cache/VectorAccessibleSerializable.java b/exec/java-exec/src/main/java/org/apache/drill/exec/cache/VectorAccessibleSerializable.java
index d0f4c03..2b85d79 100644
--- a/exec/java-exec/src/main/java/org/apache/drill/exec/cache/VectorAccessibleSerializable.java
+++ b/exec/java-exec/src/main/java/org/apache/drill/exec/cache/VectorAccessibleSerializable.java
@@ -24,6 +24,7 @@
 import java.io.OutputStream;
 import java.util.List;
 
+import org.apache.drill.common.exceptions.UserException;
 import org.apache.drill.exec.expr.TypeHelper;
 import org.apache.drill.exec.memory.BufferAllocator;
 import org.apache.drill.exec.metrics.DrillMetrics;
@@ -124,11 +125,19 @@
     for (SerializedField metaData : fieldList) {
       final int dataLength = metaData.getBufferLength();
       final MaterializedField field = MaterializedField.create(metaData);
-      final DrillBuf buf = allocator.read(dataLength, input);
-      final ValueVector vector = TypeHelper.getNewVector(field, allocator);
-      vector.load(metaData, buf);
-      buf.release(); // Vector now owns the buffer
-      vectorList.add(vector);
+      DrillBuf buf = null;
+      try {
+        buf = allocator.read(dataLength, input);
+        final ValueVector vector = TypeHelper.getNewVector(field, allocator);
+        vector.load(metaData, buf);
+        buf.release(); // Vector now owns the buffer
+        vectorList.add(vector);
+      } catch (OutOfMemoryError oom) {
+        for (ValueVector valueVector : vectorList) {
+          valueVector.clear();
+        }
+        throw UserException.memoryError(oom).message("Allocator memory failed").build(logger);
+      }
     }
     container.addCollection(vectorList);
     container.buildSchema(svMode);