From f941d481cf954aa8eadfc639ff5e790a5b7c806e Mon Sep 17 00:00:00 2001
From: Jorge Camarero Vera <jorge.camarero@cern.ch>
Date: Wed, 16 Nov 2022 17:30:24 +0100
Subject: [PATCH] Resolve "Fix `cta-catalogue-schema-verify` checking of NOT
 NULL constraints in Postgres"

---
 ReleaseNotes.md                               |  1 +
 .../liquibase/postgres/4.6to10.0.sql          | 26 +++++++++----------
 .../cc7/opt/run/bin/dbupdatetest.sh           |  3 +--
 .../orchestration/tests/update_db_test.sh     |  5 ++++
 4 files changed, 20 insertions(+), 15 deletions(-)

diff --git a/ReleaseNotes.md b/ReleaseNotes.md
index 20178a3694..53f28c0b8f 100644
--- a/ReleaseNotes.md
+++ b/ReleaseNotes.md
@@ -6,6 +6,7 @@
 - cta/CTA#201 - Improve error message when oracle configured without oracle support
 - cta/CTA#203 - Refactor cta-restore-deletes-files by using the connection configuration class in standalone_cli_tools/common
 ### Bug fixes
+- cta/CTA#13 - Fix `cta-catalogue-schema-verify` checking of NOT NULL constraints in Postgres
 - cta/CTA#209 - handle if $HOME is not defined when choosing config file for cta-admin
 
 # v4.7.13-3
diff --git a/catalogue/migrations/liquibase/postgres/4.6to10.0.sql b/catalogue/migrations/liquibase/postgres/4.6to10.0.sql
index b253a16eaa..d8eb7d103d 100644
--- a/catalogue/migrations/liquibase/postgres/4.6to10.0.sql
+++ b/catalogue/migrations/liquibase/postgres/4.6to10.0.sql
@@ -19,14 +19,14 @@ ALTER TABLE TAPE ADD LABEL_FORMAT CHAR(1);
 --rollback ALTER TABLE TAPE DROP COLUMN VERIFICATION_STATUS;
 --rollback ALTER TABLE TAPE DROP COLUMN LABEL_FORMAT;
 
---changeset mdavis:2 failOnError:true dbms:postgresql
+--changeset mdavis:3 failOnError:true dbms:postgresql
 --preconditions onFail:MARK_RAN onError:MARK_RAN
 --precondition-sql-check expectedResult:"4.6" SELECT CONCAT(CONCAT(CAST(SCHEMA_VERSION_MAJOR as VARCHAR(10)),'.'), CAST(SCHEMA_VERSION_MINOR AS VARCHAR(10))) AS CATALOGUE_VERSION FROM CTA_CATALOGUE;
 --precondition-sql-check expectedResult:0 SELECT COUNT(*) FROM USER_INDEXES WHERE INDEX_NAME = 'ARCHIVE_FILE_SCI_IDX'
 CREATE INDEX ARCHIVE_FILE_SCI_IDX ON ARCHIVE_FILE(STORAGE_CLASS_ID);
 --rollback DROP INDEX ARCHIVE_FILE_SCI_IDX;
 
---changeset mdavis:3 failOnError:true dbms:postgresql
+--changeset mdavis:4 failOnError:true dbms:postgresql
 --preconditions onFail:HALT onError:HALT
 --precondition-sql-check expectedResult:"4.6" SELECT CONCAT(CONCAT(CAST(SCHEMA_VERSION_MAJOR as VARCHAR(10)),'.'), CAST(SCHEMA_VERSION_MINOR AS VARCHAR(10))) AS CATALOGUE_VERSION FROM CTA_CATALOGUE;
 ALTER TABLE VIRTUAL_ORGANIZATION DROP CONSTRAINT VIRTUAL_ORGANIZATION_VON_UN;
@@ -102,10 +102,10 @@ ALTER TABLE LOGICAL_LIBRARY ADD DISABLED_REASON VARCHAR(1000);
 --preconditions onFail:HALT onError:HALT
 --precondition-sql-check expectedResult:"4.6" SELECT CONCAT(CONCAT(CAST(SCHEMA_VERSION_MAJOR as VARCHAR(10)),'.'), CAST(SCHEMA_VERSION_MINOR AS VARCHAR(10))) AS CATALOGUE_VERSION FROM CTA_CATALOGUE;
 --precondition-sql-check expectedResult:"0" SELECT COUNT(*) FROM VIRTUAL_ORGANIZATION WHERE DISK_INSTANCE_NAME NOT IN (SELECT DISK_INSTANCE_NAME FROM DISK_INSTANCE);
