diff --git a/src/main/java/org/commonjava/indy/service/tracking/client/storage/StorageBatchDeleteRequest.java b/src/main/java/org/commonjava/indy/service/tracking/client/storage/StorageBatchDeleteRequest.java index dcfa8e8..5491e4c 100644 --- a/src/main/java/org/commonjava/indy/service/tracking/client/storage/StorageBatchDeleteRequest.java +++ b/src/main/java/org/commonjava/indy/service/tracking/client/storage/StorageBatchDeleteRequest.java @@ -20,7 +20,10 @@ /** * Delete multiple paths in one filesystem. */ -public class StorageBatchDeleteRequest { +public class StorageBatchDeleteRequest +{ + private String internalId; + private Set paths; private String filesystem; @@ -41,11 +44,20 @@ public void setFilesystem(String filesystem) { this.filesystem = filesystem; } + public String getInternalId() + { + return internalId; + } + + public void setInternalId( String internalId ) + { + this.internalId = internalId; + } + @Override - public String toString() { - return "BatchDeleteRequest{" + - "paths=" + paths + - ", filesystem='" + filesystem + '\'' + - '}'; + public String toString() + { + return "StorageBatchDeleteRequest{" + "internalId='" + internalId + '\'' + ", paths=" + paths + ", filesystem='" + + filesystem + '\'' + '}'; } } \ No newline at end of file diff --git a/src/main/java/org/commonjava/indy/service/tracking/client/storage/StorageService.java b/src/main/java/org/commonjava/indy/service/tracking/client/storage/StorageService.java index 96370c0..bc4a8ec 100644 --- a/src/main/java/org/commonjava/indy/service/tracking/client/storage/StorageService.java +++ b/src/main/java/org/commonjava/indy/service/tracking/client/storage/StorageService.java @@ -15,11 +15,11 @@ */ package org.commonjava.indy.service.tracking.client.storage; +import jakarta.ws.rs.POST; import org.eclipse.microprofile.rest.client.inject.RegisterRestClient; import org.eclipse.microprofile.rest.client.annotation.RegisterProvider; import org.commonjava.indy.service.security.jaxrs.CustomClientRequestFilter; -import jakarta.ws.rs.DELETE; import jakarta.ws.rs.Path; import jakarta.ws.rs.core.Response; import jakarta.ws.rs.Consumes; @@ -32,7 +32,7 @@ public interface StorageService { /** * Delete empty folders by Storage BatchDeleteRequest as JSON body. */ - @DELETE + @POST @Path("/maint/folders/empty") @Consumes(APPLICATION_JSON) Response cleanupEmptyFolders(StorageBatchDeleteRequest request); diff --git a/src/main/java/org/commonjava/indy/service/tracking/controller/AdminController.java b/src/main/java/org/commonjava/indy/service/tracking/controller/AdminController.java index 57401ee..e1ead4f 100644 --- a/src/main/java/org/commonjava/indy/service/tracking/controller/AdminController.java +++ b/src/main/java/org/commonjava/indy/service/tracking/controller/AdminController.java @@ -15,7 +15,6 @@ */ package org.commonjava.indy.service.tracking.controller; -import com.fasterxml.jackson.databind.ObjectMapper; import org.commonjava.indy.service.tracking.Constants; import org.commonjava.indy.service.tracking.client.content.BatchDeleteRequest; import org.commonjava.indy.service.tracking.client.content.ContentService; @@ -424,11 +423,14 @@ public boolean deletionAdditionalGuardCheck( BatchDeleteRequest deleteRequest ) * storage API to handle ancestor folders as needed. *

* + * @param trackingID * @param filesystem the target filesystem/storeKey as a string * @param paths the set of deleted file paths */ - public void cleanupEmptyFolders(String filesystem, Set paths) { - logger.info("Post-action: cleanupEmptyFolder, filesystem={}, paths={}", filesystem, paths); + public void cleanupEmptyFolders( String trackingID, String filesystem, Set paths ) + { + logger.info("Post-action: cleanupEmptyFolder, trackingID={}, filesystem={}, paths={}", + trackingID, filesystem, paths); if (paths == null || paths.isEmpty()) { logger.info("No paths to process for cleanup."); return; @@ -442,11 +444,12 @@ public void cleanupEmptyFolders(String filesystem, Set paths) { } } StorageBatchDeleteRequest req = new StorageBatchDeleteRequest(); + req.setInternalId( trackingID ); req.setFilesystem(filesystem); req.setPaths(folders); try { Response resp = storageService.cleanupEmptyFolders(req); - logger.info("Cleanup empty folders, req: {}, status {}", req, resp.getStatus()); + logger.info("Cleanup empty folders done, req: {}, status {}", req, resp.getStatus()); } catch (Exception e) { logger.warn("Failed to cleanup folders, request: {}, error: {}", req, e.getMessage(), e); } diff --git a/src/main/java/org/commonjava/indy/service/tracking/jaxrs/AdminResource.java b/src/main/java/org/commonjava/indy/service/tracking/jaxrs/AdminResource.java index 55e0a8c..3ae674a 100644 --- a/src/main/java/org/commonjava/indy/service/tracking/jaxrs/AdminResource.java +++ b/src/main/java/org/commonjava/indy/service/tracking/jaxrs/AdminResource.java @@ -433,7 +433,7 @@ public Response doDelete( @Context final UriInfo uriInfo, final BatchDeleteReque Response response = maintenanceService.doDelete( request ); if (response.getStatus() == Response.Status.OK.getStatusCode()) { // Run the cleanupEmptyFolder post-action asynchronously - CompletableFuture.runAsync(() -> controller.cleanupEmptyFolders( + CompletableFuture.runAsync(() -> controller.cleanupEmptyFolders( request.getTrackingID(), request.getStoreKey().toString(), request.getPaths()), executor); } return response;