You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@asterixdb.apache.org by am...@apache.org on 2016/03/26 21:27:35 UTC

[04/13] incubator-asterixdb git commit: Improve Error Handling in Local Directory Feeds

http://git-wip-us.apache.org/repos/asf/incubator-asterixdb/blob/121e1d9a/asterix-external-data/src/test/java/org/apache/asterix/external/classad/Value.java
----------------------------------------------------------------------
diff --git a/asterix-external-data/src/test/java/org/apache/asterix/external/classad/Value.java b/asterix-external-data/src/test/java/org/apache/asterix/external/classad/Value.java
index f0466b2..427e2a2 100644
--- a/asterix-external-data/src/test/java/org/apache/asterix/external/classad/Value.java
+++ b/asterix-external-data/src/test/java/org/apache/asterix/external/classad/Value.java
@@ -18,6 +18,7 @@
  */
 package org.apache.asterix.external.classad;
 
+import org.apache.asterix.external.classad.object.pool.ClassAdObjectPool;
 import org.apache.asterix.om.base.AMutableDouble;
 import org.apache.asterix.om.base.AMutableInt32;
 import org.apache.asterix.om.base.AMutableInt64;
@@ -30,9 +31,9 @@ public class Value {
     private long longVal;
     private double doubleVal;
     private boolean boolVal;
-    private ClassAdTime timeVal = new ClassAdTime();
-    private ClassAd classadVal = new ClassAd();
-    private ExprList listVal = new ExprList();
+    private final ClassAdTime timeVal;
+    private final ClassAd classadVal;
+    private final ExprList listVal;
     private String stringVal;
 
     /// Value types
@@ -164,7 +165,7 @@ public class Value {
         }
     }
 
