You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hive.apache.org by se...@apache.org on 2014/09/16 19:37:19 UTC

svn commit: r1625341 [12/12] - in /hive/branches/llap: ./ common/src/java/org/apache/hadoop/hive/common/ common/src/java/org/apache/hadoop/hive/conf/ contrib/src/test/results/clientpositive/ data/conf/tez/ data/files/ hbase-handler/ itests/hive-unit-ha...

Modified: hive/branches/llap/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/ObjectInspectorFactory.java
URL: http://svn.apache.org/viewvc/hive/branches/llap/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/ObjectInspectorFactory.java?rev=1625341&r1=1625340&r2=1625341&view=diff
==============================================================================
--- hive/branches/llap/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/ObjectInspectorFactory.java (original)
+++ hive/branches/llap/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/ObjectInspectorFactory.java Tue Sep 16 17:37:13 2014
@@ -26,10 +26,12 @@ import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
 import java.util.concurrent.ConcurrentHashMap;
 
 import org.apache.hadoop.hive.serde2.objectinspector.primitive.PrimitiveObjectInspectorFactory;
 import org.apache.hadoop.hive.serde2.objectinspector.primitive.PrimitiveObjectInspectorUtils;
+import org.apache.thrift.TUnion;
 
 /**
  * ObjectInspectorFactory is the primary way to create new ObjectInspector
@@ -111,7 +113,8 @@ public final class ObjectInspectorFactor
     if (t instanceof ParameterizedType) {
       ParameterizedType pt = (ParameterizedType) t;
       // List?
-      if (List.class.isAssignableFrom((Class<?>) pt.getRawType())) {
+      if (List.class.isAssignableFrom((Class<?>) pt.getRawType()) ||
+          Set.class.isAssignableFrom((Class<?>) pt.getRawType())) {
         return getStandardListObjectInspector(getReflectionObjectInspector(pt
             .getActualTypeArguments()[0], options));
       }
@@ -172,7 +175,7 @@ public final class ObjectInspectorFactor
       oi = new ReflectionStructObjectInspector();
       break;
     case THRIFT:
-      oi = new ThriftStructObjectInspector();
+      oi = TUnion.class.isAssignableFrom(c) ? new ThriftUnionObjectInspector() : new ThriftStructObjectInspector();
       break;
     case PROTOCOL_BUFFERS:
       oi = new ProtocolBuffersStructObjectInspector();
@@ -181,20 +184,13 @@ public final class ObjectInspectorFactor
       throw new RuntimeException(ObjectInspectorFactory.class.getName()
           + ": internal error.");
     }
+
     // put it into the cache BEFORE it is initialized to make sure we can catch
     // recursive types.
     objectInspectorCache.put(t, oi);
-    Field[] fields = ObjectInspectorUtils.getDeclaredNonStaticFields(c);
-    ArrayList<ObjectInspector> structFieldObjectInspectors = new ArrayList<ObjectInspector>(
-        fields.length);
-    for (int i = 0; i < fields.length; i++) {
-      if (!oi.shouldIgnoreField(fields[i].getName())) {
-        structFieldObjectInspectors.add(getReflectionObjectInspector(fields[i]
-            .getGenericType(), options));
-      }
-    }
-    oi.init(c, structFieldObjectInspectors);
+    oi.init(c, options);
     return oi;
+
   }
 
   static ConcurrentHashMap<ObjectInspector, StandardListObjectInspector> cachedStandardListObjectInspector =

Modified: hive/branches/llap/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/ReflectionStructObjectInspector.java
URL: http://svn.apache.org/viewvc/hive/branches/llap/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/ReflectionStructObjectInspector.java?rev=1625341&r1=1625340&r2=1625341&view=diff
==============================================================================
--- hive/branches/llap/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/ReflectionStructObjectInspector.java (original)
+++ hive/branches/llap/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/ReflectionStructObjectInspector.java Tue Sep 16 17:37:13 2014
@@ -44,6 +44,7 @@ public class ReflectionStructObjectInspe
   public static class MyField implements StructField {
     protected int fieldID;
     protected Field field;
+
     protected ObjectInspector fieldObjectInspector;
 
     protected MyField() {
@@ -116,12 +117,13 @@ public class ReflectionStructObjectInspe
    * The reason that this method is not recursive by itself is because we want
    * to allow recursive types.
    */
