This is an automated email from the ASF dual-hosted git repository.

rmattingly pushed a commit to branch branch-2
in repository https://gitbox.apache.org/repos/asf/hbase.git


The following commit(s) were added to refs/heads/branch-2 by this push:
     new c78362de32d HBASE-29207 The backup system table should be considered a 
system table (#6842) (#6929)
c78362de32d is described below

commit c78362de32d59fe52a01a7b8ccab26deab569c80
Author: Ray Mattingly <[email protected]>
AuthorDate: Fri Apr 25 09:53:55 2025 -0400

    HBASE-29207 The backup system table should be considered a system table 
(#6842) (#6929)
    
    Signed-off-by: Nick Dimiduk <[email protected]>
    Signed-off-by: Nihal Jain <[email protected]>
    Co-authored-by: Ray Mattingly <[email protected]>
---
 .../apache/hadoop/hbase/backup/BackupRestoreConstants.java |  4 +++-
 .../hbase/snapshot/ClientSnapshotDescriptionUtils.java     |  2 +-
 .../java/org/apache/hadoop/hbase/NamespaceDescriptor.java  |  3 +++
 .../src/main/java/org/apache/hadoop/hbase/TableName.java   | 14 ++++++++++++++
 4 files changed, 21 insertions(+), 2 deletions(-)

diff --git 
a/hbase-backup/src/main/java/org/apache/hadoop/hbase/backup/BackupRestoreConstants.java
 
b/hbase-backup/src/main/java/org/apache/hadoop/hbase/backup/BackupRestoreConstants.java
index d05a421a395..57454d40217 100644
--- 
a/hbase-backup/src/main/java/org/apache/hadoop/hbase/backup/BackupRestoreConstants.java
+++ 
b/hbase-backup/src/main/java/org/apache/hadoop/hbase/backup/BackupRestoreConstants.java
@@ -18,6 +18,7 @@
 package org.apache.hadoop.hbase.backup;
 
 import org.apache.hadoop.hbase.HConstants;
+import org.apache.hadoop.hbase.NamespaceDescriptor;
 import org.apache.hadoop.hbase.coprocessor.CoprocessorHost;
 import org.apache.yetus.audience.InterfaceAudience;
 
@@ -30,7 +31,8 @@ public interface BackupRestoreConstants {
    * Backup/Restore constants
    */
   String BACKUP_SYSTEM_TABLE_NAME_KEY = "hbase.backup.system.table.name";
-  String BACKUP_SYSTEM_TABLE_NAME_DEFAULT = "backup:system";
+  String BACKUP_SYSTEM_TABLE_NAME_DEFAULT =
+    NamespaceDescriptor.BACKUP_NAMESPACE_NAME_STR + ":system";
 
   String BACKUP_SYSTEM_TTL_KEY = "hbase.backup.system.ttl";
 
diff --git 
a/hbase-client/src/main/java/org/apache/hadoop/hbase/snapshot/ClientSnapshotDescriptionUtils.java
 
b/hbase-client/src/main/java/org/apache/hadoop/hbase/snapshot/ClientSnapshotDescriptionUtils.java
index 0fe7720fdaf..3ab01b5d0ac 100644
--- 
a/hbase-client/src/main/java/org/apache/hadoop/hbase/snapshot/ClientSnapshotDescriptionUtils.java
+++ 
b/hbase-client/src/main/java/org/apache/hadoop/hbase/snapshot/ClientSnapshotDescriptionUtils.java
@@ -46,7 +46,7 @@ public final class ClientSnapshotDescriptionUtils {
       // make sure the table name is valid, this will implicitly check validity
       TableName tableName = TableName.valueOf(snapshot.getTable());
 
-      if (tableName.isSystemTable()) {
+      if (tableName.isSystemTable() && !tableName.isBackupsTable()) {
         throw new IllegalArgumentException("System table snapshots are not 
allowed");
       }
     }
diff --git 
a/hbase-common/src/main/java/org/apache/hadoop/hbase/NamespaceDescriptor.java 
b/hbase-common/src/main/java/org/apache/hadoop/hbase/NamespaceDescriptor.java
index 9eecfbd701b..14df2dd2f98 100644
--- 
a/hbase-common/src/main/java/org/apache/hadoop/hbase/NamespaceDescriptor.java
+++ 
b/hbase-common/src/main/java/org/apache/hadoop/hbase/NamespaceDescriptor.java
@@ -41,6 +41,9 @@ public class NamespaceDescriptor {
   /** Default namespace name. */
   public static final byte[] DEFAULT_NAMESPACE_NAME = Bytes.toBytes("default");
   public static final String DEFAULT_NAMESPACE_NAME_STR = 
Bytes.toString(DEFAULT_NAMESPACE_NAME);
+  /** Backup namespace name. */
+  public static final byte[] BACKUP_NAMESPACE_NAME = Bytes.toBytes("backup");
+  public static final String BACKUP_NAMESPACE_NAME_STR = 
Bytes.toString(BACKUP_NAMESPACE_NAME);
 
   public static final NamespaceDescriptor DEFAULT_NAMESPACE =
     NamespaceDescriptor.create(DEFAULT_NAMESPACE_NAME_STR).build();
diff --git a/hbase-common/src/main/java/org/apache/hadoop/hbase/TableName.java 
b/hbase-common/src/main/java/org/apache/hadoop/hbase/TableName.java
index c799fb9b2f7..fb366acf304 100644
--- a/hbase-common/src/main/java/org/apache/hadoop/hbase/TableName.java
+++ b/hbase-common/src/main/java/org/apache/hadoop/hbase/TableName.java
@@ -100,6 +100,7 @@ public final class TableName implements 
Comparable<TableName> {
   private final byte[] qualifier;
   private final String qualifierAsString;
   private final boolean systemTable;
+  private final boolean backupsTable;
   private final int hashCode;
 
   /**
@@ -264,6 +265,10 @@ public final class TableName implements 
Comparable<TableName> {
     return systemTable;
   }
 
+  public boolean isBackupsTable() {
+    return backupsTable;
+  }
+
   @Override
   public String toString() {
     return nameAsString;
@@ -287,6 +292,7 @@ public final class TableName implements 
Comparable<TableName> {
       this.namespace = NamespaceDescriptor.DEFAULT_NAMESPACE_NAME;
       this.namespaceAsString = NamespaceDescriptor.DEFAULT_NAMESPACE_NAME_STR;
       this.systemTable = false;
+      this.backupsTable = false;
 
       // The name does not include the namespace when it's the default one.
       this.nameAsString = qualifierAsString;
@@ -296,11 +302,18 @@ public final class TableName implements 
Comparable<TableName> {
         this.namespace = NamespaceDescriptor.SYSTEM_NAMESPACE_NAME;
         this.namespaceAsString = NamespaceDescriptor.SYSTEM_NAMESPACE_NAME_STR;
         this.systemTable = true;
+        this.backupsTable = false;
+      } else if (Bytes.equals(NamespaceDescriptor.BACKUP_NAMESPACE_NAME, 
namespace)) {
+        this.namespace = NamespaceDescriptor.BACKUP_NAMESPACE_NAME;
+        this.namespaceAsString = NamespaceDescriptor.BACKUP_NAMESPACE_NAME_STR;
+        this.systemTable = true;
+        this.backupsTable = true;
       } else {
         this.namespace = new byte[namespace.remaining()];
         namespace.duplicate().get(this.namespace);
         this.namespaceAsString = Bytes.toString(this.namespace);
         this.systemTable = false;
+        this.backupsTable = false;
       }
       this.nameAsString = namespaceAsString + NAMESPACE_DELIM + 
qualifierAsString;
       this.name = Bytes.toBytes(nameAsString);
@@ -320,6 +333,7 @@ public final class TableName implements 
Comparable<TableName> {
     this.namespace = NamespaceDescriptor.SYSTEM_NAMESPACE_NAME;
     this.namespaceAsString = NamespaceDescriptor.SYSTEM_NAMESPACE_NAME_STR;
     this.systemTable = true;
+    this.backupsTable = false;
 
     // WARNING: nameAsString is different than name for old meta & root!
     // This is by design.

Reply via email to