mirror of
https://github.com/open-metadata/OpenMetadata
synced 2026-05-24 09:39:11 +00:00
117 lines
5.3 KiB
MySQL
117 lines
5.3 KiB
MySQL
|
|
-- Post data migration script for Task System Redesign - OpenMetadata 2.0.0
|
||
|
|
-- This script runs after the data migration completes
|
||
|
|
|
||
|
|
-- =====================================================
|
||
|
|
-- NOTE: Suggestion migration (suggestions → task_entity),
|
||
|
|
-- thread-based task migration (thread_entity → task_entity),
|
||
|
|
-- and legacy system activity migration
|
||
|
|
-- (thread_entity generated feed rows → activity_stream)
|
||
|
|
-- are handled in Java MigrationUtil because they require
|
||
|
|
-- entity-link aware transformation logic.
|
||
|
|
-- =====================================================
|
||
|
|
|
||
|
|
-- =====================================================
|
||
|
|
-- PHASE 2D: Migrate announcements from thread_entity → announcement_entity
|
||
|
|
-- =====================================================
|
||
|
|
INSERT INTO announcement_entity (id, json, fqnHash)
|
||
|
|
SELECT
|
||
|
|
a_id AS id,
|
||
|
|
a_json AS json,
|
||
|
|
a_fqnHash AS fqnHash
|
||
|
|
FROM (
|
||
|
|
SELECT
|
||
|
|
JSON_UNQUOTE(JSON_EXTRACT(t.json, '$.id')) AS a_id,
|
||
|
|
JSON_OBJECT(
|
||
|
|
'id', JSON_UNQUOTE(JSON_EXTRACT(t.json, '$.id')),
|
||
|
|
'name', CONCAT('announcement-', JSON_UNQUOTE(JSON_EXTRACT(t.json, '$.id'))),
|
||
|
|
'fullyQualifiedName', CONCAT('announcement-', JSON_UNQUOTE(JSON_EXTRACT(t.json, '$.id'))),
|
||
|
|
'displayName', NULLIF(JSON_UNQUOTE(JSON_EXTRACT(t.json, '$.message')), ''),
|
||
|
|
'description', COALESCE(
|
||
|
|
JSON_UNQUOTE(JSON_EXTRACT(t.json, '$.announcement.description')),
|
||
|
|
JSON_UNQUOTE(JSON_EXTRACT(t.json, '$.message')),
|
||
|
|
''
|
||
|
|
),
|
||
|
|
'entityLink', JSON_UNQUOTE(JSON_EXTRACT(t.json, '$.about')),
|
||
|
|
'startTime', CAST(JSON_UNQUOTE(JSON_EXTRACT(t.json, '$.announcement.startTime')) AS UNSIGNED),
|
||
|
|
'endTime', CAST(JSON_UNQUOTE(JSON_EXTRACT(t.json, '$.announcement.endTime')) AS UNSIGNED),
|
||
|
|
'status', CASE
|
||
|
|
WHEN CAST(JSON_UNQUOTE(JSON_EXTRACT(t.json, '$.announcement.endTime')) AS UNSIGNED) < UNIX_TIMESTAMP() * 1000
|
||
|
|
THEN 'Expired'
|
||
|
|
WHEN CAST(JSON_UNQUOTE(JSON_EXTRACT(t.json, '$.announcement.startTime')) AS UNSIGNED) > UNIX_TIMESTAMP() * 1000
|
||
|
|
THEN 'Scheduled'
|
||
|
|
ELSE 'Active'
|
||
|
|
END,
|
||
|
|
'createdBy', JSON_UNQUOTE(JSON_EXTRACT(t.json, '$.createdBy')),
|
||
|
|
'updatedBy', COALESCE(JSON_UNQUOTE(JSON_EXTRACT(t.json, '$.updatedBy')), JSON_UNQUOTE(JSON_EXTRACT(t.json, '$.createdBy'))),
|
||
|
|
'createdAt', CAST(JSON_UNQUOTE(JSON_EXTRACT(t.json, '$.threadTs')) AS UNSIGNED),
|
||
|
|
'updatedAt', CAST(
|
||
|
|
COALESCE(
|
||
|
|
JSON_UNQUOTE(JSON_EXTRACT(t.json, '$.updatedAt')),
|
||
|
|
JSON_UNQUOTE(JSON_EXTRACT(t.json, '$.threadTs'))
|
||
|
|
) AS UNSIGNED
|
||
|
|
),
|
||
|
|
'deleted', false,
|
||
|
|
'version', 0.1,
|
||
|
|
'reactions', COALESCE(JSON_EXTRACT(t.json, '$.reactions'), JSON_ARRAY())
|
||
|
|
) AS a_json,
|
||
|
|
MD5(CONCAT('announcement-', JSON_UNQUOTE(JSON_EXTRACT(t.json, '$.id')))) AS a_fqnHash
|
||
|
|
FROM thread_entity t
|
||
|
|
WHERE JSON_UNQUOTE(JSON_EXTRACT(t.json, '$.type')) = 'Announcement'
|
||
|
|
AND NOT EXISTS (
|
||
|
|
SELECT 1 FROM announcement_entity a WHERE a.id = JSON_UNQUOTE(JSON_EXTRACT(t.json, '$.id'))
|
||
|
|
)
|
||
|
|
) migrated;
|
||
|
|
|
||
|
|
-- =====================================================
|
||
|
|
-- PHASE 2E: Rename legacy thread storage to fail stale references
|
||
|
|
-- =====================================================
|
||
|
|
SET @thread_entity_exists = (
|
||
|
|
SELECT COUNT(*)
|
||
|
|
FROM information_schema.tables
|
||
|
|
WHERE table_schema = DATABASE()
|
||
|
|
AND table_name = 'thread_entity'
|
||
|
|
);
|
||
|
|
|
||
|
|
SET @thread_entity_legacy_exists = (
|
||
|
|
SELECT COUNT(*)
|
||
|
|
FROM information_schema.tables
|
||
|
|
WHERE table_schema = DATABASE()
|
||
|
|
AND table_name = 'thread_entity_legacy'
|
||
|
|
);
|
||
|
|
|
||
|
|
SET @rename_thread_entity_sql = IF(
|
||
|
|
@thread_entity_exists = 1 AND @thread_entity_legacy_exists = 0,
|
||
|
|
'RENAME TABLE thread_entity TO thread_entity_legacy',
|
||
|
|
'SELECT 1'
|
||
|
|
);
|
||
|
|
|
||
|
|
PREPARE rename_thread_entity_stmt FROM @rename_thread_entity_sql;
|
||
|
|
EXECUTE rename_thread_entity_stmt;
|
||
|
|
DEALLOCATE PREPARE rename_thread_entity_stmt;
|
||
|
|
|
||
|
|
-- =====================================================
|
||
|
|
-- PHASE 2F: Lower workflow trigger polling intervals
|
||
|
|
-- =====================================================
|
||
|
|
-- Reduce WorkflowEventConsumer poll interval from 10s to 1s.
|
||
|
|
-- The legacy 10s default added up to a 10s wait between an entity change and the
|
||
|
|
-- workflow-triggered approval task being created. On CI under resource pressure this
|
||
|
|
-- often drifted to >2 minutes when combined with Flowable's 60s async job poll. The
|
||
|
|
-- new value keeps the trigger pipeline near-real-time.
|
||
|
|
UPDATE event_subscription_entity
|
||
|
|
SET json = JSON_SET(json, '$.pollInterval', 1)
|
||
|
|
WHERE name = 'WorkflowEventConsumer'
|
||
|
|
AND CAST(JSON_EXTRACT(json, '$.pollInterval') AS UNSIGNED) > 1;
|
||
|
|
|
||
|
|
-- Lower Flowable async/timer job acquisition intervals to keep workflow-driven
|
||
|
|
-- task creation responsive. The previous 60s default was a Flowable production setting
|
||
|
|
-- carried over verbatim; for OpenMetadata's interactive task UX we want sub-second pickup.
|
||
|
|
UPDATE openmetadata_settings
|
||
|
|
SET json = JSON_SET(
|
||
|
|
JSON_SET(json, '$.executorConfiguration.asyncJobAcquisitionInterval', 1000),
|
||
|
|
'$.executorConfiguration.timerJobAcquisitionInterval', 5000)
|
||
|
|
WHERE configType = 'workflowSettings'
|
||
|
|
AND JSON_EXTRACT(json, '$.executorConfiguration') IS NOT NULL
|
||
|
|
AND (CAST(JSON_EXTRACT(json, '$.executorConfiguration.asyncJobAcquisitionInterval') AS UNSIGNED) > 1000
|
||
|
|
OR CAST(JSON_EXTRACT(json, '$.executorConfiguration.timerJobAcquisitionInterval') AS UNSIGNED) > 5000);
|
||
|
|
|