This is an automated email from the ASF dual-hosted git repository. cshannon pushed a commit to branch main in repository https://gitbox.apache.org/repos/asf/accumulo.git
commit fc309ccd6de99e95520f0ffdfd445bc1b97fe261 Author: Dave Marion <dlmar...@apache.org> AuthorDate: Mon May 20 14:18:55 2024 +0000 Modified ScanServer to not allow scans on Fate table as well (cherry picked from commit 6afdc88f8e6ebfdd2a5b14c2837f1ff03c062a21) This now applies with Scan ref tables (#4690) --- .../main/java/org/apache/accumulo/core/dataImpl/KeyExtent.java | 4 ++++ .../src/main/java/org/apache/accumulo/tserver/ScanServer.java | 4 ++-- .../test/java/org/apache/accumulo/tserver/ScanServerTest.java | 10 +++++----- 3 files changed, 11 insertions(+), 7 deletions(-) diff --git a/core/src/main/java/org/apache/accumulo/core/dataImpl/KeyExtent.java b/core/src/main/java/org/apache/accumulo/core/dataImpl/KeyExtent.java index b5bdb1f744..1069a5e3bc 100644 --- a/core/src/main/java/org/apache/accumulo/core/dataImpl/KeyExtent.java +++ b/core/src/main/java/org/apache/accumulo/core/dataImpl/KeyExtent.java @@ -535,6 +535,10 @@ public class KeyExtent implements Comparable<KeyExtent> { return prevExtent.endRow().equals(prevEndRow()); } + public boolean isSystemTable() { + return AccumuloTable.allTableIds().contains(tableId()); + } + public boolean isMeta() { return tableId().equals(AccumuloTable.METADATA.tableId()) || isRootTablet(); } diff --git a/server/tserver/src/main/java/org/apache/accumulo/tserver/ScanServer.java b/server/tserver/src/main/java/org/apache/accumulo/tserver/ScanServer.java index 3ba3a1c306..ae226db339 100644 --- a/server/tserver/src/main/java/org/apache/accumulo/tserver/ScanServer.java +++ b/server/tserver/src/main/java/org/apache/accumulo/tserver/ScanServer.java @@ -945,7 +945,7 @@ public class ScanServer extends AbstractServer KeyExtent extent = getKeyExtent(textent); - if (extent.isMeta() && !isSystemUser(credentials)) { + if (extent.isSystemTable() && !isSystemUser(credentials)) { throw new TException( "Only the system user can perform eventual consistency scans on the root and metadata tables"); } @@ -1012,7 +1012,7 @@ public class ScanServer extends AbstractServer for (Entry<TKeyExtent,List<TRange>> entry : tbatch.entrySet()) { KeyExtent extent = getKeyExtent(entry.getKey()); - if (extent.isMeta() && !context.getSecurityOperation().isSystemUser(credentials)) { + if (extent.isSystemTable() && !isSystemUser(credentials)) { throw new TException( "Only the system user can perform eventual consistency scans on the root and metadata tables"); } diff --git a/server/tserver/src/test/java/org/apache/accumulo/tserver/ScanServerTest.java b/server/tserver/src/test/java/org/apache/accumulo/tserver/ScanServerTest.java index f93f095a87..bbe8ffb3fc 100644 --- a/server/tserver/src/test/java/org/apache/accumulo/tserver/ScanServerTest.java +++ b/server/tserver/src/test/java/org/apache/accumulo/tserver/ScanServerTest.java @@ -190,7 +190,7 @@ public class ScanServerTest { Map<String,String> execHints = new HashMap<>(); ScanReservation reservation = createMock(ScanReservation.class); - expect(extent.isMeta()).andReturn(false).anyTimes(); + expect(extent.isSystemTable()).andReturn(false).anyTimes(); expect(extent.toThrift()).andReturn(textent).anyTimes(); expect(reservation.getFailures()).andReturn(Map.of(textent, ranges)); reservation.close(); @@ -242,7 +242,7 @@ public class ScanServerTest { }; TestScanServer ss = partialMockBuilder(TestScanServer.class).createMock(); - expect(extent.isMeta()).andReturn(false).anyTimes(); + expect(extent.isSystemTable()).andReturn(false).anyTimes(); expect(reservation.newTablet(ss, extent)).andReturn(tablet); expect(reservation.getTabletMetadataExtents()).andReturn(Set.of(extent)); expect(reservation.getFailures()).andReturn(Map.of()); @@ -305,7 +305,7 @@ public class ScanServerTest { }; TestScanServer ss = partialMockBuilder(TestScanServer.class).createMock(); - expect(extent.isMeta()).andReturn(false).anyTimes(); + expect(extent.isSystemTable()).andReturn(false).anyTimes(); expect(reservation.newTablet(ss, extent)).andReturn(tablet).anyTimes(); expect(reservation.getTabletMetadataExtents()).andReturn(Set.of()); expect(reservation.getFailures()).andReturn(Map.of(textent, ranges)).anyTimes(); @@ -395,7 +395,7 @@ public class ScanServerTest { TabletResolver resolver = createMock(TabletResolver.class); TestScanServer ss = partialMockBuilder(TestScanServer.class).createMock(); - expect(sextent.isMeta()).andReturn(true).anyTimes(); + expect(sextent.isSystemTable()).andReturn(true).anyTimes(); expect(reservation.newTablet(ss, sextent)).andReturn(tablet); expect(reservation.getFailures()).andReturn(Map.of()).anyTimes(); reservation.close(); @@ -444,7 +444,7 @@ public class ScanServerTest { TabletResolver resolver = createMock(TabletResolver.class); TestScanServer ss = partialMockBuilder(TestScanServer.class).createMock(); - expect(sextent.isMeta()).andReturn(true).anyTimes(); + expect(sextent.isSystemTable()).andReturn(true).anyTimes(); expect(reservation.getFailures()).andReturn(Map.of()).anyTimes(); replay(sextent, reservation, handler);