InMemoryDOMDataTreeShard(final DOMDataTreeIdentifier prefix, final Executor dataTreeChangeExecutor,
final int maxDataChangeListenerQueueSize, final int submitQueueSize) {
this.prefix = requireNonNull(prefix);
final DataTreeConfiguration treeBaseConfig = treeTypeFor(prefix.getDatastoreType());
final DataTreeConfiguration treeConfig = new DataTreeConfiguration.Builder(treeBaseConfig.getTreeType())
.setMandatoryNodesValidation(treeBaseConfig.isMandatoryNodesValidationEnabled())
.setUniqueIndexes(treeBaseConfig.isUniqueIndexEnabled())
.setRootPath(prefix.getRootIdentifier())
.build();
this.dataTree = new InMemoryDataTreeFactory().create(treeConfig);
this.shardChangePublisher = new InMemoryDOMDataTreeShardChangePublisher(dataTreeChangeExecutor,
maxDataChangeListenerQueueSize, dataTree, prefix.getRootIdentifier(), childShards);
final FastThreadPoolExecutor fte = new FastThreadPoolExecutor(1, submitQueueSize, "Shard[" + prefix + "]",
InMemoryDOMDataTreeShard.class);
fte.setRejectedExecutionHandler(CountingRejectedExecutionHandler.newCallerWaitsPolicy());
this.executor = MoreExecutors.listeningDecorator(fte);
}