You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by an...@apache.org on 2014/09/26 10:00:03 UTC

git commit: HBASE-12085 mob status should print human readable numbers.(Jingcheng Du)

Repository: hbase
Updated Branches:
  refs/heads/hbase-11339 a0d9e18cc -> 629042f4c


HBASE-12085 mob status should print human readable numbers.(Jingcheng Du)


Project: http://git-wip-us.apache.org/repos/asf/hbase/repo
Commit: http://git-wip-us.apache.org/repos/asf/hbase/commit/629042f4
Tree: http://git-wip-us.apache.org/repos/asf/hbase/tree/629042f4
Diff: http://git-wip-us.apache.org/repos/asf/hbase/diff/629042f4

Branch: refs/heads/hbase-11339
Commit: 629042f4cefb833ce65ae87a883cb92e2700b7b9
Parents: a0d9e18
Author: anoopsjohn <an...@gmail.com>
Authored: Fri Sep 26 13:29:36 2014 +0530
Committer: anoopsjohn <an...@gmail.com>
Committed: Fri Sep 26 13:29:36 2014 +0530

----------------------------------------------------------------------
 .../apache/hadoop/hbase/HColumnDescriptor.java  | 54 ++++++++++++++++++++
 .../apache/hadoop/hbase/util/PrettyPrinter.java | 10 ++++
 .../hbase/IntegrationTestIngestWithMOB.java     |  5 +-
 .../master/ExpiredMobFileCleanerChore.java      |  4 +-
 .../master/handler/DeleteTableHandler.java      |  2 +-
 .../hadoop/hbase/mob/DefaultMobCompactor.java   |  2 +-
 .../hbase/mob/DefaultMobStoreFlusher.java       |  2 +-
 .../hadoop/hbase/mob/ExpiredMobFileCleaner.java |  2 +-
 .../apache/hadoop/hbase/mob/MobConstants.java   |  4 --
 .../org/apache/hadoop/hbase/mob/MobUtils.java   | 23 ---------
 .../hadoop/hbase/mob/mapreduce/Sweeper.java     |  3 +-
 .../hadoop/hbase/regionserver/HRegion.java      |  3 +-
 .../hadoop/hbase/TestHColumnDescriptor.java     | 18 +++++++
 .../hbase/mob/TestDefaultMobStoreFlusher.java   |  4 +-
 .../hbase/mob/TestExpiredMobFileCleaner.java    |  9 ++--
 .../hbase/mob/TestMobDataBlockEncoding.java     |  4 +-
 .../hadoop/hbase/mob/TestMobFileCache.java      | 14 ++---
 .../mob/mapreduce/TestMobSweepReducer.java      |  4 +-
 .../hbase/mob/mapreduce/TestMobSweeper.java     |  4 +-
 .../hbase/regionserver/TestDeleteMobTable.java  |  4 +-
 .../hbase/regionserver/TestHMobStore.java       | 10 ++--
 .../hbase/regionserver/TestMobCompaction.java   |  7 ++-
 .../hbase/regionserver/TestMobStoreScanner.java |  4 +-
 src/main/docbkx/hbase_mob.xml                   | 17 +++---
 24 files changed, 130 insertions(+), 83 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/hbase/blob/629042f4/hbase-client/src/main/java/org/apache/hadoop/hbase/HColumnDescriptor.java
----------------------------------------------------------------------
diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/HColumnDescriptor.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/HColumnDescriptor.java
index a9586b0..40c5651 100644
--- a/hbase-client/src/main/java/org/apache/hadoop/hbase/HColumnDescriptor.java
+++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/HColumnDescriptor.java
@@ -123,6 +123,12 @@ public class HColumnDescriptor implements WritableComparable<HColumnDescriptor>
   public static final String ENCRYPTION = "ENCRYPTION";
   public static final String ENCRYPTION_KEY = "ENCRYPTION_KEY";
 
+  public static final String IS_MOB = "IS_MOB";
+  public static final byte[] IS_MOB_BYTES = Bytes.toBytes(IS_MOB);
+  public static final String MOB_THRESHOLD = "MOB_THRESHOLD";
+  public static final byte[] MOB_THRESHOLD_BYTES = Bytes.toBytes(MOB_THRESHOLD);
+  public static final long DEFAULT_MOB_THRESHOLD = 100 * 1024; // 100k
+
   /**
    * Default compression type.
    */
@@ -260,6 +266,8 @@ public class HColumnDescriptor implements WritableComparable<HColumnDescriptor>
       }
       RESERVED_KEYWORDS.add(new ImmutableBytesWritable(Bytes.toBytes(ENCRYPTION)));
       RESERVED_KEYWORDS.add(new ImmutableBytesWritable(Bytes.toBytes(ENCRYPTION_KEY)));
+      RESERVED_KEYWORDS.add(new ImmutableBytesWritable(IS_MOB_BYTES));
+      RESERVED_KEYWORDS.add(new ImmutableBytesWritable(MOB_THRESHOLD_BYTES));
   }
 
   private static final int UNINITIALIZED = -1;
