+ if (path.isEmpty()) {
+ writeAllData(checkRootData(data));
+ } else {
+ executeModification(new WriteOperation(path, data));
+ }
+ }
+
+ private void writeAllData(final ContainerNode rootData) {
+ // Open builders for all shards
+ final Map<String, DataContainerNodeBuilder<NodeIdentifier, ContainerNode>> rootBuilders = new HashMap<>();
+ for (String shardName : getActorUtils().getConfiguration().getAllShardNames()) {
+ rootBuilders.put(shardName, Builders.containerBuilder().withNodeIdentifier(rootData.getIdentifier()));
+ }
+
+ // Now distribute children as needed
+ for (DataContainerChild<?, ?> child : rootData.getValue()) {
+ final String shardName = shardNameFromRootChild(child);
+ verifyNotNull(rootBuilders.get(shardName), "Failed to find builder for %s", shardName).addChild(child);
+ }
+
+ // Now dispatch all writes
+ for (Entry<String, DataContainerNodeBuilder<NodeIdentifier, ContainerNode>> entry : rootBuilders.entrySet()) {
+ getContextWrapper(entry.getKey()).maybeExecuteTransactionOperation(new WriteOperation(
+ YangInstanceIdentifier.empty(), entry.getValue().build()));
+ }