Skip to content

Commit a95cd8f

Browse files
committed
feat: avoid explicit exclusion when control-plane and data-plane deployed together (#5238)
feat: avoid explicit exclusion when control-plane and data-plane deployed togheter
1 parent ed4f0cd commit a95cd8f

File tree

7 files changed

+56
-43
lines changed

7 files changed

+56
-43
lines changed

core/data-plane-selector/data-plane-selector-core/src/main/java/org/eclipse/edc/connector/dataplane/selector/DataPlaneSelectorExtension.java

Lines changed: 22 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
import org.eclipse.edc.runtime.metamodel.annotation.Extension;
2626
import org.eclipse.edc.runtime.metamodel.annotation.Inject;
2727
import org.eclipse.edc.runtime.metamodel.annotation.Provider;
28+
import org.eclipse.edc.runtime.metamodel.annotation.Provides;
2829
import org.eclipse.edc.runtime.metamodel.annotation.Setting;
2930
import org.eclipse.edc.runtime.metamodel.annotation.SettingContext;
3031
import org.eclipse.edc.spi.system.ServiceExtension;
@@ -37,6 +38,7 @@
3738
import static org.eclipse.edc.connector.dataplane.selector.DataPlaneSelectorExtension.NAME;
3839

3940
@Extension(NAME)
41+
@Provides(DataPlaneSelectorManager.class)
4042
public class DataPlaneSelectorExtension implements ServiceExtension {
4143

4244
public static final String NAME = "Data Plane Selector core";
@@ -66,24 +68,6 @@ public String name() {
6668
return NAME;
6769
}
6870

69-
@Override
70-
public void initialize(ServiceExtensionContext context) {
71-
72-
var configuration = new DataPlaneSelectorManagerConfiguration(
73-
stateMachineConfiguration.iterationWaitExponentialWaitStrategy(),
74-
stateMachineConfiguration.batchSize(),
75-
Duration.ofSeconds(selectorCheckPeriod)
76-
);
77-
78-
manager = DataPlaneSelectorManagerImpl.Builder.newInstance()
79-
.clientFactory(clientFactory)
80-
.store(instanceStore)
81-
.monitor(context.getMonitor())
82-
.configuration(configuration)
83-
.entityRetryProcessConfiguration(stateMachineConfiguration.entityRetryProcessConfiguration())
84-
.build();
85-
}
86-
8771
@Override
8872
public void start() {
8973
manager.start();
@@ -97,6 +81,26 @@ public void shutdown() {
9781
}
9882

9983
@Provider
84+
public DataPlaneSelectorManager dataPlaneSelectorManager(ServiceExtensionContext context) {
85+
if (manager == null) {
86+
var configuration = new DataPlaneSelectorManagerConfiguration(
87+
stateMachineConfiguration.iterationWaitExponentialWaitStrategy(),
88+
stateMachineConfiguration.batchSize(),
89+
Duration.ofSeconds(selectorCheckPeriod)
90+
);
91+
92+
manager = DataPlaneSelectorManagerImpl.Builder.newInstance()
93+
.clientFactory(clientFactory)
94+
.store(instanceStore)
95+
.monitor(context.getMonitor())
96+
.configuration(configuration)
97+
.entityRetryProcessConfiguration(stateMachineConfiguration.entityRetryProcessConfiguration())
98+
.build();
99+
}
100+
return manager;
101+
}
102+
103+
@Provider(isDefault = true)
100104
public DataPlaneSelectorService dataPlaneSelectorService() {
101105
return new EmbeddedDataPlaneSelectorService(instanceStore, selectionStrategyRegistry, transactionContext);
102106
}

extensions/common/crypto/lib/jws2020-lib/build.gradle.kts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ dependencies {
2727
runtimeOnly(libs.tink)
2828
implementation(libs.jakarta.json.api)
2929

30-
api("com.apicatalog:iron-verifiable-credentials:0.14.0") {
30+
api(libs.iron.vc) {
3131
exclude("com.github.multiformats")
3232
}
3333

extensions/data-plane-selector/data-plane-selector-client/src/main/java/org/eclipse/edc/connector/dataplane/selector/DataPlaneSelectorClientExtension.java

Lines changed: 21 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -16,12 +16,14 @@
1616

1717
import jakarta.json.Json;
1818
import org.eclipse.edc.connector.dataplane.selector.spi.DataPlaneSelectorService;
19+
import org.eclipse.edc.connector.dataplane.selector.spi.manager.DataPlaneSelectorManager;
1920
import org.eclipse.edc.http.spi.ControlApiHttpClient;
2021
import org.eclipse.edc.jsonld.spi.JsonLd;
2122
import org.eclipse.edc.runtime.metamodel.annotation.Extension;
2223
import org.eclipse.edc.runtime.metamodel.annotation.Inject;
23-
import org.eclipse.edc.runtime.metamodel.annotation.Provider;
24+
import org.eclipse.edc.runtime.metamodel.annotation.Provides;
2425
import org.eclipse.edc.runtime.metamodel.annotation.Setting;
26+
import org.eclipse.edc.spi.EdcException;
2527
import org.eclipse.edc.spi.system.ServiceExtension;
2628
import org.eclipse.edc.spi.system.ServiceExtensionContext;
2729
import org.eclipse.edc.spi.types.TypeManager;
@@ -32,28 +34,30 @@
3234
import org.eclipse.edc.transform.transformer.edc.to.JsonObjectToDataPlaneInstanceTransformer;
3335
import org.eclipse.edc.transform.transformer.edc.to.JsonValueToGenericTypeTransformer;
3436

37+
import static java.lang.String.format;
3538
import static java.util.Collections.emptyMap;
3639
import static org.eclipse.edc.spi.constants.CoreConstants.JSON_LD;
3740

3841
@Extension(DataPlaneSelectorClientExtension.NAME)
42+
@Provides(DataPlaneSelectorService.class)
3943
public class DataPlaneSelectorClientExtension implements ServiceExtension {
4044

4145
public static final String NAME = "DataPlane Selector client";
46+
private static final String EDC_DPF_SELECTOR_URL = "edc.dpf.selector.url";
4247

43-
@Setting(description = "DataPlane selector api URL", key = "edc.dpf.selector.url")
48+
@Setting(description = "DataPlane selector api URL", key = EDC_DPF_SELECTOR_URL, required = false)
4449
private String selectorApiUrl;
4550

4651
@Inject
4752
private ControlApiHttpClient httpClient;
48-
4953
@Inject
5054
private TypeManager typeManager;
51-
5255
@Inject
5356
private TypeTransformerRegistry typeTransformerRegistry;
54-
5557
@Inject
5658
private JsonLd jsonLd;
59+
@Inject(required = false)
60+
private DataPlaneSelectorManager dataPlaneSelectorManager;
5761

5862
@Override
5963
public String name() {
@@ -62,17 +66,24 @@ public String name() {
6266

6367
@Override
6468
public void initialize(ServiceExtensionContext context) {
69+
if (dataPlaneSelectorManager != null) {
70+
return;
71+
}
72+
73+
if (selectorApiUrl == null || selectorApiUrl.isBlank()) {
74+
throw new EdcException(format("No setting found for key " + EDC_DPF_SELECTOR_URL));
75+
}
76+
6577
var builderFactory = Json.createBuilderFactory(emptyMap());
6678
typeTransformerRegistry.register(new JsonObjectFromDataPlaneInstanceTransformer(builderFactory, typeManager, JSON_LD));
6779
typeTransformerRegistry.register(new JsonObjectFromDataAddressTransformer(builderFactory, typeManager, JSON_LD));
6880
typeTransformerRegistry.register(new JsonObjectToDataPlaneInstanceTransformer());
6981
typeTransformerRegistry.register(new JsonObjectToDataAddressTransformer());
7082
typeTransformerRegistry.register(new JsonValueToGenericTypeTransformer(typeManager, JSON_LD));
71-
}
7283

73-
@Provider
74-
public DataPlaneSelectorService dataPlaneSelectorService(ServiceExtensionContext context) {
75-
return new RemoteDataPlaneSelectorService(httpClient, selectorApiUrl, typeManager, JSON_LD, typeTransformerRegistry,
76-
jsonLd);
84+
var dataPlaneSelectorService = new RemoteDataPlaneSelectorService(httpClient, this.selectorApiUrl, typeManager, JSON_LD,
85+
typeTransformerRegistry, jsonLd);
86+
context.registerService(DataPlaneSelectorService.class, dataPlaneSelectorService);
7787
}
88+
7889
}

extensions/data-plane-selector/data-plane-selector-client/src/test/java/org/eclipse/edc/connector/dataplane/selector/DataPlaneSelectorClientExtensionTest.java

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@
1515
package org.eclipse.edc.connector.dataplane.selector;
1616

1717
import org.eclipse.edc.boot.system.injection.ObjectFactory;
18+
import org.eclipse.edc.connector.dataplane.selector.spi.DataPlaneSelectorService;
19+
import org.eclipse.edc.connector.dataplane.selector.spi.manager.DataPlaneSelectorManager;
1820
import org.eclipse.edc.junit.extensions.DependencyInjectionExtension;
1921
import org.eclipse.edc.spi.EdcException;
2022
import org.eclipse.edc.spi.system.ServiceExtensionContext;
@@ -42,27 +44,29 @@ class DataPlaneSelectorClientExtensionTest {
4244

4345
@BeforeEach
4446
void setUp(ServiceExtensionContext context) {
47+
context.registerService(DataPlaneSelectorManager.class, null);
4548
context.registerService(TypeTransformerRegistry.class, typeTransformerRegistry);
4649
when(context.getConfig()).thenReturn(ConfigFactory.fromMap(Map.of("edc.dataplane.client.selector.strategy", "http://any",
4750
"edc.dpf.selector.url", "http://any")));
48-
4951
}
5052

5153
@Test
5254
void dataPlaneSelectorService_shouldReturnRemoteService(DataPlaneSelectorClientExtension extension, ServiceExtensionContext context) {
5355
when(context.getConfig()).thenReturn(ConfigFactory.fromMap(Map.of()));
5456

55-
var client = extension.dataPlaneSelectorService(context);
57+
extension.initialize(context);
5658

57-
assertThat(client).isInstanceOf(RemoteDataPlaneSelectorService.class);
59+
assertThat(context.getService(DataPlaneSelectorService.class)).isInstanceOf(RemoteDataPlaneSelectorService.class);
5860
}
5961

6062
@Test
6163
void dataPlaneSelectorService_shouldThrowException_whenUrlNotConfigured(ServiceExtensionContext context, ObjectFactory objectFactory) {
6264
when(context.getConfig()).thenReturn(ConfigFactory.fromMap(emptyMap()));
6365

64-
assertThatThrownBy(() -> objectFactory.constructInstance(DataPlaneSelectorClientExtension.class).dataPlaneSelectorService(context)).isInstanceOf(EdcException.class)
65-
.hasMessageContaining("No config value and no default value found for injected field");
66+
var extension = objectFactory.constructInstance(DataPlaneSelectorClientExtension.class);
67+
68+
assertThatThrownBy(() -> extension.initialize(context)).isInstanceOf(EdcException.class)
69+
.hasMessageContaining("No setting found");
6670
}
6771

6872
@Test

system-tests/dsp-compatibility-tests/connector-under-test/build.gradle.kts

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,8 @@ plugins {
1818

1919
dependencies {
2020
api(project(":dist:bom:controlplane-base-bom"))
21-
api(project(":dist:bom:dataplane-base-bom")) {
22-
exclude(module = "data-plane-selector-client")
23-
}
21+
api(project(":dist:bom:dataplane-base-bom"))
2422
api(project(":data-protocols:dsp:dsp-2025"))
2523
api(project(":system-tests:protocol-tck:tck-extension"))
2624
runtimeOnly(libs.parsson)
27-
}
25+
}

system-tests/e2e-transfer-test/data-plane/build.gradle.kts

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,7 @@ plugins {
1717
}
1818

1919
dependencies {
20-
implementation(project(":dist:bom:dataplane-base-bom")) {
21-
exclude(module = "data-plane-selector-client")
22-
}
23-
20+
implementation(project(":dist:bom:dataplane-base-bom"))
2421
implementation(project(":extensions:data-plane:data-plane-kafka"))
2522
}
2623

system-tests/e2e-transfer-test/runner/src/test/java/org/eclipse/edc/test/e2e/TransferPullEndToEndTest.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -501,7 +501,6 @@ protected Vault getDataplaneVault() {
501501
@EndToEndTest
502502
class EmbeddedDataPlane extends Tests {
503503

504-
505504
@RegisterExtension
506505
static final RuntimeExtension CONSUMER_CONTROL_PLANE = new RuntimePerClassExtension(
507506
Runtimes.IN_MEMORY_CONTROL_PLANE_EMBEDDED_DATA_PLANE.create("consumer-control-plane")

0 commit comments

Comments
 (0)