Repository: incubator-pirk Updated Branches: refs/heads/master 2155f9b9f -> 4abbefea7
PIRK-77 Add back in Default Serial IDs for Classes - Add Serialization Type Option - closes apache/incubator-pirk#110 Project: http://git-wip-us.apache.org/repos/asf/incubator-pirk/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-pirk/commit/4abbefea Tree: http://git-wip-us.apache.org/repos/asf/incubator-pirk/tree/4abbefea Diff: http://git-wip-us.apache.org/repos/asf/incubator-pirk/diff/4abbefea Branch: refs/heads/master Commit: 4abbefea79f9e689e507019c6db071f5a6ad4371 Parents: 2155f9b Author: eawilliams <eawilli...@apache.org> Authored: Sat Oct 15 20:34:40 2016 -0400 Committer: eawilliams <eawilli...@apache.org> Committed: Sat Oct 15 20:34:40 2016 -0400 ---------------------------------------------------------------------- .../org/apache/pirk/encryption/Paillier.java | 60 +++++++++++++------- .../apache/pirk/querier/wideskies/Querier.java | 17 ++++-- .../querier/wideskies/QuerierDeserializer.java | 12 ++-- .../org/apache/pirk/query/wideskies/Query.java | 23 +++++--- .../pirk/query/wideskies/QueryDeserializer.java | 24 ++++---- .../apache/pirk/query/wideskies/QueryInfo.java | 44 +++++++++----- .../pirk/responder/wideskies/ResponderCLI.java | 2 +- .../responder/wideskies/ResponderProps.java | 2 +- .../pirk/response/wideskies/Response.java | 11 +++- .../wideskies/ResponseDeserializer.java | 7 +-- .../apache/pirk/schema/query/QuerySchema.java | 29 +++++++--- .../pirk/serialization/JsonSerializer.java | 24 +++++--- .../pirk/serialization/StorageService.java | 11 +++- src/main/resources/pirk.properties | 3 + 14 files changed, 177 insertions(+), 92 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-pirk/blob/4abbefea/src/main/java/org/apache/pirk/encryption/Paillier.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/pirk/encryption/Paillier.java b/src/main/java/org/apache/pirk/encryption/Paillier.java index da14bba..6502e0d 100644 --- a/src/main/java/org/apache/pirk/encryption/Paillier.java +++ b/src/main/java/org/apache/pirk/encryption/Paillier.java @@ -96,8 +96,10 @@ public final class Paillier implements Serializable } } - @Expose private BigInteger p; // large prime - @Expose private BigInteger q; // large prime + @Expose + private BigInteger p; // large prime + @Expose + private BigInteger q; // large prime private BigInteger N; // N=pq, RSA modulus private BigInteger NSquared; // NSquared = N^2 @@ -105,15 +107,20 @@ public final class Paillier implements Serializable private BigInteger lambdaN; // lambda(N) = lcm(p-1,q-1), Carmichael function of N private BigInteger w; // lambda(N)^-1 mod N - @Expose private final int bitLength; // bit length of the modulus N + @Expose + private final int bitLength; // bit length of the modulus N /** * Creates a Paillier algorithm with all parameters specified. * - * @param p First large prime. - * @param q Second large prime. - * @param bitLength Bit length of the modulus {@code N}. - * @throws IllegalArgumentException If {@code p} or {@code q} do not satisfy primality constraints. + * @param p + * First large prime. + * @param q + * Second large prime. + * @param bitLength + * Bit length of the modulus {@code N}. + * @throws IllegalArgumentException + * If {@code p} or {@code q} do not satisfy primality constraints. */ public Paillier(BigInteger p, BigInteger q, int bitLength) { @@ -145,9 +152,12 @@ public final class Paillier implements Serializable * The probability that the generated keys represent primes will exceed (1 - (1/2)<sup>{@code certainty}</sup>). The execution time of this constructor is * proportional to the value of this parameter. * - * @param bitLength The bit length of the resulting modulus {@code N}. - * @param certainty The probability that the new {@code p} and {@code q} represent prime numbers. - * @throws IllegalArgumentException If the {@code certainty} is less than the system allowed lower bound. + * @param bitLength + * The bit length of the resulting modulus {@code N}. + * @param certainty + * The probability that the new {@code p} and {@code q} represent prime numbers. + * @throws IllegalArgumentException + * If the {@code certainty} is less than the system allowed lower bound. */ public Paillier(int bitLength, int certainty) { @@ -164,10 +174,14 @@ public final class Paillier implements Serializable * <p> * When ensureBitSet > -1 the value of bit "{@code ensureBitSet}" in modulus {@code N} will be set. * - * @param bitLength The bit length of the resulting modulus {@code N}. - * @param certainty The probability that the new {@code p} and {@code q} represent prime numbers. - * @param ensureBitSet index of bit in {@code N} to ensure is set. - * @throws IllegalArgumentException If the {@code certainty} is less than the system allowed lower bound, or the index of {@code ensureBitSet} is greater than the {@code bitLength}. + * @param bitLength + * The bit length of the resulting modulus {@code N}. + * @param certainty + * The probability that the new {@code p} and {@code q} represent prime numbers. + * @param ensureBitSet + * index of bit in {@code N} to ensure is set. + * @throws IllegalArgumentException + * If the {@code certainty} is less than the system allowed lower bound, or the index of {@code ensureBitSet} is greater than the {@code bitLength}. */ public Paillier(int bitLength, int certainty, int ensureBitSet) { @@ -287,9 +301,11 @@ public final class Paillier implements Serializable /** * Returns the encrypted value of {@code m} using a generated random value. * - * @param m the value to be encrypted. + * @param m + * the value to be encrypted. * @return the encrypted value - * @throws PIRException If {@code m} is not less than @{code N}. + * @throws PIRException + * If {@code m} is not less than @{code N}. */ public BigInteger encrypt(BigInteger m) throws PIRException { @@ -306,10 +322,13 @@ public final class Paillier implements Serializable /** * Returns the ciphertext of a message using the given random value. * - * @param m the value to be encrypted. - * @param r the random value to use in the Pailler encryption. + * @param m + * the value to be encrypted. + * @param r + * the random value to use in the Pailler encryption. * @return the encrypted value. - * @throws PIRException If {@code m} is not less than @{code N}. + * @throws PIRException + * If {@code m} is not less than @{code N}. */ public BigInteger encrypt(BigInteger m, BigInteger r) throws PIRException { @@ -328,7 +347,8 @@ public final class Paillier implements Serializable /** * Returns the plaintext message for a given ciphertext. * - * @param c an encrypted value. + * @param c + * an encrypted value. * @return the corresponding plaintext value. */ public BigInteger decrypt(BigInteger c) http://git-wip-us.apache.org/repos/asf/incubator-pirk/blob/4abbefea/src/main/java/org/apache/pirk/querier/wideskies/Querier.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/pirk/querier/wideskies/Querier.java b/src/main/java/org/apache/pirk/querier/wideskies/Querier.java index efb5a11..bb08cbb 100644 --- a/src/main/java/org/apache/pirk/querier/wideskies/Querier.java +++ b/src/main/java/org/apache/pirk/querier/wideskies/Querier.java @@ -32,20 +32,27 @@ import org.apache.pirk.serialization.Storable; */ public class Querier implements Serializable, Storable { + private static final long serialVersionUID = 1L; + public static final long querierSerialVersionUID = 1L; - @Expose public final long querierVersion = querierSerialVersionUID; + @Expose + public final long querierVersion = querierSerialVersionUID; - @Expose private Query query = null; // contains the query vectors and functionality + @Expose + private Query query = null; // contains the query vectors and functionality - @Expose private Paillier paillier = null; // Paillier encryption functionality + @Expose + private Paillier paillier = null; // Paillier encryption functionality - @Expose private List<String> selectors = null; // selectors + @Expose + private List<String> selectors = null; // selectors // map to check the embedded selectors in the results for false positives; // if the selector is a fixed size < 32 bits, it is included as is // if the selector is of variable lengths - @Expose private Map<Integer,String> embedSelectorMap = null; + @Expose + private Map<Integer,String> embedSelectorMap = null; public Querier(List<String> selectorsInput, Paillier paillierInput, Query queryInput, Map<Integer,String> embedSelectorMapInput) { http://git-wip-us.apache.org/repos/asf/incubator-pirk/blob/4abbefea/src/main/java/org/apache/pirk/querier/wideskies/QuerierDeserializer.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/pirk/querier/wideskies/QuerierDeserializer.java b/src/main/java/org/apache/pirk/querier/wideskies/QuerierDeserializer.java index 6971a26..c74f6b1 100644 --- a/src/main/java/org/apache/pirk/querier/wideskies/QuerierDeserializer.java +++ b/src/main/java/org/apache/pirk/querier/wideskies/QuerierDeserializer.java @@ -41,7 +41,8 @@ public class QuerierDeserializer implements JsonDeserializer<Querier> private static final Gson gson = new Gson(); - @Override public Querier deserialize(JsonElement jsonElement, Type type, JsonDeserializationContext jsonDeserializationContext) throws JsonParseException + @Override + public Querier deserialize(JsonElement jsonElement, Type type, JsonDeserializationContext jsonDeserializationContext) throws JsonParseException { JsonObject jsonObject = jsonElement.getAsJsonObject(); // Check the version number. @@ -58,11 +59,9 @@ public class QuerierDeserializer implements JsonDeserializer<Querier> Paillier paillier = deserializePaillier(jsonObject.get("paillier").getAsJsonObject()); List<String> selectors = gson.fromJson(jsonObject.get("selectors").toString(), new TypeToken<List<String>>() - { - }.getType()); + {}.getType()); Map<Integer,String> embedSelectorMap = gson.fromJson(jsonObject.get("embedSelectorMap").toString(), new TypeToken<Map<Integer,String>>() - { - }.getType()); + {}.getType()); return new Querier(selectors, paillier, query, embedSelectorMap); } @@ -70,7 +69,8 @@ public class QuerierDeserializer implements JsonDeserializer<Querier> /** * Deserializes a Paillier JsonObject. * - * @param paillier A JsonObject at the root of a serialied Paillier object. + * @param paillier + * A JsonObject at the root of a serialied Paillier object. * @return A Paillier object of the deserialized Json. */ private Paillier deserializePaillier(JsonObject paillier) http://git-wip-us.apache.org/repos/asf/incubator-pirk/blob/4abbefea/src/main/java/org/apache/pirk/query/wideskies/Query.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/pirk/query/wideskies/Query.java b/src/main/java/org/apache/pirk/query/wideskies/Query.java index 4922d9d..cf5a3a9 100644 --- a/src/main/java/org/apache/pirk/query/wideskies/Query.java +++ b/src/main/java/org/apache/pirk/query/wideskies/Query.java @@ -38,16 +38,21 @@ import org.slf4j.LoggerFactory; public class Query implements Serializable, Storable { + private static final long serialVersionUID = 1L; + public static final long querySerialVersionUID = 1L; // So that we can serialize the version number in gson. - @Expose public final long queryVersion = querySerialVersionUID; + @Expose + public final long queryVersion = querySerialVersionUID; private static final Logger logger = LoggerFactory.getLogger(Query.class); - @Expose private final QueryInfo queryInfo; // holds all query info + @Expose + private final QueryInfo queryInfo; // holds all query info - @Expose private final SortedMap<Integer,BigInteger> queryElements; // query elements - ordered on insertion + @Expose + private final SortedMap<Integer,BigInteger> queryElements; // query elements - ordered on insertion // lookup table for exponentiation of query vectors - based on dataPartitionBitSize // element -> <power, element^power mod N^2> @@ -55,11 +60,14 @@ public class Query implements Serializable, Storable // File based lookup table for modular exponentiation // element hash -> filename containing it's <power, element^power mod N^2> modular exponentiations - @Expose private Map<Integer,String> expFileBasedLookup = new HashMap<>(); + @Expose + private Map<Integer,String> expFileBasedLookup = new HashMap<>(); - @Expose private final BigInteger N; // N=pq, RSA modulus for the Paillier encryption associated with the queryElements + @Expose + private final BigInteger N; // N=pq, RSA modulus for the Paillier encryption associated with the queryElements - @Expose private final BigInteger NSquared; + @Expose + private final BigInteger NSquared; public Query(QueryInfo queryInfo, BigInteger N, SortedMap<Integer,BigInteger> queryElements) { @@ -124,7 +132,8 @@ public class Query implements Serializable, Storable queryElements.values().parallelStream().forEach(new Consumer<BigInteger>() { - @Override public void accept(BigInteger element) + @Override + public void accept(BigInteger element) { Map<Integer,BigInteger> powMap = new HashMap<>(maxValue); // <power, element^power mod N^2> for (int i = 0; i <= maxValue; ++i) http://git-wip-us.apache.org/repos/asf/incubator-pirk/blob/4abbefea/src/main/java/org/apache/pirk/query/wideskies/QueryDeserializer.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/pirk/query/wideskies/QueryDeserializer.java b/src/main/java/org/apache/pirk/query/wideskies/QueryDeserializer.java index 92fdfa0..3a5256d 100644 --- a/src/main/java/org/apache/pirk/query/wideskies/QueryDeserializer.java +++ b/src/main/java/org/apache/pirk/query/wideskies/QueryDeserializer.java @@ -52,7 +52,8 @@ public class QueryDeserializer implements JsonDeserializer<Query> private static final Gson gson = new Gson(); - @Override public Query deserialize(JsonElement jsonElement, Type type, JsonDeserializationContext jsonDeserializationContext) throws JsonParseException + @Override + public Query deserialize(JsonElement jsonElement, Type type, JsonDeserializationContext jsonDeserializationContext) throws JsonParseException { JsonObject jsonObject = jsonElement.getAsJsonObject(); logger.info("Got query json:" + jsonObject.toString()); @@ -66,13 +67,11 @@ public class QueryDeserializer implements JsonDeserializer<Query> // Then deserialize the Query Info QueryInfo queryInfo = deserializeInfo(jsonObject.get("queryInfo").getAsJsonObject()); SortedMap<Integer,BigInteger> queryElements = gson.fromJson(jsonObject.get("queryElements"), new TypeToken<SortedMap<Integer,BigInteger>>() - { - }.getType()); + {}.getType()); BigInteger N = new BigInteger(jsonObject.get("n").getAsString()); BigInteger NSquared = new BigInteger(jsonObject.get("nsquared").getAsString()); Map<Integer,String> expFileBasedLookup = gson.fromJson(jsonObject.get("expFileBasedLookup"), new TypeToken<Map<Integer,String>>() - { - }.getType()); + {}.getType()); Query query = new Query(queryInfo, N, NSquared, queryElements); query.setExpFileBasedLookup(expFileBasedLookup); @@ -82,7 +81,8 @@ public class QueryDeserializer implements JsonDeserializer<Query> /** * Deserializes a QueryInfo JsonObject * - * @param queryInfoJson A JsonObject at the root of a serialized QueryInfo object. + * @param queryInfoJson + * A JsonObject at the root of a serialized QueryInfo object. * @return A QueryInfo object of the deserialized Json. * @throws JsonParseException */ @@ -116,7 +116,8 @@ public class QueryDeserializer implements JsonDeserializer<Query> /** * Deserializes a QuerySchema JsonObject * - * @param querySchemaJson A JsonObject at the root of a serialized QuerySchema object. + * @param querySchemaJson + * A JsonObject at the root of a serialized QuerySchema object. * @return A QuerySchema object of the deserialized Json. * @throws JsonParseException */ @@ -134,8 +135,7 @@ public class QueryDeserializer implements JsonDeserializer<Query> try { filteredElementNames = gson.fromJson(querySchemaJson.get("filteredElementNames"), new TypeToken<Set<String>>() - { - }.getType()); + {}.getType()); } catch (Exception e) { logger.warn("No filtered element names for Query Schema deserialization."); @@ -155,12 +155,10 @@ public class QueryDeserializer implements JsonDeserializer<Query> QuerySchema querySchema = new QuerySchema(querySchemaJson.get("schemaName").getAsString(), querySchemaJson.get("dataSchemaName").getAsString(), querySchemaJson.get("selectorName").getAsString(), dataFilterName, dataFilter, querySchemaJson.get("dataElementSize").getAsInt()); List<String> elementNames = gson.fromJson(querySchemaJson.get("elementNames"), new TypeToken<List<String>>() - { - }.getType()); + {}.getType()); querySchema.getElementNames().addAll(elementNames); HashMap<String,String> additionalFields = gson.fromJson(querySchemaJson.get("additionalFields"), new TypeToken<HashMap<String,String>>() - { - }.getType()); + {}.getType()); querySchema.getAdditionalFields().putAll(additionalFields); return querySchema; } http://git-wip-us.apache.org/repos/asf/incubator-pirk/blob/4abbefea/src/main/java/org/apache/pirk/query/wideskies/QueryInfo.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/pirk/query/wideskies/QueryInfo.java b/src/main/java/org/apache/pirk/query/wideskies/QueryInfo.java index 20fbb36..999bf76 100644 --- a/src/main/java/org/apache/pirk/query/wideskies/QueryInfo.java +++ b/src/main/java/org/apache/pirk/query/wideskies/QueryInfo.java @@ -38,39 +38,54 @@ import java.util.UUID; */ public class QueryInfo implements Serializable, Cloneable { + private static final long serialVersionUID = 1L; + public static final long queryInfoSerialVersionUID = 1L; // So that we can serialize the version number in gson. - @Expose public final long queryInfoVersion = queryInfoSerialVersionUID; + @Expose + public final long queryInfoVersion = queryInfoSerialVersionUID; private static final Logger logger = LoggerFactory.getLogger(QueryInfo.class); - @Expose private UUID identifier; // the identifier of the query + @Expose + private UUID identifier; // the identifier of the query - @Expose private int numSelectors = 0; // the number of selectors in the query, given by \floor{paillerBitSize/dataPartitionBitSize} + @Expose + private int numSelectors = 0; // the number of selectors in the query, given by \floor{paillerBitSize/dataPartitionBitSize} - @Expose private String queryType = null; // QueryType string const + @Expose + private String queryType = null; // QueryType string const - @Expose private int hashBitSize = 0; // Bit size of the keyed hash function + @Expose + private int hashBitSize = 0; // Bit size of the keyed hash function - @Expose private String hashKey; // Key for the keyed hash function + @Expose + private String hashKey; // Key for the keyed hash function - @Expose private int numBitsPerDataElement = 0; // total num bits per returned data value - defined relative to query type + @Expose + private int numBitsPerDataElement = 0; // total num bits per returned data value - defined relative to query type - @Expose private int dataPartitionBitSize = 0; // num of bits for each partition of an incoming data element, must be < 32 right now + @Expose + private int dataPartitionBitSize = 0; // num of bits for each partition of an incoming data element, must be < 32 right now - @Expose private int numPartitionsPerDataElement = 0; // num partitions of size dataPartitionBitSize per data element + @Expose + private int numPartitionsPerDataElement = 0; // num partitions of size dataPartitionBitSize per data element - @Expose private boolean useExpLookupTable = false; // whether or not to generate and use the expLookupTable for encryption, it is very expensive to compute + @Expose + private boolean useExpLookupTable = false; // whether or not to generate and use the expLookupTable for encryption, it is very expensive to compute - @Expose private boolean useHDFSExpLookupTable = false; // whether or not to use the expLookupTable stored in HDFS + @Expose + private boolean useHDFSExpLookupTable = false; // whether or not to use the expLookupTable stored in HDFS // if it doesn't yet exist, it will be created within the cluster and stored in HDFS - @Expose private boolean embedSelector = true; // whether or not to embed the selector in the results - results in a very low + @Expose + private boolean embedSelector = true; // whether or not to embed the selector in the results - results in a very low // false positive rate for variable length selectors and a zero false positive rate // for selectors of fixed size < 32 bits - @Expose private QuerySchema qSchema = null; + @Expose + private QuerySchema qSchema = null; public QueryInfo(int numSelectorsInput, int hashBitSizeInput, String hashKeyInput, int dataPartitionBitSizeInput, String queryTypeInput, boolean useExpLookupTableInput, boolean embedSelectorInput, boolean useHDFSExpLookupTableInput) @@ -253,7 +268,8 @@ public class QueryInfo implements Serializable, Cloneable + useHDFSExpLookupTable + " embedSelector = " + embedSelector); } - @Override public QueryInfo clone() + @Override + public QueryInfo clone() { try { http://git-wip-us.apache.org/repos/asf/incubator-pirk/blob/4abbefea/src/main/java/org/apache/pirk/responder/wideskies/ResponderCLI.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/pirk/responder/wideskies/ResponderCLI.java b/src/main/java/org/apache/pirk/responder/wideskies/ResponderCLI.java index ef24326..f69f9cf 100644 --- a/src/main/java/org/apache/pirk/responder/wideskies/ResponderCLI.java +++ b/src/main/java/org/apache/pirk/responder/wideskies/ResponderCLI.java @@ -406,7 +406,7 @@ public class ResponderCLI optionAllowEmbeddedQS.setArgName(ResponderProps.ALLOWEMBEDDEDQUERYSCHEMAS); optionAllowEmbeddedQS.setType(String.class); options.addOption(optionAllowEmbeddedQS); - + // embedQS Option optionEmbedQS = new Option("embedQS", ResponderProps.EMBEDQUERYSCHEMA, true, "optional -- 'true' or 'false' (defaults to 'false') -- " + "If true, the embedded QuerySchema for the query."); http://git-wip-us.apache.org/repos/asf/incubator-pirk/blob/4abbefea/src/main/java/org/apache/pirk/responder/wideskies/ResponderProps.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/pirk/responder/wideskies/ResponderProps.java b/src/main/java/org/apache/pirk/responder/wideskies/ResponderProps.java index 7124531..8180df8 100644 --- a/src/main/java/org/apache/pirk/responder/wideskies/ResponderProps.java +++ b/src/main/java/org/apache/pirk/responder/wideskies/ResponderProps.java @@ -266,7 +266,7 @@ public class ResponderProps { SystemConfiguration.setProperty(EMBEDQUERYSCHEMA, "false"); } - + if (!SystemConfiguration.hasProperty(USELOCALCACHE)) { SystemConfiguration.setProperty(USELOCALCACHE, "true"); http://git-wip-us.apache.org/repos/asf/incubator-pirk/blob/4abbefea/src/main/java/org/apache/pirk/response/wideskies/Response.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/pirk/response/wideskies/Response.java b/src/main/java/org/apache/pirk/response/wideskies/Response.java index b94b977..5fa0abd 100644 --- a/src/main/java/org/apache/pirk/response/wideskies/Response.java +++ b/src/main/java/org/apache/pirk/response/wideskies/Response.java @@ -33,13 +33,18 @@ import org.apache.pirk.serialization.Storable; */ public class Response implements Serializable, Storable { + private static final long serialVersionUID = 1L; + public static final long responseSerialVersionUID = 1L; - @Expose public final long responseVersion = responseSerialVersionUID; + @Expose + public final long responseVersion = responseSerialVersionUID; - @Expose private QueryInfo queryInfo = null; // holds all query info + @Expose + private QueryInfo queryInfo = null; // holds all query info - @Expose private TreeMap<Integer,BigInteger> responseElements = null; // encrypted response columns, colNum -> column + @Expose + private TreeMap<Integer,BigInteger> responseElements = null; // encrypted response columns, colNum -> column public Response(QueryInfo queryInfoInput) { http://git-wip-us.apache.org/repos/asf/incubator-pirk/blob/4abbefea/src/main/java/org/apache/pirk/response/wideskies/ResponseDeserializer.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/pirk/response/wideskies/ResponseDeserializer.java b/src/main/java/org/apache/pirk/response/wideskies/ResponseDeserializer.java index f1588c6..719833f 100644 --- a/src/main/java/org/apache/pirk/response/wideskies/ResponseDeserializer.java +++ b/src/main/java/org/apache/pirk/response/wideskies/ResponseDeserializer.java @@ -40,7 +40,8 @@ public class ResponseDeserializer implements JsonDeserializer<Response> private static final Gson gson = new Gson(); - @Override public Response deserialize(JsonElement jsonElement, Type type, JsonDeserializationContext jsonDeserializationContext) throws JsonParseException + @Override + public Response deserialize(JsonElement jsonElement, Type type, JsonDeserializationContext jsonDeserializationContext) throws JsonParseException { final JsonObject jsonObject = jsonElement.getAsJsonObject(); long responseVersion = jsonObject.get("responseVersion").getAsLong(); @@ -52,10 +53,8 @@ public class ResponseDeserializer implements JsonDeserializer<Response> QueryInfo queryInfo = QueryDeserializer.deserializeInfo(jsonObject.get("queryInfo").getAsJsonObject()); Response response = new Response(queryInfo); TreeMap<Integer,BigInteger> responseElements = gson.fromJson(jsonObject.get("responseElements"), new TypeToken<TreeMap<Integer,BigInteger>>() - { - }.getType()); + {}.getType()); response.setResponseElements(responseElements); return response; } } - http://git-wip-us.apache.org/repos/asf/incubator-pirk/blob/4abbefea/src/main/java/org/apache/pirk/schema/query/QuerySchema.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/pirk/schema/query/QuerySchema.java b/src/main/java/org/apache/pirk/schema/query/QuerySchema.java index c22c384..59d74fe 100644 --- a/src/main/java/org/apache/pirk/schema/query/QuerySchema.java +++ b/src/main/java/org/apache/pirk/schema/query/QuerySchema.java @@ -33,38 +33,49 @@ import java.util.Set; */ public class QuerySchema implements Serializable { + private static final long serialVersionUID = 1L; + public static final long querySchemaSerialVersionUID = 1L; // So that we can serialize the version number in gson. - @Expose public final long querySchemaVersion = querySchemaSerialVersionUID; + @Expose + public final long querySchemaVersion = querySchemaSerialVersionUID; // This schema's name. - @Expose private final String schemaName; + @Expose + private final String schemaName; // Name of the data schema associated with this query schema. - @Expose private final String dataSchemaName; + @Expose + private final String dataSchemaName; // Name of element in the dataSchema to be used as the selector. - @Expose private final String selectorName; + @Expose + private final String selectorName; // Element names from the data schema to include in the response. // Order matters for packing/unpacking. - @Expose private final List<String> elementNames = new ArrayList<>(); + @Expose + private final List<String> elementNames = new ArrayList<>(); // Name of class to use in data filtering. - @Expose private final String filterTypeName; + @Expose + private final String filterTypeName; // Instance of the filterTypeName. private final DataFilter filter; // Set of data schema element names on which to apply filtering. - @Expose private final Set<String> filteredElementNames = new HashSet<>(); + @Expose + private final Set<String> filteredElementNames = new HashSet<>(); // Total number of bits to be returned for each data element hit. - @Expose private final int dataElementSize; + @Expose + private final int dataElementSize; // Addiional fields by key,value - @Expose private final HashMap<String,String> additionalFields = new HashMap<>(); + @Expose + private final HashMap<String,String> additionalFields = new HashMap<>(); public QuerySchema(String schemaName, String dataSchemaName, String selectorName, String filterTypeName, DataFilter filter, int dataElementSize) { http://git-wip-us.apache.org/repos/asf/incubator-pirk/blob/4abbefea/src/main/java/org/apache/pirk/serialization/JsonSerializer.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/pirk/serialization/JsonSerializer.java b/src/main/java/org/apache/pirk/serialization/JsonSerializer.java index ea4cabd..d3246ce 100644 --- a/src/main/java/org/apache/pirk/serialization/JsonSerializer.java +++ b/src/main/java/org/apache/pirk/serialization/JsonSerializer.java @@ -44,11 +44,15 @@ public class JsonSerializer extends SerializationService /** * Stores the given object on the output stream as JSON. * - * @param outputStream The stream on which to store the object. - * @param obj The object to be stored. - * @throws IOException If a problem occurs storing the object on the given stream. + * @param outputStream + * The stream on which to store the object. + * @param obj + * The object to be stored. + * @throws IOException + * If a problem occurs storing the object on the given stream. */ - @Override public void write(OutputStream outputStream, Storable obj) throws IOException + @Override + public void write(OutputStream outputStream, Storable obj) throws IOException { Writer writer = new OutputStreamWriter(outputStream); gson.toJson(obj, obj.getClass(), writer); @@ -58,11 +62,15 @@ public class JsonSerializer extends SerializationService /** * Read a JSON string from the given input stream and returns the Object representation. * - * @param inputStream The stream from which to read the object. - * @param classType The type of object being retrieved. - * @throws IOException If a problem occurs reading the object from the stream. + * @param inputStream + * The stream from which to read the object. + * @param classType + * The type of object being retrieved. + * @throws IOException + * If a problem occurs reading the object from the stream. */ - @Override public <T> T read(InputStream inputStream, Class<T> classType) throws IOException + @Override + public <T> T read(InputStream inputStream, Class<T> classType) throws IOException { Reader reader = new InputStreamReader(inputStream); return gson.fromJson(reader, classType); http://git-wip-us.apache.org/repos/asf/incubator-pirk/blob/4abbefea/src/main/java/org/apache/pirk/serialization/StorageService.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/pirk/serialization/StorageService.java b/src/main/java/org/apache/pirk/serialization/StorageService.java index 74f7f03..2f85553 100644 --- a/src/main/java/org/apache/pirk/serialization/StorageService.java +++ b/src/main/java/org/apache/pirk/serialization/StorageService.java @@ -18,6 +18,8 @@ *******************************************************************************/ package org.apache.pirk.serialization; +import org.apache.pirk.utils.SystemConfiguration; + /** * Common supertype for types that can store objects using serialization. */ @@ -27,7 +29,14 @@ abstract class StorageService StorageService() { - this.setSerializer(new JsonSerializer()); + if (SystemConfiguration.getBooleanProperty("pirk.serialization.java", false)) + { + this.setSerializer(new JavaSerializer()); + } + else + { + this.setSerializer(new JsonSerializer()); + } } StorageService(SerializationService service) http://git-wip-us.apache.org/repos/asf/incubator-pirk/blob/4abbefea/src/main/resources/pirk.properties ---------------------------------------------------------------------- diff --git a/src/main/resources/pirk.properties b/src/main/resources/pirk.properties index 543b8b1..4a76beb 100755 --- a/src/main/resources/pirk.properties +++ b/src/main/resources/pirk.properties @@ -82,6 +82,9 @@ data.schemas = none #Comma separated list of local query schema files to load, fully qualified file names query.schemas = none +#Whether or not to use Java serialization (otherwise, JSON serialization is used) +pirk.serialization.java=true + ## ##Properties for ElasticSearch compatibility ##