From 2bbc2857d5f219deef6873678aac69f97dcdbf33 Mon Sep 17 00:00:00 2001
From: "Rustam Lotsmanenko (EPAM)" <rustam_lotsmanenko@epam.com>
Date: Mon, 20 Jun 2022 09:14:44 +0000
Subject: [PATCH] Fix partition property id

---
 .../templates/configmap-bootstrap.yml         |  1 +
 devops/gcp/configmap/values.yaml              |  1 +
 .../bootstrap/bootstrap_partition.sh          | 36 +++++++++++++++++++
 .../gcp/model/PartitionPropertyEntity.java    | 29 +++++++--------
 .../OsmPartitionPropertyRepository.java       | 25 ++-----------
 .../gcp/service/PartitionServiceImplTest.java |  6 +---
 6 files changed, 54 insertions(+), 44 deletions(-)

diff --git a/devops/gcp/configmap/templates/configmap-bootstrap.yml b/devops/gcp/configmap/templates/configmap-bootstrap.yml
index e7225a6e6..ae34b9160 100644
--- a/devops/gcp/configmap/templates/configmap-bootstrap.yml
+++ b/devops/gcp/configmap/templates/configmap-bootstrap.yml
@@ -9,6 +9,7 @@ data:
   PARTITION_NAME: "{{ .Values.data.partitionName }}"
   SERVICE_ACCOUNT: {{ printf "%s@%s.iam.gserviceaccount.com" .Values.data.datafierSa .Values.data.projectId | quote }}
   DATA_PARTITION_ID: "{{ .Values.data.dataPartitionId }}"
+  PARTITION_CLEAN_UP_ENABLED: "{{ .Values.data.partitionCleanUpEnabled }}"
   ENVIRONMENT: "{{ .Values.data.springProfilesActive }}"
   {{- if .Values.data.dataProjectId }}
   PROJECT_ID: "{{ .Values.data.dataProjectId }}"
diff --git a/devops/gcp/configmap/values.yaml b/devops/gcp/configmap/values.yaml
index d89345f88..2d8977d3c 100644
--- a/devops/gcp/configmap/values.yaml
+++ b/devops/gcp/configmap/values.yaml
@@ -12,6 +12,7 @@ data:
   partitionName: "partition"
   dataPartitionId: ""
   datafierSa: "datafier"
+  partitionCleanUpEnabled: "false"
   # bootstrap variables onprem
   domain: ""
 conf:
diff --git a/provider/partition-gcp/bootstrap/bootstrap_partition.sh b/provider/partition-gcp/bootstrap/bootstrap_partition.sh
index f4de1eebb..7f34736dd 100644
--- a/provider/partition-gcp/bootstrap/bootstrap_partition.sh
+++ b/provider/partition-gcp/bootstrap/bootstrap_partition.sh
@@ -144,6 +144,24 @@ EOF
 if [ "$ENVIRONMENT" == "anthos" ]
 then
 
