Return-Path: X-Original-To: archive-asf-public-internal@cust-asf2.ponee.io Delivered-To: archive-asf-public-internal@cust-asf2.ponee.io Received: from cust-asf.ponee.io (cust-asf.ponee.io [163.172.22.183]) by cust-asf2.ponee.io (Postfix) with ESMTP id EFBCF200C07 for ; Sun, 22 Jan 2017 17:44:08 +0100 (CET) Received: by cust-asf.ponee.io (Postfix) id EE453160B45; Sun, 22 Jan 2017 16:44:08 +0000 (UTC) Delivered-To: archive-asf-public@cust-asf.ponee.io Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by cust-asf.ponee.io (Postfix) with SMTP id 1C7F3160B39 for ; Sun, 22 Jan 2017 17:44:07 +0100 (CET) Received: (qmail 78278 invoked by uid 500); 22 Jan 2017 16:44:07 -0000 Mailing-List: contact notifications-help@asterixdb.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@asterixdb.apache.org Delivered-To: mailing list notifications@asterixdb.apache.org Received: (qmail 78269 invoked by uid 99); 22 Jan 2017 16:44:07 -0000 Received: from pnap-us-west-generic-nat.apache.org (HELO spamd2-us-west.apache.org) (209.188.14.142) by apache.org (qpsmtpd/0.29) with ESMTP; Sun, 22 Jan 2017 16:44:07 +0000 Received: from localhost (localhost [127.0.0.1]) by spamd2-us-west.apache.org (ASF Mail Server at spamd2-us-west.apache.org) with ESMTP id D11D61A03BA for ; Sun, 22 Jan 2017 16:44:06 +0000 (UTC) X-Virus-Scanned: Debian amavisd-new at spamd2-us-west.apache.org X-Spam-Flag: NO X-Spam-Score: 2.126 X-Spam-Level: ** X-Spam-Status: No, score=2.126 tagged_above=-999 required=6.31 tests=[MISSING_HEADERS=1.207, SPF_FAIL=0.919] autolearn=disabled Received: from mx1-lw-eu.apache.org ([10.40.0.8]) by localhost (spamd2-us-west.apache.org [10.40.0.9]) (amavisd-new, port 10024) with ESMTP id XQtIKsE2IY8K for ; Sun, 22 Jan 2017 16:44:05 +0000 (UTC) Received: from unhygienix.ics.uci.edu (unhygienix.ics.uci.edu [128.195.14.130]) by mx1-lw-eu.apache.org (ASF Mail Server at mx1-lw-eu.apache.org) with ESMTP id 37A355F23A for ; Sun, 22 Jan 2017 16:44:04 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by unhygienix.ics.uci.edu (Postfix) with ESMTP id A740E241EA5; Sun, 22 Jan 2017 08:44:03 -0800 (PST) Date: Sun, 22 Jan 2017 08:44:03 -0800 From: "Murtadha Hubail (Code Review)" CC: Jenkins , abdullah alamoudi , Till Westmann Reply-To: hubailmor@gmail.com X-Gerrit-MessageType: merged Subject: Change in asterixdb[master]: Replace Java serialization in checkpoints by Json X-Gerrit-Change-Id: Id4353716267d45ce21580ac2856b6a552d05d1f7 X-Gerrit-ChangeURL: X-Gerrit-Commit: 0af5b5df89f2534e5fe22dd96a40ce3bb129e3b0 In-Reply-To: References: MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Content-Disposition: inline User-Agent: Gerrit/2.8.4 Message-Id: <20170122164403.A740E241EA5@unhygienix.ics.uci.edu> archived-at: Sun, 22 Jan 2017 16:44:09 -0000 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 Sonar-Qube: Jenkins Tested-by: Jenkins BAD: Jenkins Integration-Tests: Jenkins Reviewed-by: abdullah alamoudi --- 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 @@ org.apache.hyracks hyracks-data-std + + com.fasterxml.jackson.core + jackson-annotations + 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 { +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 { 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 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 @@ 2.8.4 + com.fasterxml.jackson.core + jackson-annotations + 2.8.4 + + com.google.guava guava 18.0 -- 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 Gerrit-Reviewer: Jenkins Gerrit-Reviewer: Murtadha Hubail Gerrit-Reviewer: Till Westmann Gerrit-Reviewer: abdullah alamoudi