Apache9 commented on a change in pull request #2237:
URL: https://github.com/apache/hbase/pull/2237#discussion_r472640228



##########
File path: 
hbase-server/src/main/java/org/apache/hadoop/hbase/master/procedure/InitMetaProcedure.java
##########
@@ -167,4 +171,35 @@ protected void completionCleanup(MasterProcedureEnv env) {
   public void await() throws InterruptedException {
     latch.await();
   }
+
+  private static boolean deleteMetaTableDirectoryIfPartial(FileSystem 
rootDirectoryFs,
+    Path metaTableDir) throws IOException {
+    boolean isPartial = true;
+    try {
+      TableDescriptor metaDescriptor =
+        FSTableDescriptors.getTableDescriptorFromFs(rootDirectoryFs, 
metaTableDir);
+      // when entering the state of INIT_META_WRITE_FS_LAYOUT, if a meta table 
directory is found,
+      // the meta table should not have any useful data and considers as 
partial.
+      // if we find any valid HFiles, operator should fix the meta e.g. via 
HBCK.
+      if (metaDescriptor != null && metaDescriptor.getColumnFamilyCount() > 0) 
{
+        RemoteIterator<LocatedFileStatus> iterator = 
rootDirectoryFs.listFiles(metaTableDir, true);
+        while (iterator.hasNext()) {
+          LocatedFileStatus status = iterator.next();
+          if (StoreFileInfo.isHFile(status.getPath()) && HFile
+            .isHFileFormat(rootDirectoryFs, status.getPath())) {
+            isPartial = false;
+            break;
+          }
+        }
+      }
+    } finally {
+      if (!isPartial) {
+        throw new IOException("Meta table is not partial, please sideline this 
meta directory "
+          + "or run HBCK to fix this meta table, e.g. rebuild the server 
hostname in ZNode for the "
+          + "meta region");
+      }

Review comment:
       In general the approach is fine. The only concern is the implementation. 
I do not think InitMetaProcedure support rollback, so what will happen if we 
throw exception here? You will see a ERROR log in the output to say that the 
procedure does not support rollback?




----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
[email protected]


Reply via email to