Peter Somogyi created HBASE-29361:
-------------------------------------
Summary: 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
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)