-ALTER TABLE VIRTUAL_ORGANIZATION ADD CONSTRAINT VIRTUAL_ORGANIZATION_DIN_NN CHECK (DISK_INSTANCE_NAME IS NOT NULL);
+ALTER TABLE VIRTUAL_ORGANIZATION ALTER COLUMN DISK_INSTANCE_NAME SET NOT NULL;
 ALTER TABLE VIRTUAL_ORGANIZATION ADD CONSTRAINT VIRTUAL_ORGANIZATION_DIN_FK FOREIGN KEY(DISK_INSTANCE_NAME) REFERENCES DISK_INSTANCE(DISK_INSTANCE_NAME);
 CREATE INDEX VIRTUAL_ORG_DIN_IDX ON VIRTUAL_ORGANIZATION(DISK_INSTANCE_NAME);
---rollback ALTER TABLE VIRTUAL_ORGANIZATION DROP CONSTRAINT VIRTUAL_ORGANIZATION_DIN_NN;
+--rollback ALTER TABLE VIRTUAL_ORGANIZATION ALTER COLUMN DISK_INSTANCE_NAME DROP NOT NULL;
 --rollback ALTER TABLE VIRTUAL_ORGANIZATION DROP CONSTRAINT VIRTUAL_ORGANIZATION_DIN_FK;
 --rollback DROP INDEX VIRTUAL_ORG_DIN_IDX;
 
@@ -148,17 +148,17 @@ ALTER TABLE ARCHIVE_FILE ADD CONSTRAINT ARCHIVE_FILE_DIN_FK FOREIGN KEY(DISK_INS
 --precondition-sql-check expectedResult:"4.6" SELECT CONCAT(CONCAT(CAST(SCHEMA_VERSION_MAJOR as VARCHAR(10)),'.'), CAST(SCHEMA_VERSION_MINOR AS VARCHAR(10))) AS CATALOGUE_VERSION FROM CTA_CATALOGUE;
 ALTER TABLE DISK_SYSTEM ALTER COLUMN FREE_SPACE_QUERY_URL DROP NOT NULL;
 ALTER TABLE DISK_SYSTEM ALTER COLUMN REFRESH_INTERVAL DROP NOT NULL;
-ALTER TABLE DISK_SYSTEM ADD CONSTRAINT DISK_SYSTEM_DIN_NN CHECK (DISK_INSTANCE_NAME IS NOT NULL);
-ALTER TABLE DISK_SYSTEM ADD CONSTRAINT DISK_SYSTEM_DISN_NN CHECK (DISK_INSTANCE_SPACE_NAME IS NOT NULL);
+ALTER TABLE DISK_SYSTEM ALTER COLUMN DISK_INSTANCE_NAME SET NOT NULL;
+ALTER TABLE DISK_SYSTEM ALTER COLUMN DISK_INSTANCE_SPACE_NAME SET NOT NULL;
 ALTER TABLE DISK_SYSTEM ADD CONSTRAINT DISK_SYSTEM_DIN_DISN_FK FOREIGN KEY(DISK_INSTANCE_NAME, DISK_INSTANCE_SPACE_NAME) REFERENCES DISK_INSTANCE_SPACE(DISK_INSTANCE_NAME, DISK_INSTANCE_SPACE_NAME);
---rollback ALTER TABLE DISK_SYSTEM ADD CONSTRAINT DISK_SYSTEM_FSQU_NN CHECK (FREE_SPACE_QUERY_URL IS NOT NULL);
---rollback ALTER TABLE DISK_SYSTEM ADD CONSTRAINT DISK_SYSTEM_RI_NN CHECK (REFRESH_INTERVAL IS NOT NULL);
---rollback ALTER TABLE DISK_SYSTEM DROP CONSTRAINT DISK_SYSTEM_DIN_NN;
---rollback ALTER TABLE DISK_SYSTEM DROP CONSTRAINT DISK_SYSTEM_DISN_NN;
+--rollback ALTER TABLE DISK_SYSTEM ALTER COLUMN FREE_SPACE_QUERY_URL SET NOT NULL;
+--rollback ALTER TABLE DISK_SYSTEM ALTER COLUMN REFRESH_INTERVAL SET NOT NULL;
+--rollback ALTER TABLE DISK_SYSTEM ALTER COLUMN DISK_INSTANCE_NAME DROP NOT NULL;
+--rollback ALTER TABLE DISK_SYSTEM ALTER COLUMN DISK_INSTANCE_SPACE_NAME DROP NOT NULL;
 --rollback ALTER TABLE DISK_SYSTEM DROP CONSTRAINT DISK_SYSTEM_DIN_DISN_FK;
 
 
---changeset mdavis:4 failOnError:true dbms:postgresql
+--changeset mdavis:13 failOnError:true dbms:postgresql
 --preconditions onFail:HALT onError:HALT
 --precondition-sql-check expectedResult:"4.6" SELECT CONCAT(CONCAT(CAST(SCHEMA_VERSION_MAJOR as VARCHAR(10)),'.'), CAST(SCHEMA_VERSION_MINOR AS VARCHAR(10))) AS CATALOGUE_VERSION FROM CTA_CATALOGUE;
 DROP TABLE TAPE_DRIVE;
@@ -218,7 +218,7 @@ DROP TABLE TAPE_DRIVE;
 --rollback   'MOUNTING', 'TRANSFERING', 'UNLOADING', 'UNMOUNTING', 'DRAININGTODISK', 'CLEANINGUP', 'SHUTDOWN', 'UNKNOWN'))
 --rollback );
 
