pirk-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From eawilli...@apache.org
Subject incubator-pirk git commit: Add a no-arguments version of EncryptQuery#encrypt() -- closes apache/incubator-pirk#29
Date Thu, 28 Jul 2016 20:21:26 GMT
Repository: incubator-pirk
Updated Branches:
  refs/heads/master 7f260e03f -> de7a9c89d


Add a no-arguments version of EncryptQuery#encrypt() -- closes apache/incubator-pirk#29


Project: http://git-wip-us.apache.org/repos/asf/incubator-pirk/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-pirk/commit/de7a9c89
Tree: http://git-wip-us.apache.org/repos/asf/incubator-pirk/tree/de7a9c89
Diff: http://git-wip-us.apache.org/repos/asf/incubator-pirk/diff/de7a9c89

Branch: refs/heads/master
Commit: de7a9c89d49db8443c31b66f9535e608396e2650
Parents: 7f260e0
Author: tellison <tellison@apache.org>
Authored: Thu Jul 28 16:20:01 2016 -0400
Committer: eawilliams <eawilliams@apache.org>
Committed: Thu Jul 28 16:20:01 2016 -0400

----------------------------------------------------------------------
 .../querier/wideskies/encrypt/EncryptQuery.java | 51 +++++++++++++++-----
 1 file changed, 39 insertions(+), 12 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-pirk/blob/de7a9c89/src/main/java/org/apache/pirk/querier/wideskies/encrypt/EncryptQuery.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/pirk/querier/wideskies/encrypt/EncryptQuery.java b/src/main/java/org/apache/pirk/querier/wideskies/encrypt/EncryptQuery.java
index b12e837..e4c2535 100644
--- a/src/main/java/org/apache/pirk/querier/wideskies/encrypt/EncryptQuery.java
+++ b/src/main/java/org/apache/pirk/querier/wideskies/encrypt/EncryptQuery.java
@@ -36,6 +36,7 @@ import org.apache.pirk.schema.query.QuerySchema;
 import org.apache.pirk.schema.query.QuerySchemaRegistry;
 import org.apache.pirk.utils.KeyedHash;
 import org.apache.pirk.utils.PIRException;
+import org.apache.pirk.utils.SystemConfiguration;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -104,6 +105,21 @@ public class EncryptQuery
   }
 
   /**
+   * Encrypt, building the Query object, calculating and setting the query vectors.
+   * <p>
+   * Uses the system configured number of threads to conduct the encryption, or a single
thread if the configuration has not been set.
+   * 
+   * @throws InterruptedException
+   *           if the task was interrupted during encryption.
+   * @throws PIRException
+   */
+  public void encrypt() throws InterruptedException, PIRException
+  {
+    int numThreads = Integer.parseInt(SystemConfiguration.getProperty("numThreads", "1"));
+    encrypt(numThreads);
+  }
+
+  /**
    * Encrypt, building the Query object, calculating and setting the query vectors
    * <p>
    * If we have hash collisions over our selector set, we will append integers to the key
starting with 0 until we no longer have collisions.
@@ -122,7 +138,14 @@ public class EncryptQuery
     // Form the embedSelectorMap
     populateEmbeddedSelectorMap();
 
-    parallelEncrypt(numThreads, selectorQueryVecMapping);
+    if (numThreads == 1)
+    {
+      serialEncrypt(selectorQueryVecMapping);
+    }
+    else
+    {
+      parallelEncrypt(Math.max(2, numThreads), selectorQueryVecMapping);
+    }
 
     // Generate the expTable in Query, if we are using it and if
     // useHDFSExpLookupTable is false -- if we are generating it as standalone and not on
the cluster
@@ -195,6 +218,18 @@ public class EncryptQuery
     }
   }
 
+  private void serialEncrypt(HashMap<Integer,Integer> selectorQueryVecMapping) throws
PIRException
+  {
+    int numElements = 1 << queryInfo.getHashBitSize(); // 2^hashBitSize
+    
+    EncryptQueryRunnable runner = new EncryptQueryRunnable(queryInfo.getDataPartitionBitSize(),
paillier, selectorQueryVecMapping, 0, numElements - 1);
+    runner.run();
+
+    query.addQueryElements(runner.getEncryptedValues());
+
+    logger.info("Completed serial creation of encrypted query vectors");
+  }
+
   private void parallelEncrypt(int numThreads, HashMap<Integer,Integer> selectorQueryVecMapping)
throws PIRException
   {
     // Encrypt and form the query vector
@@ -214,16 +249,8 @@ public class EncryptQuery
         stop = numElements - 1;
       }
 
-      // Copy selectorQueryVecMapping (if numThreads > 1) so we don't have to synchronize
- only has size = selectors.size()
-      HashMap<Integer,Integer> selectorQueryVecMappingCopy;
-      if (numThreads == 1)
-      {
-        selectorQueryVecMappingCopy = selectorQueryVecMapping;
-      }
-      else
-      {
-        selectorQueryVecMappingCopy = new HashMap<>(selectorQueryVecMapping);
-      }
+      // Copy selectorQueryVecMapping so we don't have to synchronize - only has size = selectors.size()
+      HashMap<Integer,Integer> selectorQueryVecMappingCopy = new HashMap<>(selectorQueryVecMapping);
 
       // Create the runnable and execute
       EncryptQueryRunnable runEnc = new EncryptQueryRunnable(queryInfo.getDataPartitionBitSize(),
paillier.clone(), selectorQueryVecMappingCopy, start, stop);
@@ -253,6 +280,6 @@ public class EncryptQuery
     {
       query.addQueryElements(runner.getEncryptedValues());
     }
-    logger.info("Completed creation of encrypted query vectors");
+    logger.info("Completed parallel creation of encrypted query vectors");
   }
 }


Mime
View raw message