Skip to content

Commit

Permalink
Make CachingSignalEnrichmentFacadeProvider a DittoExtensionPoint used
Browse files Browse the repository at this point in the history
in the search service

Signed-off-by: Yannic Klem <yannic.klem@bosch.io>
  • Loading branch information
Yannic92 committed Jul 12, 2022
1 parent 8fe2670 commit 1f56f2f
Show file tree
Hide file tree
Showing 7 changed files with 110 additions and 106 deletions.

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,90 @@
/*
* Copyright (c) 2021 Contributors to the Eclipse Foundation
*
* See the NOTICE file(s) distributed with this work for additional
* information regarding copyright ownership.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License 2.0 which is available at
* http://www.eclipse.org/legal/epl-2.0
*
* SPDX-License-Identifier: EPL-2.0
*/
package org.eclipse.ditto.thingsearch.service.persistence.write.streaming;

import static org.eclipse.ditto.base.model.common.ConditionChecker.checkNotNull;

import java.util.concurrent.Executor;

import org.eclipse.ditto.base.service.DittoExtensionIds;
import org.eclipse.ditto.base.service.DittoExtensionPoint;
import org.eclipse.ditto.internal.models.signalenrichment.CachingSignalEnrichmentFacade;
import org.eclipse.ditto.internal.models.signalenrichment.SignalEnrichmentFacade;
import org.eclipse.ditto.internal.utils.cache.config.CacheConfig;

import com.typesafe.config.Config;

import akka.actor.ActorSystem;

