Fix to store data for 2 anchors using same model 77/119677/5
authorBruno Sakoto <bruno.sakoto@bell.ca>
Tue, 23 Mar 2021 18:42:00 +0000 (14:42 -0400)
committerRishi Chail <rishi.chail@est.tech>
Wed, 31 Mar 2021 11:18:34 +0000 (11:18 +0000)
This change deletes the database index on fragment table for dataspace
and xpath.

Issue-ID: CPS-300
Signed-off-by: Bruno Sakoto <bruno.sakoto@bell.ca>
Change-Id: I586cc38f7ed00a16f751ed4dbe3b514226c62657

cps-ri/src/main/resources/changelog/changelog-master.yaml
cps-ri/src/main/resources/changelog/db/changes/06-delete-not-required-fragment-index.yaml [new file with mode: 0644]
cps-ri/src/test/groovy/org/onap/cps/spi/impl/CpsDataPersistenceServiceSpec.groovy
cps-ri/src/test/groovy/org/onap/cps/spi/impl/CpsPersistenceSpecBase.groovy

index 6577012..921eeec 100644 (file)
@@ -1,3 +1,19 @@
+# ============LICENSE_START=======================================================
+# Copyright (c) 2021 Bell Canada.
+# ================================================================================
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#       http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+# ============LICENSE_END=========================================================
+
 databaseChangeLog:
   - include:
       file: changelog/db/changes/01-createCPSTables.yaml
@@ -8,4 +24,6 @@ databaseChangeLog:
   - include:
       file: changelog/db/changes/04-loadData-anchor.yaml
   - include:
-      file: changelog/db/changes/05-loadData-fragment.yaml
\ No newline at end of file
+      file: changelog/db/changes/05-loadData-fragment.yaml
+  - include:
+      file: changelog/db/changes/06-delete-not-required-fragment-index.yaml
diff --git a/cps-ri/src/main/resources/changelog/db/changes/06-delete-not-required-fragment-index.yaml b/cps-ri/src/main/resources/changelog/db/changes/06-delete-not-required-fragment-index.yaml
new file mode 100644 (file)
index 0000000..bfb0cf4
--- /dev/null
@@ -0,0 +1,35 @@
+# ============LICENSE_START=======================================================
+# Copyright (c) 2021 Bell Canada.
+# ================================================================================
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#       http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+# ============LICENSE_END=========================================================
+
+databaseChangeLog:
+  - changeSet:
+      id: 6
+      author: cps
+      comment: Drop unique index for dataspace and xpath on fragment table
+      changes:
+        - dropIndex:
+            indexName: UQ_FRAGMENT_XPATH
+            tableName: fragment
+      rollback:
+        - createIndex:
+            columns:
+              - column:
+                  name: xpath
+              - column:
+                  name: dataspace_id
+            indexName: UQ_FRAGMENT_XPATH
+            tableName: fragment
+            unique: true
index 51f7809..231a572 100644 (file)
@@ -2,6 +2,7 @@
  * ============LICENSE_START=======================================================
  *  Copyright (C) 2021 Nordix Foundation
  *  Modifications Copyright (C) 2021 Pantheon.tech
+ *  Modifications Copyright (C) 2021 Bell Canada.
  *  ================================================================================
  *  Licensed under the Apache License, Version 2.0 (the "License");
  *  you may not use this file except in compliance with the License.
@@ -91,6 +92,22 @@ class CpsDataPersistenceServiceSpec extends CpsPersistenceSpecBase {
             grandchildFragment.xpath == grandChildXpath
     }
 
+    @Sql([CLEAR_DATA, SET_DATA])
+    def 'Store data node for multiple anchors using the same schema.'() {
+        def xpath = "/parent-new"
+        given: 'a fragment is stored for an anchor'
+            objectUnderTest.storeDataNode(DATASPACE_NAME, ANCHOR_NAME1, createDataNodeTree(xpath))
+        when: 'another fragment is stored for an other anchor, using the same schema set'
+            objectUnderTest.storeDataNode(DATASPACE_NAME, ANCHOR_NAME3, createDataNodeTree(xpath))
+        then: 'both fragments can be retrieved by their xpath'
+            def fragment1 = getFragmentByXpath(DATASPACE_NAME, ANCHOR_NAME1, xpath)
+            fragment1.anchor.name == ANCHOR_NAME1
+            fragment1.xpath == xpath
+            def fragment2 = getFragmentByXpath(DATASPACE_NAME, ANCHOR_NAME3, xpath)
+            fragment2.anchor.name == ANCHOR_NAME3
+            fragment2.xpath == xpath
+    }
+
     @Unroll
     @Sql([CLEAR_DATA, SET_DATA])
     def 'Store datanode error scenario: #scenario.'() {
index c8a8b9b..4ef068a 100644 (file)
@@ -2,6 +2,7 @@
  * ============LICENSE_START=======================================================
  *  Copyright (C) 2021 Nordix Foundation
  *  Modifications Copyright (C) 2021 Pantheon.tech
+ *  Modifications Copyright (C) 2021 Bell Canada.
  *  ================================================================================
  *  Licensed under the Apache License, Version 2.0 (the 'License');
  *  you may not use this file except in compliance with the License.
@@ -57,6 +58,7 @@ class CpsPersistenceSpecBase extends Specification {
     static final String SCHEMA_SET_NAME2 = 'SCHEMA-SET-002'
     static final String ANCHOR_NAME1 = 'ANCHOR-001'
     static final String ANCHOR_NAME2 = 'ANCHOR-002'
+    static final String ANCHOR_NAME3 = 'ANCHOR-003'
     static final String ANCHOR_FOR_DATA_NODES_WITH_LEAVES = 'ANCHOR-003'
 
 }