Skip to content

HBASE-30058 Eliminate unnecessary connection creation in snapshot operations#8030

Open
mini666 wants to merge 1 commit intoapache:masterfrom
mini666:HBASE-30058
Open

HBASE-30058 Eliminate unnecessary connection creation in snapshot operations#8030
mini666 wants to merge 1 commit intoapache:masterfrom
mini666:HBASE-30058

Conversation

@mini666
Copy link
Copy Markdown
Contributor

@mini666 mini666 commented Apr 8, 2026

Summary

Each snapshot operation created two short-lived connections in SnapshotDescriptionUtils.validate():

  1. isSecurityAvailable(conf) — created a Connection + Admin just to check hbase:acl table existence
  2. writeAclToSnapshotDescription() — created another Connection to read ACL data from hbase:acl

In Kerberos environments with the default ZKConnectionRegistry, each connection triggered a new ZK session with GSSAPI authentication and a TGS request to the KDC. During batch snapshot operations, this caused excessive KDC load that could lead to IP blocking.

This patch reuses the caller's existing connection instead of creating new ones:

  • isSecurityAvailable() now accepts a Connection parameter
  • writeAclToSnapshotDescription() passes the shared connection's Table to PermissionStorage.getTablePermissions()
  • All callers (MasterRpcServices, RestoreSnapshotProcedure, CloneSnapshotProcedure) pass through their available connection

Zero behavioral change — the same checks are performed, the same data is read, the same ACL is written to snapshots.

See HBASE-30058 for detailed root cause analysis including design ambiguity discussion.

…rations

Each snapshot operation created two short-lived connections in
SnapshotDescriptionUtils.validate() — one for isSecurityAvailable()
to check hbase:acl table existence, and another in
writeAclToSnapshotDescription() to read ACL data. In Kerberos
environments with ZKConnectionRegistry, each connection triggered
a new ZK session with GSSAPI authentication and a TGS request to
the KDC, causing excessive KDC load during batch snapshot operations.

This patch reuses the caller's existing connection instead of
creating new ones:

- isSecurityAvailable() now accepts a Connection parameter
- writeAclToSnapshotDescription() passes the shared connection's
  Table to PermissionStorage.getTablePermissions()
- All callers (MasterRpcServices, RestoreSnapshotProcedure,
  CloneSnapshotProcedure) pass through their available connection

Signed-off-by: JeongMin Ju <mini666@apache.org>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant