Skip to content

Commit

Permalink
Allow custom configuration for the SignalTransformer extension
Browse files Browse the repository at this point in the history
Signed-off-by: Yannic Klem <yannic.klem@bosch.io>
  • Loading branch information
Yannic92 committed Jul 11, 2022
1 parent 6952903 commit a5cdf86
Show file tree
Hide file tree
Showing 4 changed files with 23 additions and 10 deletions.
Expand Up @@ -165,7 +165,8 @@ private ActorRef getHealthCheckingActor(final ConnectivityConfig connectivityCon
}

private ActorRef getCommandForwarder(final ClusterConfig clusterConfig, final ActorRef pubSubMediator) {
final SignalTransformer signalTransformer = SignalTransformer.get(getContext().system());
final ActorSystem system = getContext().system();
final SignalTransformer signalTransformer = SignalTransformer.get(system, system.settings().config());
return startChildActor(EdgeCommandForwarderActor.ACTOR_NAME,
EdgeCommandForwarderActor.props(pubSubMediator,
ShardRegions.of(getContext().getSystem(), clusterConfig), signalTransformer));
Expand Down
Expand Up @@ -18,8 +18,11 @@
import java.util.function.Function;

import org.eclipse.ditto.base.model.signals.Signal;
import org.eclipse.ditto.base.service.DittoExtensionIds;
import org.eclipse.ditto.base.service.DittoExtensionPoint;

import com.typesafe.config.Config;

import akka.actor.ActorSystem;

/**
Expand All @@ -34,21 +37,30 @@ public interface SignalTransformer extends Function<Signal<?>, CompletionStage<S
* {@code ActorSystem}.
*
* @param actorSystem the actorSystem in which the {@code SignalTransformer} should be loaded.
* @param config the configuration of this extension.
* @return the {@code SignalTransformer} implementation.
* @throws NullPointerException if {@code actorSystem} is {@code null}.
*/
static SignalTransformer get(final ActorSystem actorSystem) {
static SignalTransformer get(final ActorSystem actorSystem, final Config config) {
checkNotNull(actorSystem, "actorSystem");
return ExtensionId.INSTANCE.get(actorSystem);
checkNotNull(config, "config");
final var extensionIdConfig = ExtensionId.computeConfig(config);
return DittoExtensionIds.get(actorSystem)
.computeIfAbsent(extensionIdConfig, ExtensionId::new)
.get(actorSystem);
}

final class ExtensionId extends DittoExtensionPoint.ExtensionId<SignalTransformer> {

private static final String CONFIG_PATH = "ditto.signal-transformer";
private static final ExtensionId INSTANCE = new ExtensionId(SignalTransformer.class);
private static final String CONFIG_KEY = "signal-transformer";
private static final String CONFIG_PATH = "ditto.extensions." + CONFIG_KEY;

private ExtensionId(final ExtensionIdConfig<SignalTransformer> extensionIdConfig) {
super(extensionIdConfig);
}

private ExtensionId(final Class<SignalTransformer> parentClass) {
super(parentClass);
static ExtensionIdConfig<SignalTransformer> computeConfig(final Config config) {
return ExtensionIdConfig.of(SignalTransformer.class, config, CONFIG_KEY);
}

@Override
Expand Down
3 changes: 1 addition & 2 deletions edge/service/src/main/resources/ditto-edge-service.conf
@@ -1,9 +1,8 @@
ditto {
extensions {
edge-command-forwarder-extension = org.eclipse.ditto.edge.service.dispatching.NoOpEdgeCommandForwarderExtension
signal-transformer = org.eclipse.ditto.edge.service.dispatching.DefaultNamespaceAppender
}
signal-transformer = org.eclipse.ditto.edge.service.dispatching.DefaultNamespaceAppender
signal-transformer = ${?DITTO_SIGNAL_TRANSFORMER}

ask-with-retry {
# maximum duration to wait for answers from entity shard regions
Expand Down
Expand Up @@ -117,7 +117,8 @@ private GatewayRootActor(final GatewayConfig gatewayConfig, final ActorRef pubSu
final HttpConfig httpConfig = gatewayConfig.getHttpConfig();

final ShardRegions shardRegions = ShardRegions.of(actorSystem, clusterConfig);
final SignalTransformer signalTransformer = SignalTransformer.get(context().system());
final SignalTransformer signalTransformer =
SignalTransformer.get(actorSystem, ScopedConfig.dittoExtension(actorSystem.settings().config()));
final var edgeCommandForwarder = startChildActor(EdgeCommandForwarderActor.ACTOR_NAME,
EdgeCommandForwarderActor.props(pubSubMediator, shardRegions, signalTransformer));
final var proxyActor = startProxyActor(actorSystem, pubSubMediator, edgeCommandForwarder);
Expand Down

0 comments on commit a5cdf86

Please sign in to comment.