Murtadha Hubail has submitted this change and it was merged.

Change subject: Replace Java serialization in checkpoints by Json
......................................................................


Replace Java serialization in checkpoints by Json

Change-Id: Id4353716267d45ce21580ac2856b6a552d05d1f7
Reviewed-on: https://asterix-gerrit.ics.uci.edu/1457
Reviewed-by: Till Westmann <ti...@apache.org>
Sonar-Qube: Jenkins <jenk...@fulliautomatix.ics.uci.edu>
Tested-by: Jenkins <jenk...@fulliautomatix.ics.uci.edu>
BAD: Jenkins <jenk...@fulliautomatix.ics.uci.edu>
Integration-Tests: Jenkins <jenk...@fulliautomatix.ics.uci.edu>
Reviewed-by: abdullah alamoudi <bamou...@gmail.com>
---
M asterixdb/asterix-common/pom.xml
M 
asterixdb/asterix-common/src/main/java/org/apache/asterix/common/transactions/Checkpoint.java
M 
asterixdb/asterix-transactions/src/main/java/org/apache/asterix/transaction/management/service/recovery/AbstractCheckpointManager.java
M asterixdb/pom.xml
4 files changed, 50 insertions(+), 22 deletions(-)

Approvals:
  abdullah alamoudi: Looks good to me, approved
  Till Westmann: Looks good to me, but someone else must approve
  Jenkins: Verified; No violations found; No violations found; Verified



diff --git a/asterixdb/asterix-common/pom.xml b/asterixdb/asterix-common/pom.xml
index cb5075a..7df1da6 100644
--- a/asterixdb/asterix-common/pom.xml
+++ b/asterixdb/asterix-common/pom.xml
@@ -311,6 +311,10 @@
       <groupId>org.apache.hyracks</groupId>
       <artifactId>hyracks-data-std</artifactId>
     </dependency>
+    <dependency>
+      <groupId>com.fasterxml.jackson.core</groupId>
+      <artifactId>jackson-annotations</artifactId>
+    </dependency>
   </dependencies>
 
 </project>
diff --git 
a/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/transactions/Checkpoint.java
 
b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/transactions/Checkpoint.java
index 8bbdab7..a74898e 100644
--- 
a/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/transactions/Checkpoint.java
+++ 
b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/transactions/Checkpoint.java
@@ -18,11 +18,16 @@
  */
 package org.apache.asterix.common.transactions;
 
-import java.io.Serializable;
+import java.io.IOException;
 