+  if [ "$PARTITION_CLEAN_UP_ENABLED" == "true" ]
+  then
+    echo "Partition cleanup enabled, will delete partition ${DATA_PARTITION_ID}"
+    delete_status_code=$(curl -X DELETE \
+        --url "http://${PARTITION_NAME}/api/partition/v1/partitions/${DATA_PARTITION_ID}" --write-out "%{http_code}" --silent --output "/dev/null" \
+        -H "Content-Type: application/json")
+
+      if [ "$delete_status_code" == 204 ] || [ "$delete_status_code" == 404 ]
+      then
+        echo "Partition deletion was successful, with status code : ${delete_status_code}"
+      else
+        echo "Not able to delete partition, response status code is : ${delete_status_code}"
+        exit 1
+      fi
+  else
+    echo "Partition cleanup not enabled, skipping deletion"
+  fi
+
   status_code=$(curl -X POST \
     --url "http://${PARTITION_NAME}/api/partition/v1/partitions/${DATA_PARTITION_ID}" --write-out "%{http_code}" --silent --output "/dev/null" \
     -H "Content-Type: application/json" \
@@ -171,6 +189,24 @@ then
 
   IDENTITY_TOKEN=$(gcloud auth print-identity-token --audiences="${AUDIENCES}")
 
+  if [ "$PARTITION_CLEAN_UP_ENABLED" == "true" ]
+  then
+      echo "Partition cleanup enabled, will delete partition ${DATA_PARTITION_ID}"
+      delete_status_code=$(curl -X DELETE \
+        --url "http://${PARTITION_NAME}/api/partition/v1/partitions/${DATA_PARTITION_ID}" --write-out "%{http_code}" --silent --output "/dev/null" \
+        -H "Authorization: Bearer ${IDENTITY_TOKEN}")
+
+      if [ "$delete_status_code" == 204 ] || [ "$delete_status_code" == 404 ]
+      then
+        echo "Partition deletion was successful, with status code : ${delete_status_code}"
+      else
+        echo "Not able to delete partition, response status code is : ${delete_status_code}"
+        exit 1
+      fi
+  else
+    echo "Partition cleanup not enabled, skipping deletion"
+  fi
+
   status_code=$(curl -X POST \
      --url "http://${PARTITION_NAME}/api/partition/v1/partitions/${DATA_PARTITION_ID}" --write-out "%{http_code}" --silent --output "/dev/null" \
      -H "Authorization: Bearer ${IDENTITY_TOKEN}" \
diff --git a/provider/partition-gcp/src/main/java/org/opengroup/osdu/partition/provider/gcp/model/PartitionPropertyEntity.java b/provider/partition-gcp/src/main/java/org/opengroup/osdu/partition/provider/gcp/model/PartitionPropertyEntity.java
index 2b6f20596..4514b3a7b 100644
--- a/provider/partition-gcp/src/main/java/org/opengroup/osdu/partition/provider/gcp/model/PartitionPropertyEntity.java
+++ b/provider/partition-gcp/src/main/java/org/opengroup/osdu/partition/provider/gcp/model/PartitionPropertyEntity.java
@@ -23,29 +23,26 @@ import lombok.NoArgsConstructor;
 import org.opengroup.osdu.partition.model.Property;
 
 @Data
-@NoArgsConstructor
 @AllArgsConstructor
+@NoArgsConstructor
 public class PartitionPropertyEntity {
 
-  private String id;
-
-  private String partitionId;
+    private String id;
 
-  private String name;
+    private String partitionId;
 
-  private Boolean sensitive;
+    private String name;
 
-  private Object value;
+    private Boolean sensitive;
 
+    private Object value;
 
-  public PartitionPropertyEntity(String partitionId, String name, Property property) {
-    this.partitionId = partitionId;
-    this.name = name;
-    this.sensitive = property.isSensitive();
-    this.value = property.getValue();
-  }
 
-  public boolean isSensitive() {
-    return this.sensitive;
-  }
+    public PartitionPropertyEntity(String partitionId, String name, Property property) {
+        this.id = name + "-" + partitionId;
+        this.partitionId = partitionId;
+        this.name = name;
+        this.sensitive = property.isSensitive();
+        this.value = property.getValue();
+    }
 }
diff --git a/provider/partition-gcp/src/main/java/org/opengroup/osdu/partition/provider/gcp/osm/repository/OsmPartitionPropertyRepository.java b/provider/partition-gcp/src/main/java/org/opengroup/osdu/partition/provider/gcp/osm/repository/OsmPartitionPropertyRepository.java
index abbab6e45..5e6621293 100644
--- a/provider/partition-gcp/src/main/java/org/opengroup/osdu/partition/provider/gcp/osm/repository/OsmPartitionPropertyRepository.java
+++ b/provider/partition-gcp/src/main/java/org/opengroup/osdu/partition/provider/gcp/osm/repository/OsmPartitionPropertyRepository.java
@@ -21,7 +21,6 @@ package org.opengroup.osdu.partition.provider.gcp.osm.repository;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.ObjectUtils;
-import org.apache.commons.lang3.RandomUtils;
 import org.opengroup.osdu.core.common.model.http.AppException;
 import org.opengroup.osdu.core.gcp.osm.model.Destination;
 import org.opengroup.osdu.core.gcp.osm.model.query.GetQuery;
@@ -39,7 +38,6 @@ import java.util.List;
 import java.util.Optional;
 import java.util.stream.Collectors;
 
-import static org.opengroup.osdu.core.gcp.osm.model.where.condition.And.and;
 import static org.opengroup.osdu.core.gcp.osm.model.where.predicate.Eq.eq;
 import static org.springframework.http.HttpStatus.INTERNAL_SERVER_ERROR;
 
@@ -50,7 +48,7 @@ import static org.springframework.http.HttpStatus.INTERNAL_SERVER_ERROR;
 public class OsmPartitionPropertyRepository {
 
     public static final String PARTITION_ID_FILED = "partition_id";
-    private static final String NAME_FILED = "name";
+    public static final String PROPERTY_ID = "id";
     private final OsmPartitionDestinationProvider osmPartitionDestinationProvider;
     private final Context context;
 
@@ -64,13 +62,7 @@ public class OsmPartitionPropertyRepository {
     }
 
     public PartitionPropertyEntity findByPartitionIdAndName(String partitionId, String key) {
-        List<PartitionPropertyEntity> propertyEntities = context
-                .getResultsAsList(buildPartitionEntityQueryBy(and(
-                            eq(PARTITION_ID_FILED, partitionId),
-                            eq(NAME_FILED, key))
-                        )
-                );
-        return propertyEntities.stream().findFirst().orElse(null);
+        return context.getOne(buildPartitionEntityQueryBy(eq(PROPERTY_ID, partitionId + "-" + key)));
     }
 
     public List<String> getAllPartitions() {
@@ -114,9 +106,6 @@ public class OsmPartitionPropertyRepository {
         try{
             tx = context.beginTransaction(destination);
             for (PartitionPropertyEntity entity : partitionProperties){
-                if (ObjectUtils.isEmpty(entity.getId())) {
-                    generateAvailableIdFor(entity);
-                }
                 context.upsert(entity, destination);
             }
             tx.commitIfActive();
@@ -128,16 +117,6 @@ public class OsmPartitionPropertyRepository {
         }
     }
 
-    private void generateAvailableIdFor(PartitionPropertyEntity entity) {
-        //TODO Should be removed when GONRG-4077 will be ready
-        Long id = RandomUtils.nextLong();
-        if (ObjectUtils.isNotEmpty(context.getOne(buildPartitionEntityQueryBy(eq("id", id))))){
-            generateAvailableIdFor(entity);
-        } else {
-            entity.setId(id.toString());
-        }
-    }
-
     private GetQuery<PartitionPropertyEntity> buildPartitionEntityQueryBy(Where where){
         return new GetQuery<>(PartitionPropertyEntity.class, osmPartitionDestinationProvider.getDestination(), where);
     }
diff --git a/provider/partition-gcp/src/test/java/org/opengroup/osdu/partition/provider/gcp/service/PartitionServiceImplTest.java b/provider/partition-gcp/src/test/java/org/opengroup/osdu/partition/provider/gcp/service/PartitionServiceImplTest.java
index 1abda3af6..02481f569 100644
--- a/provider/partition-gcp/src/test/java/org/opengroup/osdu/partition/provider/gcp/service/PartitionServiceImplTest.java
+++ b/provider/partition-gcp/src/test/java/org/opengroup/osdu/partition/provider/gcp/service/PartitionServiceImplTest.java
@@ -87,11 +87,7 @@ public class PartitionServiceImplTest {
 
         expectedPartitionInfo.setProperties(properties);
 
-        partitionPropertyEntity = new PartitionPropertyEntity();
-        partitionPropertyEntity.setPartitionId(PARTITION_ID);
-        partitionPropertyEntity.setName(NAME);
-        partitionPropertyEntity.setSensitive(SENSITIVE);
-        partitionPropertyEntity.setValue(VALUE);
+        partitionPropertyEntity = new PartitionPropertyEntity(PARTITION_ID, NAME, property);
 
         List<PartitionPropertyEntity> entities = new ArrayList<>();
         entities.add(partitionPropertyEntity);
-- 
GitLab