+public class DistributedDataStore implements DOMStore, SchemaContextListener, AutoCloseable {
+
+ private static final Logger LOG = LoggerFactory.getLogger(DistributedDataStore.class);
+
+ private final ActorContext actorContext;
+ private final DatastoreContext datastoreContext;
+
+ public DistributedDataStore(ActorSystem actorSystem, String type, ClusterWrapper cluster,
+ Configuration configuration, DistributedDataStoreProperties dataStoreProperties) {
+ Preconditions.checkNotNull(actorSystem, "actorSystem should not be null");
+ Preconditions.checkNotNull(type, "type should not be null");
+ Preconditions.checkNotNull(cluster, "cluster should not be null");
+ Preconditions.checkNotNull(configuration, "configuration should not be null");
+
+
+ String shardManagerId = ShardManagerIdentifier.builder().type(type).build().toString();
+
+ LOG.info("Creating ShardManager : {}", shardManagerId);
+
+ datastoreContext = new DatastoreContext(InMemoryDOMDataStoreConfigProperties.create(
+ dataStoreProperties.getMaxShardDataChangeExecutorPoolSize(),
+ dataStoreProperties.getMaxShardDataChangeExecutorQueueSize(),
+ dataStoreProperties.getMaxShardDataChangeListenerQueueSize()),
+ Duration.create(dataStoreProperties.getShardTransactionIdleTimeoutInMinutes(),
+ TimeUnit.MINUTES));
+
+ actorContext
+ = new ActorContext(
+ actorSystem, actorSystem.actorOf(
+ ShardManager.props(type, cluster, configuration, datastoreContext).
+ withMailbox(ActorContext.MAILBOX), shardManagerId ), cluster, configuration);
+
+ actorContext.setOperationTimeout(dataStoreProperties.getOperationTimeoutInSeconds());
+ }
+
+ public DistributedDataStore(ActorContext actorContext) {
+ this.actorContext = Preconditions.checkNotNull(actorContext, "actorContext should not be null");
+ this.datastoreContext = new DatastoreContext();
+ }