accumulo-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From e..@apache.org
Subject git commit: ACCUMULO-3132 kludge the deserialization to work with 1.6.0 FATE objects
Date Tue, 16 Sep 2014 21:23:07 GMT
Repository: accumulo
Updated Branches:
  refs/heads/1.6.1-SNAPSHOT 7f62ec1b3 -> 0055bab8b


ACCUMULO-3132 kludge the deserialization to work with 1.6.0 FATE objects


Project: http://git-wip-us.apache.org/repos/asf/accumulo/repo
Commit: http://git-wip-us.apache.org/repos/asf/accumulo/commit/0055bab8
Tree: http://git-wip-us.apache.org/repos/asf/accumulo/tree/0055bab8
Diff: http://git-wip-us.apache.org/repos/asf/accumulo/diff/0055bab8

Branch: refs/heads/1.6.1-SNAPSHOT
Commit: 0055bab8b94bb87c1b65db6223a5ae8840d2d52c
Parents: 7f62ec1
Author: Eric C. Newton <eric.newton@gmail.com>
Authored: Tue Sep 16 17:22:53 2014 -0400
Committer: Eric C. Newton <eric.newton@gmail.com>
Committed: Tue Sep 16 17:22:53 2014 -0400

----------------------------------------------------------------------
 .../java/org/apache/accumulo/fate/ZooStore.java | 25 ++++++++-
 .../org/apache/accumulo/master/state/TInfo.java | 35 ++++++++++++
 .../state/TraceRepoDeserializationTest.java     | 58 ++++++++++++++++++++
 3 files changed, 116 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/accumulo/blob/0055bab8/fate/src/main/java/org/apache/accumulo/fate/ZooStore.java
----------------------------------------------------------------------
diff --git a/fate/src/main/java/org/apache/accumulo/fate/ZooStore.java b/fate/src/main/java/org/apache/accumulo/fate/ZooStore.java
index 5fc1858..ec51ca7 100644
--- a/fate/src/main/java/org/apache/accumulo/fate/ZooStore.java
+++ b/fate/src/main/java/org/apache/accumulo/fate/ZooStore.java
@@ -19,8 +19,10 @@ package org.apache.accumulo.fate;
 import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
 import java.io.IOException;
+import java.io.InputStream;
 import java.io.ObjectInputStream;
 import java.io.ObjectOutputStream;
+import java.io.ObjectStreamClass;
 import java.io.Serializable;
 import java.nio.charset.Charset;
 import java.security.SecureRandom;
@@ -69,12 +71,31 @@ public class ZooStore<T> implements TStore<T> {
       throw new RuntimeException(e);
     }
   }
