diff --git a/CHANGELOG.md b/CHANGELOG.md index db7aa0e5de..768c04969c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -50,6 +50,7 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/). - [#6780](https://github.com/apache/trafficcontrol/issues/6780) Fixed t3c to use secondary parents when there are no primary parents available. - Correction where using the placeholder __HOSTNAME__ in "unknown" files (others than the defaults ones), was being replaced by the full FQDN instead of the shot hostname. - [#6800](https://github.com/apache/trafficcontrol/issues/6800) Fixed incorrect error message for `/server/details` associated with query parameters. +- [#6712](https://github.com/apache/trafficcontrol/issues/6712) - Fixed error when loading the Traffic Vault schema from `create_tables.sql` more than once. ### Removed - Remove traffic\_portal dependencies to mitigate `npm audit` issues, specifically `grunt-concurrent`, `grunt-contrib-concat`, `grunt-contrib-cssmin`, `grunt-contrib-jsmin`, `grunt-contrib-uglify`, `grunt-contrib-htmlmin`, `grunt-newer`, and `grunt-wiredep` diff --git a/traffic_ops/app/db/trafficvault/create_tables.sql b/traffic_ops/app/db/trafficvault/create_tables.sql index 2fcb97e8bd..20c2a559b0 100644 --- a/traffic_ops/app/db/trafficvault/create_tables.sql +++ b/traffic_ops/app/db/trafficvault/create_tables.sql @@ -110,86 +110,102 @@ CREATE TABLE IF NOT EXISTS url_sig_key ( ALTER TABLE url_sig_key OWNER TO traffic_vault; --- --- Name: dnssec dnssec_pkey; Type: CONSTRAINT; Schema: public; Owner: traffic_vault --- +DO $$ BEGIN +IF NOT EXISTS (SELECT FROM information_schema.table_constraints WHERE constraint_name = 'dnssec_pkey' AND table_name = 'dnssec') THEN + -- + -- Name: dnssec dnssec_pkey; Type: CONSTRAINT; Schema: public; Owner: traffic_vault + -- -ALTER TABLE ONLY dnssec - ADD CONSTRAINT dnssec_pkey PRIMARY KEY (cdn); + ALTER TABLE ONLY dnssec + ADD CONSTRAINT dnssec_pkey PRIMARY KEY (cdn); +END IF; --- --- Name: sslkey sslkey_pkey; Type: CONSTRAINT; Schema: public; Owner: traffic_vault --- +IF NOT EXISTS (SELECT FROM information_schema.table_constraints WHERE constraint_name = 'sslkey_pkey' AND table_name = 'sslkey') THEN + -- + -- Name: sslkey sslkey_pkey; Type: CONSTRAINT; Schema: public; Owner: traffic_vault + -- -ALTER TABLE ONLY sslkey - ADD CONSTRAINT sslkey_pkey PRIMARY KEY (deliveryservice, cdn, version); + ALTER TABLE ONLY sslkey + ADD CONSTRAINT sslkey_pkey PRIMARY KEY (deliveryservice, cdn, version); +END IF; +IF NOT EXISTS (SELECT FROM information_schema.table_constraints WHERE constraint_name = 'uri_signing_key_pkey' AND table_name = 'uri_signing_key') THEN + -- + -- Name: uri_signing_key uri_signing_key_pkey; Type: CONSTRAINT; Schema: public; Owner: traffic_vault + -- --- --- Name: uri_signing_key uri_signing_key_pkey; Type: CONSTRAINT; Schema: public; Owner: traffic_vault --- - -ALTER TABLE ONLY uri_signing_key - ADD CONSTRAINT uri_signing_key_pkey PRIMARY KEY (deliveryservice); + ALTER TABLE ONLY uri_signing_key + ADD CONSTRAINT uri_signing_key_pkey PRIMARY KEY (deliveryservice); +END IF; +IF NOT EXISTS (SELECT FROM information_schema.table_constraints WHERE constraint_name = 'url_sig_key_pkey' AND table_name = 'url_sig_key') THEN + -- + -- Name: url_sig_key url_sig_key_pkey; Type: CONSTRAINT; Schema: public; Owner: traffic_vault + -- --- --- Name: url_sig_key url_sig_key_pkey; Type: CONSTRAINT; Schema: public; Owner: traffic_vault --- - -ALTER TABLE ONLY url_sig_key - ADD CONSTRAINT url_sig_key_pkey PRIMARY KEY (deliveryservice); - - --- --- Name: sslkey_cdn_idx; Type: INDEX; Schema: public; Owner: traffic_vault --- + ALTER TABLE ONLY url_sig_key + ADD CONSTRAINT url_sig_key_pkey PRIMARY KEY (deliveryservice); +END IF; -CREATE INDEX sslkey_cdn_idx ON sslkey USING btree (cdn); +IF EXISTS (SELECT FROM information_schema.columns WHERE table_name = 'sslkey' AND column_name = 'cdn') THEN + -- + -- Name: sslkey_cdn_idx; Type: INDEX; Schema: public; Owner: traffic_vault + -- + CREATE INDEX IF NOT EXISTS sslkey_cdn_idx ON sslkey USING btree (cdn); +END IF; --- --- Name: sslkey_deliveryservice_idx; Type: INDEX; Schema: public; Owner: traffic_vault --- +IF EXISTS (SELECT FROM information_schema.columns WHERE table_name = 'sslkey' AND column_name = 'deliveryservice') THEN + -- + -- Name: sslkey_deliveryservice_idx; Type: INDEX; Schema: public; Owner: traffic_vault + -- -CREATE INDEX sslkey_deliveryservice_idx ON sslkey USING btree (deliveryservice); + CREATE INDEX IF NOT EXISTS sslkey_deliveryservice_idx ON sslkey USING btree (deliveryservice); +END IF; --- --- Name: sslkey_version_idx; Type: INDEX; Schema: public; Owner: traffic_vault --- +IF EXISTS (SELECT FROM information_schema.columns WHERE table_name = 'sslkey' AND column_name = 'version') THEN + -- + -- Name: sslkey_version_idx; Type: INDEX; Schema: public; Owner: traffic_vault + -- -CREATE INDEX sslkey_version_idx ON sslkey USING btree (version); + CREATE INDEX IF NOT EXISTS sslkey_version_idx ON sslkey USING btree (version); +END IF; +END$$; -- -- Name: dnssec dnssec_last_updated; Type: TRIGGER; Schema: public; Owner: traffic_vault -- - -CREATE TRIGGER dnssec_last_updated BEFORE UPDATE ON dnssec FOR EACH ROW EXECUTE PROCEDURE on_update_current_timestamp_last_updated(); - +DROP TRIGGER IF EXISTS dnssec_last_updated ON dnssec; +CREATE TRIGGER dnssec_last_updated + BEFORE UPDATE ON dnssec + FOR EACH ROW EXECUTE PROCEDURE on_update_current_timestamp_last_updated(); -- -- Name: sslkey sslkey_last_updated; Type: TRIGGER; Schema: public; Owner: traffic_vault -- - -CREATE TRIGGER sslkey_last_updated BEFORE UPDATE ON sslkey FOR EACH ROW EXECUTE PROCEDURE on_update_current_timestamp_last_updated(); - +DROP TRIGGER IF EXISTS sslkey_last_updated on sslkey; +CREATE TRIGGER sslkey_last_updated + BEFORE UPDATE ON sslkey + FOR EACH ROW EXECUTE PROCEDURE on_update_current_timestamp_last_updated(); -- -- Name: uri_signing_key uri_signing_key_last_updated; Type: TRIGGER; Schema: public; Owner: traffic_vault -- - -CREATE TRIGGER uri_signing_key_last_updated BEFORE UPDATE ON uri_signing_key FOR EACH ROW EXECUTE PROCEDURE on_update_current_timestamp_last_updated(); - +DROP TRIGGER IF EXISTS uri_signing_key_last_updated on uri_signing_key; +CREATE TRIGGER uri_signing_key_last_updated + BEFORE UPDATE ON uri_signing_key + FOR EACH ROW EXECUTE PROCEDURE on_update_current_timestamp_last_updated(); -- -- Name: url_sig_key url_sig_key_last_updated; Type: TRIGGER; Schema: public; Owner: traffic_vault -- - -CREATE TRIGGER url_sig_key_last_updated BEFORE UPDATE ON url_sig_key FOR EACH ROW EXECUTE PROCEDURE on_update_current_timestamp_last_updated(); - +DROP TRIGGER IF EXISTS url_sig_key_last_updated on url_sig_key; +CREATE TRIGGER url_sig_key_last_updated + BEFORE UPDATE ON url_sig_key + FOR EACH ROW EXECUTE PROCEDURE on_update_current_timestamp_last_updated(); -- -- PostgreSQL database dump complete diff --git a/traffic_ops/app/db/trafficvault/test/run-tvdb-test.sh b/traffic_ops/app/db/trafficvault/test/run-tvdb-test.sh index 9dab7f4f65..dd6218540c 100755 --- a/traffic_ops/app/db/trafficvault/test/run-tvdb-test.sh +++ b/traffic_ops/app/db/trafficvault/test/run-tvdb-test.sh @@ -105,6 +105,12 @@ fi ./db/admin --trafficvault --env=production upgrade || { echo "DB upgrade failed!"; exit 1; } +if ! ./db/admin --trafficvault -env=production load_schema || + ! ./db/admin --trafficvault -env=production load_schema; then + echo 'Could not re-run create_tables.sql!' + exit 1 +fi; + # insert some dummy TVDB data, run db/reencrypt/reencrypt to test it sslkey_data=$(cat /sslkey.dat) dnssec_data=$(cat /dnssec.dat)