Resolve merge conflicts by accepting deletions
This commit is contained in:
22
devops/services/export/seed-rustfs.sh
Normal file
22
devops/services/export/seed-rustfs.sh
Normal file
@@ -0,0 +1,22 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
RUSTFS_ENDPOINT=${RUSTFS_ENDPOINT:-http://localhost:8080}
|
||||
BUCKET=${BUCKET:-export-ci}
|
||||
TMP=$(mktemp)
|
||||
cleanup(){ rm -f "$TMP"; }
|
||||
trap cleanup EXIT
|
||||
|
||||
cat > "$TMP" <<'DATA'
|
||||
{"id":"exp-001","object":"s3://export-ci/sample-export.ndjson","status":"ready"}
|
||||
DATA
|
||||
|
||||
# RustFS uses S3-compatible API
|
||||
export AWS_ACCESS_KEY_ID="${AWS_ACCESS_KEY_ID:-exportci}"
|
||||
export AWS_SECRET_ACCESS_KEY="${AWS_SECRET_ACCESS_KEY:-exportci123}"
|
||||
export AWS_EC2_METADATA_DISABLED=true
|
||||
|
||||
if ! aws --endpoint-url "$RUSTFS_ENDPOINT" s3 ls "s3://$BUCKET" >/dev/null 2>&1; then
|
||||
aws --endpoint-url "$RUSTFS_ENDPOINT" s3 mb "s3://$BUCKET"
|
||||
fi
|
||||
aws --endpoint-url "$RUSTFS_ENDPOINT" s3 cp "$TMP" "s3://$BUCKET/sample-export.ndjson"
|
||||
echo "Seeded $BUCKET/sample-export.ndjson"
|
||||
46
devops/tools/ops-scripts/check-advisory-raw-duplicates.sql
Normal file
46
devops/tools/ops-scripts/check-advisory-raw-duplicates.sql
Normal file
@@ -0,0 +1,46 @@
|
||||
-- Advisory raw duplicate detection query
|
||||
-- Surfaces advisory_raw duplicate candidates prior to enabling the idempotency unique index.
|
||||
-- Intended for staging/offline snapshots.
|
||||
--
|
||||
-- Usage:
|
||||
-- psql -d concelier -f ops/devops/tools/ops-scripts/check-advisory-raw-duplicates.sql
|
||||
--
|
||||
-- Environment variables:
|
||||
-- LIMIT - optional cap on number of duplicate groups to print (default 50).
|
||||
|
||||
\echo '== advisory_raw duplicate audit =='
|
||||
\conninfo
|
||||
|
||||
WITH duplicates AS (
|
||||
SELECT
|
||||
source_vendor,
|
||||
upstream_id,
|
||||
content_hash,
|
||||
tenant,
|
||||
COUNT(*) as count,
|
||||
ARRAY_AGG(id) as ids
|
||||
FROM advisory_raw
|
||||
GROUP BY source_vendor, upstream_id, content_hash, tenant
|
||||
HAVING COUNT(*) > 1
|
||||
ORDER BY COUNT(*) DESC, source_vendor, upstream_id
|
||||
LIMIT COALESCE(NULLIF(:'LIMIT', '')::INT, 50)
|
||||
)
|
||||
SELECT
|
||||
'vendor: ' || source_vendor || E'\n' ||
|
||||
'upstream_id: ' || upstream_id || E'\n' ||
|
||||
'tenant: ' || COALESCE(tenant, 'NULL') || E'\n' ||
|
||||
'content_hash: ' || content_hash || E'\n' ||
|
||||
'count: ' || count || E'\n' ||
|
||||
'ids: ' || ARRAY_TO_STRING(ids, ', ') AS duplicate_info
|
||||
FROM duplicates;
|
||||
|
||||
SELECT CASE WHEN COUNT(*) = 0
|
||||
THEN 'No duplicate advisory_raw documents detected.'
|
||||
ELSE 'Found ' || COUNT(*) || ' duplicate groups.'
|
||||
END as status
|
||||
FROM (
|
||||
SELECT 1 FROM advisory_raw
|
||||
GROUP BY source_vendor, upstream_id, content_hash, tenant
|
||||
HAVING COUNT(*) > 1
|
||||
LIMIT 1
|
||||
) t;
|
||||
60
devops/tools/ops-scripts/rollback-lnm-backfill.sql
Normal file
60
devops/tools/ops-scripts/rollback-lnm-backfill.sql
Normal file
@@ -0,0 +1,60 @@
|
||||
-- Rollback script for LNM-21-102-DEV legacy advisory backfill migration.
|
||||
-- Removes backfilled observations and linksets by querying the backfill_marker field,
|
||||
-- then clears the tombstone markers from advisory_raw.
|
||||
--
|
||||
-- Usage:
|
||||
-- psql -d concelier -f ops/devops/tools/ops-scripts/rollback-lnm-backfill.sql
|
||||
--
|
||||
-- Environment variables:
|
||||
-- DRY_RUN - if set to "1", only reports what would be deleted without making changes.
|
||||
--
|
||||
-- After running this script, delete the migration record:
|
||||
-- DELETE FROM schema_migrations WHERE id = '20251127_lnm_legacy_backfill';
|
||||
--
|
||||
-- Then restart the Concelier service.
|
||||
|
||||
\echo ''
|
||||
\echo '== LNM-21-102-DEV Backfill Rollback =='
|
||||
\conninfo
|
||||
|
||||
-- Count backfilled observations
|
||||
SELECT 'Found ' || COUNT(*) || ' backfilled observations to remove.' as status
|
||||
FROM advisory_observations
|
||||
WHERE backfill_marker = 'lnm_21_102_dev';
|
||||
|
||||
-- Count backfilled linksets
|
||||
SELECT 'Found ' || COUNT(*) || ' backfilled linksets to remove.' as status
|
||||
FROM advisory_linksets
|
||||
WHERE backfill_marker = 'lnm_21_102_dev';
|
||||
|
||||
-- Count advisory_raw tombstone markers
|
||||
SELECT 'Found ' || COUNT(*) || ' advisory_raw documents with tombstone markers to clear.' as status
|
||||
FROM advisory_raw
|
||||
WHERE backfill_marker = 'lnm_21_102_dev';
|
||||
|
||||
-- Only execute if not DRY_RUN
|
||||
\if :{?DRY_RUN}
|
||||
\echo 'DRY RUN mode - no changes made'
|
||||
\echo 'Set DRY_RUN=0 or omit it to execute the rollback'
|
||||
\else
|
||||
-- Step 1: Delete backfilled observations
|
||||
DELETE FROM advisory_observations WHERE backfill_marker = 'lnm_21_102_dev';
|
||||
\echo 'Deleted observations'
|
||||
|
||||
-- Step 2: Delete backfilled linksets
|
||||
DELETE FROM advisory_linksets WHERE backfill_marker = 'lnm_21_102_dev';
|
||||
\echo 'Deleted linksets'
|
||||
|
||||
-- Step 3: Clear tombstone markers from advisory_raw
|
||||
UPDATE advisory_raw SET backfill_marker = NULL WHERE backfill_marker = 'lnm_21_102_dev';
|
||||
\echo 'Cleared tombstone markers'
|
||||
\endif
|
||||
|
||||
\echo ''
|
||||
\echo '== Rollback Summary =='
|
||||
\echo ''
|
||||
\echo 'Next steps:'
|
||||
\echo '1. Delete the migration record:'
|
||||
\echo ' DELETE FROM schema_migrations WHERE id = ''20251127_lnm_legacy_backfill'';'
|
||||
\echo '2. Restart the Concelier service.'
|
||||
\echo ''
|
||||
Reference in New Issue
Block a user