From 2f66bc91586bcb531cda433be93361941e2a9a4e Mon Sep 17 00:00:00 2001 From: arbaazkhan1 Date: Wed, 5 Mar 2025 10:42:04 -0500 Subject: [PATCH 1/2] test for multiple dead compactions --- .../compaction/CompactionCoordinatorTest.java | 57 +++++++++++++++++++ 1 file changed, 57 insertions(+) diff --git a/server/manager/src/test/java/org/apache/accumulo/manager/compaction/CompactionCoordinatorTest.java b/server/manager/src/test/java/org/apache/accumulo/manager/compaction/CompactionCoordinatorTest.java index 4035015213a..df9998699d1 100644 --- a/server/manager/src/test/java/org/apache/accumulo/manager/compaction/CompactionCoordinatorTest.java +++ b/server/manager/src/test/java/org/apache/accumulo/manager/compaction/CompactionCoordinatorTest.java @@ -455,4 +455,61 @@ public void testCleanUpRunning() throws Exception { EasyMock.verify(context, creds, security, manager, ext1, ext2, ext3); } + + @Test + public void testCleanUpMultipleDeadCompactions() throws Exception { + + ServerContext context = EasyMock.createNiceMock(ServerContext.class); + expect(context.getCaches()).andReturn(Caches.getInstance()).anyTimes(); + expect(context.getConfiguration()).andReturn(DefaultConfiguration.getInstance()).anyTimes(); + + TCredentials creds = EasyMock.createNiceMock(TCredentials.class); + AuditedSecurityOperation security = EasyMock.createNiceMock(AuditedSecurityOperation.class); + Manager manager = EasyMock.createNiceMock(Manager.class); + expect(manager.getSteadyTime()).andReturn(SteadyTime.from(100000, TimeUnit.NANOSECONDS)) + .anyTimes(); + + ExternalCompactionId ecid1 = ExternalCompactionId.generate(UUID.randomUUID()); + ExternalCompactionId ecid2 = ExternalCompactionId.generate(UUID.randomUUID()); + ExternalCompactionId ecid3 = ExternalCompactionId.generate(UUID.randomUUID()); + + TExternalCompaction deadCompaction1 = EasyMock.createMock(TExternalCompaction.class); + expect(deadCompaction1.getJob()).andReturn(new TExternalCompactionJob()).anyTimes(); + expect(deadCompaction1.getCompactor()).andReturn("localhost:9133").anyTimes(); + expect(deadCompaction1.getGroupName()).andReturn(Constants.DEFAULT_RESOURCE_GROUP_NAME) + .anyTimes(); + + TExternalCompaction deadCompaction2 = EasyMock.createMock(TExternalCompaction.class); + expect(deadCompaction2.getJob()).andReturn(new TExternalCompactionJob()).anyTimes(); + expect(deadCompaction2.getCompactor()).andReturn("localhost:9133").anyTimes(); + expect(deadCompaction2.getGroupName()).andReturn(Constants.DEFAULT_RESOURCE_GROUP_NAME) + .anyTimes(); + + TExternalCompaction deadCompaction3 = EasyMock.createMock(TExternalCompaction.class); + expect(deadCompaction3.getJob()).andReturn(new TExternalCompactionJob()).anyTimes(); + expect(deadCompaction3.getCompactor()).andReturn("localhost:9133").anyTimes(); + expect(deadCompaction3.getGroupName()).andReturn(Constants.DEFAULT_RESOURCE_GROUP_NAME) + .anyTimes(); + + EasyMock.replay(context, creds, security, manager, deadCompaction1, deadCompaction2, + deadCompaction3); + + TestCoordinator coordinator = + new TestCoordinator(context, security, new ArrayList<>(), manager); + + coordinator.getRunning().put(ecid1, new RunningCompaction(deadCompaction1)); + coordinator.getRunning().put(ecid2, new RunningCompaction(deadCompaction2)); + coordinator.getRunning().put(ecid3, new RunningCompaction(deadCompaction3)); + + assertEquals(Set.of(ecid1, ecid2, ecid3), coordinator.getRunning().keySet()); + + coordinator.setMetadataCompactionIds(Set.of(ecid1)); + coordinator.cleanUpInternalState(); + + assertEquals(Set.of(ecid1), coordinator.getRunning().keySet()); + + EasyMock.verify(context, creds, security, manager, deadCompaction1, deadCompaction2, + deadCompaction3); + } + } From 3e5669f2a9aecae748db605dbf1fa049cb5216fb Mon Sep 17 00:00:00 2001 From: arbaazkhan1 Date: Mon, 10 Mar 2025 15:54:35 -0400 Subject: [PATCH 2/2] simplified test --- .../compaction/CompactionCoordinatorTest.java | 44 +++++++------------ 1 file changed, 15 insertions(+), 29 deletions(-) diff --git a/server/manager/src/test/java/org/apache/accumulo/manager/compaction/CompactionCoordinatorTest.java b/server/manager/src/test/java/org/apache/accumulo/manager/compaction/CompactionCoordinatorTest.java index df9998699d1..502958ed6f1 100644 --- a/server/manager/src/test/java/org/apache/accumulo/manager/compaction/CompactionCoordinatorTest.java +++ b/server/manager/src/test/java/org/apache/accumulo/manager/compaction/CompactionCoordinatorTest.java @@ -220,6 +220,15 @@ protected void cancelCompactionOnCompactor(String address, String externalCompac } + private TExternalCompaction createMockCompaction() { + TExternalCompaction mockCompaction = EasyMock.createMock(TExternalCompaction.class); + expect(mockCompaction.getJob()).andReturn(new TExternalCompactionJob()).anyTimes(); + expect(mockCompaction.getCompactor()).andReturn("localhost:9133").anyTimes(); + expect(mockCompaction.getGroupName()).andReturn(Constants.DEFAULT_RESOURCE_GROUP_NAME) + .anyTimes(); + return mockCompaction; + } + @Test public void testCoordinatorColdStart() throws Exception { @@ -416,18 +425,9 @@ public void testCleanUpRunning() throws Exception { expect(manager.getSteadyTime()).andReturn(SteadyTime.from(100000, TimeUnit.NANOSECONDS)) .anyTimes(); - TExternalCompaction ext1 = EasyMock.createMock(TExternalCompaction.class); - expect(ext1.getJob()).andReturn(new TExternalCompactionJob()).anyTimes(); - expect(ext1.getCompactor()).andReturn("localhost:9133").anyTimes(); - expect(ext1.getGroupName()).andReturn(Constants.DEFAULT_RESOURCE_GROUP_NAME).anyTimes(); - TExternalCompaction ext2 = EasyMock.createMock(TExternalCompaction.class); - expect(ext2.getJob()).andReturn(new TExternalCompactionJob()).anyTimes(); - expect(ext2.getCompactor()).andReturn("localhost:9133").anyTimes(); - expect(ext2.getGroupName()).andReturn(Constants.DEFAULT_RESOURCE_GROUP_NAME).anyTimes(); - TExternalCompaction ext3 = EasyMock.createMock(TExternalCompaction.class); - expect(ext3.getJob()).andReturn(new TExternalCompactionJob()).anyTimes(); - expect(ext3.getCompactor()).andReturn("localhost:9133").anyTimes(); - expect(ext3.getGroupName()).andReturn(Constants.DEFAULT_RESOURCE_GROUP_NAME).anyTimes(); + TExternalCompaction ext1 = createMockCompaction(); + TExternalCompaction ext2 = createMockCompaction(); + TExternalCompaction ext3 = createMockCompaction(); EasyMock.replay(context, creds, security, manager, ext1, ext2, ext3); @@ -473,23 +473,9 @@ public void testCleanUpMultipleDeadCompactions() throws Exception { ExternalCompactionId ecid2 = ExternalCompactionId.generate(UUID.randomUUID()); ExternalCompactionId ecid3 = ExternalCompactionId.generate(UUID.randomUUID()); - TExternalCompaction deadCompaction1 = EasyMock.createMock(TExternalCompaction.class); - expect(deadCompaction1.getJob()).andReturn(new TExternalCompactionJob()).anyTimes(); - expect(deadCompaction1.getCompactor()).andReturn("localhost:9133").anyTimes(); - expect(deadCompaction1.getGroupName()).andReturn(Constants.DEFAULT_RESOURCE_GROUP_NAME) - .anyTimes(); - - TExternalCompaction deadCompaction2 = EasyMock.createMock(TExternalCompaction.class); - expect(deadCompaction2.getJob()).andReturn(new TExternalCompactionJob()).anyTimes(); - expect(deadCompaction2.getCompactor()).andReturn("localhost:9133").anyTimes(); - expect(deadCompaction2.getGroupName()).andReturn(Constants.DEFAULT_RESOURCE_GROUP_NAME) - .anyTimes(); - - TExternalCompaction deadCompaction3 = EasyMock.createMock(TExternalCompaction.class); - expect(deadCompaction3.getJob()).andReturn(new TExternalCompactionJob()).anyTimes(); - expect(deadCompaction3.getCompactor()).andReturn("localhost:9133").anyTimes(); - expect(deadCompaction3.getGroupName()).andReturn(Constants.DEFAULT_RESOURCE_GROUP_NAME) - .anyTimes(); + TExternalCompaction deadCompaction1 = createMockCompaction(); + TExternalCompaction deadCompaction2 = createMockCompaction(); + TExternalCompaction deadCompaction3 = createMockCompaction(); EasyMock.replay(context, creds, security, manager, deadCompaction1, deadCompaction2, deadCompaction3);