-    public boolean isClassAdValue(ClassAd ad) {
+    public boolean isClassAdValue(ClassAd ad) throws HyracksDataException {
         if (valueType == ValueType.CLASSAD_VALUE) {
             ad.setValue(classadVal);
             return true;
@@ -265,49 +266,11 @@ public class Value {
             1024.0 * 1024.0 * 1024.0 * 1024.0 // Terra
     };
 
-    public Value() {
+    public Value(ClassAdObjectPool objectPool) {
         valueType = ValueType.UNDEFINED_VALUE;
-    }
-
-    public Value(Value value) throws HyracksDataException {
-        valueType = value.valueType;
-        switch (value.valueType) {
-            case ABSOLUTE_TIME_VALUE:
-                timeVal = new ClassAdTime(value.timeVal);
-                break;
-            case BOOLEAN_VALUE:
-                this.boolVal = value.boolVal;
-                break;
-            case CLASSAD_VALUE:
-                this.classadVal = new ClassAd(value.classadVal);
-                break;
-            case ERROR_VALUE:
-                break;
-            case INTEGER_VALUE:
-                this.longVal = value.longVal;
-                break;
-            case LIST_VALUE:
-                this.listVal = new ExprList(value.listVal);
-                break;
-            case NULL_VALUE:
-                break;
-            case REAL_VALUE:
-                this.doubleVal = value.doubleVal;
-                break;
-            case RELATIVE_TIME_VALUE:
-                this.timeVal = new ClassAdTime(value.timeVal);
-                break;
-            case SLIST_VALUE:
-                this.listVal = new ExprList(value.listVal);
-                break;
-            case STRING_VALUE:
-                this.stringVal = value.stringVal;
-                break;
-            case UNDEFINED_VALUE:
-                break;
-            default:
-                break;
-        }
+        this.timeVal = new ClassAdTime();
+        this.listVal = new ExprList(objectPool);
+        this.classadVal = new ClassAd(objectPool);
     }
 
     public void setValue(Value value) throws HyracksDataException {
@@ -351,14 +314,15 @@ public class Value {
         }
     }
 
-    public void assign(Value value) throws HyracksDataException {
-        if (this != value) {
-            setValue(value);
-        }
+    private void clear() {
+        valueType = ValueType.UNDEFINED_VALUE;
     }
 
-    public void clear() {
+    public void reset() {
         valueType = ValueType.UNDEFINED_VALUE;
+        listVal.reset();
+        timeVal.reset();
+        classadVal.reset();
     }
 
     public void setRealValue(double r) {
@@ -409,7 +373,7 @@ public class Value {
         listVal.setValue(expList);
     }
 
-    public void setClassAdValue(ClassAd ad) {
+    public void setClassAdValue(ClassAd ad) throws HyracksDataException {
         clear();
         valueType = ValueType.CLASSAD_VALUE;
         classadVal.setValue(ad);
@@ -483,7 +447,7 @@ public class Value {
 
     @Override
     public String toString() {
-        ClassAdUnParser unparser = new PrettyPrint();
+        ClassAdUnParser unparser = new PrettyPrint(new ClassAdObjectPool());
         AMutableCharArrayString unparsed_text = new AMutableCharArrayString();
         switch (valueType) {
             case ABSOLUTE_TIME_VALUE:
@@ -521,14 +485,15 @@ public class Value {
         return null;
     }
 
-    public static boolean convertValueToRealValue(Value value, Value realValue) throws HyracksDataException {
+    public static boolean convertValueToRealValue(Value value, Value realValue, ClassAdObjectPool objectPool)
+            throws HyracksDataException {
         boolean could_convert;
-        AMutableCharArrayString buf = new AMutableCharArrayString();
+        AMutableCharArrayString buf = objectPool.strPool.get();
         int endIndex;
         char end;
-        AMutableInt64 ivalue = new AMutableInt64(0);
-        ClassAdTime atvalue = new ClassAdTime();
-        MutableBoolean bvalue = new MutableBoolean();
+        AMutableInt64 ivalue = objectPool.int64Pool.get();
+        ClassAdTime atvalue = objectPool.classAdTimePool.get();
+        MutableBoolean bvalue = objectPool.boolPool.get();
         double rvalue;
         NumberFactor nf = NumberFactor.NO_FACTOR;
 
@@ -604,7 +569,7 @@ public class Value {
                 break;
 
             case REAL_VALUE:
-                realValue.copyFrom(value);
+                realValue.setValue(value);
                 could_convert = true;
                 break;
 
@@ -627,14 +592,15 @@ public class Value {
         return could_convert;
     }
 
-    public static boolean convertValueToIntegerValue(Value value, Value integerValue) throws HyracksDataException {
+    public static boolean convertValueToIntegerValue(Value value, Value integerValue, ClassAdObjectPool objectPool)
+            throws HyracksDataException {
         boolean could_convert;
-        AMutableCharArrayString buf = new AMutableCharArrayString();
+        AMutableCharArrayString buf = objectPool.strPool.get();
         char end;
-        AMutableInt64 ivalue = new AMutableInt64(0);
-        AMutableDouble rtvalue = new AMutableDouble(0);
-        ClassAdTime atvalue = new ClassAdTime();
-        MutableBoolean bvalue = new MutableBoolean();
+        AMutableInt64 ivalue = objectPool.int64Pool.get();
+        AMutableDouble rtvalue = objectPool.doublePool.get();
+        ClassAdTime atvalue = objectPool.classAdTimePool.get();
+        MutableBoolean bvalue = objectPool.boolPool.get();
         NumberFactor nf;
 
         switch (value.getType()) {
@@ -700,7 +666,7 @@ public class Value {
                 break;
 
             case INTEGER_VALUE:
-                integerValue.copyFrom(value);
+                integerValue.setValue(value);
                 could_convert = true;
                 break;
 
@@ -729,51 +695,12 @@ public class Value {
         return could_convert;
     }
 
-    public void copyFrom(Value val) throws HyracksDataException {
-        clear();
-        valueType = val.valueType;
-        switch (val.valueType) {
-            case STRING_VALUE:
-                stringVal = val.stringVal;
-                return;
-
-            case BOOLEAN_VALUE:
-                boolVal = val.boolVal;
-                return;
-
-            case INTEGER_VALUE:
-                longVal = val.longVal;
-                return;
-
-            case REAL_VALUE:
-
-                doubleVal = val.doubleVal;
-                return;
-            case UNDEFINED_VALUE:
-            case ERROR_VALUE:
-                return;
-            case LIST_VALUE:
-            case SLIST_VALUE:
-                listVal.copyFrom(val.listVal);
-                return;
-            case CLASSAD_VALUE:
-                classadVal.copyFrom(val.classadVal);
-                return;
-
-            case RELATIVE_TIME_VALUE:
-            case ABSOLUTE_TIME_VALUE:
-                timeVal.setValue(val.timeVal);
-                return;
-            default:
-                setUndefinedValue();
-        }
-    }
-
-    public static boolean convertValueToStringValue(Value value, Value stringValue) throws HyracksDataException {
+    public static boolean convertValueToStringValue(Value value, Value stringValue, ClassAdObjectPool objectPool)
+            throws HyracksDataException {
         boolean could_convert = false;
-        ClassAdTime atvalue = new ClassAdTime();
-        AMutableCharArrayString string_representation = new AMutableCharArrayString();
-        ClassAdUnParser unparser = new PrettyPrint();
+        ClassAdTime atvalue = objectPool.classAdTimePool.get();
+        AMutableCharArrayString string_representation = objectPool.strPool.get();
+        ClassAdUnParser unparser = objectPool.prettyPrintPool.get();
 
         switch (value.getType()) {
             case UNDEFINED_VALUE:
@@ -787,7 +714,7 @@ public class Value {
                 break;
 
             case STRING_VALUE:
-                stringValue.copyFrom(value);
+                stringValue.setValue(value);
                 could_convert = true;
                 break;
 

http://git-wip-us.apache.org/repos/asf/incubator-asterixdb/blob/121e1d9a/asterix-external-data/src/test/java/org/apache/asterix/external/classad/object/pool/AMutableCharArrayStringPool.java
----------------------------------------------------------------------
diff --git a/asterix-external-data/src/test/java/org/apache/asterix/external/classad/object/pool/AMutableCharArrayStringPool.java b/asterix-external-data/src/test/java/org/apache/asterix/external/classad/object/pool/AMutableCharArrayStringPool.java
new file mode 100644
index 0000000..b434522
--- /dev/null
+++ b/asterix-external-data/src/test/java/org/apache/asterix/external/classad/object/pool/AMutableCharArrayStringPool.java
@@ -0,0 +1,35 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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 at
+ *
+ *   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.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.asterix.external.classad.object.pool;
+
+import org.apache.asterix.external.classad.AMutableCharArrayString;
+
+public class AMutableCharArrayStringPool extends Pool<AMutableCharArrayString> {
+
+    @Override
+    public AMutableCharArrayString newInstance() {
+        return new AMutableCharArrayString();
+    }
+
+    @Override
+    protected void reset(AMutableCharArrayString str) {
+        str.reset();
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-asterixdb/blob/121e1d9a/asterix-external-data/src/test/java/org/apache/asterix/external/classad/object/pool/AttributeReferencePool.java
----------------------------------------------------------------------
diff --git a/asterix-external-data/src/test/java/org/apache/asterix/external/classad/object/pool/AttributeReferencePool.java b/asterix-external-data/src/test/java/org/apache/asterix/external/classad/object/pool/AttributeReferencePool.java
index d7bcfcc..9eb2c0c 100644
--- a/asterix-external-data/src/test/java/org/apache/asterix/external/classad/object/pool/AttributeReferencePool.java
+++ b/asterix-external-data/src/test/java/org/apache/asterix/external/classad/object/pool/AttributeReferencePool.java
@@ -22,9 +22,16 @@ import org.apache.asterix.external.classad.AttributeReference;
 
 public class AttributeReferencePool extends Pool<AttributeReference> {
 
+    private final ClassAdObjectPool objectPool;
+
+    public AttributeReferencePool(ClassAdObjectPool objectPool) {
+        this.objectPool = objectPool;
+
+    }
+
     @Override
     public AttributeReference newInstance() {
-        return new AttributeReference();
+        return new AttributeReference(objectPool);
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/incubator-asterixdb/blob/121e1d9a/asterix-external-data/src/test/java/org/apache/asterix/external/classad/object/pool/CaseInsensitiveStringPool.java
----------------------------------------------------------------------
diff --git a/asterix-external-data/src/test/java/org/apache/asterix/external/classad/object/pool/CaseInsensitiveStringPool.java b/asterix-external-data/src/test/java/org/apache/asterix/external/classad/object/pool/CaseInsensitiveStringPool.java
index 7e88961..f8a70f1 100644
--- a/asterix-external-data/src/test/java/org/apache/asterix/external/classad/object/pool/CaseInsensitiveStringPool.java
+++ b/asterix-external-data/src/test/java/org/apache/asterix/external/classad/object/pool/CaseInsensitiveStringPool.java
@@ -18,32 +18,10 @@
  */
 package org.apache.asterix.external.classad.object.pool;
 
-import java.util.Stack;
-
 import org.apache.asterix.external.classad.CaseInsensitiveString;
 
 public class CaseInsensitiveStringPool extends Pool<CaseInsensitiveString> {
 
-    protected Stack<CaseInsensitiveString> stock = new Stack<CaseInsensitiveString>();
-
-    @Override
-    public CaseInsensitiveString get() {
-        if (!stock.isEmpty()) {
-            return stock.pop();
-        } else {
-            return newInstance();
-
-        }
-    }
-
-    @Override
-    public void reset() {
-    }
-
-    public void put(CaseInsensitiveString aString) {
-        stock.push(aString);
-    }
-
     @Override
     public CaseInsensitiveString newInstance() {
         return new CaseInsensitiveString();
@@ -51,5 +29,6 @@ public class CaseInsensitiveStringPool extends Pool<CaseInsensitiveString> {
 
     @Override
     protected void reset(CaseInsensitiveString obj) {
+        obj.set(null);
     }
 }

http://git-wip-us.apache.org/repos/asf/incubator-asterixdb/blob/121e1d9a/asterix-external-data/src/test/java/org/apache/asterix/external/classad/object/pool/ClassAdObjectPool.java
----------------------------------------------------------------------
diff --git a/asterix-external-data/src/test/java/org/apache/asterix/external/classad/object/pool/ClassAdObjectPool.java b/asterix-external-data/src/test/java/org/apache/asterix/external/classad/object/pool/ClassAdObjectPool.java
new file mode 100644
index 0000000..c6e265f
--- /dev/null
+++ b/asterix-external-data/src/test/java/org/apache/asterix/external/classad/object/pool/ClassAdObjectPool.java
@@ -0,0 +1,103 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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 at
+ *
+ *   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.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.asterix.external.classad.object.pool;
+
+import org.apache.asterix.external.classad.CaseInsensitiveString;
+import org.apache.asterix.external.classad.ExprTree;
+
+public class ClassAdObjectPool {
+    public final ExprHolderPool mutableExprPool;
+    public final TokenValuePool tokenValuePool;
+    public final ClassAdPool classAdPool;
+    public final ExprListPool exprListPool;
+    public final ValuePool valuePool;
+    public final LiteralPool literalPool;
+    public final BitSetPool bitSetPool;
+    public final OperationPool operationPool;
+    public final AttributeReferencePool attrRefPool;
+    public final ClassAdParserPool classAdParserPool;
+    public final AMutableCharArrayStringPool strPool;
+    public final FunctionCallPool funcPool;
+    public final MutableBooleanPool boolPool;
+    public final CaseInsensitiveStringPool caseInsensitiveStringPool;
+    public final StringArrayListPool stringArrayListPool;
+    public final Int32Pool int32Pool;
+    public final Int64Pool int64Pool;
+    public final ClassAdTimePool classAdTimePool;
+    public final DoublePool doublePool;
+    public final EvalStatePool evalStatePool;
+    public final HashMapPool<CaseInsensitiveString, ExprTree> strToExprPool;
+    public final PrettyPrintPool prettyPrintPool;
+    public final TreeSetPool<String> strSetPool;
+    public final MutableNumberFactorPool numFactorPool;
+
+    public ClassAdObjectPool() {
+        int32Pool = new Int32Pool();
+        int64Pool = new Int64Pool();
+        mutableExprPool = new ExprHolderPool(this);
+        tokenValuePool = new TokenValuePool();
+        classAdPool = new ClassAdPool(this);
+        exprListPool = new ExprListPool(this);
+        valuePool = new ValuePool(this);
+        literalPool = new LiteralPool(this);
+        bitSetPool = new BitSetPool();
+        operationPool = new OperationPool(this);
+        attrRefPool = new AttributeReferencePool(this);
+        strPool = new AMutableCharArrayStringPool();
+        funcPool = new FunctionCallPool(this);
+        boolPool = new MutableBooleanPool();
+        caseInsensitiveStringPool = new CaseInsensitiveStringPool();
+        stringArrayListPool = new StringArrayListPool();
+        classAdParserPool = new ClassAdParserPool(this);
+        classAdTimePool = new ClassAdTimePool();
+        doublePool = new DoublePool();
+        evalStatePool = new EvalStatePool(this);
+        strToExprPool = new HashMapPool<CaseInsensitiveString, ExprTree>();
+        prettyPrintPool = new PrettyPrintPool(this);
+        strSetPool = new TreeSetPool<String>();
+        numFactorPool = new MutableNumberFactorPool();
+    }
+
+    public void reset() {
+        mutableExprPool.reset();
+        tokenValuePool.reset();
+        classAdPool.reset();
+        exprListPool.reset();
+        valuePool.reset();
+        literalPool.reset();
+        bitSetPool.reset();
+        operationPool.reset();
+        attrRefPool.reset();
+        strPool.reset();
+        classAdParserPool.reset();
+        funcPool.reset();
+        boolPool.reset();
+        caseInsensitiveStringPool.reset();
+        stringArrayListPool.reset();
+        int32Pool.reset();
+        int64Pool.reset();
+        classAdTimePool.reset();
+        doublePool.reset();
+        evalStatePool.reset();
+        strToExprPool.reset();
+        prettyPrintPool.reset();
+        strSetPool.reset();
+        numFactorPool.reset();
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-asterixdb/blob/121e1d9a/asterix-external-data/src/test/java/org/apache/asterix/external/classad/object/pool/ClassAdParserPool.java
----------------------------------------------------------------------
diff --git a/asterix-external-data/src/test/java/org/apache/asterix/external/classad/object/pool/ClassAdParserPool.java b/asterix-external-data/src/test/java/org/apache/asterix/external/classad/object/pool/ClassAdParserPool.java
new file mode 100644
index 0000000..4f85e7c
--- /dev/null
+++ b/asterix-external-data/src/test/java/org/apache/asterix/external/classad/object/pool/ClassAdParserPool.java
@@ -0,0 +1,39 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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 at
+ *
+ *   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.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.asterix.external.classad.object.pool;
+
+import org.apache.asterix.external.library.ClassAdParser;
+
+public class ClassAdParserPool extends Pool<ClassAdParser> {
+    private final ClassAdObjectPool objectPool;
+
+    public ClassAdParserPool(ClassAdObjectPool objectPool) {
+        this.objectPool = objectPool;
+    }
+
+    @Override
+    public ClassAdParser newInstance() {
+        return new ClassAdParser(objectPool);
+    }
+
+    @Override
+    protected void reset(ClassAdParser obj) {
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-asterixdb/blob/121e1d9a/asterix-external-data/src/test/java/org/apache/asterix/external/classad/object/pool/ClassAdPool.java
----------------------------------------------------------------------
diff --git a/asterix-external-data/src/test/java/org/apache/asterix/external/classad/object/pool/ClassAdPool.java b/asterix-external-data/src/test/java/org/apache/asterix/external/classad/object/pool/ClassAdPool.java
index 40b8eb3..039e414 100644
--- a/asterix-external-data/src/test/java/org/apache/asterix/external/classad/object/pool/ClassAdPool.java
+++ b/asterix-external-data/src/test/java/org/apache/asterix/external/classad/object/pool/ClassAdPool.java
@@ -22,9 +22,15 @@ import org.apache.asterix.external.classad.ClassAd;
 
 public class ClassAdPool extends Pool<ClassAd> {
 
+    private final ClassAdObjectPool objectPool;
+
+    public ClassAdPool(ClassAdObjectPool objectPool) {
+        this.objectPool = objectPool;
+    }
+
     @Override
     public ClassAd newInstance() {
-        return new ClassAd(false, false);
+        return new ClassAd(objectPool);
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/incubator-asterixdb/blob/121e1d9a/asterix-external-data/src/test/java/org/apache/asterix/external/classad/object/pool/ClassAdTimePool.java
----------------------------------------------------------------------
diff --git a/asterix-external-data/src/test/java/org/apache/asterix/external/classad/object/pool/ClassAdTimePool.java b/asterix-external-data/src/test/java/org/apache/asterix/external/classad/object/pool/ClassAdTimePool.java
new file mode 100644
index 0000000..06a2c2f
--- /dev/null
+++ b/asterix-external-data/src/test/java/org/apache/asterix/external/classad/object/pool/ClassAdTimePool.java
@@ -0,0 +1,35 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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 at
+ *
+ *   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.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.asterix.external.classad.object.pool;
+
+import org.apache.asterix.external.classad.ClassAdTime;
+
+public class ClassAdTimePool extends Pool<ClassAdTime> {
+
+    @Override
+    public ClassAdTime newInstance() {
+        return new ClassAdTime();
+    }
+
+    @Override
+    protected void reset(ClassAdTime obj) {
+        obj.setCurrentAbsolute();
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-asterixdb/blob/121e1d9a/asterix-external-data/src/test/java/org/apache/asterix/external/classad/object/pool/DoublePool.java
----------------------------------------------------------------------
diff --git a/asterix-external-data/src/test/java/org/apache/asterix/external/classad/object/pool/DoublePool.java b/asterix-external-data/src/test/java/org/apache/asterix/external/classad/object/pool/DoublePool.java
new file mode 100644
index 0000000..52c1d26
--- /dev/null
+++ b/asterix-external-data/src/test/java/org/apache/asterix/external/classad/object/pool/DoublePool.java
@@ -0,0 +1,34 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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 at
+ *
+ *   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.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.asterix.external.classad.object.pool;
+
+import org.apache.asterix.om.base.AMutableDouble;
+
+public class DoublePool extends Pool<AMutableDouble> {
+
+    @Override
+    public AMutableDouble newInstance() {
+        return new AMutableDouble(0);
+    }
+
+    @Override
+    protected void reset(AMutableDouble obj) {
+        obj.setValue(0);
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-asterixdb/blob/121e1d9a/asterix-external-data/src/test/java/org/apache/asterix/external/classad/object/pool/EvalStatePool.java
----------------------------------------------------------------------
diff --git a/asterix-external-data/src/test/java/org/apache/asterix/external/classad/object/pool/EvalStatePool.java b/asterix-external-data/src/test/java/org/apache/asterix/external/classad/object/pool/EvalStatePool.java
new file mode 100644
index 0000000..a047cc9
--- /dev/null
+++ b/asterix-external-data/src/test/java/org/apache/asterix/external/classad/object/pool/EvalStatePool.java
@@ -0,0 +1,41 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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 at
+ *
+ *   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.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.asterix.external.classad.object.pool;
+
+import org.apache.asterix.external.classad.EvalState;
+
+public class EvalStatePool extends Pool<EvalState> {
+
+    public final ClassAdObjectPool objectPool;
+
+    public EvalStatePool(ClassAdObjectPool objectPool) {
+        this.objectPool = objectPool;
+    }
+
+    @Override
+    public EvalState newInstance() {
+        return new EvalState(objectPool);
+    }
+
+    @Override
+    protected void reset(EvalState obj) {
+        obj.reset();
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-asterixdb/blob/121e1d9a/asterix-external-data/src/test/java/org/apache/asterix/external/classad/object/pool/ExprHolderPool.java
----------------------------------------------------------------------
diff --git a/asterix-external-data/src/test/java/org/apache/asterix/external/classad/object/pool/ExprHolderPool.java b/asterix-external-data/src/test/java/org/apache/asterix/external/classad/object/pool/ExprHolderPool.java
index b34e863..156f012 100644
--- a/asterix-external-data/src/test/java/org/apache/asterix/external/classad/object/pool/ExprHolderPool.java
+++ b/asterix-external-data/src/test/java/org/apache/asterix/external/classad/object/pool/ExprHolderPool.java
@@ -21,9 +21,16 @@ package org.apache.asterix.external.classad.object.pool;
 import org.apache.asterix.external.classad.ExprTreeHolder;
 
 public class ExprHolderPool extends Pool<ExprTreeHolder> {
+
+    private final ClassAdObjectPool objectPool;
+
+    public ExprHolderPool(ClassAdObjectPool objectPool) {
+        this.objectPool = objectPool;
+    }
+
     @Override
     public ExprTreeHolder newInstance() {
-        return new ExprTreeHolder();
+        return new ExprTreeHolder(objectPool);
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/incubator-asterixdb/blob/121e1d9a/asterix-external-data/src/test/java/org/apache/asterix/external/classad/object/pool/ExprListPool.java
----------------------------------------------------------------------
diff --git a/asterix-external-data/src/test/java/org/apache/asterix/external/classad/object/pool/ExprListPool.java b/asterix-external-data/src/test/java/org/apache/asterix/external/classad/object/pool/ExprListPool.java
index 1f2958a..66f5329 100644
--- a/asterix-external-data/src/test/java/org/apache/asterix/external/classad/object/pool/ExprListPool.java
+++ b/asterix-external-data/src/test/java/org/apache/asterix/external/classad/object/pool/ExprListPool.java
@@ -22,9 +22,15 @@ import org.apache.asterix.external.classad.ExprList;
 
 public class ExprListPool extends Pool<ExprList> {
 
+    private final ClassAdObjectPool objectPool;
+
+    public ExprListPool(ClassAdObjectPool objectPool) {
+        this.objectPool = objectPool;
+    }
+
     @Override
     public ExprList newInstance() {
-        return new ExprList();
+        return new ExprList(objectPool);
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/incubator-asterixdb/blob/121e1d9a/asterix-external-data/src/test/java/org/apache/asterix/external/classad/object/pool/FunctionCallPool.java
----------------------------------------------------------------------
diff --git a/asterix-external-data/src/test/java/org/apache/asterix/external/classad/object/pool/FunctionCallPool.java b/asterix-external-data/src/test/java/org/apache/asterix/external/classad/object/pool/FunctionCallPool.java
new file mode 100644
index 0000000..9281ed7
--- /dev/null
+++ b/asterix-external-data/src/test/java/org/apache/asterix/external/classad/object/pool/FunctionCallPool.java
@@ -0,0 +1,41 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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 at
+ *
+ *   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.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.asterix.external.classad.object.pool;
+
+import org.apache.asterix.external.classad.FunctionCall;
+
+public class FunctionCallPool extends Pool<FunctionCall> {
+
+    private final ClassAdObjectPool objectPool;
+
+    public FunctionCallPool(ClassAdObjectPool objectPool) {
+        this.objectPool = objectPool;
+    }
+
+    @Override
+    public FunctionCall newInstance() {
+        return new FunctionCall(objectPool);
+    }
+
+    @Override
+    protected void reset(FunctionCall obj) {
+        obj.reset();
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-asterixdb/blob/121e1d9a/asterix-external-data/src/test/java/org/apache/asterix/external/classad/object/pool/HashMapPool.java
----------------------------------------------------------------------
diff --git a/asterix-external-data/src/test/java/org/apache/asterix/external/classad/object/pool/HashMapPool.java b/asterix-external-data/src/test/java/org/apache/asterix/external/classad/object/pool/HashMapPool.java
new file mode 100644
index 0000000..b0365f3
--- /dev/null
+++ b/asterix-external-data/src/test/java/org/apache/asterix/external/classad/object/pool/HashMapPool.java
@@ -0,0 +1,34 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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 at
+ *
+ *   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.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.asterix.external.classad.object.pool;
+
+import java.util.HashMap;
+
+public class HashMapPool<K, V> extends Pool<HashMap<K, V>> {
+
+    @Override
+    public HashMap<K, V> newInstance() {
+        return new HashMap<K, V>();
+    }
+
+    @Override
+    protected void reset(HashMap<K, V> obj) {
+        obj.clear();
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-asterixdb/blob/121e1d9a/asterix-external-data/src/test/java/org/apache/asterix/external/classad/object/pool/Int32Pool.java
----------------------------------------------------------------------
diff --git a/asterix-external-data/src/test/java/org/apache/asterix/external/classad/object/pool/Int32Pool.java b/asterix-external-data/src/test/java/org/apache/asterix/external/classad/object/pool/Int32Pool.java
new file mode 100644
index 0000000..504f147
--- /dev/null
+++ b/asterix-external-data/src/test/java/org/apache/asterix/external/classad/object/pool/Int32Pool.java
@@ -0,0 +1,35 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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 at
+ *
+ *   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.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.asterix.external.classad.object.pool;
+
+import org.apache.asterix.om.base.AMutableInt32;
+
+public class Int32Pool extends Pool<AMutableInt32> {
+
+    @Override
+    public AMutableInt32 newInstance() {
+        return new AMutableInt32(0);
+    }
+
+    @Override
+    protected void reset(AMutableInt32 obj) {
+        obj.setValue(0);
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-asterixdb/blob/121e1d9a/asterix-external-data/src/test/java/org/apache/asterix/external/classad/object/pool/Int64Pool.java
----------------------------------------------------------------------
diff --git a/asterix-external-data/src/test/java/org/apache/asterix/external/classad/object/pool/Int64Pool.java b/asterix-external-data/src/test/java/org/apache/asterix/external/classad/object/pool/Int64Pool.java
new file mode 100644
index 0000000..f86b57a
--- /dev/null
+++ b/asterix-external-data/src/test/java/org/apache/asterix/external/classad/object/pool/Int64Pool.java
@@ -0,0 +1,34 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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 at
+ *
+ *   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.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.asterix.external.classad.object.pool;
+
+import org.apache.asterix.om.base.AMutableInt64;
+
+public class Int64Pool extends Pool<AMutableInt64> {
+
+    @Override
+    public AMutableInt64 newInstance() {
+        return new AMutableInt64(0);
+    }
+
+    @Override
+    protected void reset(AMutableInt64 obj) {
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-asterixdb/blob/121e1d9a/asterix-external-data/src/test/java/org/apache/asterix/external/classad/object/pool/LiteralPool.java
----------------------------------------------------------------------
diff --git a/asterix-external-data/src/test/java/org/apache/asterix/external/classad/object/pool/LiteralPool.java b/asterix-external-data/src/test/java/org/apache/asterix/external/classad/object/pool/LiteralPool.java
index 23d8dae..2a85a4a 100644
--- a/asterix-external-data/src/test/java/org/apache/asterix/external/classad/object/pool/LiteralPool.java
+++ b/asterix-external-data/src/test/java/org/apache/asterix/external/classad/object/pool/LiteralPool.java
@@ -21,9 +21,15 @@ package org.apache.asterix.external.classad.object.pool;
 import org.apache.asterix.external.classad.Literal;
 
 public class LiteralPool extends Pool<Literal> {
+    private final ClassAdObjectPool objectPool;
+
+    public LiteralPool(ClassAdObjectPool objectPool) {
+        this.objectPool = objectPool;
+    }
+
     @Override
     public Literal newInstance() {
-        return new Literal();
+        return new Literal(objectPool);
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/incubator-asterixdb/blob/121e1d9a/asterix-external-data/src/test/java/org/apache/asterix/external/classad/object/pool/MutableBooleanPool.java
----------------------------------------------------------------------
diff --git a/asterix-external-data/src/test/java/org/apache/asterix/external/classad/object/pool/MutableBooleanPool.java b/asterix-external-data/src/test/java/org/apache/asterix/external/classad/object/pool/MutableBooleanPool.java
new file mode 100644
index 0000000..8713272
--- /dev/null
+++ b/asterix-external-data/src/test/java/org/apache/asterix/external/classad/object/pool/MutableBooleanPool.java
@@ -0,0 +1,35 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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 at
+ *
+ *   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.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.asterix.external.classad.object.pool;
+
+import org.apache.commons.lang3.mutable.MutableBoolean;
+
+public class MutableBooleanPool extends Pool<MutableBoolean> {
+
+    @Override
+    public MutableBoolean newInstance() {
+        return new MutableBoolean();
+    }
+
+    @Override
+    protected void reset(MutableBoolean obj) {
+        obj.setValue(false);
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-asterixdb/blob/121e1d9a/asterix-external-data/src/test/java/org/apache/asterix/external/classad/object/pool/MutableNumberFactorPool.java
----------------------------------------------------------------------
diff --git a/asterix-external-data/src/test/java/org/apache/asterix/external/classad/object/pool/MutableNumberFactorPool.java b/asterix-external-data/src/test/java/org/apache/asterix/external/classad/object/pool/MutableNumberFactorPool.java
new file mode 100644
index 0000000..9d452d5
--- /dev/null
+++ b/asterix-external-data/src/test/java/org/apache/asterix/external/classad/object/pool/MutableNumberFactorPool.java
@@ -0,0 +1,36 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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 at
+ *
+ *   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.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.asterix.external.classad.object.pool;
+
+import org.apache.asterix.external.classad.AMutableNumberFactor;
+import org.apache.asterix.external.classad.Value.NumberFactor;
+
+public class MutableNumberFactorPool extends Pool<AMutableNumberFactor> {
+
+    @Override
+    public AMutableNumberFactor newInstance() {
+        return new AMutableNumberFactor();
+    }
+
+    @Override
+    protected void reset(AMutableNumberFactor obj) {
+        obj.setFactor(NumberFactor.NO_FACTOR);
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-asterixdb/blob/121e1d9a/asterix-external-data/src/test/java/org/apache/asterix/external/classad/object/pool/OperationPool.java
----------------------------------------------------------------------
diff --git a/asterix-external-data/src/test/java/org/apache/asterix/external/classad/object/pool/OperationPool.java b/asterix-external-data/src/test/java/org/apache/asterix/external/classad/object/pool/OperationPool.java
index 062d870..1607f6e 100644
--- a/asterix-external-data/src/test/java/org/apache/asterix/external/classad/object/pool/OperationPool.java
+++ b/asterix-external-data/src/test/java/org/apache/asterix/external/classad/object/pool/OperationPool.java
@@ -22,9 +22,15 @@ import org.apache.asterix.external.classad.Operation;
 
 public class OperationPool extends Pool<Operation> {
 
+    private final ClassAdObjectPool objectPool;
+
+    public OperationPool(ClassAdObjectPool objectPool) {
+        this.objectPool = objectPool;
+    }
+
     @Override
     public Operation newInstance() {
-        return new Operation();
+        return new Operation(objectPool);
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/incubator-asterixdb/blob/121e1d9a/asterix-external-data/src/test/java/org/apache/asterix/external/classad/object/pool/PrettyPrintPool.java
----------------------------------------------------------------------
diff --git a/asterix-external-data/src/test/java/org/apache/asterix/external/classad/object/pool/PrettyPrintPool.java b/asterix-external-data/src/test/java/org/apache/asterix/external/classad/object/pool/PrettyPrintPool.java
new file mode 100644
index 0000000..d38c5d6
--- /dev/null
+++ b/asterix-external-data/src/test/java/org/apache/asterix/external/classad/object/pool/PrettyPrintPool.java
@@ -0,0 +1,40 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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 at
+ *
+ *   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.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.asterix.external.classad.object.pool;
+
+import org.apache.asterix.external.classad.PrettyPrint;
+
+public class PrettyPrintPool extends Pool<PrettyPrint> {
+
+    private final ClassAdObjectPool objectPool;
+
+    public PrettyPrintPool(ClassAdObjectPool objectPool) {
+        this.objectPool = objectPool;
+    }
+
+    @Override
+    public PrettyPrint newInstance() {
+        return new PrettyPrint(objectPool);
+    }
+
+    @Override
+    protected void reset(PrettyPrint obj) {
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-asterixdb/blob/121e1d9a/asterix-external-data/src/test/java/org/apache/asterix/external/classad/object/pool/StringArrayListPool.java
----------------------------------------------------------------------
diff --git a/asterix-external-data/src/test/java/org/apache/asterix/external/classad/object/pool/StringArrayListPool.java b/asterix-external-data/src/test/java/org/apache/asterix/external/classad/object/pool/StringArrayListPool.java
new file mode 100644
index 0000000..0ec687c
--- /dev/null
+++ b/asterix-external-data/src/test/java/org/apache/asterix/external/classad/object/pool/StringArrayListPool.java
@@ -0,0 +1,35 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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 at
+ *
+ *   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.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.asterix.external.classad.object.pool;
+
+import java.util.ArrayList;
+
+public class StringArrayListPool extends Pool<ArrayList<String>> {
+
+    @Override
+    public ArrayList<String> newInstance() {
+        return new ArrayList<String>();
+    }
+
+    @Override
+    protected void reset(ArrayList<String> obj) {
+        obj.clear();
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-asterixdb/blob/121e1d9a/asterix-external-data/src/test/java/org/apache/asterix/external/classad/object/pool/TreeSetPool.java
----------------------------------------------------------------------
diff --git a/asterix-external-data/src/test/java/org/apache/asterix/external/classad/object/pool/TreeSetPool.java b/asterix-external-data/src/test/java/org/apache/asterix/external/classad/object/pool/TreeSetPool.java
new file mode 100644
index 0000000..d09c170
--- /dev/null
+++ b/asterix-external-data/src/test/java/org/apache/asterix/external/classad/object/pool/TreeSetPool.java
@@ -0,0 +1,35 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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 at
+ *
+ *   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.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.asterix.external.classad.object.pool;
+
+import java.util.TreeSet;
+
+public class TreeSetPool<T> extends Pool<TreeSet<T>> {
+
+    @Override
+    public TreeSet<T> newInstance() {
+        return new TreeSet<T>();
+    }
+
+    @Override
+    protected void reset(TreeSet<T> obj) {
+        obj.clear();
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-asterixdb/blob/121e1d9a/asterix-external-data/src/test/java/org/apache/asterix/external/classad/object/pool/ValuePool.java
----------------------------------------------------------------------
diff --git a/asterix-external-data/src/test/java/org/apache/asterix/external/classad/object/pool/ValuePool.java b/asterix-external-data/src/test/java/org/apache/asterix/external/classad/object/pool/ValuePool.java
index 698e947..9ad4424 100644
--- a/asterix-external-data/src/test/java/org/apache/asterix/external/classad/object/pool/ValuePool.java
+++ b/asterix-external-data/src/test/java/org/apache/asterix/external/classad/object/pool/ValuePool.java
@@ -21,13 +21,20 @@ package org.apache.asterix.external.classad.object.pool;
 import org.apache.asterix.external.classad.Value;
 
 public class ValuePool extends Pool<Value> {
+
+    private final ClassAdObjectPool objectPool;
+
+    public ValuePool(ClassAdObjectPool objectPool) {
+        this.objectPool = objectPool;
+    }
+
     @Override
     public Value newInstance() {
-        return new Value();
+        return new Value(objectPool);
     }
 
     @Override
     protected void reset(Value obj) {
-        obj.clear();
+        obj.reset();
     }
 }

http://git-wip-us.apache.org/repos/asf/incubator-asterixdb/blob/121e1d9a/asterix-external-data/src/test/java/org/apache/asterix/external/classad/test/ClassAdFunctionalTest.java
----------------------------------------------------------------------
diff --git a/asterix-external-data/src/test/java/org/apache/asterix/external/classad/test/ClassAdFunctionalTest.java b/asterix-external-data/src/test/java/org/apache/asterix/external/classad/test/ClassAdFunctionalTest.java
index 09e8001..41aa7c7 100644
--- a/asterix-external-data/src/test/java/org/apache/asterix/external/classad/test/ClassAdFunctionalTest.java
+++ b/asterix-external-data/src/test/java/org/apache/asterix/external/classad/test/ClassAdFunctionalTest.java
@@ -20,6 +20,8 @@ package org.apache.asterix.external.classad.test;
 
 import java.net.URLDecoder;
 
+import org.apache.asterix.external.classad.object.pool.ClassAdObjectPool;
+
 import junit.framework.Test;
 import junit.framework.TestCase;
 import junit.framework.TestSuite;
@@ -48,9 +50,10 @@ public class ClassAdFunctionalTest extends TestCase {
     public void testApp() {
 
         try {
-            String[] args = { "", "-d", "-v", URLDecoder.decode(getClass().getResource("/functional_tests.txt").getPath(), "UTF-8") };
-            FunctionalTester.test(args.length, args);
-        } catch (Exception e) {
+            String[] args = { "", "-d", "-v",
+                    URLDecoder.decode(getClass().getResource("/functional_tests.txt").getPath(), "UTF-8") };
+            FunctionalTester.test(args.length, args, new ClassAdObjectPool());
+        } catch (Throwable e) {
             e.printStackTrace();
             assertTrue(false);
         }

http://git-wip-us.apache.org/repos/asf/incubator-asterixdb/blob/121e1d9a/asterix-external-data/src/test/java/org/apache/asterix/external/classad/test/ClassAdParserTest.java
----------------------------------------------------------------------
diff --git a/asterix-external-data/src/test/java/org/apache/asterix/external/classad/test/ClassAdParserTest.java b/asterix-external-data/src/test/java/org/apache/asterix/external/classad/test/ClassAdParserTest.java
index d65fecc..ab393ba 100644
--- a/asterix-external-data/src/test/java/org/apache/asterix/external/classad/test/ClassAdParserTest.java
+++ b/asterix-external-data/src/test/java/org/apache/asterix/external/classad/test/ClassAdParserTest.java
@@ -24,12 +24,13 @@ import java.nio.charset.StandardCharsets;
 import java.nio.file.Files;
 import java.nio.file.Paths;
 
+import org.apache.asterix.external.classad.ClassAd;
+import org.apache.asterix.external.classad.object.pool.ClassAdObjectPool;
+
 import junit.framework.Test;
 import junit.framework.TestCase;
 import junit.framework.TestSuite;
 
-import org.apache.asterix.external.classad.ClassAd;
-
 public class ClassAdParserTest extends TestCase {
     /**
      * Create the test case
@@ -54,18 +55,21 @@ public class ClassAdParserTest extends TestCase {
     public void test() {
         try {
             // test here
-            ClassAd pAd = new ClassAd();
+            ClassAdObjectPool objectPool = new ClassAdObjectPool();
+            ClassAd pAd = new ClassAd(objectPool);
             String szInput;
             String[] files = new String[] { "/testdata.txt" };
             BufferedReader infile = null;
             for (String path : files) {
-                infile = Files.newBufferedReader(Paths.get(URLDecoder.decode(getClass().getResource(path).getPath(), "UTF-8")),
+                infile = Files.newBufferedReader(
+                        Paths.get(URLDecoder.decode(getClass().getResource(path).getPath(), "UTF-8")),
                         StandardCharsets.UTF_8);
                 szInput = infile.readLine();
                 while (szInput != null) {
                     if (szInput.trim().length() == 0) {
                         // ClassAdChain completed
                         pAd.clear();
+                        objectPool.reset();
                     } else if (!pAd.insert(szInput)) {
                         // Problem
                         System.out.println("BARFED ON:" + szInput);

http://git-wip-us.apache.org/repos/asf/incubator-asterixdb/blob/121e1d9a/asterix-external-data/src/test/java/org/apache/asterix/external/classad/test/ClassAdToADMTest.java
----------------------------------------------------------------------
diff --git a/asterix-external-data/src/test/java/org/apache/asterix/external/classad/test/ClassAdToADMTest.java b/asterix-external-data/src/test/java/org/apache/asterix/external/classad/test/ClassAdToADMTest.java
index 57b0dcd..d822310 100644
--- a/asterix-external-data/src/test/java/org/apache/asterix/external/classad/test/ClassAdToADMTest.java
+++ b/asterix-external-data/src/test/java/org/apache/asterix/external/classad/test/ClassAdToADMTest.java
@@ -28,9 +28,12 @@ import org.apache.asterix.external.classad.CharArrayLexerSource;
 import org.apache.asterix.external.classad.ClassAd;
 import org.apache.asterix.external.classad.ExprTree;
 import org.apache.asterix.external.classad.Value;
+import org.apache.asterix.external.classad.object.pool.ClassAdObjectPool;
 import org.apache.asterix.external.input.record.reader.stream.SemiStructuredRecordReader;
-import org.apache.asterix.external.input.stream.LocalFileSystemInputStream;
+import org.apache.asterix.external.input.stream.LocalFSInputStream;
 import org.apache.asterix.external.library.ClassAdParser;
+import org.apache.hyracks.api.io.FileReference;
+import org.apache.hyracks.dataflow.std.file.FileSplit;
 
 import junit.framework.Test;
 import junit.framework.TestCase;
@@ -60,17 +63,20 @@ public class ClassAdToADMTest extends TestCase {
     public void test() {
         try {
             // test here
-            ClassAd pAd = new ClassAd();
+            ClassAdObjectPool objectPool = new ClassAdObjectPool();
+            ClassAd pAd = new ClassAd(objectPool);
             String[] files = new String[] { "/jobads.txt" };
-            ClassAdParser parser = new ClassAdParser(null, false, true, false, null, null, null);
+            ClassAdParser parser = new ClassAdParser(objectPool);
             CharArrayLexerSource lexerSource = new CharArrayLexerSource();
             for (String path : files) {
-                LocalFileSystemInputStream in = new LocalFileSystemInputStream(
-                        Paths.get(getClass().getResource(path).toURI()), null, false);
+                LocalFSInputStream in = new LocalFSInputStream(
+                        new FileSplit[] { new FileSplit("",
+                                new FileReference(Paths.get(getClass().getResource(path).toURI()).toFile())) },
+                        null, null, 0, null, false);
                 SemiStructuredRecordReader recordReader = new SemiStructuredRecordReader(in, null, "[", "]");
-                Value val = new Value();
+                Value val = new Value(objectPool);
                 while (recordReader.hasNext()) {
-                    val.clear();
+                    val.reset();
                     IRawRecord<char[]> record = recordReader.next();
                     lexerSource.setNewSource(record.get());
                     parser.setLexerSource(lexerSource);

http://git-wip-us.apache.org/repos/asf/incubator-asterixdb/blob/121e1d9a/asterix-external-data/src/test/java/org/apache/asterix/external/classad/test/ClassAdUnitTest.java
----------------------------------------------------------------------
diff --git a/asterix-external-data/src/test/java/org/apache/asterix/external/classad/test/ClassAdUnitTest.java b/asterix-external-data/src/test/java/org/apache/asterix/external/classad/test/ClassAdUnitTest.java
index b9f32f5..32ce485 100644
--- a/asterix-external-data/src/test/java/org/apache/asterix/external/classad/test/ClassAdUnitTest.java
+++ b/asterix-external-data/src/test/java/org/apache/asterix/external/classad/test/ClassAdUnitTest.java
@@ -18,7 +18,7 @@
  */
 package org.apache.asterix.external.classad.test;
 
-import java.io.IOException;
+import org.apache.asterix.external.classad.object.pool.ClassAdObjectPool;
 
 import junit.framework.Test;
 import junit.framework.TestCase;
@@ -51,8 +51,9 @@ public class ClassAdUnitTest extends TestCase {
     public void test() {
         String[] args = { "", "-d", "-vv", "-all" };
         try {
-            ClassAdUnitTester.test(args.length, args);
-        } catch (IOException e) {
+            ClassAdUnitTester.test(args.length, args, new ClassAdObjectPool());
+        } catch (Throwable e) {
+            e.printStackTrace();
             assertTrue(false);
         }
         assertTrue(true);

http://git-wip-us.apache.org/repos/asf/incubator-asterixdb/blob/121e1d9a/asterix-external-data/src/test/java/org/apache/asterix/external/classad/test/ClassAdUnitTester.java
----------------------------------------------------------------------
diff --git a/asterix-external-data/src/test/java/org/apache/asterix/external/classad/test/ClassAdUnitTester.java b/asterix-external-data/src/test/java/org/apache/asterix/external/classad/test/ClassAdUnitTester.java
index cec9299..e3c9bf7 100644
--- a/asterix-external-data/src/test/java/org/apache/asterix/external/classad/test/ClassAdUnitTester.java
+++ b/asterix-external-data/src/test/java/org/apache/asterix/external/classad/test/ClassAdUnitTester.java
@@ -32,6 +32,7 @@ import org.apache.asterix.external.classad.Literal;
 import org.apache.asterix.external.classad.Util;
 import org.apache.asterix.external.classad.Value;
 import org.apache.asterix.external.classad.Value.ValueType;
+import org.apache.asterix.external.classad.object.pool.ClassAdObjectPool;
 import org.apache.asterix.external.library.ClassAdParser;
 import org.apache.asterix.om.base.AMutableDouble;
 import org.apache.asterix.om.base.AMutableInt32;
@@ -200,7 +201,7 @@ public class ClassAdUnitTester {
      *
      * @throws IOException
      *********************************************************************/
-    public static boolean test(int argc, String[] argv) throws IOException {
+    public static boolean test(int argc, String[] argv, ClassAdObjectPool objectPool) throws IOException {
         AMutableInt32 numberOfErrors = new AMutableInt32(0);
         AMutableInt32 numberOfTests = new AMutableInt32(0);
         boolean have_errors;
@@ -213,17 +214,22 @@ public class ClassAdUnitTester {
 
         /* ----- Run tests ----- */
         if (parameters.checkAll || parameters.checkParsing) {
-            testParsing(parameters, results);
+            testParsing(parameters, results, objectPool);
         }
 
         if (parameters.checkAll || parameters.checkClassad) {
-            testClassad(parameters, results);
+            try {
+                testClassad(parameters, results, objectPool);
+            } catch (Throwable th) {
+                th.printStackTrace();
+                throw th;
+            }
         }
         if (parameters.checkAll || parameters.checkExprlist) {
-            testExprList(parameters, results);
+            testExprList(parameters, results, objectPool);
         }
         if (parameters.checkAll || parameters.checkValue) {
-            testValue(parameters, results);
+            testValue(parameters, results, objectPool);
         }
         if (parameters.checkAll || parameters.checkLiteral) {
         }
@@ -255,10 +261,11 @@ public class ClassAdUnitTester {
     }
 
     public static void test(String name, boolean test, String testLine, Results results) {
-        if (test)
+        if (test) {
             results.AddSuccessfulTest(name, testLine);
-        else
+        } else {
             results.AddFailedTest(name, testLine);
+        }
     }
 
     public static void test(String name, boolean test, Results results) {
@@ -272,8 +279,9 @@ public class ClassAdUnitTester {
      *
      * @throws IOException
      *********************************************************************/
-    public static void testParsing(Parameters parameters, Results results) throws IOException {
-        ClassAdParser parser = new ClassAdParser(null, false, true, false, null, null, null);
+    public static void testParsing(Parameters parameters, Results results, ClassAdObjectPool objectPool)
+            throws IOException {
+        ClassAdParser parser = new ClassAdParser(objectPool);
         ExprTree tree;
 
         // My goal is to ensure that these expressions don't crash
@@ -312,23 +320,25 @@ public class ClassAdUnitTester {
     /*********************************************************************
      * Function: test_classad
      * Purpose: Test the ClassAd class.
+     * @param objectPool 
      *
      * @throws IOException
      *********************************************************************/
-    public static void testClassad(Parameters parameters, Results results) throws IOException {
-        ClassAdParser parser = new ClassAdParser(null, false, true, false, null, null, null);
+    public static void testClassad(Parameters parameters, Results results, ClassAdObjectPool objectPool)
+            throws IOException {
+        ClassAdParser parser = new ClassAdParser(objectPool);
         boolean haveAttribute;
         boolean success;
 
         System.out.println("Testing the ClassAd class...");
 
         String input_basic = "[ A = 3; B = 4.0; C = \"babyzilla\"; D = true; E = {1}; F = [ AA = 3; ]; G =\"deleteme\";]";
-        ClassAd basic = new ClassAd();
+        ClassAd basic = new ClassAd(objectPool);
         AMutableInt64 i = new AMutableInt64(0);
         MutableBoolean b = new MutableBoolean();
         AMutableDouble r = new AMutableDouble(0);
         AMutableCharArrayString s = new AMutableCharArrayString();
-        ClassAd c = new ClassAd();
+        ClassAd c = new ClassAd(objectPool);
         // ExprList *l;
 
         basic = parser.parseClassAd(input_basic);
@@ -426,8 +436,8 @@ public class ClassAdUnitTester {
 
         /* ----- Test Parsing multiple ClassAds ----- */
         String twoClassads = "[ a = 3; ][ b = 4; ]";
-        ClassAd classad1 = new ClassAd();
-        ClassAd classad2 = new ClassAd();
+        ClassAd classad1 = new ClassAd(objectPool);
+        ClassAd classad2 = new ClassAd(objectPool);
         AMutableInt32 offset = new AMutableInt32(0);
 
         parser.parseClassAd(twoClassads, classad1, offset);
@@ -439,7 +449,7 @@ public class ClassAdUnitTester {
 
         /* ----- Test chained ClassAds ----- */
         // classad1 and classad2 from above test are used.
-        ClassAd classad3 = new ClassAd();
+        ClassAd classad3 = new ClassAd(objectPool);
 
         classad1.chainToAd(classad2);
         test("classad1's parent is classad2", classad1.getChainedParentAd().equals(classad2), "Test chained ClassAds 1",
@@ -488,7 +498,8 @@ public class ClassAdUnitTester {
      *
      * @throws IOException
      *********************************************************************/
-    public static void testExprList(Parameters parameters, Results results) throws IOException {
+    public static void testExprList(Parameters parameters, Results results, ClassAdObjectPool objectPool)
+            throws IOException {
         System.out.println("Testing the ExprList class...");
 
         Literal literal10;
@@ -506,17 +517,17 @@ public class ClassAdUnitTester {
         ExprList list2Copy;
 
         /* ----- Setup Literals, the vectors, then ExprLists ----- */
-        literal10 = Literal.createReal("1.0");
-        literal20 = Literal.createReal("2.0");
-        literal21 = Literal.createReal("2.1");
+        literal10 = Literal.createReal("1.0", objectPool);
+        literal20 = Literal.createReal("2.0", objectPool);
+        literal21 = Literal.createReal("2.1", objectPool);
 
         vector1.add(literal10);
         vector2.add(literal20);
         vector2.add(literal21);
 
-        list0 = new ExprList();
-        list1 = new ExprList(vector1);
-        list2 = new ExprList(vector2);
+        list0 = new ExprList(objectPool);
+        list1 = new ExprList(vector1, objectPool);
+        list2 = new ExprList(vector2, objectPool);
 
         /* ----- Did the lists get made? ----- */
         test("Made list 0", (list0 != null), "Did the lists get made? 0", results);
@@ -558,7 +569,7 @@ public class ClassAdUnitTester {
 
         /* ----- Test adding and deleting from a list ----- */
         Literal add;
-        add = Literal.createReal("2.2");
+        add = Literal.createReal("2.2", objectPool);
 
         if (list2Copy != null) {
             list2Copy.insert(add);
@@ -574,11 +585,11 @@ public class ClassAdUnitTester {
 
         /* ----- Test an ExprList bug that Nate Mueller found ----- */
         ClassAd classad;
-        ClassAdParser parser = new ClassAdParser(null, false, true, false, null, null, null);
+        ClassAdParser parser = new ClassAdParser(objectPool);
         MutableBoolean b = new MutableBoolean();
         boolean haveAttribute;
         boolean canEvaluate;
-        Value value = new Value();
+        Value value = new Value(objectPool);
 
         String listClassadText = "[foo = 3; have_foo = member(foo, {1, 2, 3});]";
         classad = parser.parseClassAd(listClassadText);
@@ -598,8 +609,9 @@ public class ClassAdUnitTester {
      *
      * @throws HyracksDataException
      *********************************************************************/
-    public static void testValue(Parameters parameters, Results results) throws HyracksDataException {
-        Value v = new Value();
+    public static void testValue(Parameters parameters, Results results, ClassAdObjectPool objectPool)
+            throws HyracksDataException {
+        Value v = new Value(objectPool);
         boolean isExpectedType;
         System.out.println("Testing the Value class...");
         test("New value is undefined", (v.isUndefinedValue()), "test_value 1", results);
@@ -659,25 +671,25 @@ public class ClassAdUnitTester {
         test("Relative time is 10", (10 == rt.getRelativeTime()), results);
         test("GetType gives RELATIVE_TIME_VALUE", (v.getType() == ValueType.RELATIVE_TIME_VALUE), results);
 
-        ExprList l = new ExprList();
-        ExprList ll = new ExprList();
+        ExprList l = new ExprList(objectPool);
+        ExprList ll = new ExprList(objectPool);
         v.setListValue(l);
         isExpectedType = v.isListValue(ll);
         test("Value is list value", isExpectedType, results);
         test("List value is correct", l.equals(ll), results);
         test("GetType gives LIST_VALUE", (v.getType() == ValueType.LIST_VALUE), results);
 
-        ExprList sl = new ExprList(true);
-        ll = new ExprList(true);
+        ExprList sl = new ExprList(true, objectPool);
+        ll = new ExprList(true, objectPool);
         v.setListValue(sl);
         isExpectedType = v.isListValue(ll);
         test("Value is list value", isExpectedType, results);
         test("List value is correct", sl.equals(ll), results);
         test("GetType gives SLIST_VALUE", (v.getType() == ValueType.SLIST_VALUE), results);
 
-        ClassAd c = new ClassAd();
+        ClassAd c = new ClassAd(objectPool);
         c.insertAttr("test_int", 10);
-        ClassAd cc = new ClassAd();
+        ClassAd cc = new ClassAd(objectPool);
         v.setClassAdValue(c);
         isExpectedType = v.isClassAdValue(cc);
         test("Value is ClassAd value", isExpectedType, results);