Skip to content

Commit f42a9c2

Browse files
authored
feat: log warning on DPS errored notification (#5673)
1 parent bd79c14 commit f42a9c2

5 files changed

Lines changed: 56 additions & 4 deletions

File tree

data-protocols/data-plane-signaling/data-plane-signaling-core/src/main/java/org/eclipse/edc/signaling/DataPlaneSignalingApiExtension.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,8 @@ public void initialize(ServiceExtensionContext context) {
9494
}
9595

9696
webService.registerResource(ApiContext.SIGNALING, new DataPlaneTransferAuthorizationFilter(signalingAuthorizationRegistry, transferProcessService, dataPlaneSelectorService));
97-
webService.registerResource(ApiContext.SIGNALING, new DataPlaneTransferApiController(transferProcessService, typeTransformerRegistry));
97+
webService.registerResource(ApiContext.SIGNALING, new DataPlaneTransferApiController(transferProcessService,
98+
typeTransformerRegistry, context.getMonitor().withPrefix("DataPlaneTransferApiController")));
9899

99100
try (var versionContent = getClass().getClassLoader().getResourceAsStream(API_VERSION_JSON_FILE)) {
100101
apiVersionService.registerVersionInfo(ApiContext.SIGNALING, versionContent);

data-protocols/data-plane-signaling/data-plane-signaling-core/src/main/java/org/eclipse/edc/signaling/port/api/DataPlaneTransferApi.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,5 +64,15 @@ public interface DataPlaneTransferApi {
6464
)
6565
Response completed(String transferId);
6666

67+
@Operation(
68+
method = POST,
69+
description = "Notify an errored transfer",
70+
responses = {
71+
@ApiResponse(responseCode = "200", description = "Errored notification delivered correctly"),
72+
@ApiResponse(responseCode = "404", description = "Transfer process does not exist",
73+
content = @Content(array = @ArraySchema(schema = @Schema(implementation = ApiCoreSchema.ApiErrorDetailSchema.class))))
74+
}
75+
)
76+
Response errored(String transferId, DataFlowStatusMessage message);
6777

6878
}

data-protocols/data-plane-signaling/data-plane-signaling-core/src/main/java/org/eclipse/edc/signaling/port/api/DataPlaneTransferApiController.java

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
import org.eclipse.edc.signaling.domain.DataFlowPrepareMessage;
2929
import org.eclipse.edc.signaling.domain.DataFlowStartMessage;
3030
import org.eclipse.edc.signaling.domain.DataFlowStatusMessage;
31+
import org.eclipse.edc.spi.monitor.Monitor;
3132
import org.eclipse.edc.spi.result.ServiceResult;
3233
import org.eclipse.edc.transform.spi.TypeTransformerRegistry;
3334

@@ -42,10 +43,12 @@ public class DataPlaneTransferApiController implements DataPlaneTransferApi {
4243

4344
private final TransferProcessService transferProcessService;
4445
private final TypeTransformerRegistry typeTransformerRegistry;
46+
private final Monitor monitor;
4547

46-
public DataPlaneTransferApiController(TransferProcessService transferProcessService, TypeTransformerRegistry typeTransformerRegistry) {
48+
public DataPlaneTransferApiController(TransferProcessService transferProcessService, TypeTransformerRegistry typeTransformerRegistry, Monitor monitor) {
4749
this.transferProcessService = transferProcessService;
4850
this.typeTransformerRegistry = typeTransformerRegistry;
51+
this.monitor = monitor;
4952
}
5053

5154
@Path("/{transferId}/dataflow/prepared")
@@ -84,4 +87,15 @@ public Response completed(@PathParam("transferId") String transferId) {
8487
return Response.ok().build();
8588
}
8689

90+
@Path("/{transferId}/dataflow/errored")
91+
@POST
92+
@Override
93+
public Response errored(@PathParam("transferId") String transferId, DataFlowStatusMessage message) {
94+
monitor.warning("Errored DataFlow notification received about TransferProcess %s: %s".formatted(transferId, message.getError()));
95+
return Response.ok().build();
96+
}
97+
98+
99+
100+
87101
}

data-protocols/data-plane-signaling/data-plane-signaling-core/src/test/java/org/eclipse/edc/signaling/port/api/DataPlaneTransferApiControllerTest.java

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@
3939
import static java.util.Collections.emptyMap;
4040
import static org.mockito.ArgumentMatchers.any;
4141
import static org.mockito.ArgumentMatchers.argThat;
42+
import static org.mockito.ArgumentMatchers.contains;
4243
import static org.mockito.ArgumentMatchers.eq;
4344
import static org.mockito.Mockito.mock;
4445
import static org.mockito.Mockito.never;
@@ -331,9 +332,35 @@ void shouldReturnError_whenServiceCallFails() {
331332
}
332333
}
333334

335+
@Nested
336+
class Errored {
337+
@BeforeEach
338+
void setUp() {
339+
setupValidAuthorization();
340+
}
341+
342+
@Test
343+
void shouldLogWarning() {
344+
var transferId = UUID.randomUUID().toString();
345+
when(transferProcessService.complete(any())).thenReturn(ServiceResult.success());
346+
var message = DataFlowStatusMessage.Builder.newInstance().error("data-plane error").build();
347+
348+
given()
349+
.port(port)
350+
.contentType(ContentType.JSON)
351+
.body(message)
352+
.post("/transfers/{transferId}/dataflow/errored", transferId)
353+
.then()
354+
.log().ifValidationFails()
355+
.statusCode(200);
356+
357+
verify(monitor).warning(contains("data-plane error"));
358+
}
359+
}
360+
334361
@Override
335362
protected Object controller() {
336-
return new DataPlaneTransferApiController(transferProcessService, typeTransformerRegistry);
363+
return new DataPlaneTransferApiController(transferProcessService, typeTransformerRegistry, monitor);
337364
}
338365

339366
@Override

data-protocols/data-plane-signaling/src/main/resources/signaling-api-version.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,6 @@
22
{
33
"version": "1.0.0-alpha",
44
"urlPath": "/v1",
5-
"lastUpdated": "2026-04-13T14:00:01Z"
5+
"lastUpdated": "2026-04-15T14:00:01Z"
66
}
77
]

0 commit comments

Comments
 (0)