-  void init(Class<?> objectClass,
-      List<ObjectInspector> structFieldObjectInspectors) {
-    assert (!List.class.isAssignableFrom(objectClass));
-    assert (!Map.class.isAssignableFrom(objectClass));
+  protected void init(Class<?> objectClass,
+      ObjectInspectorFactory.ObjectInspectorOptions options) {
 
+    verifyObjectClassType(objectClass);
     this.objectClass = objectClass;
+    final List<? extends ObjectInspector> structFieldObjectInspectors = extractFieldObjectInspectors(objectClass, options);
+
     Field[] reflectionFields = ObjectInspectorUtils
         .getDeclaredNonStaticFields(objectClass);
     fields = new ArrayList<MyField>(structFieldObjectInspectors.size());
@@ -205,4 +207,23 @@ public class ReflectionStructObjectInspe
     return struct;
   }
 
+  protected List<? extends ObjectInspector> extractFieldObjectInspectors(Class<?> clazz,
+    ObjectInspectorFactory.ObjectInspectorOptions options) {
+    Field[] fields = ObjectInspectorUtils.getDeclaredNonStaticFields(clazz);
+    ArrayList<ObjectInspector> structFieldObjectInspectors = new ArrayList<ObjectInspector>(
+      fields.length);
+    for (int i = 0; i < fields.length; i++) {
+      if (!shouldIgnoreField(fields[i].getName())) {
+        structFieldObjectInspectors.add(ObjectInspectorFactory.getReflectionObjectInspector(fields[i]
+          .getGenericType(), options));
+      }
+    }
+    return structFieldObjectInspectors;
+  }
+
+
+  protected void verifyObjectClassType(Class<?> objectClass) {
+    assert (!List.class.isAssignableFrom(objectClass));
+    assert (!Map.class.isAssignableFrom(objectClass));
+  }
 }

