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 2016/12/03 11:56:17 UTC

hbase git commit: HBASE-17243 Reuse CompactionPartitionId and avoid creating MobFileName in PartitionedMobCompactor to avoid unnecessary new objects

Repository: hbase
Updated Branches:
  refs/heads/master 7775feda0 -> efcd15bf6


HBASE-17243 Reuse CompactionPartitionId and avoid creating MobFileName in PartitionedMobCompactor to avoid unnecessary new objects

Signed-off-by: Matteo Bertozzi <ma...@cloudera.com>


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

Branch: refs/heads/master
Commit: efcd15bf67f155e29b337886fe38eadfce75ffc6
Parents: 7775fed
Author: Huaxiang Sun <hs...@cloudera.com>
Authored: Sat Dec 3 03:47:06 2016 -0800
Committer: Matteo Bertozzi <ma...@cloudera.com>
Committed: Sat Dec 3 03:48:23 2016 -0800

----------------------------------------------------------------------
 .../apache/hadoop/hbase/mob/MobFileName.java    | 46 +++++++++++++-------
 .../PartitionedMobCompactionRequest.java        | 15 ++++++-
 .../compactions/PartitionedMobCompactor.java    | 17 +++++---
 3 files changed, 54 insertions(+), 24 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/hbase/blob/efcd15bf/hbase-server/src/main/java/org/apache/hadoop/hbase/mob/MobFileName.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/mob/MobFileName.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/mob/MobFileName.java