@@ -1084,6 +1092,10 @@ public class HColumnDescriptor implements WritableComparable<HColumnDescriptor>
       /* TTL for now, we can add more as we neeed */
     if (key.equals(HColumnDescriptor.TTL)) {
       unit = Unit.TIME_INTERVAL;
+    } else if (key.equals(HColumnDescriptor.MOB_THRESHOLD)) {
+      unit = Unit.LONG;
+    } else if (key.equals(HColumnDescriptor.IS_MOB)) {
+      unit = Unit.BOOLEAN;
     } else {
       unit = Unit.NONE;
     }
@@ -1376,4 +1388,46 @@ public class HColumnDescriptor implements WritableComparable<HColumnDescriptor>
     setValue(Bytes.toBytes(ENCRYPTION_KEY), keyBytes);
     return this;
   }
+
+  /**
+   * Gets the mob threshold of the family.
+   * If the size of a cell value is larger than this threshold, it's regarded as a mob.
+   * The default threshold is 1024*100(100K)B.
+   * @return The mob threshold.
+   */
+  public long getMobThreshold() {
+    byte[] threshold = getValue(MOB_THRESHOLD_BYTES);
+    return threshold != null && threshold.length == Bytes.SIZEOF_LONG ? Bytes.toLong(threshold)
+        : DEFAULT_MOB_THRESHOLD;
+  }
+
+  /**
+   * Sets the mob threshold of the family.
+   * @param threshold The mob threshold.
+   * @return this (for chained invocation)
+   */
+  public HColumnDescriptor setMobThreshold(long threshold) {
+    setValue(MOB_THRESHOLD_BYTES, Bytes.toBytes(threshold));
+    return this;
+  }
+
+  /**
+   * Gets whether the mob is enabled for the family.
+   * @return True if the mob is enabled for the family.
+   */
+  public boolean isMobEnabled() {
+    byte[] isMobEnabled = getValue(IS_MOB_BYTES);
+    return isMobEnabled != null && isMobEnabled.length == Bytes.SIZEOF_BOOLEAN
+        && Bytes.toBoolean(isMobEnabled);
+  }
+
+  /**
+   * Enables the mob for the family.
+   * @param isMobEnabled Whether to enable the mob for the family.
+   * @return this (for chained invocation)
+   */
+  public HColumnDescriptor setMobEnabled(boolean isMobEnabled) {
+    setValue(IS_MOB_BYTES, Bytes.toBytes(isMobEnabled));
+    return this;
+  }
 }