Modified: hive/branches/llap/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/StandardListObjectInspector.java
URL: http://svn.apache.org/viewvc/hive/branches/llap/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/StandardListObjectInspector.java?rev=1625341&r1=1625340&r2=1625341&view=diff
==============================================================================
--- hive/branches/llap/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/StandardListObjectInspector.java (original)
+++ hive/branches/llap/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/StandardListObjectInspector.java Tue Sep 16 17:37:13 2014
@@ -20,6 +20,7 @@ package org.apache.hadoop.hive.serde2.ob
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Set;
 
 /**
  * DefaultListObjectInspector works on list data that is stored as a Java List
@@ -53,52 +54,64 @@ public class StandardListObjectInspector
   }
 
   // with data
+  @SuppressWarnings({ "rawtypes", "unchecked" })
   public Object getListElement(Object data, int index) {
     if (data == null) {
       return null;
     }
-    // We support both List<Object> and Object[]
+    // We support List<Object>, Set<Object> and Object[]
     // so we have to do differently.
-    boolean isArray = ! (data instanceof List);
-    if (isArray) {
-      Object[] list = (Object[]) data;
-      if (index < 0 || index >= list.length) {
-        return null;
-      }
-      return list[index];
-    } else {
-      List<?> list = (List<?>) data;
-      if (index < 0 || index >= list.size()) {
-        return null;
+    if (! (data instanceof List)) {
+      if (! (data instanceof Set)) {
+        Object[] list = (Object[]) data;
+        if (index < 0 || index >= list.length) {
+          return null;
+        }
+        return list[index];
+      } else {
+        data = new ArrayList((Set<?>) data);
       }
-      return list.get(index);
     }
+    List<?> list = (List<?>) data;
+    if (index < 0 || index >= list.size()) {
+      return null;
+    }
+    return list.get(index);
   }
 
   public int getListLength(Object data) {
     if (data == null) {
       return -1;
     }
-    // We support both List<Object> and Object[]
+    // We support List<Object>, Set<Object> and Object[]
     // so we have to do differently.
-    boolean isArray = ! (data instanceof List);
-    if (isArray) {
-      Object[] list = (Object[]) data;
-      return list.length;
+    if (! (data instanceof List)) {
+      if (! (data instanceof Set)) {
+        Object[] list = (Object[]) data;
+        return list.length;
+      } else {
+        Set<?> set = (Set<?>) data;
+        return set.size();
+      }
     } else {
       List<?> list = (List<?>) data;
       return list.size();
     }
   }
 
+  @SuppressWarnings({ "rawtypes", "unchecked" })
   public List<?> getList(Object data) {
     if (data == null) {
       return null;
     }
-    // We support both List<Object> and Object[]
+    // We support List<Object>, Set<Object> and Object[]
     // so we have to do differently.
     if (! (data instanceof List)) {
-      data = java.util.Arrays.asList((Object[]) data);
+      if (! (data instanceof Set)) {
+        data = java.util.Arrays.asList((Object[]) data);
+      } else {
+        data = new ArrayList((Set<?>) data);
+      }
     }
     List<?> list = (List<?>) data;
     return list;

Modified: hive/branches/llap/serde/src/test/org/apache/hadoop/hive/serde2/objectinspector/TestObjectInspectorUtils.java
URL: http://svn.apache.org/viewvc/hive/branches/llap/serde/src/test/org/apache/hadoop/hive/serde2/objectinspector/TestObjectInspectorUtils.java?rev=1625341&r1=1625340&r2=1625341&view=diff
==============================================================================
--- hive/branches/llap/serde/src/test/org/apache/hadoop/hive/serde2/objectinspector/TestObjectInspectorUtils.java (original)
+++ hive/branches/llap/serde/src/test/org/apache/hadoop/hive/serde2/objectinspector/TestObjectInspectorUtils.java Tue Sep 16 17:37:13 2014
@@ -46,7 +46,7 @@ public class TestObjectInspectorUtils ex
       StructObjectInspector soi = (StructObjectInspector) ObjectInspectorUtils
           .getStandardObjectInspector(oi1);
       List<? extends StructField> fields = soi.getAllStructFieldRefs();
-      assertEquals(6, fields.size());
+      assertEquals(10, fields.size());
       assertEquals(fields.get(0), soi.getStructFieldRef("aint"));
 
       // null
@@ -75,7 +75,7 @@ public class TestObjectInspectorUtils ex
       assertEquals(c4, soi.getStructFieldData(c, fields.get(4)));
       assertNull(soi.getStructFieldData(c, fields.get(5)));
       ArrayList<Object> cfields = new ArrayList<Object>();
-      for (int i = 0; i < 6; i++) {
+      for (int i = 0; i < 10; i++) {
         cfields.add(soi.getStructFieldData(c, fields.get(i)));
       }
       assertEquals(cfields, soi.getStructFieldsDataAsList(c));

Modified: hive/branches/llap/serde/src/test/org/apache/hadoop/hive/serde2/objectinspector/TestThriftObjectInspectors.java
URL: http://svn.apache.org/viewvc/hive/branches/llap/serde/src/test/org/apache/hadoop/hive/serde2/objectinspector/TestThriftObjectInspectors.java?rev=1625341&r1=1625340&r2=1625341&view=diff
==============================================================================
--- hive/branches/llap/serde/src/test/org/apache/hadoop/hive/serde2/objectinspector/TestThriftObjectInspectors.java (original)
+++ hive/branches/llap/serde/src/test/org/apache/hadoop/hive/serde2/objectinspector/TestThriftObjectInspectors.java Tue Sep 16 17:37:13 2014
@@ -19,7 +19,9 @@ package org.apache.hadoop.hive.serde2.ob
 
 import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.HashSet;
 import java.util.List;
+import java.util.Set;
 
 import junit.framework.TestCase;
 
@@ -27,6 +29,7 @@ import org.apache.hadoop.hive.serde2.obj
 import org.apache.hadoop.hive.serde2.objectinspector.primitive.PrimitiveObjectInspectorFactory;
 import org.apache.hadoop.hive.serde2.thrift.test.Complex;
 import org.apache.hadoop.hive.serde2.thrift.test.IntString;
+import org.apache.hadoop.hive.serde2.thrift.test.SetIntString;
 
 /**
  * TestThriftObjectInspectors.
@@ -49,7 +52,7 @@ public class TestThriftObjectInspectors 
       assertEquals(Category.STRUCT, oi1.getCategory());
       StructObjectInspector soi = (StructObjectInspector) oi1;
       List<? extends StructField> fields = soi.getAllStructFieldRefs();
-      assertEquals(6, fields.size());
+      assertEquals(10, fields.size());
       assertEquals(fields.get(0), soi.getStructFieldRef("aint"));
 
       // null
@@ -68,6 +71,10 @@ public class TestThriftObjectInspectors 
       List<IntString> c4 = new ArrayList<IntString>();
       c.setLintString(c4);
       c.setMStringString(null);
+      c.setAttributes(null);
+      c.setUnionField1(null);
+      c.setUnionField2(null);
+      c.setUnionField3(null);
 
       assertEquals(1, soi.getStructFieldData(c, fields.get(0)));
       assertEquals("test", soi.getStructFieldData(c, fields.get(1)));
@@ -75,8 +82,13 @@ public class TestThriftObjectInspectors 
       assertEquals(c3, soi.getStructFieldData(c, fields.get(3)));
       assertEquals(c4, soi.getStructFieldData(c, fields.get(4)));
       assertNull(soi.getStructFieldData(c, fields.get(5)));
+      assertNull(soi.getStructFieldData(c, fields.get(6)));
+      assertNull(soi.getStructFieldData(c, fields.get(7)));
+      assertNull(soi.getStructFieldData(c, fields.get(8)));
+      assertNull(soi.getStructFieldData(c, fields.get(9)));
+
       ArrayList<Object> cfields = new ArrayList<Object>();
-      for (int i = 0; i < 6; i++) {
+      for (int i = 0; i < 10; i++) {
         cfields.add(soi.getStructFieldData(c, fields.get(i)));
       }
       assertEquals(cfields, soi.getStructFieldsDataAsList(c));
@@ -109,4 +121,70 @@ public class TestThriftObjectInspectors 
       throw e;
     }
   }
+
+  @SuppressWarnings("unchecked")
+  public void testThriftSetObjectInspector() throws Throwable {
+
+    try {
+      ObjectInspector oi1 = ObjectInspectorFactory
+          .getReflectionObjectInspector(SetIntString.class,
+          ObjectInspectorFactory.ObjectInspectorOptions.THRIFT);
+      ObjectInspector oi2 = ObjectInspectorFactory
+          .getReflectionObjectInspector(SetIntString.class,
+          ObjectInspectorFactory.ObjectInspectorOptions.THRIFT);
+      assertEquals(oi1, oi2);
+
+      // metadata
+      assertEquals(Category.STRUCT, oi1.getCategory());
+      StructObjectInspector soi = (StructObjectInspector) oi1;
+      List<? extends StructField> fields = soi.getAllStructFieldRefs();
+      assertEquals(2, fields.size());
+      assertEquals(fields.get(0), soi.getStructFieldRef("sIntString"));
+      assertEquals(fields.get(1), soi.getStructFieldRef("aString"));
+
+      // null
+      for (int i = 0; i < fields.size(); i++) {
+        assertNull(soi.getStructFieldData(null, fields.get(i)));
+      }
+
+      // real object
+      IntString s1 = new IntString();
+      s1.setMyint(1);
+      s1.setMyString("test");
+      s1.setUnderscore_int(2);
+
+      Set<IntString> set1 = new HashSet<IntString>();
+      set1.add(s1);
+
+      SetIntString s = new SetIntString();
+      s.setSIntString(set1);
+      s.setAString("setString");
+
+      assertEquals(set1, soi.getStructFieldData(s, fields.get(0)));
+      assertEquals("setString", soi.getStructFieldData(s, fields.get(1)));
+
+      // sub fields
+      assertEquals(
+          ObjectInspectorFactory
+          .getStandardListObjectInspector(ObjectInspectorFactory
+              .getReflectionObjectInspector(IntString.class,
+                  ObjectInspectorFactory.ObjectInspectorOptions.THRIFT)),
+          fields.get(0).getFieldObjectInspector());
+      assertEquals(PrimitiveObjectInspectorFactory.javaStringObjectInspector,
+          fields.get(1).getFieldObjectInspector());
+
+      // compare set fields
+      ListObjectInspector loi = (ListObjectInspector) fields.get(0).getFieldObjectInspector();
+      assertEquals(1, loi.getListLength(set1));
+      List<IntString> list = (List<IntString>) loi.getList(set1);
+      assertEquals(1, list.size());
+      s1 = (IntString) loi.getListElement(list, 0);
+      assertEquals(1, s1.getMyint());
+      assertEquals("test", s1.getMyString());
+      assertEquals(2, s1.getUnderscore_int());
+    } catch (Throwable e) {
+      e.printStackTrace();
+      throw e;
+    }
+  }
 }

Modified: hive/branches/llap/serde/src/test/org/apache/hadoop/hive/serde2/thrift_test/CreateSequenceFile.java
URL: http://svn.apache.org/viewvc/hive/branches/llap/serde/src/test/org/apache/hadoop/hive/serde2/thrift_test/CreateSequenceFile.java?rev=1625341&r1=1625340&r2=1625341&view=diff
==============================================================================
--- hive/branches/llap/serde/src/test/org/apache/hadoop/hive/serde2/thrift_test/CreateSequenceFile.java (original)
+++ hive/branches/llap/serde/src/test/org/apache/hadoop/hive/serde2/thrift_test/CreateSequenceFile.java Tue Sep 16 17:37:13 2014
@@ -19,6 +19,7 @@
 package org.apache.hadoop.hive.serde2.thrift_test;
 
 import java.util.ArrayList;
+import java.util.Map;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Random;
@@ -28,6 +29,7 @@ import org.apache.hadoop.fs.Path;
 import org.apache.hadoop.hive.serde2.ByteStream;
 import org.apache.hadoop.hive.serde2.thrift.test.Complex;
 import org.apache.hadoop.hive.serde2.thrift.test.IntString;
+import org.apache.hadoop.hive.serde2.thrift.test.PropValueUnion;
 import org.apache.hadoop.io.BytesWritable;
 import org.apache.hadoop.io.SequenceFile;
 import org.apache.hadoop.io.Writable;
@@ -125,16 +127,23 @@ public final class CreateSequenceFile {
       islist.add(new IntString(i * i, "" + i * i * i, i));
       HashMap<String, String> hash = new HashMap<String, String>();
       hash.put("key_" + i, "value_" + i);
+      Map<String, Map<String, Map<String,PropValueUnion>>> unionMap = new HashMap<String, Map<String, Map<String,PropValueUnion>>>();
+      Map<String, Map<String, PropValueUnion>> erMap = new HashMap<String, Map<String, PropValueUnion>>();
+      Map<String, PropValueUnion> attrMap = new HashMap<String, PropValueUnion>();
+
+      erMap.put("erVal" + i, attrMap);
+      attrMap.put("value_" + i, PropValueUnion.doubleValue(1.0));
+      unionMap.put("key_" + i,  erMap);
 
       Complex complex = new Complex(rand.nextInt(), "record_"
-          + (new Integer(i)).toString(), alist, slist, islist, hash);
+          + (new Integer(i)).toString(), alist, slist, islist, hash, unionMap, PropValueUnion.stringValue("test" + i), PropValueUnion.unionMStringString(hash), PropValueUnion.lString(slist));
 
       Writable value = serializer.serialize(complex);
       writer.append(key, value);
     }
 
     // Add an all-null record
-    Complex complex = new Complex(0, null, null, null, null, null);
+    Complex complex = new Complex(0, null, null, null, null, null, null, null, null, null);
     Writable value = serializer.serialize(complex);
     writer.append(key, value);
 

Modified: hive/branches/llap/testutils/ptest2/src/main/java/org/apache/hive/ptest/execution/PTest.java
URL: http://svn.apache.org/viewvc/hive/branches/llap/testutils/ptest2/src/main/java/org/apache/hive/ptest/execution/PTest.java?rev=1625341&r1=1625340&r2=1625341&view=diff
==============================================================================
--- hive/branches/llap/testutils/ptest2/src/main/java/org/apache/hive/ptest/execution/PTest.java (original)
+++ hive/branches/llap/testutils/ptest2/src/main/java/org/apache/hive/ptest/execution/PTest.java Tue Sep 16 17:37:13 2014
@@ -347,7 +347,7 @@ public class PTest {
           executionContext = executionContextProvider.createExecutionContext();
           LocalCommandFactory localCommandFactory = new LocalCommandFactory(LOG);
           PTest ptest = new PTest(conf, executionContext, buildTag, logDir,
-              localCommandFactory, new SSHCommandExecutor(LOG),
+              localCommandFactory, new SSHCommandExecutor(LOG, localCommandFactory, conf.getSshOpts()),
               new RSyncCommandExecutor(LOG, 10, localCommandFactory), LOG);
           exitCode = ptest.run();
         } finally {

Modified: hive/branches/llap/testutils/ptest2/src/main/java/org/apache/hive/ptest/execution/conf/TestConfiguration.java
URL: http://svn.apache.org/viewvc/hive/branches/llap/testutils/ptest2/src/main/java/org/apache/hive/ptest/execution/conf/TestConfiguration.java?rev=1625341&r1=1625340&r2=1625341&view=diff
==============================================================================
--- hive/branches/llap/testutils/ptest2/src/main/java/org/apache/hive/ptest/execution/conf/TestConfiguration.java (original)
+++ hive/branches/llap/testutils/ptest2/src/main/java/org/apache/hive/ptest/execution/conf/TestConfiguration.java Tue Sep 16 17:37:13 2014
@@ -55,6 +55,7 @@ public class TestConfiguration {
   private static final String JIRA_USER = "jiraUser";
   private static final String JIRA_PASSWORD = "jiraPassword";
   private static final String JENKINS_URL = "jenkinsURL";
+  private static final String SSH_OPTS = "sshOpts";
   private static final String LOGS_URL = "logsURL";
   private static final String TEST_CASE_PROPERTY_NAME = "testCasePropertyName";
   private static final String BUILD_TOOL = "buildTool";
@@ -75,6 +76,7 @@ public class TestConfiguration {
   private String javaHome;
   private String javaHomeForTests;
   private String branch;
+  private String sshOpts;
   private final String jenkinsURL;
   private final String logsURL;
   private final String jiraUrl;
@@ -122,10 +124,14 @@ public class TestConfiguration {
     jenkinsURL = context.getString(JENKINS_URL, "https://builds.apache.org/job").trim();
     logsURL = context.getString(LOGS_URL, "").trim();
     testCasePropertyName = context.getString(TEST_CASE_PROPERTY_NAME, "testcase").trim();
+    sshOpts = context.getString(SSH_OPTS, "").trim();
   }
   public Context getContext() {
     return context;
   }
+  public String getSshOpts() {
+    return sshOpts;
+  }
   public String getJenkinsURL() {
     return jenkinsURL;
   }

Modified: hive/branches/llap/testutils/ptest2/src/main/java/org/apache/hive/ptest/execution/ssh/SSHCommandExecutor.java
URL: http://svn.apache.org/viewvc/hive/branches/llap/testutils/ptest2/src/main/java/org/apache/hive/ptest/execution/ssh/SSHCommandExecutor.java?rev=1625341&r1=1625340&r2=1625341&view=diff
==============================================================================
--- hive/branches/llap/testutils/ptest2/src/main/java/org/apache/hive/ptest/execution/ssh/SSHCommandExecutor.java (original)
+++ hive/branches/llap/testutils/ptest2/src/main/java/org/apache/hive/ptest/execution/ssh/SSHCommandExecutor.java Tue Sep 16 17:37:13 2014
@@ -30,15 +30,17 @@ public class SSHCommandExecutor {
 
   private final Logger mLogger;
   private final LocalCommandFactory mLocalCommandFactory;
+  private final String mSshOpts;
   private volatile boolean mShutdown;
-  
-  public SSHCommandExecutor(Logger logger, LocalCommandFactory localCommandFactory) {
+
+  public SSHCommandExecutor(Logger logger, LocalCommandFactory localCommandFactory, String sshOpts) {
     mLogger = logger;
-    mShutdown = false;
     mLocalCommandFactory = localCommandFactory;
+    mSshOpts = sshOpts;
+    mShutdown = false;
   }
   public SSHCommandExecutor(Logger logger) {
-    this(logger, new LocalCommandFactory(logger));
+    this(logger, new LocalCommandFactory(logger), "");
   }
   /**
    * Execute the given command via the ssh command line tool. If the command
@@ -47,8 +49,8 @@ public class SSHCommandExecutor {
   public void execute(SSHCommand command) {
     CollectPolicy collector = new CollectPolicy();
     try {
-      String commandText = String.format("ssh -v -i %s -l %s %s '%s'", command.getPrivateKey(),
-          command.getUser(), command.getHost(), command.getCommand());
+      String commandText = String.format("ssh -v -i %s %s -l %s %s '%s'", command.getPrivateKey(),
+          mSshOpts, command.getUser(), command.getHost(), command.getCommand());
       int attempts = 0;
       boolean retry;
       LocalCommand cmd;
@@ -83,4 +85,4 @@ public class SSHCommandExecutor {
   public void shutdownNow() {
     this.mShutdown = true;
   }
-}
\ No newline at end of file
+}

Modified: hive/branches/llap/testutils/ptest2/src/test/java/org/apache/hive/ptest/execution/ssh/TestSSHCommandExecutor.java
URL: http://svn.apache.org/viewvc/hive/branches/llap/testutils/ptest2/src/test/java/org/apache/hive/ptest/execution/ssh/TestSSHCommandExecutor.java?rev=1625341&r1=1625340&r2=1625341&view=diff
==============================================================================
--- hive/branches/llap/testutils/ptest2/src/test/java/org/apache/hive/ptest/execution/ssh/TestSSHCommandExecutor.java (original)
+++ hive/branches/llap/testutils/ptest2/src/test/java/org/apache/hive/ptest/execution/ssh/TestSSHCommandExecutor.java Tue Sep 16 17:37:13 2014
@@ -50,7 +50,8 @@ public class TestSSHCommandExecutor {
   public void testShutdownBeforeWaitFor() throws Exception {
     LocalCommand localCommand = mock(LocalCommand.class);
     localCommandFactory.setInstance(localCommand);
-    SSHCommandExecutor executor = new SSHCommandExecutor(LOG, localCommandFactory);
+    SSHCommandExecutor executor = new SSHCommandExecutor(LOG, localCommandFactory,
+      "-o StrictHostKeyChecking=no");
     Assert.assertFalse(executor.isShutdown());
     executor.shutdownNow();
     SSHCommand command = new SSHCommand(executor, "privateKey", "user", "host", 1, "whoami");
@@ -66,7 +67,8 @@ public class TestSSHCommandExecutor {
   public void testShutdownDuringWaitFor() throws Exception {
     LocalCommand localCommand = mock(LocalCommand.class);
     localCommandFactory.setInstance(localCommand);
-    final SSHCommandExecutor executor = new SSHCommandExecutor(LOG, localCommandFactory);
+    final SSHCommandExecutor executor = new SSHCommandExecutor(LOG, localCommandFactory,
+      "-o StrictHostKeyChecking=no");
     Assert.assertFalse(executor.isShutdown());
     when(localCommand.getExitCode()).thenAnswer(new Answer<Integer>() {
       @Override
@@ -84,4 +86,4 @@ public class TestSSHCommandExecutor {
     }
     verify(localCommand, never()).kill();
   }
-}
\ No newline at end of file
+}