From d733cec4854239f68131caabf463f2467f145ac6 Mon Sep 17 00:00:00 2001 From: Richard Treier Date: Tue, 5 Dec 2023 11:43:28 +0100 Subject: [PATCH] fix: transfer process states stuck in RUNNING (#653) --- CHANGELOG.md | 3 +- .../default/V4__MS8-to-0.2.1_bugfixes.sql | 9 ++++ .../transfer-process-status-checker/README.md | 31 +++++++++++++ .../build.gradle.kts | 23 ++++++++++ ...TransferProcessStatusCheckerExtension.java | 43 +++++++++++++++++++ ...rg.eclipse.edc.spi.system.ServiceExtension | 1 + launchers/common/base/build.gradle.kts | 1 + settings.gradle.kts | 1 + .../de/sovity/edc/e2e/UiApiWrapperTest.java | 13 +++--- 9 files changed, 119 insertions(+), 6 deletions(-) create mode 100644 extensions/transfer-process-status-checker/README.md create mode 100644 extensions/transfer-process-status-checker/build.gradle.kts create mode 100644 extensions/transfer-process-status-checker/src/main/java/de/sovity/edc/extension/transfer/TransferProcessStatusCheckerExtension.java create mode 100644 extensions/transfer-process-status-checker/src/main/resources/META-INF/services/org.eclipse.edc.spi.system.ServiceExtension diff --git a/CHANGELOG.md b/CHANGELOG.md index a77ac648c..52ad73cac 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -17,10 +17,11 @@ please see [changelog_updates.md](docs/dev/changelog_updates.md). #### Patch Changes -- Marked `MY_EDC_NAME_KEBAB_CASE` as deprecated in favor of `MY_EDC_PARTICIPANT_ID`. - Fixed an issue preventing Contract Negotiations between MDS Connectors. +- Fixed an issue preventing transfer processes from being marked as `COMPLETED` in Eclipse EDC `0.2`. - Improved `:extensions:wrapper:wrapper-common-mappers` for broker: `AssetJsonLdUtils`, made some methods public. - Added example for using the API Wrapper to offer and consume data. +- Marked `MY_EDC_NAME_KEBAB_CASE` as deprecated in favor of `MY_EDC_PARTICIPANT_ID`. - Improved development documentation documenting our CHANGELOG. ### Deployment Migration Notes diff --git a/extensions/postgres-flyway/src/main/resources/migration/default/V4__MS8-to-0.2.1_bugfixes.sql b/extensions/postgres-flyway/src/main/resources/migration/default/V4__MS8-to-0.2.1_bugfixes.sql index e981d0a03..ee64152ba 100644 --- a/extensions/postgres-flyway/src/main/resources/migration/default/V4__MS8-to-0.2.1_bugfixes.sql +++ b/extensions/postgres-flyway/src/main/resources/migration/default/V4__MS8-to-0.2.1_bugfixes.sql @@ -37,3 +37,12 @@ set consumer_agent_id = neg.counterparty_id from edc_contract_negotiation neg where neg.agreement_id = edc_contract_agreement.agr_id and neg.type = 'PROVIDER'; + +-- Optimizations for Transfer Processes +create index transfer_process_status + on edc_transfer_process (state); + +-- Fix transfer processes stuck in running state +update edc_transfer_process +set state = 800 +where state = 600; diff --git a/extensions/transfer-process-status-checker/README.md b/extensions/transfer-process-status-checker/README.md new file mode 100644 index 000000000..ab773f763 --- /dev/null +++ b/extensions/transfer-process-status-checker/README.md @@ -0,0 +1,31 @@ + +
+
+ + Logo + + +

EDC-Connector Extension:
Transfer Process Status Checker

+ +

+ Report Bug + ยท + Request Feature +

+
+ +## About this Extension + +Bugfix extension for `Eclipse EDC [0.2.1, 0.3)`, marks transfer processes as `COMPLETED`. + +## Why does this extension exist? + +We cannot directly upgrade to `Eclipse EDC >=0.3` now, but will of course do so soon. + +## License + +Apache License 2.0 - see [LICENSE](../../LICENSE) + +## Contact + +sovity GmbH - contact@sovity.de diff --git a/extensions/transfer-process-status-checker/build.gradle.kts b/extensions/transfer-process-status-checker/build.gradle.kts new file mode 100644 index 000000000..cf7424b81 --- /dev/null +++ b/extensions/transfer-process-status-checker/build.gradle.kts @@ -0,0 +1,23 @@ +val edcVersion: String by project +val edcGroup: String by project + +plugins { + `java-library` + `maven-publish` +} + +dependencies { + api("${edcGroup}:transfer-spi:${edcVersion}") + testImplementation("${edcGroup}:junit:${edcVersion}") +} + +val sovityEdcExtensionGroup: String by project +group = sovityEdcExtensionGroup + +publishing { + publications { + create(project.name) { + from(components["java"]) + } + } +} diff --git a/extensions/transfer-process-status-checker/src/main/java/de/sovity/edc/extension/transfer/TransferProcessStatusCheckerExtension.java b/extensions/transfer-process-status-checker/src/main/java/de/sovity/edc/extension/transfer/TransferProcessStatusCheckerExtension.java new file mode 100644 index 000000000..a69def634 --- /dev/null +++ b/extensions/transfer-process-status-checker/src/main/java/de/sovity/edc/extension/transfer/TransferProcessStatusCheckerExtension.java @@ -0,0 +1,43 @@ +/* + * Copyright (c) 2022 sovity GmbH + * + * This program and the accompanying materials are made available under the + * terms of the Apache License, Version 2.0 which is available at + * https://www.apache.org/licenses/LICENSE-2.0 + * + * SPDX-License-Identifier: Apache-2.0 + * + * Contributors: + * sovity GmbH - initial API and implementation + * + */ + +package de.sovity.edc.extension.transfer; + +import org.eclipse.edc.connector.transfer.spi.status.StatusCheckerRegistry; +import org.eclipse.edc.runtime.metamodel.annotation.Inject; +import org.eclipse.edc.spi.system.ServiceExtension; +import org.eclipse.edc.spi.system.ServiceExtensionContext; + +import java.util.List; + +public class TransferProcessStatusCheckerExtension implements ServiceExtension { + private static final String EXTENSION_NAME = "Transfer Process Status Checker"; + + @Inject + private StatusCheckerRegistry statusCheckerRegistry; + + @Override + public String name() { + return EXTENSION_NAME; + } + + @Override + public void initialize(ServiceExtensionContext context) { + List.of("HttpProxy", "HttpData").forEach(this::registerStatusChecker); + } + + private void registerStatusChecker(String transferType) { + statusCheckerRegistry.register(transferType, (transferProcess, resources) -> true); + } +} diff --git a/extensions/transfer-process-status-checker/src/main/resources/META-INF/services/org.eclipse.edc.spi.system.ServiceExtension b/extensions/transfer-process-status-checker/src/main/resources/META-INF/services/org.eclipse.edc.spi.system.ServiceExtension new file mode 100644 index 000000000..0183251a9 --- /dev/null +++ b/extensions/transfer-process-status-checker/src/main/resources/META-INF/services/org.eclipse.edc.spi.system.ServiceExtension @@ -0,0 +1 @@ +de.sovity.edc.extension.transfer.TransferProcessStatusCheckerExtension diff --git a/launchers/common/base/build.gradle.kts b/launchers/common/base/build.gradle.kts index d192430dc..ad391bced 100644 --- a/launchers/common/base/build.gradle.kts +++ b/launchers/common/base/build.gradle.kts @@ -22,6 +22,7 @@ dependencies { // sovity Extensions Package api(project(":extensions:sovity-edc-extensions-package")) api(project(":extensions:postgres-flyway")) + api(project(":extensions:transfer-process-status-checker")) // Control-plane to Data-plane api("${edcGroup}:transfer-data-plane:${edcVersion}") diff --git a/settings.gradle.kts b/settings.gradle.kts index 70d1a78b5..a7bcffeb3 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -8,6 +8,7 @@ include(":extensions:policy-time-interval") include(":extensions:postgres-flyway") include(":extensions:sovity-edc-extensions-package") include(":extensions:test-backend-controller") +include(":extensions:transfer-process-status-checker") include(":extensions:wrapper:clients:java-client") include(":extensions:wrapper:clients:java-client-example") include(":extensions:wrapper:wrapper") diff --git a/tests/src/test/java/de/sovity/edc/e2e/UiApiWrapperTest.java b/tests/src/test/java/de/sovity/edc/e2e/UiApiWrapperTest.java index 3980f79e6..73cb45f91 100644 --- a/tests/src/test/java/de/sovity/edc/e2e/UiApiWrapperTest.java +++ b/tests/src/test/java/de/sovity/edc/e2e/UiApiWrapperTest.java @@ -52,6 +52,7 @@ import java.time.OffsetDateTime; import java.util.List; import java.util.Map; +import java.util.concurrent.TimeUnit; import static de.sovity.edc.client.gen.model.ContractAgreementDirection.CONSUMING; import static de.sovity.edc.client.gen.model.ContractAgreementDirection.PROVIDING; @@ -59,6 +60,7 @@ import static de.sovity.edc.extension.e2e.connector.config.ConnectorConfigFactory.forTestDatabase; import static de.sovity.edc.extension.e2e.connector.config.ConnectorRemoteConfigFactory.fromConnectorConfig; import static org.assertj.core.api.Assertions.assertThat; +import static org.awaitility.Awaitility.await; class UiApiWrapperTest { @@ -278,11 +280,12 @@ void provide_consume_assetMapping_policyMapping_agreements() { validateDataTransferred(dataAddress.getDataSinkSpyUrl(), data); - //Currently the Core Edc which prevent the transfer process to be marked as completed - var completedProvidingTransferProcess = providerClient.uiApi().getContractAgreementPage().getContractAgreements().get(0).getTransferProcesses().get(0); - var completedConsumingTransferProcess = consumerClient.uiApi().getContractAgreementPage().getContractAgreements().get(0).getTransferProcesses().get(0); - assertThat(completedProvidingTransferProcess.getState().getSimplifiedState()).isEqualTo(TransferProcessSimplifiedState.RUNNING); - assertThat(completedConsumingTransferProcess.getState().getSimplifiedState()).isEqualTo(TransferProcessSimplifiedState.RUNNING); + await().atMost(10, TimeUnit.SECONDS).untilAsserted(() -> { + var providing = providerClient.uiApi().getTransferHistoryPage().getTransferEntries().get(0); + var consuming = consumerClient.uiApi().getTransferHistoryPage().getTransferEntries().get(0); + assertThat(providing.getState().getSimplifiedState()).isEqualTo(TransferProcessSimplifiedState.OK); + assertThat(consuming.getState().getSimplifiedState()).isEqualTo(TransferProcessSimplifiedState.OK); + }); } @Test