[ONOS-7758] Assume static root node in DynamicConfigStore

Change-Id: I07fcbafa2ccb3e34163735d7d188a7b4a6bc9306
diff --git a/apps/config/src/main/java/org/onosproject/config/impl/DistributedDynamicConfigStore.java b/apps/config/src/main/java/org/onosproject/config/impl/DistributedDynamicConfigStore.java
index c960646..1ae8d46 100644
--- a/apps/config/src/main/java/org/onosproject/config/impl/DistributedDynamicConfigStore.java
+++ b/apps/config/src/main/java/org/onosproject/config/impl/DistributedDynamicConfigStore.java
@@ -145,10 +145,10 @@
         if (spath == null) {
             throw new FailedException("Invalid ResourceId, cannot create Node");
         }
-        if (!spath.equals(ResourceIdParser.ROOT)) {
-            if (completeVersioned(keystore.get(DocumentPath.from(spath))) == null) {
-                throw new FailedException("Node or parent does not exist for " + spath);
-            }
+        if (spath.equals(ResourceIdParser.ROOT) && node == null) {
+            return CompletableFuture.completedFuture(true);
+        } else if (complete(keystore.get(DocumentPath.from(spath))) == null) {
+            throw new FailedException("Node or parent does not exist for " + spath);
         }
         ResourceId abs = ResourceIds.resourceId(parent, node);
         //spath = ResourceIdParser.appendNodeKey(spath, node.key());
diff --git a/apps/config/src/main/java/org/onosproject/config/impl/DynamicConfigManager.java b/apps/config/src/main/java/org/onosproject/config/impl/DynamicConfigManager.java
index cdec56a..3383d50 100644
--- a/apps/config/src/main/java/org/onosproject/config/impl/DynamicConfigManager.java
+++ b/apps/config/src/main/java/org/onosproject/config/impl/DynamicConfigManager.java
@@ -89,16 +89,6 @@
      * Ensure built-in tree nodes exists.
      */
     private void initStore() {
-        store.nodeExist(ResourceIds.ROOT_ID)
-            .thenAccept(exists -> {
-                if (!exists) {
-                    log.info("Root node does not exist!, creating...");
-                    store.addNode(null,
-                                  InnerNode.builder(DeviceResourceIds.ROOT_NAME, DCS_NAMESPACE)
-                                  .type(Type.SINGLE_INSTANCE_NODE).build());
-                }
-            }).join();
-
         store.nodeExist(DeviceResourceIds.DEVICES_ID)
             .thenAccept(exists -> {
                 if (!exists) {
diff --git a/apps/odtn/api/src/main/java/org/onosproject/odtn/utils/tapi/TapiObjectHandler.java b/apps/odtn/api/src/main/java/org/onosproject/odtn/utils/tapi/TapiObjectHandler.java
index a7334c6..4acaf47 100644
--- a/apps/odtn/api/src/main/java/org/onosproject/odtn/utils/tapi/TapiObjectHandler.java
+++ b/apps/odtn/api/src/main/java/org/onosproject/odtn/utils/tapi/TapiObjectHandler.java
@@ -21,6 +21,7 @@
 import org.apache.commons.lang.NotImplementedException;
 import org.onlab.util.XmlString;
 import org.onosproject.config.DynamicConfigService;
+import org.onosproject.config.FailedException;
 import org.onosproject.config.Filter;
 import org.onosproject.yang.gen.v1.tapicommon.rev20180307.tapicommon.Uuid;
 import org.onosproject.yang.model.DataNode;
@@ -222,7 +223,11 @@
         }
         List<DataNode> dataNodes = input.dataNodes();
         for (DataNode node : dataNodes) {
-            dcs.createNode(rid, node);
+            try {
+                dcs.createNode(rid, node);
+            } catch (FailedException e) {
+                log.warn("Failed to add resource", e);
+            }
         }
     }
 
diff --git a/apps/odtn/service/src/main/java/org/onosproject/odtn/internal/DcsBasedTapiTopologyManager.java b/apps/odtn/service/src/main/java/org/onosproject/odtn/internal/DcsBasedTapiTopologyManager.java
index b28c769..659e984 100644
--- a/apps/odtn/service/src/main/java/org/onosproject/odtn/internal/DcsBasedTapiTopologyManager.java
+++ b/apps/odtn/service/src/main/java/org/onosproject/odtn/internal/DcsBasedTapiTopologyManager.java
@@ -23,13 +23,7 @@
 import org.apache.felix.scr.annotations.ReferenceCardinality;
 import org.apache.felix.scr.annotations.Service;
 import org.onosproject.config.DynamicConfigService;
-import org.onosproject.config.FailedException;
-import org.onosproject.config.Filter;
-import org.onosproject.d.config.DeviceResourceIds;
 
-import static org.onosproject.d.config.DeviceResourceIds.DCS_NAMESPACE;
-
-import org.onosproject.d.config.ResourceIds;
 import org.onosproject.net.ConnectPoint;
 import org.onosproject.net.Device;
 import org.onosproject.net.DeviceId;
@@ -50,8 +44,6 @@
 import org.onosproject.yang.gen.v1.tapicommon.rev20180307.tapicommon.DefaultContext;
 import org.onosproject.yang.gen.v1.tapicommon.rev20180307.tapicommon.Uuid;
 import org.onosproject.yang.gen.v1.tapitopology.rev20180307.tapitopology.topologycontext.DefaultTopology;
-import org.onosproject.yang.model.DataNode;
-import org.onosproject.yang.model.InnerNode;
 import org.onosproject.yang.model.ModelConverter;
 import org.slf4j.Logger;
 
@@ -80,7 +72,6 @@
 
     @Activate
     public void activate() {
-        initDcsIfRootNotExist();
         initDcsTapiContext();
         initDcsTapiTopology();
         log.info("Started");
@@ -189,37 +180,4 @@
         topology = topologyHandler.getModelObject();
         topologyHandler.add();
     }
-
-    /**
-     * Setup Dcs configuration tree root node.
-     */
-    // FIXME Dcs seems to setup root node by itself when activatation, this might not needed
-    private void initDcsIfRootNotExist() {
-
-        log.info("read root:");
-        try {
-            DataNode all = dcs.readNode(ResourceIds.ROOT_ID, Filter.builder().build());
-            log.info("all: {}", all);
-        } catch (FailedException e) {
-            // FIXME debug this issue
-            log.info("nothing retrievable in DCS?");
-            //e.printStackTrace(System.out);
-        }
-        if (!dcs.nodeExist(ResourceIds.ROOT_ID)) {
-            log.info("Root node does not exist!, creating...");
-            try {
-                log.info("create 'root' node");
-                dcs.createNode(null,
-                        InnerNode.builder(DeviceResourceIds.ROOT_NAME, DCS_NAMESPACE)
-                                .type(DataNode.Type.SINGLE_INSTANCE_NODE).build());
-            } catch (FailedException e) {
-                log.info("Failed to create root???");
-                //e.printStackTrace(System.out);
-            }
-        }
-        if (!dcs.nodeExist(ResourceIds.ROOT_ID)) {
-            log.info("'root' was created without error, but still not there. WTF!");
-        }
-    }
-
 }