You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by mb...@apache.org on 2012/08/28 22:50:54 UTC

svn commit: r1378328 - in /hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase: ClusterStatus.java HServerInfo.java master/HMaster.java

Author: mbautin
Date: Tue Aug 28 20:50:54 2012
New Revision: 1378328

URL: http://svn.apache.org/viewvc?rev=1378328&view=rev
Log:
[HBASE-6508] [89-fb] Handle backwards compatibility for clients

Author: avf

Summary:
HServerInfo serialization was changed in HBASE-6508. This broke
compatibility with HBase clients that aretrieve cluster status. This
patch allows clients and server to disable sending the last flushed
sequence id field of serverInfo when it is not necessary, restoring
backwards compatibility between clients and servers.

Test Plan:
1. Test communication between new client and old server
2. Test communication between old client and new server

Revert Plan:

Reviewers: kannan, aaiyer

Reviewed By: kannan

CC: hbase-eng@

Differential Revision: https://phabricator.fb.com/D548575

Task ID: 1373422

Modified:
    hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/ClusterStatus.java
    hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/HServerInfo.java
    hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/master/HMaster.java

Modified: hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/ClusterStatus.java
URL: http://svn.apache.org/viewvc/hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/ClusterStatus.java?rev=1378328&r1=1378327&r2=1378328&view=diff
==============================================================================
--- hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/ClusterStatus.java (original)
+++ hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/ClusterStatus.java Tue Aug 28 20:50:54 2012
@@ -223,6 +223,7 @@ public class ClusterStatus extends Versi
     liveServerInfo = new ArrayList<HServerInfo>(count);
     for (int i = 0; i < count; i++) {
       HServerInfo info = new HServerInfo();
+      info.setSendSequenceIds(false);
       info.readFields(in);
       liveServerInfo.add(info);
     }

Modified: hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/HServerInfo.java
URL: http://svn.apache.org/viewvc/hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/HServerInfo.java?rev=1378328&r1=1378327&r2=1378328&view=diff
==============================================================================
--- hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/HServerInfo.java (original)
+++ hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/HServerInfo.java Tue Aug 28 20:50:54 2012
@@ -72,6 +72,7 @@ public class HServerInfo implements Writ
   // Hostname of the regionserver.
   private String hostname;
   private String cachedHostnamePort = null;
+  private boolean sendSequenceIds = true;
 
   // For each region, store the last sequence id that was flushed
   // from MemStore to an HFile
@@ -224,6 +225,10 @@ public class HServerInfo implements Writ
     return name.toString();
   }
 
+  public void setSendSequenceIds(boolean sendSequenceIds) {
+    this.sendSequenceIds = sendSequenceIds;
+  }
+  
   /**
    * @return ServerName and load concatenated.
    * @see #getServerName()
@@ -260,9 +265,11 @@ public class HServerInfo implements Writ
     this.load.readFields(in);
     in.readInt();
     this.hostname = in.readUTF();
-    HbaseMapWritable<byte[], Long> sequenceIdsWritable =
-        new HbaseMapWritable<byte[], Long>(flushedSequenceIdByRegion);
-    sequenceIdsWritable.readFields(in);
+    if (sendSequenceIds) {
+      HbaseMapWritable<byte[], Long> sequenceIdsWritable =
+          new HbaseMapWritable<byte[], Long>(flushedSequenceIdByRegion);
+      sequenceIdsWritable.readFields(in);
+    }
   }
 
   public void write(DataOutput out) throws IOException {
@@ -272,9 +279,11 @@ public class HServerInfo implements Writ
     // Still serializing the info port for backward compatibility but it is not used.
     out.writeInt(HConstants.DEFAULT_REGIONSERVER_INFOPORT);
     out.writeUTF(hostname);
-    HbaseMapWritable<byte[], Long> sequenceIdsWritable =
-      new HbaseMapWritable<byte[], Long>(flushedSequenceIdByRegion);
-    sequenceIdsWritable.write(out);
+    if (sendSequenceIds) {
+      HbaseMapWritable<byte[], Long> sequenceIdsWritable =
+          new HbaseMapWritable<byte[], Long>(flushedSequenceIdByRegion);
+      sequenceIdsWritable.write(out);
+    }
   }
 
   public int compareTo(HServerInfo o) {

Modified: hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/master/HMaster.java
URL: http://svn.apache.org/viewvc/hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/master/HMaster.java?rev=1378328&r1=1378327&r2=1378328&view=diff
==============================================================================
--- hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/master/HMaster.java (original)
+++ hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/master/HMaster.java Tue Aug 28 20:50:54 2012
@@ -1923,7 +1923,13 @@ public class HMaster extends HasThread i
   public ClusterStatus getClusterStatus() {
     ClusterStatus status = new ClusterStatus();
     status.setHBaseVersion(VersionInfo.getVersion());
-    status.setServerInfo(serverManager.getServersToServerInfo().values());
+    List<HServerInfo> serverInfoCopy = Lists.newArrayList();
+    for (HServerInfo hsi : serverManager.getServersToServerInfo().values()) {
+      HServerInfo hsiCopy = new HServerInfo(hsi);
+      hsiCopy.setSendSequenceIds(false);
+      serverInfoCopy.add(hsiCopy);
+    }
+    status.setServerInfo(serverInfoCopy);
     status.setDeadServers(serverManager.getDeadServers());
     status.setRegionsInTransition(this.regionManager.getRegionsInTransition());
     return status;