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.