You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@bookkeeper.apache.org by si...@apache.org on 2019/01/21 08:56:26 UTC

[bookkeeper] branch master updated: HTTP GetMetaService returns JSON rather than calling #serialize

This is an automated email from the ASF dual-hosted git repository.

sijie pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/bookkeeper.git


The following commit(s) were added to refs/heads/master by this push:
     new 19a598e  HTTP GetMetaService returns JSON rather than calling #serialize
19a598e is described below

commit 19a598eb8273cf197bb7ebf373b070c03977d5f6
Author: Ivan Kelly <iv...@apache.org>
AuthorDate: Mon Jan 21 00:56:22 2019 -0800

    HTTP GetMetaService returns JSON rather than calling #serialize
    
    Once the binary ledger metadata serializing is available, the output
    of GetMetaService would no longer be understandable. In preparation
    for this, make GetMetaService use output JSON, rather than directly
    calling #serialize.
    
    Master issue: #723
    
    
    Reviewers: Enrico Olivelli <eo...@gmail.com>, Sijie Guo <si...@apache.org>
    
    This closes #1864 from ivankelly/get-to-string
---
 .../java/org/apache/bookkeeper/client/LedgerCreateOp.java    |  2 +-
 .../java/org/apache/bookkeeper/net/BookieSocketAddress.java  |  3 +++
 .../bookkeeper/server/http/service/GetLedgerMetaService.java |  5 ++---
 .../org/apache/bookkeeper/server/http/TestHttpService.java   | 12 ++++++++----
 4 files changed, 14 insertions(+), 8 deletions(-)

diff --git a/bookkeeper-server/src/main/java/org/apache/bookkeeper/client/LedgerCreateOp.java b/bookkeeper-server/src/main/java/org/apache/bookkeeper/client/LedgerCreateOp.java
index eaa3163..9e9a2c4 100644
--- a/bookkeeper-server/src/main/java/org/apache/bookkeeper/client/LedgerCreateOp.java
+++ b/bookkeeper-server/src/main/java/org/apache/bookkeeper/client/LedgerCreateOp.java
@@ -132,7 +132,7 @@ class LedgerCreateOp {
             metadataBuilder.withCustomMetadata(customMetadata);
         }
         if (bk.getConf().getStoreSystemtimeAsLedgerCreationTime()) {
-            metadataBuilder.withCreationTime(System.currentTimeMillis());
+            metadataBuilder.withCreationTime(System.currentTimeMillis()).storingCreationTime(true);
         }
 
         // select bookies for first ensemble
diff --git a/bookkeeper-server/src/main/java/org/apache/bookkeeper/net/BookieSocketAddress.java b/bookkeeper-server/src/main/java/org/apache/bookkeeper/net/BookieSocketAddress.java
index cd0a20c..e9fc0f5 100644
--- a/bookkeeper-server/src/main/java/org/apache/bookkeeper/net/BookieSocketAddress.java
+++ b/bookkeeper-server/src/main/java/org/apache/bookkeeper/net/BookieSocketAddress.java
@@ -22,6 +22,7 @@ package org.apache.bookkeeper.net;
 
 import static org.apache.bookkeeper.util.BookKeeperConstants.COLON;
 
+import com.fasterxml.jackson.annotation.JsonIgnore;
 import com.google.common.net.InetAddresses;
 import io.netty.channel.local.LocalAddress;
 
@@ -91,6 +92,7 @@ public class BookieSocketAddress {
     }
 
     // Method to return an InetSocketAddress for the regular port.