/**
* Caching signal enrichment facade to be loaded by reflection.
* Can be used as an extension point to use custom signal enrichment.
* Implementations MUST have a public constructor taking an actorSystem and a Config as argument.
*/
public interface CachingSignalEnrichmentFacadeProvider extends DittoExtensionPoint {

/**
* Returns a the {@link org.eclipse.ditto.internal.models.signalenrichment.SignalEnrichmentFacade} loaded by reflection.
*
* @param actorSystem the actorSystem the signal enrichment facade provider belongs to.
* @param cacheLoaderFacade the facade whose argument-result-pairs we are caching.
* @param cacheConfig the cache configuration to use for the cache.
* @param cacheLoaderExecutor the executor to use in order to asynchronously load cache entries.
* @param cacheNamePrefix the prefix to use as cacheName of the cache.
* @throws NullPointerException if any argument is null.
*/
CachingSignalEnrichmentFacade getSignalEnrichmentFacade(
final ActorSystem actorSystem,
final SignalEnrichmentFacade cacheLoaderFacade,
final CacheConfig cacheConfig,
final Executor cacheLoaderExecutor,
final String cacheNamePrefix);

/**
* Loads the implementation of {@code CachingSignalEnrichmentFacade} which is configured for the
* {@code ActorSystem}.
*
* @param actorSystem the actorSystem in which the {@code CachingSignalEnrichmentFacade} should be loaded.
* @param config the config the extension is configured.
* @return the {@code CachingSignalEnrichmentFacade} implementation.
* @throws NullPointerException if {@code actorSystem} is {@code null}.
*/
static CachingSignalEnrichmentFacadeProvider get(final ActorSystem actorSystem, final Config config) {
checkNotNull(actorSystem, "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<CachingSignalEnrichmentFacadeProvider> {
private static final String CONFIG_KEY = "caching-signal-enrichment-facade-provider";
private static final String CONFIG_PATH = "ditto.extensions." + CONFIG_KEY;

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

static ExtensionIdConfig<CachingSignalEnrichmentFacadeProvider> computeConfig(final Config config) {
return ExtensionIdConfig.of(CachingSignalEnrichmentFacadeProvider.class, config, CONFIG_KEY);
}

@Override
protected String getConfigPath() {
return CONFIG_PATH;
}

}

}
Original file line number Diff line number Diff line change
Expand Up @@ -10,24 +10,29 @@
*
* SPDX-License-Identifier: EPL-2.0
*/
package org.eclipse.ditto.internal.models.signalenrichment;
package org.eclipse.ditto.thingsearch.service.persistence.write.streaming;

import java.util.concurrent.Executor;

import org.eclipse.ditto.internal.models.signalenrichment.CachingSignalEnrichmentFacade;
import org.eclipse.ditto.internal.models.signalenrichment.DittoCachingSignalEnrichmentFacade;
import org.eclipse.ditto.internal.models.signalenrichment.SignalEnrichmentFacade;
import org.eclipse.ditto.internal.utils.cache.config.CacheConfig;

import com.typesafe.config.Config;

import akka.actor.ActorSystem;

/**
* Default {@link CachingSignalEnrichmentFacadeProvider} who provides a {@link DittoCachingSignalEnrichmentFacade}.
* Default {@link CachingSignalEnrichmentFacadeProvider} who provides a {@link org.eclipse.ditto.internal.models.signalenrichment.DittoCachingSignalEnrichmentFacade}.
*/
public final class DittoCachingSignalEnrichmentFacadeProvider extends CachingSignalEnrichmentFacadeProvider {
public final class DittoCachingSignalEnrichmentFacadeProvider implements CachingSignalEnrichmentFacadeProvider {

/**
* Instantiate this provider. Called by reflection.
*/
public DittoCachingSignalEnrichmentFacadeProvider(final ActorSystem actorSystem) {
super(actorSystem);
public DittoCachingSignalEnrichmentFacadeProvider(final ActorSystem actorSystem, final Config config) {
// No-Op but required for extension initialisation
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,6 @@
import javax.annotation.Nullable;

import org.eclipse.ditto.internal.models.signalenrichment.CachingSignalEnrichmentFacade;
import org.eclipse.ditto.internal.models.signalenrichment.CachingSignalEnrichmentFacadeProvider;
import org.eclipse.ditto.internal.utils.cache.Cache;
import org.eclipse.ditto.internal.utils.cache.CacheFactory;
import org.eclipse.ditto.internal.utils.cache.config.CacheConfig;
Expand Down Expand Up @@ -331,7 +330,9 @@ private static CachingSignalEnrichmentFacade createThingsFacade(final ActorSyste
final Executor thingCacheDispatcher) {

final var sudoRetrieveThingFacade = SudoSignalEnrichmentFacade.of(thingsShardRegion, timeout);
final var cachingSignalEnrichmentFacadeProvider = CachingSignalEnrichmentFacadeProvider.get(actorSystem);
final var dittoExtensionsConfig = ScopedConfig.dittoExtension(actorSystem.settings().config());
final var cachingSignalEnrichmentFacadeProvider =
CachingSignalEnrichmentFacadeProvider.get(actorSystem, dittoExtensionsConfig);
return cachingSignalEnrichmentFacadeProvider.getSignalEnrichmentFacade(actorSystem, sudoRetrieveThingFacade,
thingCacheConfig, thingCacheDispatcher, "things-search_enforcementflow_enforcer_cache_things");
}
Expand Down
7 changes: 1 addition & 6 deletions thingsearch/service/src/main/resources/search.conf
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ ditto {
extensions {
search-update-observer = org.eclipse.ditto.thingsearch.service.updater.actors.DefaultSearchUpdateObserver
query-criteria-validator = org.eclipse.ditto.thingsearch.service.persistence.query.validation.DefaultQueryCriteriaValidator
caching-signal-enrichment-facade-provider = org.eclipse.ditto.thingsearch.service.persistence.write.streaming.DittoCachingSignalEnrichmentFacadeProvider
}

mongodb {
Expand Down Expand Up @@ -51,12 +52,6 @@ ditto {

}


signal-enrichment {
caching-signal-enrichment-facade.provider = org.eclipse.ditto.internal.models.signalenrichment.DittoCachingSignalEnrichmentFacadeProvider
caching-signal-enrichment-facade.provider = ${?THINGS_SEARCH_CACHING_SIGNAL_ENRICHMENT_PROVIDER}
}

search {
search-update-mapper.implementation = org.eclipse.ditto.thingsearch.service.persistence.write.streaming.DefaultSearchUpdateMapper
search-update-mapper.implementation = ${?SEARCH_UPDATE_MAPPER_IMPLEMENTATION}
Expand Down
6 changes: 3 additions & 3 deletions thingsearch/service/src/test/resources/actors-test.conf
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
ditto {
extensions {
search-update-observer = "org.eclipse.ditto.thingsearch.service.updater.actors.DefaultSearchUpdateObserver"
query-criteria-validator = "org.eclipse.ditto.thingsearch.service.persistence.query.validation.DefaultQueryCriteriaValidator"
search-update-observer = org.eclipse.ditto.thingsearch.service.updater.actors.DefaultSearchUpdateObserver
query-criteria-validator = org.eclipse.ditto.thingsearch.service.persistence.query.validation.DefaultQueryCriteriaValidator
caching-signal-enrichment-facade-provider = org.eclipse.ditto.thingsearch.service.persistence.write.streaming.DittoCachingSignalEnrichmentFacadeProvider
}
signal-enrichment.caching-signal-enrichment-facade.provider = org.eclipse.ditto.internal.models.signalenrichment.DittoCachingSignalEnrichmentFacadeProvider
mapping-strategy.implementation = "org.eclipse.ditto.thingsearch.api.ThingSearchMappingStrategies"

pre-enforcers = [
Expand Down
6 changes: 3 additions & 3 deletions thingsearch/service/src/test/resources/test.conf
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
ditto {
signal-enrichment.caching-signal-enrichment-facade.provider = org.eclipse.ditto.internal.models.signalenrichment.DittoCachingSignalEnrichmentFacadeProvider
mapping-strategy.implementation = "org.eclipse.ditto.thingsearch.api.ThingSearchMappingStrategies"
extensions {
search-update-observer = "org.eclipse.ditto.thingsearch.service.updater.actors.DefaultSearchUpdateObserver"
query-criteria-validator = "org.eclipse.ditto.thingsearch.service.persistence.query.validation.DefaultQueryCriteriaValidator"
caching-signal-enrichment-facade-provider = org.eclipse.ditto.thingsearch.service.persistence.write.streaming.DittoCachingSignalEnrichmentFacadeProvider
search-update-observer = org.eclipse.ditto.thingsearch.service.updater.actors.DefaultSearchUpdateObserver
query-criteria-validator = org.eclipse.ditto.thingsearch.service.persistence.query.validation.DefaultQueryCriteriaValidator
}
mongodb {
uri = "mongodb://localhost:27017/test"
Expand Down

0 comments on commit 1f56f2f

Please sign in to comment.