index 2364a47..6ca67ad 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/mob/MobFileName.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/mob/MobFileName.java
@@ -41,12 +41,15 @@ import org.apache.hadoop.hbase.util.MD5Hash;
  */
 @InterfaceAudience.Private
 public final class MobFileName {
-
   private final String date;
   private final String startKey;
   private final String uuid;
   private final String fileName;
 
+  private static final int STARTKEY_END_INDEX = 32;
+  private static final int DATE_END_INDEX = 40;
+  private static final int UUID_END_INDEX = 72;
+
   /**
    * @param startKey
    *          The start key.
@@ -59,7 +62,7 @@ public final class MobFileName {
     this.startKey = MD5Hash.getMD5AsHex(startKey, 0, startKey.length);
     this.uuid = uuid;
     this.date = date;
-    this.fileName = this.startKey + date + uuid;
+    this.fileName = this.startKey + this.date + this.uuid;
   }
 
   /**
@@ -74,14 +77,14 @@ public final class MobFileName {
     this.startKey = startKey;
     this.uuid = uuid;
     this.date = date;
-    this.fileName = this.startKey + date + uuid;
+    this.fileName = this.startKey + this.date + this.uuid;
   }
 
   /**
    * Creates an instance of MobFileName
    *
    * @param startKey
-   *          The start key.
+   *          The md5 hex string of the start key.
    * @param date
    *          The string of the latest timestamp of cells in this file, the format is yyyymmdd.
    * @param uuid The uuid.
@@ -113,13 +116,31 @@ public final class MobFileName {
   public static MobFileName create(String fileName) {
     // The format of a file name is md5HexString(0-31bytes) + date(32-39bytes) + UUID
     // The date format is yyyyMMdd
-    String startKey = fileName.substring(0, 32);
-    String date = fileName.substring(32, 40);
-    String uuid = fileName.substring(40);
+    String startKey = fileName.substring(0, STARTKEY_END_INDEX);
+    String date = fileName.substring(STARTKEY_END_INDEX, DATE_END_INDEX);
+    String uuid = fileName.substring(DATE_END_INDEX, UUID_END_INDEX);
     return new MobFileName(startKey, date, uuid);
   }
 
   /**
+   * get startKey from MobFileName.
+   * @param fileName file name.
+   * @return startKey
+   */
+  public static String getStartKeyFromName(final String fileName) {
+    return fileName.substring(0, STARTKEY_END_INDEX);
+  }
+
+  /**
+   * get date from MobFileName.
+   * @param fileName file name.
+   * @return date
+   */
+  public static String getDateFromName(final String fileName) {
+    return fileName.substring(STARTKEY_END_INDEX, DATE_END_INDEX);
+  }
+
+  /**
    * Gets the hex string of the md5 for a start key.
    * @return The hex string of the md5 for a start key.
    */
@@ -137,11 +158,7 @@ public final class MobFileName {
 
   @Override
   public int hashCode() {
-    StringBuilder builder = new StringBuilder();
-    builder.append(startKey);
-    builder.append(date);
-    builder.append(uuid);
-    return builder.toString().hashCode();
+    return fileName.hashCode();
   }
 
   @Override
@@ -151,10 +168,7 @@ public final class MobFileName {
     }
     if (anObject instanceof MobFileName) {
       MobFileName another = (MobFileName) anObject;
-      if (this.startKey.equals(another.startKey) && this.date.equals(another.date)
-          && this.uuid.equals(another.uuid)) {
-        return true;
-      }
+      return this.getFileName().equals(another.getFileName());
     }
     return false;
   }

http://git-wip-us.apache.org/repos/asf/hbase/blob/efcd15bf/hbase-server/src/main/java/org/apache/hadoop/hbase/mob/compactions/PartitionedMobCompactionRequest.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/mob/compactions/PartitionedMobCompactionRequest.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/mob/compactions/PartitionedMobCompactionRequest.java
index 227f1e4..e288571 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/mob/compactions/PartitionedMobCompactionRequest.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/mob/compactions/PartitionedMobCompactionRequest.java
@@ -92,10 +92,15 @@ public class PartitionedMobCompactionRequest extends MobCompactionRequest {
    * The partition id that consists of start key and date of the mob file name.
    */
   public static class CompactionPartitionId {
-
     private String startKey;
     private String date;
 
+    public CompactionPartitionId() {
+      // initialize these fields to empty string
+      this.startKey = "";
+      this.date = "";
+    }
+
     public CompactionPartitionId(String startKey, String date) {
       if (startKey == null || date == null) {
         throw new IllegalArgumentException("Neither of start key and date could be null");
@@ -108,10 +113,18 @@ public class PartitionedMobCompactionRequest extends MobCompactionRequest {
       return this.startKey;
     }
 
+    public void setStartKey(final String startKey) {
+      this.startKey = startKey;
+    }
+
     public String getDate() {
       return this.date;
     }
 
+    public void setDate(final String date) {
+      this.date = date;
+    }
+
     @Override
     public int hashCode() {
       int result = 17;

http://git-wip-us.apache.org/repos/asf/hbase/blob/efcd15bf/hbase-server/src/main/java/org/apache/hadoop/hbase/mob/compactions/PartitionedMobCompactor.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/mob/compactions/PartitionedMobCompactor.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/mob/compactions/PartitionedMobCompactor.java
index 731fb45..6c8080c 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/mob/compactions/PartitionedMobCompactor.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/mob/compactions/PartitionedMobCompactor.java
@@ -144,10 +144,12 @@ public class PartitionedMobCompactor extends MobCompactor {
    */
   protected PartitionedMobCompactionRequest select(List<FileStatus> candidates,
     boolean allFiles) throws IOException {
-    Collection<FileStatus> allDelFiles = new ArrayList<>();
-    Map<CompactionPartitionId, CompactionPartition> filesToCompact = new HashMap<>();
+    final Collection<FileStatus> allDelFiles = new ArrayList<>();
+    final Map<CompactionPartitionId, CompactionPartition> filesToCompact = new HashMap<>();
+    final CompactionPartitionId id = new CompactionPartitionId();
     int selectedFileCount = 0;
     int irrelevantFileCount = 0;
+
     for (FileStatus file : candidates) {
       if (!file.isFile()) {
         irrelevantFileCount++;
@@ -166,15 +168,16 @@ public class PartitionedMobCompactor extends MobCompactor {
       }
       if (StoreFileInfo.isDelFile(linkedFile.getPath())) {
         allDelFiles.add(file);
-      } else if (allFiles || linkedFile.getLen() < mergeableSize) {
+      } else if (allFiles || (linkedFile.getLen() < mergeableSize)) {
         // add all files if allFiles is true,
         // otherwise add the small files to the merge pool
-        MobFileName fileName = MobFileName.create(linkedFile.getPath().getName());
-        CompactionPartitionId id = new CompactionPartitionId(fileName.getStartKey(),
-          fileName.getDate());
+        String fileName = linkedFile.getPath().getName();
+        id.setStartKey(MobFileName.getStartKeyFromName(fileName));
+        id.setDate(MobFileName.getDateFromName(fileName));
         CompactionPartition compactionPartition = filesToCompact.get(id);
         if (compactionPartition == null) {
-          compactionPartition = new CompactionPartition(id);
+          compactionPartition = new CompactionPartition(
+              new CompactionPartitionId(id.getStartKey(), id.getDate()));
           compactionPartition.addFile(file);
           filesToCompact.put(id, compactionPartition);
         } else {