From 984574434c0aaf647cdaebd12c0d2778ed05a8b6 Mon Sep 17 00:00:00 2001 From: Dom Garguilo Date: Fri, 3 Oct 2025 11:10:35 -0400 Subject: [PATCH] Narrow table lock range for set tablet availability fate operation --- .../accumulo/core/fate/zookeeper/LockRange.java | 8 ++++++++ .../manager/tableOps/availability/LockTable.java | 13 ++++++++++++- 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/core/src/main/java/org/apache/accumulo/core/fate/zookeeper/LockRange.java b/core/src/main/java/org/apache/accumulo/core/fate/zookeeper/LockRange.java index dcb2e0f5dbb..b9a7043bb43 100644 --- a/core/src/main/java/org/apache/accumulo/core/fate/zookeeper/LockRange.java +++ b/core/src/main/java/org/apache/accumulo/core/fate/zookeeper/LockRange.java @@ -18,6 +18,7 @@ */ package org.apache.accumulo.core.fate.zookeeper; +import org.apache.accumulo.core.data.RowRange; import org.apache.accumulo.core.data.TableId; import org.apache.accumulo.core.dataImpl.KeyExtent; import org.apache.hadoop.io.Text; @@ -73,6 +74,13 @@ public static LockRange of(Text startRow, Text endRow) { return new LockRange(startRow, endRow); } + public static LockRange of(RowRange rowRange) { + if (rowRange == null) { + return infinite(); + } + return of(rowRange.getLowerBound(), rowRange.getUpperBound()); + } + public static LockRange infinite() { return INF; } diff --git a/server/manager/src/main/java/org/apache/accumulo/manager/tableOps/availability/LockTable.java b/server/manager/src/main/java/org/apache/accumulo/manager/tableOps/availability/LockTable.java index 2d12f627dfd..dd531d073b3 100644 --- a/server/manager/src/main/java/org/apache/accumulo/manager/tableOps/availability/LockTable.java +++ b/server/manager/src/main/java/org/apache/accumulo/manager/tableOps/availability/LockTable.java @@ -21,11 +21,14 @@ import org.apache.accumulo.core.client.admin.TabletAvailability; import org.apache.accumulo.core.clientImpl.thrift.TableOperation; import org.apache.accumulo.core.data.NamespaceId; +import org.apache.accumulo.core.data.Range; +import org.apache.accumulo.core.data.RowRange; import org.apache.accumulo.core.data.TableId; import org.apache.accumulo.core.dataImpl.thrift.TRange; import org.apache.accumulo.core.fate.FateId; import org.apache.accumulo.core.fate.Repo; import org.apache.accumulo.core.fate.zookeeper.DistributedReadWriteLock; +import org.apache.accumulo.core.fate.zookeeper.LockRange; import org.apache.accumulo.manager.Manager; import org.apache.accumulo.manager.tableOps.ManagerRepo; import org.apache.accumulo.manager.tableOps.Utils; @@ -48,10 +51,18 @@ public LockTable(TableId tableId, NamespaceId namespaceId, TRange range, @Override public long isReady(FateId fateId, Manager manager) throws Exception { + final Range range = new Range(tRange); + final RowRange rowRange = RowRange.range( + range.isInfiniteStartKey() ? null : range.getStartKey().getRow(), + range.isStartKeyInclusive(), range.isInfiniteStopKey() ? null : range.getEndKey().getRow(), + range.isEndKeyInclusive()); + final LockRange lockRange = LockRange.of(rowRange); + return Utils.reserveNamespace(manager.getContext(), namespaceId, fateId, DistributedReadWriteLock.LockType.READ, true, TableOperation.SET_TABLET_AVAILABILITY) + Utils.reserveTable(manager.getContext(), tableId, fateId, - DistributedReadWriteLock.LockType.WRITE, true, TableOperation.SET_TABLET_AVAILABILITY); + DistributedReadWriteLock.LockType.WRITE, true, TableOperation.SET_TABLET_AVAILABILITY, + lockRange); } @Override