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

svn commit: r1577641 - in /hbase/branches/0.89-fb/src: main/java/org/apache/hadoop/hbase/regionserver/CompactUtility.java test/java/org/apache/hadoop/hbase/regionserver/TestCompaction.java

Author: liyin
Date: Fri Mar 14 18:09:51 2014
New Revision: 1577641

URL: http://svn.apache.org/r1577641
Log:
[HBASE-10393] Totally fix the CompactUtility

Author: rshroff

Summary:
The input for the list of compacted files given to the utility was
not given in a correct format. Adding 'f' option for the list of
coma separated files.

Test Plan: ran on titanshadow054-frc3

Reviewers: aaiyer, adela, manukranthk, liyintang

Reviewed By: manukranthk

CC: hbase-eng@, aleksandr, liyintang, gauravm

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

Modified:
    hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/regionserver/CompactUtility.java
    hbase/branches/0.89-fb/src/test/java/org/apache/hadoop/hbase/regionserver/TestCompaction.java

Modified: hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/regionserver/CompactUtility.java
URL: http://svn.apache.org/viewvc/hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/regionserver/CompactUtility.java?rev=1577641&r1=1577640&r2=1577641&view=diff
==============================================================================
--- hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/regionserver/CompactUtility.java (original)
+++ hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/regionserver/CompactUtility.java Fri Mar 14 18:09:51 2014
@@ -35,6 +35,9 @@ import org.apache.hadoop.hbase.regionser
 import org.apache.hadoop.hbase.regionserver.wal.HLog;
 import org.apache.hadoop.hbase.util.Bytes;
 
+import java.io.IOException;
+import java.util.*;
+
 /**
  * A compaction Utility for the Store files of a region Server.
  * This utility exposes a hook to compact specific store files.
@@ -47,14 +50,13 @@ public class CompactUtility {
   static final Log LOG = LogFactory.getLog(CompactUtility.class);
   private String table;
   private HColumnDescriptor cFamily;
-  private List<Path> filesCompacting;
+  private Set<String> filesCompacting;
   private Configuration conf;
   private HRegion hRegion;
 
-
   public CompactUtility(String table, HColumnDescriptor cFamily,
                         byte[] startKey, long regionId,
-                        List<Path> filesCompacting, Configuration conf)
+                        Set<String> filesCompacting, Configuration conf)
           throws IOException {
     this.conf = conf;
     this.table = table;
@@ -79,13 +81,17 @@ public class CompactUtility {
     Store store = hRegion.getStore(this.cFamily.getName());
     List<StoreFile> storeFiles = new ArrayList<StoreFile>(
             store.getStorefiles());
+
+    StoreFile file;
     if (filesCompacting != null) {
-      for (Iterator<StoreFile> sFile = storeFiles.iterator(); sFile.hasNext(); ) {
-        if (!filesCompacting.contains(sFile.next().getPath())) {
+      for (Iterator<StoreFile> sFile = storeFiles.iterator(); sFile.hasNext();) {
+        file = sFile.next();
+        if (!filesCompacting.contains(file.getPath().toString())) {
           sFile.remove();
         }
       }
     }
+
     long maxId = StoreFile.getMaxSequenceIdInList(storeFiles, true);
     StoreFile.Writer writer = store.compactStores(storeFiles, false, maxId);
     StoreFile result = store.completeCompaction(storeFiles, writer);
@@ -99,20 +105,23 @@ public class CompactUtility {
   private static void printHelp(Options opt) {
     new HelpFormatter().printHelp(
       "Compact Utility < -t tableName -c ColumnFamilyName -r regionID" +
-      " [List of store file Paths]", opt);
+      " -f List of comma-separated store files", opt);
   }
 
   public static void main(String[] args) throws Exception {
     Options options = new Options();
-    options.addOption("t", "table name", true,
+    options.addOption("t", "table_name", true,
             "Table for which the files hold data");
-    options.addOption("c", "Column Family", true,
+    options.addOption("c", "column_family", true,
             "Column Family of the table");
-    options.addOption("r", "Region Name", true,
+    options.addOption("r", "region_name", true,
             "Region Name for which we need to compact the files");
+    options.addOption("f", "files", true,
+      "Comma separated list of files");
     CommandLineParser parser = new PosixParser();
     CommandLine cmd = parser.parse(options, args);
-    if (!cmd.hasOption("t") || !cmd.hasOption("c") || !cmd.hasOption("r")) {
+    if (!cmd.hasOption("t") || !cmd.hasOption("c") || !cmd.hasOption("r") ||
+      !cmd.hasOption("f")) {
       printHelp(options);
       throw new IOException("Incomplete arguments");
     }
@@ -123,7 +132,7 @@ public class CompactUtility {
     long regionId = -1;
     try {
       // the regionName is of format "<tableName>,<startKey>,<regionId.md5hash>"
-      String[] splits = regionName.split(",");
+      String[] splits = regionName.split (",");
       startKey = Bytes.toBytes(splits[1]);
       regionId = Long.valueOf(splits[2].split("\\.")[0]);
     } catch (Exception e) {
@@ -134,15 +143,13 @@ public class CompactUtility {
 
     HColumnDescriptor cFamily = new HColumnDescriptor(cmd.getOptionValue("c"));
 
-    String[] files = cmd.getArgs();
-    List<Path> filePaths = new ArrayList<Path>(files.length);
-    for (String file : files) {
-      filePaths.add(new Path(file));
-    }
+    String filePaths = cmd.getOptionValue("f");
+    Set<String> files = new HashSet<>(Arrays.asList(filePaths.split(",")));
+
     Configuration conf = HBaseConfiguration.create();
     SchemaMetrics.configureGlobally(conf);
     CompactUtility compactUtility = new CompactUtility(
-            table, cFamily, startKey, regionId, filePaths, conf);
+            table, cFamily, startKey, regionId, files, conf);
     compactUtility.compact();
   }
 }

Modified: hbase/branches/0.89-fb/src/test/java/org/apache/hadoop/hbase/regionserver/TestCompaction.java
URL: http://svn.apache.org/viewvc/hbase/branches/0.89-fb/src/test/java/org/apache/hadoop/hbase/regionserver/TestCompaction.java?rev=1577641&r1=1577640&r2=1577641&view=diff
==============================================================================
--- hbase/branches/0.89-fb/src/test/java/org/apache/hadoop/hbase/regionserver/TestCompaction.java (original)
+++ hbase/branches/0.89-fb/src/test/java/org/apache/hadoop/hbase/regionserver/TestCompaction.java Fri Mar 14 18:09:51 2014
@@ -628,9 +628,9 @@ public class TestCompaction extends HBas
     Store store = hRegion.getStore(COLUMN_FAMILY);
     List<StoreFile> storeFiles = store.getStorefiles();
     int numFiles1 = storeFiles.size();
-    List<Path> pathList = new ArrayList<Path>();
+    Set<String> pathList = new HashSet<>();
     for (StoreFile storeFile : storeFiles) {
-      pathList.add(storeFile.getPath());
+      pathList.add(storeFile.getPath().toString());
     }
 
     CompactUtility util = new CompactUtility(