This is an automated email from the ASF dual-hosted git repository.
dlmarion pushed a commit to branch elasticity
in repository https://gitbox.apache.org/repos/asf/accumulo.git
The following commit(s) were added to refs/heads/elasticity by this push:
new ca56493db7 Resurrected CompactionDriverTest resolving TODO in
PreDeleteTable (#4377)
ca56493db7 is described below
commit ca56493db7eb122345a7c954c820fe9b51e4687e
Author: Dave Marion <[email protected]>
AuthorDate: Tue Mar 19 12:20:17 2024 -0400
Resurrected CompactionDriverTest resolving TODO in PreDeleteTable (#4377)
The TODO asked if the the delete marker in ZooKeeper was still
being used / tested. It is still being used by the CompactionDriver.
However, the CompactionDriverTest class was deleted at some point
which tests it. I resurrected and fixed the test.
---
.../manager/tableOps/compact/CompactionDriver.java | 3 +-
.../manager/tableOps/delete/PreDeleteTable.java | 1 -
.../tableOps/compact/CompactionDriverTest.java | 148 +++++++++++++++++++++
3 files changed, 150 insertions(+), 2 deletions(-)
diff --git
a/server/manager/src/main/java/org/apache/accumulo/manager/tableOps/compact/CompactionDriver.java
b/server/manager/src/main/java/org/apache/accumulo/manager/tableOps/compact/CompactionDriver.java
index f8ad23172b..6167ca05cf 100644
---
a/server/manager/src/main/java/org/apache/accumulo/manager/tableOps/compact/CompactionDriver.java
+++
b/server/manager/src/main/java/org/apache/accumulo/manager/tableOps/compact/CompactionDriver.java
@@ -129,7 +129,8 @@ class CompactionDriver extends ManagerRepo {
return sleepTime;
}
- private boolean isCancelled(FateId fateId, ServerContext context)
+ // visible for testing
+ protected boolean isCancelled(FateId fateId, ServerContext context)
throws InterruptedException, KeeperException {
return CompactionConfigStorage.getConfig(context, fateId) == null;
}
diff --git
a/server/manager/src/main/java/org/apache/accumulo/manager/tableOps/delete/PreDeleteTable.java
b/server/manager/src/main/java/org/apache/accumulo/manager/tableOps/delete/PreDeleteTable.java
index 196e898c09..6094960b38 100644
---
a/server/manager/src/main/java/org/apache/accumulo/manager/tableOps/delete/PreDeleteTable.java
+++
b/server/manager/src/main/java/org/apache/accumulo/manager/tableOps/delete/PreDeleteTable.java
@@ -60,7 +60,6 @@ public class PreDeleteTable extends ManagerRepo {
private void preventFutureCompactions(Manager environment)
throws KeeperException, InterruptedException {
- // ELASTICITY_TODO investigate this. Is still needed? Is it still working
as expected?
String deleteMarkerPath =
createDeleteMarkerPath(environment.getInstanceID(), tableId);
ZooReaderWriter zoo = environment.getContext().getZooReaderWriter();
zoo.putPersistentData(deleteMarkerPath, new byte[] {},
NodeExistsPolicy.SKIP);
diff --git
a/server/manager/src/test/java/org/apache/accumulo/manager/tableOps/compact/CompactionDriverTest.java
b/server/manager/src/test/java/org/apache/accumulo/manager/tableOps/compact/CompactionDriverTest.java
new file mode 100644
index 0000000000..caf8be89d5
--- /dev/null
+++
b/server/manager/src/test/java/org/apache/accumulo/manager/tableOps/compact/CompactionDriverTest.java
@@ -0,0 +1,148 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * https://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.accumulo.manager.tableOps.compact;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertThrows;
+
+import java.util.UUID;
+
+import
org.apache.accumulo.core.clientImpl.AcceptableThriftTableOperationException;
+import org.apache.accumulo.core.clientImpl.TableOperationsImpl;
+import org.apache.accumulo.core.clientImpl.thrift.TableOperation;
+import org.apache.accumulo.core.clientImpl.thrift.TableOperationExceptionType;
+import org.apache.accumulo.core.data.InstanceId;
+import org.apache.accumulo.core.data.NamespaceId;
+import org.apache.accumulo.core.data.TableId;
+import org.apache.accumulo.core.fate.FateId;
+import org.apache.accumulo.core.fate.FateInstanceType;
+import org.apache.accumulo.core.fate.zookeeper.ZooReaderWriter;
+import org.apache.accumulo.manager.Manager;
+import org.apache.accumulo.manager.tableOps.delete.PreDeleteTable;
+import org.apache.accumulo.server.ServerContext;
+import org.apache.zookeeper.KeeperException;
+import org.easymock.EasyMock;
+import org.junit.jupiter.api.Test;
+
+public class CompactionDriverTest {
+
+ public static class CancelledCompactionDriver extends CompactionDriver {
+
+ private static final long serialVersionUID = 1L;
+
+ public CancelledCompactionDriver(NamespaceId namespaceId, TableId tableId,
byte[] startRow,
+ byte[] endRow) {
+ super(namespaceId, tableId, startRow, endRow);
+ }
+
+ @Override
+ protected boolean isCancelled(FateId fateId, ServerContext context)
+ throws InterruptedException, KeeperException {
+ return true;
+ }
+
+ }
+
+ public static class NotCancelledCompactionDriver extends CompactionDriver {
+
+ private static final long serialVersionUID = 1L;
+
+ public NotCancelledCompactionDriver(NamespaceId namespaceId, TableId
tableId, byte[] startRow,
+ byte[] endRow) {
+ super(namespaceId, tableId, startRow, endRow);
+ }
+
+ @Override
+ protected boolean isCancelled(FateId fateId, ServerContext context)
+ throws InterruptedException, KeeperException {
+ return false;
+ }
+
+ }
+
+ @Test
+ public void testCancelId() throws Exception {
+
+ final InstanceId instance = InstanceId.of(UUID.randomUUID());
+ final NamespaceId namespaceId = NamespaceId.of("13");
+ final TableId tableId = TableId.of("42");
+ final FateId compactionFateId = FateId.from(FateInstanceType.USER,
UUID.randomUUID());
+ final byte[] startRow = new byte[0];
+ final byte[] endRow = new byte[0];
+
+ Manager manager = EasyMock.createNiceMock(Manager.class);
+ ServerContext ctx = EasyMock.createNiceMock(ServerContext.class);
+ ZooReaderWriter zrw = EasyMock.createNiceMock(ZooReaderWriter.class);
+ EasyMock.expect(manager.getInstanceID()).andReturn(instance).anyTimes();
+ EasyMock.expect(manager.getContext()).andReturn(ctx);
+ EasyMock.expect(ctx.getZooReaderWriter()).andReturn(zrw);
+
+ EasyMock.replay(manager, ctx, zrw);
+
+ final CancelledCompactionDriver driver =
+ new CancelledCompactionDriver(namespaceId, tableId, startRow, endRow);
+
+ var e = assertThrows(AcceptableThriftTableOperationException.class,
+ () -> driver.isReady(compactionFateId, manager));
+
+ assertEquals(e.getTableId(), tableId.toString());
+ assertEquals(e.getOp(), TableOperation.COMPACT);
+ assertEquals(e.getType(), TableOperationExceptionType.OTHER);
+ assertEquals(TableOperationsImpl.COMPACTION_CANCELED_MSG,
e.getDescription());
+
+ EasyMock.verify(manager, ctx, zrw);
+ }
+
+ @Test
+ public void testTableBeingDeleted() throws Exception {
+
+ final InstanceId instance = InstanceId.of(UUID.randomUUID());
+ final NamespaceId namespaceId = NamespaceId.of("14");
+ final TableId tableId = TableId.of("43");
+ final FateId compactionFateId = FateId.from(FateInstanceType.USER,
UUID.randomUUID());
+ final byte[] startRow = new byte[0];
+ final byte[] endRow = new byte[0];
+
+ Manager manager = EasyMock.createNiceMock(Manager.class);
+ ServerContext ctx = EasyMock.createNiceMock(ServerContext.class);
+ ZooReaderWriter zrw = EasyMock.createNiceMock(ZooReaderWriter.class);
+ EasyMock.expect(manager.getInstanceID()).andReturn(instance).anyTimes();
+ EasyMock.expect(manager.getContext()).andReturn(ctx);
+ EasyMock.expect(ctx.getZooReaderWriter()).andReturn(zrw);
+
+ String deleteMarkerPath = PreDeleteTable.createDeleteMarkerPath(instance,
tableId);
+ EasyMock.expect(zrw.exists(deleteMarkerPath)).andReturn(true);
+
+ EasyMock.replay(manager, ctx, zrw);
+
+ final NotCancelledCompactionDriver driver =
+ new NotCancelledCompactionDriver(namespaceId, tableId, startRow,
endRow);
+
+ var e = assertThrows(AcceptableThriftTableOperationException.class,
+ () -> driver.isReady(compactionFateId, manager));
+
+ assertEquals(e.getTableId(), tableId.toString());
+ assertEquals(e.getOp(), TableOperation.COMPACT);
+ assertEquals(e.getType(), TableOperationExceptionType.OTHER);
+ assertEquals(TableOperationsImpl.TABLE_DELETED_MSG, e.getDescription());
+
+ EasyMock.verify(manager, ctx, zrw);
+ }
+
+}