---changeset mvelosob:13 failOnError:true dbms:postgresql
+--changeset mvelosob:14 failOnError:true dbms:postgresql
 --preconditions onFail:HALT onError:HALT
 --precondition-sql-check expectedResult:"4.6" SELECT CONCAT(CONCAT(CAST(SCHEMA_VERSION_MAJOR as VARCHAR(10)),'.'), CAST(SCHEMA_VERSION_MINOR AS VARCHAR(10))) AS CATALOGUE_VERSION FROM CTA_CATALOGUE;
 DROP TABLE ACTIVITIES_WEIGHTS;
@@ -236,7 +236,7 @@ DROP TABLE ACTIVITIES_WEIGHTS;
 --rollback );
 
 
---changeset mvelosob:14 failOnError:true dbms:postgresql
+--changeset mvelosob:15 failOnError:true dbms:postgresql
 --preconditions onFail:HALT onError:HALT
 --precondition-sql-check expectedResult:"4.6" SELECT CONCAT(CONCAT(CAST(SCHEMA_VERSION_MAJOR as VARCHAR(10)),'.'), CAST(SCHEMA_VERSION_MINOR AS VARCHAR(10))) AS CATALOGUE_VERSION FROM CTA_CATALOGUE;
 UPDATE CTA_CATALOGUE SET SCHEMA_VERSION_MAJOR=10;
diff --git a/continuousintegration/docker/ctafrontend/cc7/opt/run/bin/dbupdatetest.sh b/continuousintegration/docker/ctafrontend/cc7/opt/run/bin/dbupdatetest.sh
index 9323b80137..fa230c4b1e 100755
--- a/continuousintegration/docker/ctafrontend/cc7/opt/run/bin/dbupdatetest.sh
+++ b/continuousintegration/docker/ctafrontend/cc7/opt/run/bin/dbupdatetest.sh
@@ -43,8 +43,7 @@ yum install --assumeyes wget libaio;
 mkdir -p /shared/etc_cta;
 echo ${DATABASEURL} &> /shared/etc_cta/cta-catalogue.conf;
 
-echo $CTA_VERSION
-
+cd /root
 if [[ $CTA_VERSION ]]
 then
   echo "CTA_VERSION"
diff --git a/continuousintegration/orchestration/tests/update_db_test.sh b/continuousintegration/orchestration/tests/update_db_test.sh
index 1e8cb81279..0a6932fa3f 100755
--- a/continuousintegration/orchestration/tests/update_db_test.sh
+++ b/continuousintegration/orchestration/tests/update_db_test.sh
@@ -22,6 +22,8 @@ EOF
 exit 1
 }
 
+die() { echo "$@" 1>&2 ; exit 1; }
+
 CTA_VERSION=""
 
 while getopts "n:v:" o; do
@@ -103,6 +105,9 @@ else
   exit 1
 fi
 
+# Check if cta-catalogue-schema-verify has a successing output
+kubectl -n ${NAMESPACE} exec ctafrontend -- cta-catalogue-schema-verify /etc/cta/cta-catalogue.conf || die "Error verifying catalogue"
+
 # If the previous and new schema has same major version, we can run a simple archive-retrieve test
 PREVIOUS_MAJOR=$(echo ${PREVIOUS_SCHEMA_VERSION} | cut -d. -f1)
 if [ "${MAJOR}" == "${PREVIOUS_MAJOR}" ] ; then
-- 
GitLab