Skip to content

Commit

Permalink
#350: Shifted Things service to new configuration style. Had to refac…
Browse files Browse the repository at this point in the history
…tor Policies service as well to reduce redundancy and fix MongoDB-related config files.

Signed-off-by: Juergen Fickel <juergen.fickel@bosch-si.com>
  • Loading branch information
Juergen Fickel committed Mar 8, 2019
1 parent dcb4198 commit 3916e5c
Show file tree
Hide file tree
Showing 45 changed files with 919 additions and 650 deletions.
Expand Up @@ -49,12 +49,12 @@
import org.eclipse.ditto.services.policies.persistence.actors.AbstractReceiveStrategy;
import org.eclipse.ditto.services.policies.persistence.actors.ReceiveStrategy;
import org.eclipse.ditto.services.policies.persistence.actors.StrategyAwareReceiveBuilder;
import org.eclipse.ditto.services.policies.persistence.config.ActivityCheckConfig;
import org.eclipse.ditto.services.policies.persistence.config.PolicyConfig;
import org.eclipse.ditto.services.policies.persistence.config.SnapshotConfig;
import org.eclipse.ditto.services.utils.akka.LogUtil;
import org.eclipse.ditto.services.utils.headers.conditional.ConditionalHeadersValidator;
import org.eclipse.ditto.services.utils.persistence.SnapshotAdapter;
import org.eclipse.ditto.services.utils.persistence.mongo.config.ActivityCheckConfig;
import org.eclipse.ditto.services.utils.persistence.mongo.config.SnapshotConfig;
import org.eclipse.ditto.signals.commands.base.Command;
import org.eclipse.ditto.signals.commands.base.CommandResponse;
import org.eclipse.ditto.signals.commands.policies.PolicyCommandSizeValidator;
Expand Down Expand Up @@ -167,9 +167,10 @@ public final class PolicyPersistenceActor extends AbstractPersistentActor {
private final DiagnosticLoggingAdapter log = LogUtil.obtain(this);
private final String policyId;
private final SnapshotAdapter<Policy> snapshotAdapter;
private final PolicyConfig policyConfig;
private final ActorRef pubSubMediator;
private final PolicyConfig policyConfig;
private final Receive handlePolicyEvents;

private Policy policy;
private long accessCounter;
private long lastSnapshotSequenceNr = -1;
Expand All @@ -184,8 +185,8 @@ public final class PolicyPersistenceActor extends AbstractPersistentActor {
final PolicyConfig policyConfig) {

this.policyId = policyId;
this.pubSubMediator = pubSubMediator;
this.snapshotAdapter = snapshotAdapter;
this.pubSubMediator = pubSubMediator;
this.policyConfig = policyConfig;

handlePolicyEvents = ReceiveBuilder.create()
Expand Down
Expand Up @@ -75,7 +75,7 @@ private PolicySupervisorActor(final ActorRef pubSubMediator,
try {
policyId = URLDecoder.decode(getSelf().path().name(), StandardCharsets.UTF_8.name());
} catch (final UnsupportedEncodingException e) {
throw new IllegalStateException("Unsupported encoding", e);
throw new IllegalStateException("Unsupported encoding!", e);
}
persistenceActorProps = PolicyPersistenceActor.props(policyId, snapshotAdapter, pubSubMediator, policyConfig);
exponentialBackOffConfig = policyConfig.getSupervisorConfig().getExponentialBackOffConfig();
Expand All @@ -94,7 +94,7 @@ private PolicySupervisorActor(final ActorRef pubSubMediator,
* </p>
*
* @param pubSubMediator the PubSub mediator actor.
* @param policyConfig the configuration settings for actor supervision.
* @param policyConfig the configuration settings for policy entities.
* @param snapshotAdapter the adapter to serialize snapshots.
* @return the {@link Props} to create this actor.
*/
Expand Down
Expand Up @@ -18,11 +18,15 @@
import org.eclipse.ditto.services.base.config.supervision.SupervisorConfig;
import org.eclipse.ditto.services.utils.config.DefaultScopedConfig;
import org.eclipse.ditto.services.utils.config.ScopedConfig;
import org.eclipse.ditto.services.utils.persistence.mongo.config.ActivityCheckConfig;
import org.eclipse.ditto.services.utils.persistence.mongo.config.DefaultActivityCheckConfig;
import org.eclipse.ditto.services.utils.persistence.mongo.config.DefaultSnapshotConfig;
import org.eclipse.ditto.services.utils.persistence.mongo.config.SnapshotConfig;

import com.typesafe.config.Config;

/**
* TODO Javadoc
* This class is the default implementation of the policy config.
*/
@Immutable
public final class DefaultPolicyConfig implements PolicyConfig, Serializable {
Expand All @@ -41,6 +45,13 @@ private DefaultPolicyConfig(final ScopedConfig scopedConfig) {
snapshotConfig = DefaultSnapshotConfig.of(scopedConfig);
}

/**
* Returns an instance of the policy config based on the settings of the specified Config.
*
* @param config is supposed to provide the settings of the policy config at {@value #CONFIG_PATH}.
* @return the instance.
* @throws org.eclipse.ditto.services.utils.config.DittoConfigError if {@code config} is invalid.
*/
public static DefaultPolicyConfig of(final Config config) {
return new DefaultPolicyConfig(DefaultScopedConfig.newInstance(config, CONFIG_PATH));
}
Expand Down
Expand Up @@ -13,6 +13,8 @@
import javax.annotation.concurrent.Immutable;

import org.eclipse.ditto.services.base.config.supervision.WithSupervisorConfig;
import org.eclipse.ditto.services.utils.persistence.mongo.config.WithActivityCheckConfig;
import org.eclipse.ditto.services.utils.persistence.mongo.config.WithSnapshotConfig;

/**
* Provides configuration settings for policy entities.
Expand All @@ -21,20 +23,5 @@
* </p>
*/
@Immutable
public interface PolicyConfig extends WithSupervisorConfig {

/**
* Returns the configuration settings of the activity check.
*
* @return the config.
*/
ActivityCheckConfig getActivityCheckConfig();

/**
* Returns the configuration settings for the handling of policy entity snapshots.
*
* @return the config.
*/
SnapshotConfig getSnapshotConfig();

public interface PolicyConfig extends WithSupervisorConfig, WithActivityCheckConfig, WithSnapshotConfig {
}
Expand Up @@ -102,6 +102,7 @@ public static void initTestFixture() {

protected static DittoHeaders createDittoHeaders(final JsonSchemaVersion schemaVersion,
final String... authSubjects) {

final List<String> authSubjectsStr = Arrays.asList(authSubjects);
final List<AuthorizationSubject> authSubjectsList = new ArrayList<>();
authSubjectsStr.stream().map(AuthorizationModelFactory::newAuthSubject).forEach(authSubjectsList::add);
Expand Down
Expand Up @@ -30,7 +30,6 @@
import org.eclipse.ditto.services.policies.persistence.actors.policy.PolicySupervisorActor;
import org.eclipse.ditto.services.policies.persistence.config.PolicyConfig;
import org.eclipse.ditto.services.policies.starter.config.PoliciesConfig;
import org.eclipse.ditto.services.policies.starter.config.TagsConfig;
import org.eclipse.ditto.services.utils.akka.LogUtil;
import org.eclipse.ditto.services.utils.cluster.ClusterStatusSupplier;
import org.eclipse.ditto.services.utils.cluster.ClusterUtil;
Expand All @@ -43,6 +42,7 @@
import org.eclipse.ditto.services.utils.health.routes.StatusRoute;
import org.eclipse.ditto.services.utils.persistence.SnapshotAdapter;
import org.eclipse.ditto.services.utils.persistence.mongo.MongoHealthChecker;
import org.eclipse.ditto.services.utils.persistence.mongo.config.TagsConfig;
import org.eclipse.ditto.signals.commands.devops.RetrieveStatisticsDetails;

import akka.Done;
Expand Down
Expand Up @@ -20,11 +20,11 @@
import org.eclipse.ditto.services.base.config.LimitsConfig;
import org.eclipse.ditto.services.policies.persistence.config.DefaultPolicyConfig;
import org.eclipse.ditto.services.policies.persistence.config.PolicyConfig;
import org.eclipse.ditto.services.utils.config.DefaultScopedConfig;
import org.eclipse.ditto.services.utils.config.ScopedConfig;
import org.eclipse.ditto.services.utils.health.config.DefaultHealthCheckConfig;
import org.eclipse.ditto.services.utils.health.config.HealthCheckConfig;
import org.eclipse.ditto.services.utils.persistence.mongo.config.DefaultTagsConfig;
import org.eclipse.ditto.services.utils.persistence.mongo.config.MongoDbConfig;
import org.eclipse.ditto.services.utils.persistence.mongo.config.TagsConfig;

import com.typesafe.config.Config;

Expand All @@ -43,13 +43,11 @@ public final class DittoPoliciesConfig implements PoliciesConfig, Serializable {
private final PolicyConfig policyConfig;
private final TagsConfig tagsConfig;

private DittoPoliciesConfig(final DittoServiceWithMongoDbConfig dittoServiceConfig,
final ScopedConfig policiesScopedConfig) {

private DittoPoliciesConfig(final DittoServiceWithMongoDbConfig dittoServiceConfig) {
this.dittoServiceConfig = dittoServiceConfig;
healthCheckConfig = DefaultHealthCheckConfig.of(policiesScopedConfig);
policyConfig = DefaultPolicyConfig.of(policiesScopedConfig);
tagsConfig = DefaultTagsConfig.of(policiesScopedConfig);
healthCheckConfig = DefaultHealthCheckConfig.of(dittoServiceConfig);
policyConfig = DefaultPolicyConfig.of(dittoServiceConfig);
tagsConfig = DefaultTagsConfig.of(dittoServiceConfig);
}

/**
Expand All @@ -61,8 +59,7 @@ private DittoPoliciesConfig(final DittoServiceWithMongoDbConfig dittoServiceConf
* @throws org.eclipse.ditto.services.utils.config.DittoConfigError if {@code config} is invalid.
*/
public static DittoPoliciesConfig of(final Config dittoScopedConfig) {
return new DittoPoliciesConfig(DittoServiceWithMongoDbConfig.of(dittoScopedConfig, CONFIG_PATH),
DefaultScopedConfig.newInstance(dittoScopedConfig, CONFIG_PATH));
return new DittoPoliciesConfig(DittoServiceWithMongoDbConfig.of(dittoScopedConfig, CONFIG_PATH));
}

@Override
Expand Down
Expand Up @@ -16,6 +16,7 @@
import org.eclipse.ditto.services.policies.persistence.config.PolicyConfig;
import org.eclipse.ditto.services.utils.health.config.WithHealthCheckConfig;
import org.eclipse.ditto.services.utils.persistence.mongo.config.WithMongoDbConfig;
import org.eclipse.ditto.services.utils.persistence.mongo.config.WithTagsConfig;

/**
* Provides the configuration settings of the Policies service.
Expand All @@ -24,7 +25,8 @@
* </p>
*/
@Immutable
public interface PoliciesConfig extends ServiceSpecificConfig, WithHealthCheckConfig, WithMongoDbConfig {
public interface PoliciesConfig
extends ServiceSpecificConfig, WithHealthCheckConfig, WithMongoDbConfig, WithTagsConfig {

/**
* Returns the configuration settings for policy entities.
Expand All @@ -33,11 +35,4 @@ public interface PoliciesConfig extends ServiceSpecificConfig, WithHealthCheckCo
*/
PolicyConfig getPolicyConfig();

/**
* Returns the configuration settings for policies tags.
*
* @return the config.
*/
TagsConfig getTagsConfig();

}
Expand Up @@ -15,19 +15,18 @@ ditto {
}
}

mongo {
mongodb {
hostname = "localhost"
hostname = ${?DOCKER_HOST}
hostname = ${?MONGO_HOSTNAME}
port = 27017
port = ${?MONGO_PORT}
database = "policies"
uri = "mongodb://"${?ditto.policies.mongodb.authentication}${ditto.policies.mongodb.hostname}":"${ditto.policies.mongodb.port}"/"${ditto.policies.mongodb.database}
}

metrics.prometheus.port = 9010
}

services-utils-config.mongodb.uri = "mongodb://"${?ditto.policies.mongo.authentication}${ditto.policies.mongo.hostname}":"${ditto.policies.mongo.port}"/"${ditto.policies.mongo.database}
}

akka.management.http.port = 25520
Expand Down
@@ -1,16 +1,15 @@
ditto {
policies {
mongo {
mongodb {
hostname = "mongodb"
hostname = ${?MONGO_DB_HOSTNAME}
port = 27017
port = ${?MONGO_DB_PORT}
authentication = ${?MONGO_DB_AUTHENTICATION}
database = "policies"
database = ${?MONGO_DB_DATABASE}
uri = "mongodbdb://"${?ditto.policies.mongodb.authentication}${ditto.policies.mongodb.hostname}":"${ditto.policies.mongodb.port}"/"${ditto.policies.mongodb.database}
uri = ${?MONGO_DB_URI}
}
}

services-utils-config.mongodb.uri = "mongodb://"${?ditto.policies.mongo.authentication}${ditto.policies.mongo.hostname}":"${ditto.policies.mongo.port}"/"${ditto.policies.mongo.database}
services-utils-config.mongodb.uri = ${?MONGO_DB_URI}
}
Expand Up @@ -10,6 +10,7 @@
*/
package org.eclipse.ditto.services.things.persistence.actors;

import org.eclipse.ditto.services.utils.persistence.mongo.config.MongoDbConfig;
import org.eclipse.ditto.services.utils.persistence.mongo.namespace.AbstractEventSourceNamespaceOpsActor;
import org.eclipse.ditto.signals.commands.things.ThingCommand;
import org.eclipse.ditto.utils.jsr305.annotations.AllValuesAreNonnullByDefault;
Expand All @@ -27,19 +28,23 @@ public final class ThingNamespaceOpsActor extends AbstractEventSourceNamespaceOp

public static final String ACTOR_NAME = "thingNamespaceOps";

private ThingNamespaceOpsActor(final ActorRef pubSubMediator, final Config config) {
super(pubSubMediator, config);
private ThingNamespaceOpsActor(final ActorRef pubSubMediator, final Config config,
final MongoDbConfig mongoDbConfig) {

super(pubSubMediator, config, mongoDbConfig);
}

/**
* Create Props of this actor.
*
* @param pubSubMediator Akka pub-sub mediator.
* @param config Configuration with info about event journal, snapshot store, suffix-builder and database.
* @param mongoDbConfig the configuration settings for MongoDB.
* @return a Props object.
*/
public static Props props(final ActorRef pubSubMediator, final Config config) {
return Props.create(ThingNamespaceOpsActor.class, () -> new ThingNamespaceOpsActor(pubSubMediator, config));
public static Props props(final ActorRef pubSubMediator, final Config config, final MongoDbConfig mongoDbConfig) {
return Props.create(ThingNamespaceOpsActor.class,
() -> new ThingNamespaceOpsActor(pubSubMediator, config, mongoDbConfig));
}

@Override
Expand Down

0 comments on commit 3916e5c

Please sign in to comment.