+
+  public static class KludgeInputStream extends ObjectInputStream {
+    @Override
+    protected Class<?> resolveClass(ObjectStreamClass desc) throws IOException, ClassNotFoundException
{
+      // hack to recover serialized TInfo objects stored in zookeeper between releases
+      if (desc.getName().equals("org.apache.accumulo.trace.thrift.TInfo")) {
+        return Class.forName("org.apache.accumulo.master.state.TInfo");
+      }
+      return super.resolveClass(desc);
+    }
+
+    public KludgeInputStream(InputStream in) throws IOException {
+      super(in);
+    }
+  }
   
   private Object deserialize(byte ser[]) {
     try {
       ByteArrayInputStream bais = new ByteArrayInputStream(ser);
-      ObjectInputStream ois = new ObjectInputStream(bais);
-      return ois.readObject();
+      ObjectInputStream ois = new KludgeInputStream(bais);
+      try {
+        return ois.readObject();
+      } finally {
+        ois.close();
+      }
     } catch (Exception e) {
       throw new RuntimeException(e);
     }

http://git-wip-us.apache.org/repos/asf/accumulo/blob/0055bab8/server/master/src/main/java/org/apache/accumulo/master/state/TInfo.java
----------------------------------------------------------------------
diff --git a/server/master/src/main/java/org/apache/accumulo/master/state/TInfo.java b/server/master/src/main/java/org/apache/accumulo/master/state/TInfo.java
new file mode 100644
index 0000000..21b1533
--- /dev/null
+++ b/server/master/src/main/java/org/apache/accumulo/master/state/TInfo.java
@@ -0,0 +1,35 @@
+/*
+ * 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.master.state;
+
+import java.io.IOException;
+import java.io.ObjectInputStream;
+
+// ACCUMULO-3132
+// Total hack around the serialization of TInfo into zookeeper 
+// This class has to keep the same name, and its name is hardcoded in the Fate module
+public class TInfo extends org.apache.accumulo.trace.thrift.TInfo {
+  private static final long serialVersionUID = -4659975753252858243l;
+  
+  private void readObject(ObjectInputStream ois) throws ClassNotFoundException, IOException
{
+    try {
+      read(new org.apache.thrift.protocol.TCompactProtocol(new org.apache.thrift.transport.TIOStreamTransport(ois)));
+    } catch (org.apache.thrift.TException te) {
+      throw new java.io.IOException(te);
+    }
+  }
+}

http://git-wip-us.apache.org/repos/asf/accumulo/blob/0055bab8/server/master/src/test/java/org/apache/accumulo/master/state/TraceRepoDeserializationTest.java
----------------------------------------------------------------------
diff --git a/server/master/src/test/java/org/apache/accumulo/master/state/TraceRepoDeserializationTest.java
b/server/master/src/test/java/org/apache/accumulo/master/state/TraceRepoDeserializationTest.java
new file mode 100644
index 0000000..fab57d1
--- /dev/null
+++ b/server/master/src/test/java/org/apache/accumulo/master/state/TraceRepoDeserializationTest.java
@@ -0,0 +1,58 @@
+/*
+ * 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.master.state;
+
+import java.io.ByteArrayInputStream;
+import java.io.ObjectInputStream;
+
+import org.apache.accumulo.core.util.Base64;
+import org.apache.accumulo.fate.ZooStore;
+import org.junit.Test;
+
+public class TraceRepoDeserializationTest {
+  
+  // Zookeeper data for a merge request.
+  // To recreate:
+  // Fire up 1.6.0, create a table with a bunch of splits
+  // Merge the table back together.  Kill everything before it finishes
+  // and pull out the first serialized repo object with DumpZookeeper.
+  static private final String oldValue = 
+      "rO0ABXNyAC1vcmcuYXBhY2hlLmFjY3VtdWxvLm1hc3Rlci50YWJsZU9wcy5UcmFjZVJlc" +
+      "G8AAAAAAAAAAQIAAkwABHJlcG90AB9Mb3JnL2FwYWNoZS9hY2N1bXVsby9mYXRlL1Jl" +
+      "cG87TAAFdGluZm90AChMb3JnL2FwYWNoZS9hY2N1bXVsby90cmFjZS90aHJpZnQvVEl" +
+      "uZm87eHBzcgAwb3JnLmFwYWNoZS5hY2N1bXVsby5tYXN0ZXIudGFibGVPcHMuVGFibG" +
+      "VSYW5nZU9wAAAAAAAAAAECAAVbAAZlbmRSb3d0AAJbQkwAC25hbWVzcGFjZUlkdAAST" +
+      "GphdmEvbGFuZy9TdHJpbmc7TAACb3B0AD1Mb3JnL2FwYWNoZS9hY2N1bXVsby9zZXJ2" +
+      "ZXIvbWFzdGVyL3N0YXRlL01lcmdlSW5mbyRPcGVyYXRpb247WwAIc3RhcnRSb3dxAH4A" +
+      "BUwAB3RhYmxlSWRxAH4ABnhyAC5vcmcuYXBhY2hlLmFjY3VtdWxvLm1hc3Rlci50YWJs" +
+      "ZU9wcy5NYXN0ZXJSZXBvAAAAAAAAAAECAAB4cHVyAAJbQqzzF/gGCFTgAgAAeHAAAAAA" +
+      "dAAIK2RlZmF1bHR+cgA7b3JnLmFwYWNoZS5hY2N1bXVsby5zZXJ2ZXIubWFzdGVyLnN0" +
+      "YXRlLk1lcmdlSW5mbyRPcGVyYXRpb24AAAAAAAAAABIAAHhyAA5qYXZhLmxhbmcuRW51" +
+      "bQAAAAAAAAAAEgAAeHB0AAVNRVJHRXEAfgALdAABMnNyACZvcmcuYXBhY2hlLmFjY3Vt" +
+      "dWxvLnRyYWNlLnRocmlmdC5USW5mb79UcL31bhZ9AwADQgAQX19pc3NldF9iaXRmaWVs" +
+      "ZEoACHBhcmVudElkSgAHdHJhY2VJZHhwdwUWABYAAHg=";
+  
+  @Test
+  public void test() throws Exception {
+    byte bytes[] = Base64.decodeBase64(oldValue);
+    ByteArrayInputStream bais = new ByteArrayInputStream(bytes);
+    ObjectInputStream ois = new ZooStore.KludgeInputStream(bais);
+    ois.readObject();
+    ois.close();
+  }
+  
+}


Mime
View raw message