[
https://issues.apache.org/jira/browse/HBASE-29361?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Peter Somogyi updated HBASE-29361:
----------------------------------
Summary: Snapshot coprocessor hooks called inside SnapshotProcedure (was:
Snapshot coprocessor hooks called inside SnapshotProcedure,)
> Snapshot coprocessor hooks called inside SnapshotProcedure
> ----------------------------------------------------------
>
> Key: HBASE-29361
> URL: https://issues.apache.org/jira/browse/HBASE-29361
> Project: HBase
> Issue Type: Bug
> Components: Coprocessors, snapshots
> Affects Versions: 2.6.0
> Reporter: Peter Somogyi
> Assignee: Peter Somogyi
> Priority: Minor
>
> Snapshot coprocessor hooks (e.g. preSnapshot) are called inside
> SnapshotProcedure, causing inconsistent behavior compared to
> CreateTableProcedure or other procedures.
> *Current Behavior:*
> In HBase 2.6, snapshot operations have been moved to the Procedure framework.
> However, the integration of coprocessors with snapshots differs from other
> procedures. Specifically, the preSnapshot coprocessor hook is called inside
> the SnapshotProcedure's SNAPSHOT_PRE_OPERATION step. If a coprocessor (e.g.,
> Ranger) throws an AccessDeniedException during a snapshot create command, the
> SnapshotProcedure starts and rolls back during the SNAPSHOT_PRE_OPERATION
> step.
> This is different from CreateTableProcedure, where the preCreateTable hook is
> called before the procedure itself starts.
> When the CreateTableProcedure is denied it will create a FailedProcedure,
> however, the CreateSnapshot procedure will start a SnapshotProcedure.
> *Comparison*
> Original behavior using deny coprocessor for snapshot and table create
> {noformat}
> hbase:011:0> snapshot 'peter', 'denied1'
> ERROR: Snapshot is not allowed by coprocessor
> For usage try 'help "snapshot"'
> Took 0.1669 seconds
> hbase:012:0> create 'peter1-denied', 'f'
> ERROR: org.apache.hadoop.hbase.security.AccessDeniedException: Denied table
> create
> For usage try 'help "create"'
> Took 0.0510 seconds
> hbase:013:0> list_procedures
> PID Name State Submitted Last_Update Parameters
> 88 org.apache.hadoop.hbase.master.procedure.SnapshotProcedure ROLLEDBACK
> 2025-05-28 14:18:40 +0200 2025-05-28 14:18:40 +0200 [{},
> {"snapshot"=>{"name"=>"denied1", "table"=>"peter",
> "creationTime"=>"1748434720667", "type"=>"FLUSH", "version"=>2, "ttl"=>"0"}}]
> 89 org.apache.hadoop.hbase.procedure2.FailedProcedure ROLLEDBACK 2025-05-28
> 14:18:55 +0200 2025-05-28 14:18:55 +0200
> 2 row(s)
> Took 0.0408 seconds
> hbase:014:0>
> {noformat}
> The new behavior when preSnapshot is called before the Procedure itself
> {noformat}
> hbase:001:0> snapshot 'peter', 'denied1'
> ERROR: org.apache.hadoop.hbase.security.AccessDeniedException: Snapshot is
> not allowed by coprocessor
> For usage try 'help "snapshot"'
> Took 5.3337 seconds
> hbase:002:0> create 'peter-denied', 'f'
> ERROR: org.apache.hadoop.hbase.security.AccessDeniedException: Denied table
> create
> For usage try 'help "create"'
> Took 0.0184 seconds
> hbase:003:0> list_procedures
> PID Name State Submitted Last_Update Parameters
> 102 org.apache.hadoop.hbase.procedure2.FailedProcedure ROLLEDBACK 2025-05-28
> 14:44:52 +0200 2025-05-28 14:44:52 +0200
> 103 org.apache.hadoop.hbase.procedure2.FailedProcedure ROLLEDBACK 2025-05-28
> 14:45:01 +0200 2025-05-28 14:45:01 +0200
> 2 row(s)
> Took 0.0472 seconds
> hbase:004:0>
> {noformat}
--
This message was sent by Atlassian Jira
(v8.20.10#820010)