Skip to content

Commit 31e35ff

Browse files
committed
delete payload files for successful trivial actions
Signed-off-by: Abhishek Kumar <[email protected]>
1 parent e51e340 commit 31e35ff

File tree

2 files changed

+46
-0
lines changed

2 files changed

+46
-0
lines changed

plugins/hypervisors/external/src/main/java/org/apache/cloudstack/hypervisor/external/provisioner/ExternalPathPayloadProvisioner.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
import java.nio.file.StandardCopyOption;
3030
import java.nio.file.StandardOpenOption;
3131
import java.util.ArrayList;
32+
import java.util.Arrays;
3233
import java.util.Comparator;
3334
import java.util.HashMap;
3435
import java.util.List;
@@ -124,6 +125,9 @@ public class ExternalPathPayloadProvisioner extends ManagerBase implements Exter
124125
private String extensionsDataDirectory;
125126
private ExecutorService payloadCleanupExecutor;
126127
private ScheduledExecutorService payloadCleanupScheduler;
128+
private static final List<String> TRIVIAL_ACTIONS = Arrays.asList(
129+
"status"
130+
);
127131

128132
@Override
129133
public String getName() {
@@ -728,6 +732,7 @@ public Pair<Boolean, String> executeExternalCommand(String extensionName, String
728732
logger.warn("{}: External API execution failed with exit code {}", errorLogPrefix, exitCode);
729733
return new Pair<>(false, "Exit code: " + exitCode + ", Output: " + output.toString().trim());
730734
}
735+
deleteExtensionPayloadFile(extensionName, action, dataFile);
731736
return new Pair<>(true, output.toString().trim());
732737

733738
} catch (IOException | InterruptedException e) {
@@ -736,6 +741,15 @@ public Pair<Boolean, String> executeExternalCommand(String extensionName, String
736741
}
737742
}
738743

744+
protected void deleteExtensionPayloadFile(String extensionName, String action, String payloadFileName) {
745+
if (!TRIVIAL_ACTIONS.contains(action)) {
746+
return;
747+
}
748+
logger.trace("Deleting payload file: {} for extension: {}, action: {}, file: {}",
749+
payloadFileName, extensionName, action);
750+
FileUtil.deletePath(payloadFileName);
751+
}
752+
739753
protected void scheduleExtensionPayloadDirectoryCleanup(String extensionName) {
740754
try {
741755
Future<?> future = payloadCleanupExecutor.submit(() -> {

plugins/hypervisors/external/src/test/java/org/apache/cloudstack/hypervisor/external/provisioner/ExternalPathPayloadProvisionerTest.java

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,7 @@
7979
import com.cloud.hypervisor.HypervisorGuru;
8080
import com.cloud.hypervisor.HypervisorGuruManager;
8181
import com.cloud.template.VirtualMachineTemplate;
82+
import com.cloud.utils.FileUtil;
8283
import com.cloud.utils.Pair;
8384
import com.cloud.utils.PropertiesUtil;
8485
import com.cloud.utils.script.Script;
@@ -590,4 +591,35 @@ public void testExecuteExternalCommandFileNotExecutable() {
590591
assertFalse(result.first());
591592
assertEquals("File is not executable", result.second());
592593
}
594+
595+
@Test
596+
public void deleteExtensionPayloadFile_DeletesFile_WhenActionIsTrivial() {
597+
String extensionName = "test-extension";
598+
String action = "status"; // in TRIVIAL_ACTIONS
599+
String payloadFileName = "/tmp/test-payload.json";
600+
601+
try (MockedStatic<FileUtil> fileUtilMock = Mockito.mockStatic(FileUtil.class)) {
602+
provisioner.deleteExtensionPayloadFile(extensionName, action, payloadFileName);
603+
604+
fileUtilMock.verify(() -> FileUtil.deletePath(payloadFileName));
605+
Mockito.verify(logger).trace(
606+
"Deleting payload file: {} for extension: {}, action: {}, file: {}",
607+
payloadFileName, extensionName, action
608+
);
609+
}
610+
}
611+
612+
@Test
613+
public void deleteExtensionPayloadFile_DoesNothing_WhenActionIsNotTrivial() {
614+
String extensionName = "test-extension";
615+
String action = "start";
616+
String payloadFileName = "/tmp/test-payload.json";
617+
618+
try (MockedStatic<FileUtil> fileUtilMock = Mockito.mockStatic(FileUtil.class)) {
619+
provisioner.deleteExtensionPayloadFile(extensionName, action, payloadFileName);
620+
621+
fileUtilMock.verifyNoInteractions();
622+
Mockito.verify(logger, Mockito.never()).trace(anyString(), any(), any(), any(), any());
623+
}
624+
}
593625
}

0 commit comments

Comments
 (0)