+    @JsonIgnore
     public InetSocketAddress getSocketAddress() {
         /*
          * Return each time a new instance of the InetSocketAddress if hostname
@@ -106,6 +108,7 @@ public class BookieSocketAddress {
     /**
      * Maps the socketAddress to a "local" address.
      */
+    @JsonIgnore
     public LocalAddress getLocalAddress() {
         // for local address, we just need "port" to differentiate different addresses.
         return new LocalAddress("" + port);
diff --git a/bookkeeper-server/src/main/java/org/apache/bookkeeper/server/http/service/GetLedgerMetaService.java b/bookkeeper-server/src/main/java/org/apache/bookkeeper/server/http/service/GetLedgerMetaService.java
index 7fcaeda..451bf08 100644
--- a/bookkeeper-server/src/main/java/org/apache/bookkeeper/server/http/service/GetLedgerMetaService.java
+++ b/bookkeeper-server/src/main/java/org/apache/bookkeeper/server/http/service/GetLedgerMetaService.java
@@ -18,7 +18,6 @@
  */
 package org.apache.bookkeeper.server.http.service;
 
-import static com.google.common.base.Charsets.UTF_8;
 import static com.google.common.base.Preconditions.checkNotNull;
 
 import com.google.common.collect.Maps;
@@ -68,9 +67,9 @@ public class GetLedgerMetaService implements HttpEndpointService {
             LedgerManager manager = mFactory.newLedgerManager();
 
             // output <ledgerId: ledgerMetadata>
-            Map<String, String> output = Maps.newHashMap();
+            Map<String, Object> output = Maps.newHashMap();
             LedgerMetadata md = manager.readLedgerMetadata(ledgerId).get().getValue();
-            output.put(ledgerId.toString(), new String(serDe.serialize(md), UTF_8));
+            output.put(ledgerId.toString(), md);
 
             manager.close();
 
diff --git a/bookkeeper-server/src/test/java/org/apache/bookkeeper/server/http/TestHttpService.java b/bookkeeper-server/src/test/java/org/apache/bookkeeper/server/http/TestHttpService.java
index 3d948c3..ee6b278 100644
--- a/bookkeeper-server/src/test/java/org/apache/bookkeeper/server/http/TestHttpService.java
+++ b/bookkeeper-server/src/test/java/org/apache/bookkeeper/server/http/TestHttpService.java
@@ -45,7 +45,6 @@ import org.apache.bookkeeper.http.service.HttpServiceRequest;
 import org.apache.bookkeeper.http.service.HttpServiceResponse;
 import org.apache.bookkeeper.meta.LedgerManager;
 import org.apache.bookkeeper.meta.LedgerManagerFactory;
-import org.apache.bookkeeper.meta.LedgerMetadataSerDe;
 import org.apache.bookkeeper.meta.LedgerUnderreplicationManager;
 import org.apache.bookkeeper.net.BookieSocketAddress;
 import org.apache.bookkeeper.replication.AuditorElector;
@@ -83,6 +82,7 @@ public class TestHttpService extends BookKeeperClusterTestCase {
     public void setUp() throws Exception {
         super.setUp();
         baseConf.setMetadataServiceUri(zkUtil.getMetadataServiceUri());
+        baseClientConf.setStoreSystemtimeAsLedgerCreationTime(true);
         this.bkHttpServiceProvider = new BKHttpServiceProvider.Builder()
             .setBookieServer(bs.get(numberOfBookies - 1))
             .setServerConfiguration(baseConf)
@@ -383,11 +383,15 @@ public class TestHttpService extends BookKeeperClusterTestCase {
         HttpServiceResponse response2 = getLedgerMetaService.handle(request2);
         assertEquals(HttpServer.StatusCode.OK.getValue(), response2.getStatusCode());
         @SuppressWarnings("unchecked")
-        HashMap<String, String> respBody = JsonUtil.fromJson(response2.getBody(), HashMap.class);
+        HashMap<String, Object> respBody = JsonUtil.fromJson(response2.getBody(), HashMap.class);
         assertEquals(1, respBody.size());
+        @SuppressWarnings("unchecked")
+        HashMap<String, Object> expected = JsonUtil.fromJson(JsonUtil.toJson(lh[0].getLedgerMetadata()), HashMap.class);
+        @SuppressWarnings("unchecked")
+        HashMap<String, Object> actual = (HashMap<String, Object>) respBody.get(ledgerId.toString());
+
         // verify LedgerMetadata content is equal
-        assertTrue(respBody.get(ledgerId.toString()).toString()
-                .equals(new String(new LedgerMetadataSerDe().serialize(lh[0].getLedgerMetadata()))));
+        assertTrue(Maps.difference(expected, actual).areEqual());
     }
 
     @Test