-public class Checkpoint implements Serializable, Comparable<Checkpoint> {
+import org.apache.hyracks.api.exceptions.HyracksDataException;
 
-    private static final long serialVersionUID = 1L;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+
+public class Checkpoint implements Comparable<Checkpoint> {
 
     private final long checkpointLsn;
     private final long minMCTFirstLsn;
@@ -31,8 +36,11 @@
     private final boolean sharp;
     private final int storageVersion;
 
-    public Checkpoint(long checkpointLsn, long minMCTFirstLsn, int maxJobId, 
long timeStamp, boolean sharp,
-            int storageVersion) {
+    @JsonCreator
+    public Checkpoint(@JsonProperty("checkpointLsn") long checkpointLsn,
+            @JsonProperty("minMCTFirstLsn") long minMCTFirstLsn, 
@JsonProperty("maxJobId") int maxJobId,
+            @JsonProperty("timeStamp") long timeStamp, @JsonProperty("sharp") 
boolean sharp,
+            @JsonProperty("storageVersion") int storageVersion) {
         this.checkpointLsn = checkpointLsn;
         this.minMCTFirstLsn = minMCTFirstLsn;
         this.maxJobId = maxJobId;
@@ -107,4 +115,20 @@
         result = prime * result + (int) (timeStamp ^ (timeStamp >>> 32));
         return result;
     }
-}
+
+    public String asJson() throws HyracksDataException {
+        try {
+            return new ObjectMapper().writeValueAsString(this);
+        } catch (JsonProcessingException e) {
+            throw new HyracksDataException(e);
+        }
+    }
+
+    public static Checkpoint fromJson(String json) throws HyracksDataException 
{
+        try {
+            return new ObjectMapper().readValue(json, Checkpoint.class);
+        } catch (IOException e) {
+            throw new HyracksDataException(e);
+        }
+    }
+}
\ No newline at end of file
diff --git 
a/asterixdb/asterix-transactions/src/main/java/org/apache/asterix/transaction/management/service/recovery/AbstractCheckpointManager.java
 
b/asterixdb/asterix-transactions/src/main/java/org/apache/asterix/transaction/management/service/recovery/AbstractCheckpointManager.java
index 0b86ea5..d2650e9 100644
--- 
a/asterixdb/asterix-transactions/src/main/java/org/apache/asterix/transaction/management/service/recovery/AbstractCheckpointManager.java
+++ 
b/asterixdb/asterix-transactions/src/main/java/org/apache/asterix/transaction/management/service/recovery/AbstractCheckpointManager.java
@@ -18,14 +18,14 @@
  */
 package org.apache.asterix.transaction.management.service.recovery;
 
+import java.io.BufferedWriter;
 import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileOutputStream;
 import java.io.FilenameFilter;
 import java.io.IOException;
-import java.io.ObjectInputStream;
-import java.io.ObjectOutputStream;
 import java.io.OutputStream;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collections;
@@ -84,15 +84,12 @@
         if (checkpoints == null || checkpoints.length == 0) {
             return null;
         }
-
-        Checkpoint checkpointObject;
         List<Checkpoint> checkpointObjectList = new ArrayList<>();
         for (File file : checkpoints) {
-            try (FileInputStream fis = new FileInputStream(file);
-                    ObjectInputStream oisFromFis = new ObjectInputStream(fis)) 
{
-                checkpointObject = (Checkpoint) oisFromFis.readObject();
-                checkpointObjectList.add(checkpointObject);
-            } catch (IOException | ClassNotFoundException e) {
+            try {
+                String jsonString = new 
String(Files.readAllBytes(Paths.get(file.getAbsolutePath())));
+                checkpointObjectList.add(Checkpoint.fromJson(jsonString));
+            } catch (IOException e) {
                 throw new ACIDException("Failed to read a checkpoint file", e);
             }
         }
@@ -139,12 +136,10 @@
         // Construct checkpoint file name
         String fileName = checkpointDir.getAbsolutePath() + File.separator + 
CHECKPOINT_FILENAME_PREFIX
                 + Long.toString(checkpoint.getTimeStamp());
-        //TODO: replace java serialization
         // Write checkpoint file to disk
-        try (FileOutputStream fos = new FileOutputStream(fileName);
-                ObjectOutputStream oosToFos = new ObjectOutputStream(fos)) {
-            oosToFos.writeObject(checkpoint);
-            oosToFos.flush();
+        Path path = Paths.get(fileName);
+        try (BufferedWriter writer = Files.newBufferedWriter(path)) {
+            writer.write(checkpoint.asJson());
         } catch (IOException e) {
             throw new HyracksDataException("Failed to write checkpoint to 
disk", e);
         }
diff --git a/asterixdb/pom.xml b/asterixdb/pom.xml
index dfc4f7b..51f8789 100644
--- a/asterixdb/pom.xml
+++ b/asterixdb/pom.xml
@@ -1011,6 +1011,11 @@
         <version>2.8.4</version>
       </dependency>
       <dependency>
+        <groupId>com.fasterxml.jackson.core</groupId>
+        <artifactId>jackson-annotations</artifactId>
+        <version>2.8.4</version>
+      </dependency>
+      <dependency>
         <groupId>com.google.guava</groupId>
         <artifactId>guava</artifactId>
         <version>18.0</version>

-- 
To view, visit https://asterix-gerrit.ics.uci.edu/1457
To unsubscribe, visit https://asterix-gerrit.ics.uci.edu/settings

Gerrit-MessageType: merged
Gerrit-Change-Id: Id4353716267d45ce21580ac2856b6a552d05d1f7
Gerrit-PatchSet: 4
Gerrit-Project: asterixdb
Gerrit-Branch: master
Gerrit-Owner: Murtadha Hubail <hubail...@gmail.com>
Gerrit-Reviewer: Jenkins <jenk...@fulliautomatix.ics.uci.edu>
Gerrit-Reviewer: Murtadha Hubail <hubail...@gmail.com>
Gerrit-Reviewer: Till Westmann <ti...@apache.org>
Gerrit-Reviewer: abdullah alamoudi <bamou...@gmail.com>

Reply via email to