You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@accumulo.apache.org by ct...@apache.org on 2017/12/15 01:28:31 UTC
[accumulo] branch master updated: ACCUMULO-4755 Custom
serialization for AbstractId types (#336)
This is an automated email from the ASF dual-hosted git repository.
ctubbsii pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/accumulo.git
The following commit(s) were added to refs/heads/master by this push:
new 0d177a0 ACCUMULO-4755 Custom serialization for AbstractId types (#336)
0d177a0 is described below
commit 0d177a084ca91c23da943b75344ca4998bcc5394
Author: Benjamin F <32...@users.noreply.github.com>
AuthorDate: Thu Dec 14 20:28:28 2017 -0500
ACCUMULO-4755 Custom serialization for AbstractId types (#336)
Custom JAXB marshaling with XmlJavaTypeAdapter
---
core/pom.xml | 4 +++
.../core/client/impl/JaxbAbstractIdSerializer.java | 39 ++++++++++++++++++++++
.../accumulo/core/client/impl/Namespace.java | 3 ++
.../apache/accumulo/core/client/impl/Table.java | 3 ++
pom.xml | 5 +++
server/monitor/pom.xml | 4 +++
.../rest/problems/ProblemSummaryInformation.java | 4 +--
.../monitor/rest/tables/TableInformation.java | 6 ++--
.../monitor/rest/tservers/CurrentOperations.java | 4 +--
9 files changed, 65 insertions(+), 7 deletions(-)
diff --git a/core/pom.xml b/core/pom.xml
index b459a82..b8379e5 100644
--- a/core/pom.xml
+++ b/core/pom.xml
@@ -68,6 +68,10 @@
<artifactId>commons-logging</artifactId>
</dependency>
<dependency>
+ <groupId>javax.xml.bind</groupId>
+ <artifactId>jaxb-api</artifactId>
+ </dependency>
+ <dependency>
<groupId>jline</groupId>
<artifactId>jline</artifactId>
</dependency>
diff --git a/core/src/main/java/org/apache/accumulo/core/client/impl/JaxbAbstractIdSerializer.java b/core/src/main/java/org/apache/accumulo/core/client/impl/JaxbAbstractIdSerializer.java
new file mode 100644
index 0000000..ec9d080
--- /dev/null
+++ b/core/src/main/java/org/apache/accumulo/core/client/impl/JaxbAbstractIdSerializer.java
@@ -0,0 +1,39 @@
+/*
+ * 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.
+ */
+package org.apache.accumulo.core.client.impl;
+
+import javax.xml.bind.annotation.adapters.XmlAdapter;
+
+/**
+ * A class for marshaling @link{AbstractId} so REST calls can serialize AbstractId to its canonical value.
+ */
+public class JaxbAbstractIdSerializer extends XmlAdapter<String,AbstractId> {
+
+ @Override
+ public String marshal(AbstractId id) {
+ if (id != null)
+ return id.canonicalID();
+ else
+ return null;
+ }
+
+ @Override
+ public AbstractId unmarshal(String id) {
+ // should not unmarshal from String
+ throw new UnsupportedOperationException("Cannot unmarshal from String");
+ }
+}
diff --git a/core/src/main/java/org/apache/accumulo/core/client/impl/Namespace.java b/core/src/main/java/org/apache/accumulo/core/client/impl/Namespace.java
index 56d7073..cb7133a 100644
--- a/core/src/main/java/org/apache/accumulo/core/client/impl/Namespace.java
+++ b/core/src/main/java/org/apache/accumulo/core/client/impl/Namespace.java
@@ -18,6 +18,8 @@ package org.apache.accumulo.core.client.impl;
import java.util.concurrent.ExecutionException;
+import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
+
import org.apache.accumulo.core.client.Instance;
import com.google.common.cache.Cache;
@@ -35,6 +37,7 @@ public class Namespace {
* Uses an internal cache and private constructor for storing a WeakReference of every Namespace.ID. Therefore, a Namespace.ID can't be instantiated outside
* this class and is accessed by calling Namespace.ID.{@link #of(String)}.
*/
+ @XmlJavaTypeAdapter(JaxbAbstractIdSerializer.class)
public static class ID extends AbstractId {
private static final long serialVersionUID = 8931104141709170293L;
static final Cache<String,ID> cache = CacheBuilder.newBuilder().weakValues().build();
diff --git a/core/src/main/java/org/apache/accumulo/core/client/impl/Table.java b/core/src/main/java/org/apache/accumulo/core/client/impl/Table.java
index 15517d9..0de551c 100644
--- a/core/src/main/java/org/apache/accumulo/core/client/impl/Table.java
+++ b/core/src/main/java/org/apache/accumulo/core/client/impl/Table.java
@@ -18,6 +18,8 @@ package org.apache.accumulo.core.client.impl;
import java.util.concurrent.ExecutionException;
+import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
+
import org.apache.accumulo.core.client.Instance;
import com.google.common.cache.Cache;
@@ -32,6 +34,7 @@ public class Table {
* Uses an internal cache and private constructor for storing a WeakReference of every Table.ID. Therefore, a Table.ID can't be instantiated outside this
* class and is accessed by calling Table.ID.{@link #of(String)}.
*/
+ @XmlJavaTypeAdapter(JaxbAbstractIdSerializer.class)
public static class ID extends AbstractId {
private static final long serialVersionUID = 7399913185860577809L;
static final Cache<String,ID> cache = CacheBuilder.newBuilder().weakValues().build();
diff --git a/pom.xml b/pom.xml
index 217011e..db2a0c7 100644
--- a/pom.xml
+++ b/pom.xml
@@ -291,6 +291,11 @@
<version>1.1.1</version>
</dependency>
<dependency>
+ <groupId>javax.xml.bind</groupId>
+ <artifactId>jaxb-api</artifactId>
+ <version>2.2.12</version>
+ </dependency>
+ <dependency>
<groupId>jline</groupId>
<artifactId>jline</artifactId>
<version>2.11</version>
diff --git a/server/monitor/pom.xml b/server/monitor/pom.xml
index cfb51da..70c69ee 100644
--- a/server/monitor/pom.xml
+++ b/server/monitor/pom.xml
@@ -53,6 +53,10 @@
<artifactId>javax.ws.rs-api</artifactId>
</dependency>
<dependency>
+ <groupId>javax.xml.bind</groupId>
+ <artifactId>jaxb-api</artifactId>
+ </dependency>
+ <dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
</dependency>
diff --git a/server/monitor/src/main/java/org/apache/accumulo/monitor/rest/problems/ProblemSummaryInformation.java b/server/monitor/src/main/java/org/apache/accumulo/monitor/rest/problems/ProblemSummaryInformation.java
index 165bf86..9f688c0 100644
--- a/server/monitor/src/main/java/org/apache/accumulo/monitor/rest/problems/ProblemSummaryInformation.java
+++ b/server/monitor/src/main/java/org/apache/accumulo/monitor/rest/problems/ProblemSummaryInformation.java
@@ -29,7 +29,7 @@ public class ProblemSummaryInformation {
// Variable names become JSON keys
public String tableName;
- public String tableID;
+ public Table.ID tableID;
public Integer fileRead;
public Integer fileWrite;
@@ -53,7 +53,7 @@ public class ProblemSummaryInformation {
*/
public ProblemSummaryInformation(String tableName, Table.ID tableId, Integer fileRead, Integer fileWrite, Integer tableLoad) {
this.tableName = tableName;
- this.tableID = tableId.canonicalID();
+ this.tableID = tableId;
this.fileRead = fileRead;
this.fileWrite = fileWrite;
this.tableLoad = tableLoad;
diff --git a/server/monitor/src/main/java/org/apache/accumulo/monitor/rest/tables/TableInformation.java b/server/monitor/src/main/java/org/apache/accumulo/monitor/rest/tables/TableInformation.java
index cacd342..d151046 100644
--- a/server/monitor/src/main/java/org/apache/accumulo/monitor/rest/tables/TableInformation.java
+++ b/server/monitor/src/main/java/org/apache/accumulo/monitor/rest/tables/TableInformation.java
@@ -30,7 +30,7 @@ public class TableInformation {
// Variable names become JSON keys
public String tablename;
- public String tableId;
+ public Table.ID tableId;
public String tableState;
public int tablets;
@@ -75,7 +75,7 @@ public class TableInformation {
*/
public TableInformation(String tableName, Table.ID tableId, String tableState) {
this.tablename = tableName;
- this.tableId = tableId.canonicalID();
+ this.tableId = tableId;
this.tableState = tableState;
}
@@ -95,7 +95,7 @@ public class TableInformation {
*/
public TableInformation(String tableName, Table.ID tableId, TableInfo info, Double holdTime, String tableState) {
this.tablename = tableName;
- this.tableId = tableId.canonicalID();
+ this.tableId = tableId;
this.tablets = info.tablets;
this.offlineTablets = info.tablets - info.onlineTablets;
diff --git a/server/monitor/src/main/java/org/apache/accumulo/monitor/rest/tservers/CurrentOperations.java b/server/monitor/src/main/java/org/apache/accumulo/monitor/rest/tservers/CurrentOperations.java
index 50f9bff..fab1969 100644
--- a/server/monitor/src/main/java/org/apache/accumulo/monitor/rest/tservers/CurrentOperations.java
+++ b/server/monitor/src/main/java/org/apache/accumulo/monitor/rest/tservers/CurrentOperations.java
@@ -30,7 +30,7 @@ public class CurrentOperations {
// Variable names become JSON keys
public String name;
public String tablet;
- public String tableID;
+ public Table.ID tableID;
public long entries;
public double ingest;
public double query;
@@ -74,7 +74,7 @@ public class CurrentOperations {
public CurrentOperations(String name, Table.ID tableId, String tablet, long entries, double ingest, double query, Double minorAvg, Double minorStdDev,
Double minorAvgES, Double majorAvg, Double majorStdDev, Double majorAvgES) {
this.name = name;
- this.tableID = tableId.canonicalID();
+ this.tableID = tableId;
this.tablet = tablet;
this.entries = entries;
this.ingest = ingest;
--
To stop receiving notification emails like this one, please contact
['"commits@accumulo.apache.org" <co...@accumulo.apache.org>'].