hawq-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From shiv...@apache.org
Subject incubator-hawq git commit: HAWQ-577. CR fixe take 1
Date Tue, 29 Mar 2016 00:13:18 GMT
Repository: incubator-hawq
Updated Branches:
  refs/heads/HAWQ-577 68e300759 -> ec7f76923


HAWQ-577. CR fixe take 1


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

Branch: refs/heads/HAWQ-577
Commit: ec7f76923d129fa8206703d1563dc1b9f7b6d591
Parents: 68e3007
Author: Shivram Mani <shivram.mani@gmail.com>
Authored: Mon Mar 28 17:13:11 2016 -0700
Committer: Shivram Mani <shivram.mani@gmail.com>
Committed: Mon Mar 28 17:13:11 2016 -0700

----------------------------------------------------------------------
 .../hawq/pxf/service/MetadataResponse.java      | 94 ++++++++++++++++++++
 .../pxf/service/MetadataResponseFormatter.java  |  3 +-
 2 files changed, 95 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/ec7f7692/pxf/pxf-service/src/main/java/org/apache/hawq/pxf/service/MetadataResponse.java
----------------------------------------------------------------------
diff --git a/pxf/pxf-service/src/main/java/org/apache/hawq/pxf/service/MetadataResponse.java
b/pxf/pxf-service/src/main/java/org/apache/hawq/pxf/service/MetadataResponse.java
new file mode 100644
index 0000000..0a9e480
--- /dev/null
+++ b/pxf/pxf-service/src/main/java/org/apache/hawq/pxf/service/MetadataResponse.java
@@ -0,0 +1,94 @@
+package org.apache.hawq.pxf.service;
+
+/*
+ * 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.
+ */
+
+import java.io.DataOutputStream;
+import java.io.IOException;
+import java.io.OutputStream;
+import java.util.List;
+
+import javax.ws.rs.WebApplicationException;
+import javax.ws.rs.core.StreamingOutput;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.hawq.pxf.api.Metadata;
+
+import org.codehaus.jackson.map.ObjectMapper;
+import org.codehaus.jackson.map.annotate.JsonSerialize.Inclusion;
+
+
+/**
+ * Class for serializing metadata in JSON format. The class implements
+ * {@link StreamingOutput} so the serialization will be done in a stream and not
+ * in one bulk, this in order to avoid running out of memory when processing a
+ * lot of items.
+ */
+public class MetadataResponse implements StreamingOutput {
+
+    private static final Log Log = LogFactory.getLog(MetadataResponse.class);
+    private static final String METADATA_DEFAULT_RESPONSE = "{\"PXFMetadata\":[]}";
+
+    private List<Metadata> metadataList;
+
+    /**
+     * Constructs metadata response out of a metadata list
+     *
+     * @param metadataList metadata list
+     */
+    public MetadataResponse(List<Metadata> metadataList) {
+        this.metadataList = metadataList;
+    }
+
+    /**
+     * Serializes the metadata list in JSON, To be used as the result string for HAWQ.
+     */
+    @Override
+    public void write(OutputStream output) throws IOException,
+            WebApplicationException {
+        DataOutputStream dos = new DataOutputStream(output);
+        ObjectMapper mapper = new ObjectMapper();
+        mapper.setSerializationInclusion(Inclusion.NON_EMPTY); // ignore empty fields
+
+        if(metadataList == null || metadataList.isEmpty()) {
+            dos.write(METADATA_DEFAULT_RESPONSE.getBytes());
+            return;
+        }
+
+        dos.write("{\"PXFMetadata\":[".getBytes());
+
+        String prefix = "";
+        for (Metadata metadata : metadataList) {
+            if(metadata == null) {
+                throw new IllegalArgumentException("metadata object is null - cannot serialize");
+            }
+            if ((metadata.getFields() == null) || metadata.getFields().isEmpty()) {
+                throw new IllegalArgumentException("metadata for " + metadata.getItem() +
" contains no fields - cannot serialize");
+            }
+            StringBuilder result = new StringBuilder();
+            /* metaData and userData are automatically converted to Base64 */
+            result.append(prefix).append(mapper.writeValueAsString(metadata));
+            prefix = ",";
+            dos.write(result.toString().getBytes());
+        }
+
+        dos.write("]}".getBytes());
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/ec7f7692/pxf/pxf-service/src/main/java/org/apache/hawq/pxf/service/MetadataResponseFormatter.java
----------------------------------------------------------------------
diff --git a/pxf/pxf-service/src/main/java/org/apache/hawq/pxf/service/MetadataResponseFormatter.java
b/pxf/pxf-service/src/main/java/org/apache/hawq/pxf/service/MetadataResponseFormatter.java
index 6113736..810297b 100644
--- a/pxf/pxf-service/src/main/java/org/apache/hawq/pxf/service/MetadataResponseFormatter.java
+++ b/pxf/pxf-service/src/main/java/org/apache/hawq/pxf/service/MetadataResponseFormatter.java
@@ -68,7 +68,6 @@ public class MetadataResponseFormatter {
 
         for(Metadata metadata: metadataList) {
             StringBuilder result = new StringBuilder();
-            result.append("Metadata for item \"");
 
             if (metadata == null) {
                 result.append("None");
@@ -76,7 +75,7 @@ public class MetadataResponseFormatter {
                 continue;
             }
 
-            result.append(metadata.getItem()).append("\": ");
+            result.("Metadata for item \"").append(metadata.getItem()).append("\": ");
 
             if ((metadata.getFields() == null) || metadata.getFields().isEmpty()) {
                 result.append("None");


Mime
View raw message