http://git-wip-us.apache.org/repos/asf/hbase/blob/629042f4/hbase-common/src/main/java/org/apache/hadoop/hbase/util/PrettyPrinter.java
----------------------------------------------------------------------
diff --git a/hbase-common/src/main/java/org/apache/hadoop/hbase/util/PrettyPrinter.java b/hbase-common/src/main/java/org/apache/hadoop/hbase/util/PrettyPrinter.java
index 702bda6..341f971 100644
--- a/hbase-common/src/main/java/org/apache/hadoop/hbase/util/PrettyPrinter.java
+++ b/hbase-common/src/main/java/org/apache/hadoop/hbase/util/PrettyPrinter.java
@@ -29,6 +29,8 @@ public class PrettyPrinter {
 
   public enum Unit {
     TIME_INTERVAL,
+    LONG,
+    BOOLEAN,
     NONE
   }
 
@@ -38,6 +40,14 @@ public class PrettyPrinter {
       case TIME_INTERVAL:
         human.append(humanReadableTTL(Long.valueOf(value)));
         break;
+      case LONG:
+        byte[] longBytes = Bytes.toBytesBinary(value);
+        human.append(String.valueOf(Bytes.toLong(longBytes)));
+        break;
+      case BOOLEAN:
+        byte[] booleanBytes = Bytes.toBytesBinary(value);
+        human.append(String.valueOf(Bytes.toBoolean(booleanBytes)));
+        break;
       default:
         human.append(value);
     }

http://git-wip-us.apache.org/repos/asf/hbase/blob/629042f4/hbase-it/src/test/java/org/apache/hadoop/hbase/IntegrationTestIngestWithMOB.java
----------------------------------------------------------------------
diff --git a/hbase-it/src/test/java/org/apache/hadoop/hbase/IntegrationTestIngestWithMOB.java b/hbase-it/src/test/java/org/apache/hadoop/hbase/IntegrationTestIngestWithMOB.java
index 95470b5..f8a4412 100644
--- a/hbase-it/src/test/java/org/apache/hadoop/hbase/IntegrationTestIngestWithMOB.java
+++ b/hbase-it/src/test/java/org/apache/hadoop/hbase/IntegrationTestIngestWithMOB.java
@@ -25,7 +25,6 @@ import java.util.List;
 import org.apache.commons.cli.CommandLine;
 import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.hbase.client.HBaseAdmin;
-import org.apache.hadoop.hbase.mob.MobConstants;
 import org.apache.hadoop.hbase.util.Bytes;
 import org.apache.hadoop.hbase.util.LoadTestDataGeneratorWithMOB;
 import org.apache.hadoop.hbase.util.LoadTestTool;
@@ -118,8 +117,8 @@ public class IntegrationTestIngestWithMOB extends IntegrationTestIngest {
     admin.disableTable(tableName);
     for (HColumnDescriptor columnDescriptor : tableDesc.getFamilies()) {
       if(Arrays.equals(columnDescriptor.getName(), mobColumnFamily)) {
-        columnDescriptor.setValue(MobConstants.IS_MOB, Bytes.toBytes(Boolean.TRUE));
-        columnDescriptor.setValue(MobConstants.MOB_THRESHOLD, Bytes.toBytes((long) threshold));
+        columnDescriptor.setMobEnabled(true);
+        columnDescriptor.setMobThreshold((long) threshold);
         admin.modifyColumn(tableName, columnDescriptor);
       }
     }

http://git-wip-us.apache.org/repos/asf/hbase/blob/629042f4/hbase-server/src/main/java/org/apache/hadoop/hbase/master/ExpiredMobFileCleanerChore.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/ExpiredMobFileCleanerChore.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/ExpiredMobFileCleanerChore.java
index 98fe236..30b5be3 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/ExpiredMobFileCleanerChore.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/ExpiredMobFileCleanerChore.java
@@ -29,8 +29,6 @@ import org.apache.hadoop.hbase.HTableDescriptor;
 import org.apache.hadoop.hbase.TableDescriptors;
 import org.apache.hadoop.hbase.mob.ExpiredMobFileCleaner;
 import org.apache.hadoop.hbase.mob.MobConstants;
-import org.apache.hadoop.hbase.mob.MobUtils;
-import org.apache.hadoop.hbase.util.Threads;
 
 /**
  * The Class ExpiredMobFileCleanerChore for running cleaner regularly to remove the expired
@@ -57,7 +55,7 @@ public class ExpiredMobFileCleanerChore extends Chore {
       Map<String, HTableDescriptor> map = htds.getAll();
       for (HTableDescriptor htd : map.values()) {
         for (HColumnDescriptor hcd : htd.getColumnFamilies()) {
-          if (MobUtils.isMobFamily(hcd) && hcd.getMinVersions() == 0) {
+          if (hcd.isMobEnabled() && hcd.getMinVersions() == 0) {
             cleaner.cleanExpiredMobFiles(htd.getTableName().getNameAsString(), hcd);
           }
         }

http://git-wip-us.apache.org/repos/asf/hbase/blob/629042f4/hbase-server/src/main/java/org/apache/hadoop/hbase/master/handler/DeleteTableHandler.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/handler/DeleteTableHandler.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/handler/DeleteTableHandler.java
index b5cdae9..95e89d2 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/handler/DeleteTableHandler.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/handler/DeleteTableHandler.java
@@ -160,7 +160,7 @@ public class DeleteTableHandler extends TableEventHandler {
     HColumnDescriptor[] hcds = hTableDescriptor.getColumnFamilies();
     boolean hasMob = false;
     for (HColumnDescriptor hcd : hcds) {
-      if (MobUtils.isMobFamily(hcd)) {
+      if (hcd.isMobEnabled()) {
         hasMob = true;
         break;
       }

http://git-wip-us.apache.org/repos/asf/hbase/blob/629042f4/hbase-server/src/main/java/org/apache/hadoop/hbase/mob/DefaultMobCompactor.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/mob/DefaultMobCompactor.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/mob/DefaultMobCompactor.java
index fd35a15..cf70bd3 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/mob/DefaultMobCompactor.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/mob/DefaultMobCompactor.java
@@ -60,7 +60,7 @@ public class DefaultMobCompactor extends DefaultCompactor {
       throw new IllegalArgumentException("The store " + store + " is not a HMobStore");
     }
     mobStore = (HMobStore) store;
-    mobSizeThreshold = MobUtils.getMobThreshold(store.getFamily());
+    mobSizeThreshold = store.getFamily().getMobThreshold();
   }
 
   /**

http://git-wip-us.apache.org/repos/asf/hbase/blob/629042f4/hbase-server/src/main/java/org/apache/hadoop/hbase/mob/DefaultMobStoreFlusher.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/mob/DefaultMobStoreFlusher.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/mob/DefaultMobStoreFlusher.java
index 4a036a7..aba81ff 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/mob/DefaultMobStoreFlusher.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/mob/DefaultMobStoreFlusher.java
@@ -69,7 +69,7 @@ public class DefaultMobStoreFlusher extends DefaultStoreFlusher {
 
   public DefaultMobStoreFlusher(Configuration conf, Store store) throws IOException {
     super(conf, store);
-    mobCellValueSizeThreshold = MobUtils.getMobThreshold(store.getFamily());
+    mobCellValueSizeThreshold = store.getFamily().getMobThreshold();
     this.targetPath = MobUtils.getMobFamilyPath(conf, store.getTableName(),
         store.getColumnFamilyName());
     if (!this.store.getFileSystem().exists(targetPath)) {

http://git-wip-us.apache.org/repos/asf/hbase/blob/629042f4/hbase-server/src/main/java/org/apache/hadoop/hbase/mob/ExpiredMobFileCleaner.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/mob/ExpiredMobFileCleaner.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/mob/ExpiredMobFileCleaner.java
index d3c11ad..7f38c44 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/mob/ExpiredMobFileCleaner.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/mob/ExpiredMobFileCleaner.java
@@ -99,7 +99,7 @@ public class ExpiredMobFileCleaner extends Configured implements Tool {
     try {
       HTableDescriptor htd = admin.getTableDescriptor(tn);
       HColumnDescriptor family = htd.getFamily(Bytes.toBytes(familyName));
-      if (family == null || !MobUtils.isMobFamily(family)) {
+      if (family == null || !family.isMobEnabled()) {
         throw new IOException("Column family " + familyName + " is not a MOB column family");
       }
       if (family.getMinVersions() > 0) {

http://git-wip-us.apache.org/repos/asf/hbase/blob/629042f4/hbase-server/src/main/java/org/apache/hadoop/hbase/mob/MobConstants.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/mob/MobConstants.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/mob/MobConstants.java
index 4e3e7c8..7b0f9a0 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/mob/MobConstants.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/mob/MobConstants.java
@@ -32,10 +32,6 @@ import org.apache.hadoop.hbase.util.Bytes;
 @InterfaceStability.Evolving
 public class MobConstants {
 
-  public static final byte[] IS_MOB = Bytes.toBytes("IS_MOB");
-  public static final byte[] MOB_THRESHOLD = Bytes.toBytes("MOB_THRESHOLD");
-  public static final long DEFAULT_MOB_THRESHOLD = 100 * 1024; // 100k
-
   public static final String MOB_SCAN_RAW = "hbase.mob.scan.raw";
   public static final String MOB_CACHE_BLOCKS = "hbase.mob.cache.blocks";
   public static final String MOB_SCAN_REF_ONLY = "hbase.mob.scan.ref.only";

http://git-wip-us.apache.org/repos/asf/hbase/blob/629042f4/hbase-server/src/main/java/org/apache/hadoop/hbase/mob/MobUtils.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/mob/MobUtils.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/mob/MobUtils.java
index e49d3ec..4001520 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/mob/MobUtils.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/mob/MobUtils.java
@@ -74,29 +74,6 @@ public class MobUtils {
   };
 
   /**
-   * Indicates whether the column family is a mob one.
-   * @param hcd The descriptor of a column family.
-   * @return True if this column family is a mob one, false if it's not.
-   */
-  public static boolean isMobFamily(HColumnDescriptor hcd) {
-    byte[] isMob = hcd.getValue(MobConstants.IS_MOB);
-    return isMob != null && isMob.length == 1 && Bytes.toBoolean(isMob);
-  }
-
-  /**
-   * Gets the mob threshold.
-   * If the size of a cell value is larger than this threshold, it's regarded as a mob.
-   * The default threshold is 1024*100(100K)B.
-   * @param hcd The descriptor of a column family.
-   * @return The threshold.
-   */
-  public static long getMobThreshold(HColumnDescriptor hcd) {
-    byte[] threshold = hcd.getValue(MobConstants.MOB_THRESHOLD);
-    return threshold != null && threshold.length == Bytes.SIZEOF_LONG ? Bytes.toLong(threshold)
-        : MobConstants.DEFAULT_MOB_THRESHOLD;
-  }
-
-  /**
    * Formats a date to a string.
    * @param date The date.
    * @return The string format of the date, it's yyyymmdd.

http://git-wip-us.apache.org/repos/asf/hbase/blob/629042f4/hbase-server/src/main/java/org/apache/hadoop/hbase/mob/mapreduce/Sweeper.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/mob/mapreduce/Sweeper.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/mob/mapreduce/Sweeper.java
index d71dc83..451ee26 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/mob/mapreduce/Sweeper.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/mob/mapreduce/Sweeper.java
@@ -29,7 +29,6 @@ import org.apache.hadoop.hbase.HColumnDescriptor;
 import org.apache.hadoop.hbase.HTableDescriptor;
 import org.apache.hadoop.hbase.TableName;
 import org.apache.hadoop.hbase.client.HBaseAdmin;
-import org.apache.hadoop.hbase.mob.MobUtils;
 import org.apache.hadoop.hbase.util.Bytes;
 import org.apache.hadoop.util.Tool;
 import org.apache.hadoop.util.ToolRunner;
@@ -68,7 +67,7 @@ public class Sweeper extends Configured implements Tool {
       TableName tn = TableName.valueOf(tableName);
       HTableDescriptor htd = admin.getTableDescriptor(tn);
       HColumnDescriptor family = htd.getFamily(Bytes.toBytes(familyName));
-      if (family == null || !MobUtils.isMobFamily(family)) {
+      if (family == null || !family.isMobEnabled()) {
         throw new IOException("Column family " + familyName + " is not a MOB column family");
       }
       SweepJob job = new SweepJob(conf, fs);

http://git-wip-us.apache.org/repos/asf/hbase/blob/629042f4/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegion.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegion.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegion.java
index 22b090f..311839f 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegion.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegion.java
@@ -113,7 +113,6 @@ import org.apache.hadoop.hbase.io.hfile.HFile;
 import org.apache.hadoop.hbase.ipc.CallerDisconnectedException;
 import org.apache.hadoop.hbase.ipc.RpcCallContext;
 import org.apache.hadoop.hbase.ipc.RpcServer;
-import org.apache.hadoop.hbase.mob.MobUtils;
 import org.apache.hadoop.hbase.monitoring.MonitoredTask;
 import org.apache.hadoop.hbase.monitoring.TaskMonitor;
 import org.apache.hadoop.hbase.protobuf.ProtobufUtil;
@@ -3554,7 +3553,7 @@ public class HRegion implements HeapSize { // , Writable{
   }
 
   protected HStore instantiateHStore(final HColumnDescriptor family) throws IOException {
-    if (MobUtils.isMobFamily(family)) {
+    if (family.isMobEnabled()) {
       if (HFile.getFormatVersion(this.conf) < HFile.MIN_FORMAT_VERSION_WITH_TAGS) {
         throw new IOException("A minimum HFile version of "
             + HFile.MIN_FORMAT_VERSION_WITH_TAGS

http://git-wip-us.apache.org/repos/asf/hbase/blob/629042f4/hbase-server/src/test/java/org/apache/hadoop/hbase/TestHColumnDescriptor.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/TestHColumnDescriptor.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/TestHColumnDescriptor.java
index 2534609..c2e2285 100644
--- a/hbase-server/src/test/java/org/apache/hadoop/hbase/TestHColumnDescriptor.java
+++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/TestHColumnDescriptor.java
@@ -25,6 +25,8 @@ import org.apache.hadoop.hbase.io.compress.Compression;
 import org.apache.hadoop.hbase.io.compress.Compression.Algorithm;
 import org.apache.hadoop.hbase.io.encoding.DataBlockEncoding;
 import org.apache.hadoop.hbase.regionserver.BloomType;
+import org.apache.hadoop.hbase.util.Bytes;
+import org.apache.hadoop.hbase.util.PrettyPrinter;
 import org.junit.experimental.categories.Category;
 
 import org.junit.Test;
@@ -52,6 +54,8 @@ public class TestHColumnDescriptor {
     hcd.setDataBlockEncoding(DataBlockEncoding.FAST_DIFF);
     hcd.setBloomFilterType(BloomType.ROW);
     hcd.setCompressionType(Algorithm.SNAPPY);
+    hcd.setMobEnabled(true);
+    hcd.setMobThreshold(1000L);
 
 
     byte [] bytes = hcd.toByteArray();
@@ -68,6 +72,8 @@ public class TestHColumnDescriptor {
     assertTrue(deserializedHcd.getCompressionType().equals(Compression.Algorithm.SNAPPY));
     assertTrue(deserializedHcd.getDataBlockEncoding().equals(DataBlockEncoding.FAST_DIFF));
     assertTrue(deserializedHcd.getBloomFilterType().equals(BloomType.ROW));
+    assertEquals(hcd.isMobEnabled(), deserializedHcd.isMobEnabled());
+    assertEquals(hcd.getMobThreshold(), deserializedHcd.getMobThreshold());
   }
 
   @Test
@@ -94,4 +100,16 @@ public class TestHColumnDescriptor {
     desc.removeConfiguration(key);
     assertEquals(null, desc.getConfigurationValue(key));
   }
+
+  @Test
+  public void testMobValuesInHColumnDescriptorShouldReadable() {
+    boolean isMob = true;
+    long threshold = 1000;
+    String isMobString = PrettyPrinter.format(Bytes.toStringBinary(Bytes.toBytes(isMob)),
+        HColumnDescriptor.getUnit(HColumnDescriptor.IS_MOB));
+    String thresholdString = PrettyPrinter.format(Bytes.toStringBinary(Bytes.toBytes(threshold)),
+        HColumnDescriptor.getUnit(HColumnDescriptor.MOB_THRESHOLD));
+    assertEquals(String.valueOf(isMob), isMobString);
+    assertEquals(String.valueOf(threshold), thresholdString);
+  }
 }

http://git-wip-us.apache.org/repos/asf/hbase/blob/629042f4/hbase-server/src/test/java/org/apache/hadoop/hbase/mob/TestDefaultMobStoreFlusher.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/mob/TestDefaultMobStoreFlusher.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/mob/TestDefaultMobStoreFlusher.java
index 5d85718..3432139 100644
--- a/hbase-server/src/test/java/org/apache/hadoop/hbase/mob/TestDefaultMobStoreFlusher.java
+++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/mob/TestDefaultMobStoreFlusher.java
@@ -137,8 +137,8 @@ public class TestDefaultMobStoreFlusher {
    try {
      HTableDescriptor desc = new HTableDescriptor(TableName.valueOf(TN));
      HColumnDescriptor hcd = new HColumnDescriptor(family);
-     hcd.setValue(MobConstants.IS_MOB, Bytes.toBytes(Boolean.TRUE));
-     hcd.setValue(MobConstants.MOB_THRESHOLD, Bytes.toBytes(3L));
+     hcd.setMobEnabled(true);
+     hcd.setMobThreshold(3L);
      hcd.setMaxVersions(4);
      desc.addFamily(hcd);
 

http://git-wip-us.apache.org/repos/asf/hbase/blob/629042f4/hbase-server/src/test/java/org/apache/hadoop/hbase/mob/TestExpiredMobFileCleaner.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/mob/TestExpiredMobFileCleaner.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/mob/TestExpiredMobFileCleaner.java
index 7cba86c..ea50075 100644
--- a/hbase-server/src/test/java/org/apache/hadoop/hbase/mob/TestExpiredMobFileCleaner.java
+++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/mob/TestExpiredMobFileCleaner.java
@@ -33,7 +33,6 @@ import org.apache.hadoop.hbase.client.Admin;
 import org.apache.hadoop.hbase.client.HTable;
 import org.apache.hadoop.hbase.client.Put;
 import org.apache.hadoop.hbase.mob.ExpiredMobFileCleaner;
-import org.apache.hadoop.hbase.mob.MobConstants;
 import org.apache.hadoop.hbase.mob.MobUtils;
 import org.apache.hadoop.hbase.util.Bytes;
 import org.apache.hadoop.util.ToolRunner;
@@ -87,8 +86,8 @@ public class TestExpiredMobFileCleaner {
   private void init() throws Exception {
     HTableDescriptor desc = new HTableDescriptor(tableName);
     HColumnDescriptor hcd = new HColumnDescriptor(family);
-    hcd.setValue(MobConstants.IS_MOB, Bytes.toBytes(Boolean.TRUE));
-    hcd.setValue(MobConstants.MOB_THRESHOLD, Bytes.toBytes(3L));
+    hcd.setMobEnabled(true);
+    hcd.setMobThreshold(3L);
     hcd.setMaxVersions(4);
     desc.addFamily(hcd);
 
@@ -100,8 +99,8 @@ public class TestExpiredMobFileCleaner {
 
   private void modifyColumnExpiryDays(int expireDays) throws Exception {
     HColumnDescriptor hcd = new HColumnDescriptor(family);
-    hcd.setValue(MobConstants.IS_MOB, Bytes.toBytes(Boolean.TRUE));
-    hcd.setValue(MobConstants.MOB_THRESHOLD, Bytes.toBytes(3L));
+    hcd.setMobEnabled(true);
+    hcd.setMobThreshold(3L);
     // change ttl as expire days to make some row expired
     int timeToLive = expireDays * secondsOfDay();
     hcd.setTimeToLive(timeToLive);

http://git-wip-us.apache.org/repos/asf/hbase/blob/629042f4/hbase-server/src/test/java/org/apache/hadoop/hbase/mob/TestMobDataBlockEncoding.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/mob/TestMobDataBlockEncoding.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/mob/TestMobDataBlockEncoding.java
index ae10aad..163dd25 100644
--- a/hbase-server/src/test/java/org/apache/hadoop/hbase/mob/TestMobDataBlockEncoding.java
+++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/mob/TestMobDataBlockEncoding.java
@@ -75,8 +75,8 @@ public class TestMobDataBlockEncoding {
       throws Exception {
     desc = new HTableDescriptor(TableName.valueOf(TN));
     hcd = new HColumnDescriptor(family);
-    hcd.setValue(MobConstants.IS_MOB, Bytes.toBytes(Boolean.TRUE));
-    hcd.setValue(MobConstants.MOB_THRESHOLD, Bytes.toBytes(threshold));
+    hcd.setMobEnabled(true);
+    hcd.setMobThreshold(threshold);
     hcd.setMaxVersions(4);
     hcd.setDataBlockEncoding(encoding);
     desc.addFamily(hcd);

http://git-wip-us.apache.org/repos/asf/hbase/blob/629042f4/hbase-server/src/test/java/org/apache/hadoop/hbase/mob/TestMobFileCache.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/mob/TestMobFileCache.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/mob/TestMobFileCache.java
index 9478544..154327c 100644
--- a/hbase-server/src/test/java/org/apache/hadoop/hbase/mob/TestMobFileCache.java
+++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/mob/TestMobFileCache.java
@@ -79,14 +79,14 @@ public class TestMobFileCache extends TestCase {
     conf = UTIL.getConfiguration();
     HTableDescriptor htd = UTIL.createTableDescriptor("testMobFileCache");
     HColumnDescriptor hcd1 = new HColumnDescriptor(FAMILY1);
-    hcd1.setValue(MobConstants.IS_MOB, Bytes.toBytes(Boolean.TRUE));
-    hcd1.setValue(MobConstants.MOB_THRESHOLD, Bytes.toBytes(0L));
+    hcd1.setMobEnabled(true);
+    hcd1.setMobThreshold(0);
     HColumnDescriptor hcd2 = new HColumnDescriptor(FAMILY2);
-    hcd2.setValue(MobConstants.IS_MOB, Bytes.toBytes(Boolean.TRUE));
-    hcd2.setValue(MobConstants.MOB_THRESHOLD, Bytes.toBytes(0L));
+    hcd2.setMobEnabled(true);
+    hcd2.setMobThreshold(0);
     HColumnDescriptor hcd3 = new HColumnDescriptor(FAMILY3);
-    hcd3.setValue(MobConstants.IS_MOB, Bytes.toBytes(Boolean.TRUE));
-    hcd3.setValue(MobConstants.MOB_THRESHOLD, Bytes.toBytes(0L));
+    hcd3.setMobEnabled(true);
+    hcd3.setMobThreshold(0);
     htd.addFamily(hcd1);
     htd.addFamily(hcd2);
     htd.addFamily(hcd3);
@@ -115,7 +115,7 @@ public class TestMobFileCache extends TestCase {
   private Path createMobStoreFile(Configuration conf, String family) throws IOException {
     HColumnDescriptor hcd = new HColumnDescriptor(family);
     hcd.setMaxVersions(4);
-    hcd.setValue(MobConstants.IS_MOB, Bytes.toBytes(Boolean.TRUE));
+    hcd.setMobEnabled(true);
     mobCacheConf = new MobCacheConfig(conf, hcd);
     return createMobStoreFile(conf, hcd);
   }

http://git-wip-us.apache.org/repos/asf/hbase/blob/629042f4/hbase-server/src/test/java/org/apache/hadoop/hbase/mob/mapreduce/TestMobSweepReducer.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/mob/mapreduce/TestMobSweepReducer.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/mob/mapreduce/TestMobSweepReducer.java
index 0f4c3ff..a45ed34 100644
--- a/hbase-server/src/test/java/org/apache/hadoop/hbase/mob/mapreduce/TestMobSweepReducer.java
+++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/mob/mapreduce/TestMobSweepReducer.java
@@ -92,8 +92,8 @@ public class TestMobSweepReducer {
   public void setUp() throws Exception {
     HTableDescriptor desc = new HTableDescriptor(tableName);
     HColumnDescriptor hcd = new HColumnDescriptor(family);
-    hcd.setValue(MobConstants.IS_MOB, Bytes.toBytes(Boolean.TRUE));
-    hcd.setValue(MobConstants.MOB_THRESHOLD, Bytes.toBytes(3L));
+    hcd.setMobEnabled(true);
+    hcd.setMobThreshold(3L);
     hcd.setMaxVersions(4);
     desc.addFamily(hcd);
 

http://git-wip-us.apache.org/repos/asf/hbase/blob/629042f4/hbase-server/src/test/java/org/apache/hadoop/hbase/mob/mapreduce/TestMobSweeper.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/mob/mapreduce/TestMobSweeper.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/mob/mapreduce/TestMobSweeper.java
index 10bfa7a..2021bd8 100644
--- a/hbase-server/src/test/java/org/apache/hadoop/hbase/mob/mapreduce/TestMobSweeper.java
+++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/mob/mapreduce/TestMobSweeper.java
@@ -86,8 +86,8 @@ public class TestMobSweeper {
     tableName = "testSweeper" + tid;
     HTableDescriptor desc = new HTableDescriptor(tableName);
     HColumnDescriptor hcd = new HColumnDescriptor(family);
-    hcd.setValue(MobConstants.IS_MOB, Bytes.toBytes(Boolean.TRUE));
-    hcd.setValue(MobConstants.MOB_THRESHOLD, Bytes.toBytes(3L));
+    hcd.setMobEnabled(true);
+    hcd.setMobThreshold(3L);
     hcd.setMaxVersions(4);
     desc.addFamily(hcd);
 

http://git-wip-us.apache.org/repos/asf/hbase/blob/629042f4/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestDeleteMobTable.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestDeleteMobTable.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestDeleteMobTable.java
index f2b1a62..a64b7d6 100644
--- a/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestDeleteMobTable.java
+++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestDeleteMobTable.java
@@ -84,8 +84,8 @@ public class TestDeleteMobTable {
     TableName tn = TableName.valueOf(tableName);
     HTableDescriptor htd = new HTableDescriptor(tn);
     HColumnDescriptor hcd = new HColumnDescriptor(FAMILY);
-    hcd.setValue(MobConstants.IS_MOB, Bytes.toBytes(Boolean.TRUE));
-    hcd.setValue(MobConstants.MOB_THRESHOLD, Bytes.toBytes(0L));
+    hcd.setMobEnabled(true);
+    hcd.setMobThreshold(0);
     htd.addFamily(hcd);
     HBaseAdmin admin = null;
     HTable table = null;

http://git-wip-us.apache.org/repos/asf/hbase/blob/629042f4/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestHMobStore.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestHMobStore.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestHMobStore.java
index a7ae8cc..30b74d4 100644
--- a/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestHMobStore.java
+++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestHMobStore.java
@@ -115,8 +115,8 @@ public class TestHMobStore {
   private void init(String methodName, Configuration conf, boolean testStore)
   throws IOException {
     hcd = new HColumnDescriptor(family);
-    hcd.setValue(MobConstants.IS_MOB, Bytes.toBytes(Boolean.TRUE));
-    hcd.setValue(MobConstants.MOB_THRESHOLD, Bytes.toBytes(3L));
+    hcd.setMobEnabled(true);
+    hcd.setMobThreshold(3L);
     hcd.setMaxVersions(4);
     init(methodName, conf, hcd, testStore);
   }
@@ -365,8 +365,8 @@ public class TestHMobStore {
 
     HColumnDescriptor hcd;
     hcd = new HColumnDescriptor(family);
-    hcd.setValue(MobConstants.IS_MOB, Bytes.toBytes(Boolean.TRUE));
-    hcd.setValue(MobConstants.MOB_THRESHOLD, Bytes.toBytes(100L));
+    hcd.setMobEnabled(true);
+    hcd.setMobThreshold(100);
     hcd.setMaxVersions(4);
     init(name.getMethodName(), conf, hcd, false);
 
@@ -406,7 +406,7 @@ public class TestHMobStore {
       //this is not mob reference cell.
       Assert.assertFalse(MobUtils.isMobReferenceCell(cell));
       Assert.assertEquals(expected.get(i), results.get(i));
-      Assert.assertEquals(100, MobUtils.getMobThreshold(store.getFamily()));
+      Assert.assertEquals(100, store.getFamily().getMobThreshold());
     }
   }
 

http://git-wip-us.apache.org/repos/asf/hbase/blob/629042f4/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestMobCompaction.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestMobCompaction.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestMobCompaction.java
index 3293212..f44e529 100644
--- a/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestMobCompaction.java
+++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestMobCompaction.java
@@ -109,8 +109,8 @@ public class TestMobCompaction {
     compactionThreshold = conf.getInt("hbase.hstore.compactionThreshold", 3);
     htd = UTIL.createTableDescriptor(name.getMethodName());
     hcd = new HColumnDescriptor(COLUMN_FAMILY);
-    hcd.setValue(MobConstants.IS_MOB, Bytes.toBytes(Boolean.TRUE));
-    hcd.setValue(MobConstants.MOB_THRESHOLD, Bytes.toBytes(mobThreshold));
+    hcd.setMobEnabled(true);
+    hcd.setMobThreshold(mobThreshold);
     hcd.setMaxVersions(1);
     htd.addFamily(hcd);
 
@@ -170,8 +170,7 @@ public class TestMobCompaction {
     assertEquals("Before compaction: rows", compactionThreshold, countRows());
     assertEquals("Before compaction: mob rows", compactionThreshold, countMobRows());
     // Change the threshold larger than the data size
-    region.getTableDesc().getFamily(COLUMN_FAMILY).setValue(
-        MobConstants.MOB_THRESHOLD, Bytes.toBytes(500L));
+    region.getTableDesc().getFamily(COLUMN_FAMILY).setMobThreshold(500);
     region.initialize();
     region.compactStores();
 

http://git-wip-us.apache.org/repos/asf/hbase/blob/629042f4/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestMobStoreScanner.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestMobStoreScanner.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestMobStoreScanner.java
index 87147d1..bb73dba 100644
--- a/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestMobStoreScanner.java
+++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestMobStoreScanner.java
@@ -82,8 +82,8 @@ public class TestMobStoreScanner {
   public void setUp(long threshold, String TN) throws Exception {
     desc = new HTableDescriptor(TableName.valueOf(TN));
     hcd = new HColumnDescriptor(family);
-    hcd.setValue(MobConstants.IS_MOB, Bytes.toBytes(Boolean.TRUE));
-    hcd.setValue(MobConstants.MOB_THRESHOLD, Bytes.toBytes(threshold));
+    hcd.setMobEnabled(true);
+    hcd.setMobThreshold(threshold);
     hcd.setMaxVersions(4);
     desc.addFamily(hcd);
     admin = new HBaseAdmin(TEST_UTIL.getConfiguration());

http://git-wip-us.apache.org/repos/asf/hbase/blob/629042f4/src/main/docbkx/hbase_mob.xml
----------------------------------------------------------------------
diff --git a/src/main/docbkx/hbase_mob.xml b/src/main/docbkx/hbase_mob.xml
index c1baf01..d6fed1e 100644
--- a/src/main/docbkx/hbase_mob.xml
+++ b/src/main/docbkx/hbase_mob.xml
@@ -64,19 +64,18 @@
         <example>
             <title>Configure a Column for MOB Using HBase Shell</title>
             <screen>
-hbase> create 't1', 'f1', {IS_MOB => true, MOB_THRESHOLD => 102400}
-hbase> alter ‘t1′, {NAME => ‘f1', IS_MOB => true, MOB_THRESHOLD => 102400}
+hbase> create 't1', {NAME => 'f1', IS_MOB => true, MOB_THRESHOLD => 102400}
+hbase> alter 't1', {NAME => 'f1', IS_MOB => true, MOB_THRESHOLD => 102400}
             </screen>
         </example>
         <example>
             <title>Configure a Column for MOB Using the API</title>
             <programlisting language="java">
 ...
-HColumnDescriptor hcd = new HColumnDescriptor(“f”);
-hcd.setValue(MobConstants.IS_MOB, Bytes.toBytes(Boolean.TRUE));
+HColumnDescriptor hcd = new HColumnDescriptor("f");
+hcd.setMobEnabled(true);
 ...
-HColumnDescriptor hcd;
-hcd.setValue(MobConstants.MOB_THRESHOLD, Bytes.toBytes(102400L);
+hcd.setMobThreshold(102400L);
 ...
             </programlisting>
         </example>
@@ -93,15 +92,15 @@ hcd.setValue(MobConstants.MOB_THRESHOLD, Bytes.toBytes(102400L);
         <itemizedlist>
             <listitem>
                 <para><literal>threshold</literal> is the threshold at which cells are considered to
-                    be MOBs. The default is 100 kb.</para>
+                    be MOBs. The default is 1 kB.</para>
             </listitem>
             <listitem>
                 <para><literal>minMobDataSize</literal> is the minimum value for the size of MOB
-                    data. The default is 80 kb.</para>
+                    data. The default is 512 B.</para>
             </listitem>
             <listitem>
                 <para><literal>maxMobDataSize</literal> is the maximum value for the size of MOB
-                    data. The default is 5 MB.</para>
+                    data. The default is 5 kB.</para>
             </listitem>
         </itemizedlist>
     </section>