diff --git a/schema/sqlite/embed.go b/schema/sqlite/embed.go new file mode 100644 index 00000000000..4ba853a5def --- /dev/null +++ b/schema/sqlite/embed.go @@ -0,0 +1,26 @@ +// Copyright (c) 2019 Uber Technologies, Inc. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +package sqlite + +import "embed" + +//go:embed v8/cadence/* v8/visibility/* +var SchemaFS embed.FS diff --git a/schema/sqlite/v8/cadence/database.sql b/schema/sqlite/v8/cadence/database.sql new file mode 100644 index 00000000000..29fd1f37412 --- /dev/null +++ b/schema/sqlite/v8/cadence/database.sql @@ -0,0 +1 @@ +CREATE DATABASE cadence character set utf8; \ No newline at end of file diff --git a/schema/sqlite/v8/cadence/schema.sql b/schema/sqlite/v8/cadence/schema.sql new file mode 100644 index 00000000000..261696a34a0 --- /dev/null +++ b/schema/sqlite/v8/cadence/schema.sql @@ -0,0 +1,277 @@ +CREATE TABLE domains( + shard_id INT NOT NULL DEFAULT 54321, + id BINARY(16) NOT NULL, + name VARCHAR(255) UNIQUE NOT NULL, + -- + data MEDIUMBLOB NOT NULL, + data_encoding VARCHAR(16) NOT NULL, + is_global TINYINT(1) NOT NULL, + PRIMARY KEY(shard_id, id) +); + +CREATE TABLE domain_metadata ( + `id` bigint(20) NOT NULL AUTO_INCREMENT, + notification_version BIGINT NOT NULL, + PRIMARY KEY (`id`) +); + +INSERT INTO domain_metadata (notification_version) VALUES (1); + +CREATE TABLE shards ( + shard_id INT NOT NULL, + -- + range_id BIGINT NOT NULL, + data MEDIUMBLOB NOT NULL, + data_encoding VARCHAR(16) NOT NULL, + PRIMARY KEY (shard_id) +); + +CREATE TABLE transfer_tasks( + shard_id INT NOT NULL, + task_id BIGINT NOT NULL, + -- + data MEDIUMBLOB NOT NULL, + data_encoding VARCHAR(16) NOT NULL, + PRIMARY KEY (shard_id, task_id) +); + +CREATE TABLE cross_cluster_tasks( + target_cluster VARCHAR(255) NOT NULL, + shard_id INT NOT NULL, + task_id BIGINT NOT NULL, + -- + data MEDIUMBLOB NOT NULL, + data_encoding VARCHAR(16) NOT NULL, + PRIMARY KEY (target_cluster, shard_id, task_id) +); + +CREATE TABLE executions( + shard_id INT NOT NULL, + domain_id BINARY(16) NOT NULL, + workflow_id VARCHAR(255) NOT NULL, + run_id BINARY(16) NOT NULL, + -- + next_event_id BIGINT NOT NULL, + last_write_version BIGINT NOT NULL, + data MEDIUMBLOB NOT NULL, + data_encoding VARCHAR(16) NOT NULL, + PRIMARY KEY (shard_id, domain_id, workflow_id, run_id) +); + +CREATE TABLE current_executions( + shard_id INT NOT NULL, + domain_id BINARY(16) NOT NULL, + workflow_id VARCHAR(255) NOT NULL, + -- + run_id BINARY(16) NOT NULL, + create_request_id VARCHAR(64) NOT NULL, + state INT NOT NULL, + close_status INT NOT NULL, + start_version BIGINT NOT NULL, + last_write_version BIGINT NOT NULL, + PRIMARY KEY (shard_id, domain_id, workflow_id) +); + +CREATE TABLE buffered_events ( + id BIGINT AUTO_INCREMENT NOT NULL, + shard_id INT NOT NULL, + domain_id BINARY(16) NOT NULL, + workflow_id VARCHAR(255) NOT NULL, + run_id BINARY(16) NOT NULL, + -- + data MEDIUMBLOB NOT NULL, + data_encoding VARCHAR(16) NOT NULL, + PRIMARY KEY (id) +); + +CREATE INDEX buffered_events_by_events_ids ON buffered_events(shard_id, domain_id, workflow_id, run_id); + +CREATE TABLE tasks ( + domain_id BINARY(16) NOT NULL, + task_list_name VARCHAR(255) NOT NULL, + task_type TINYINT NOT NULL, -- {Activity, Decision} + task_id BIGINT NOT NULL, + -- + data MEDIUMBLOB NOT NULL, + data_encoding VARCHAR(16) NOT NULL, + PRIMARY KEY (domain_id, task_list_name, task_type, task_id) +); + +CREATE TABLE task_lists ( + shard_id INT NOT NULL, + domain_id BINARY(16) NOT NULL, + name VARCHAR(255) NOT NULL, + task_type TINYINT NOT NULL, -- {Activity, Decision} + -- + range_id BIGINT NOT NULL, + data MEDIUMBLOB NOT NULL, + data_encoding VARCHAR(16) NOT NULL, + PRIMARY KEY (shard_id, domain_id, name, task_type) +); + +CREATE TABLE replication_tasks ( + shard_id INT NOT NULL, + task_id BIGINT NOT NULL, + -- + data MEDIUMBLOB NOT NULL, + data_encoding VARCHAR(16) NOT NULL, + PRIMARY KEY (shard_id, task_id) +); + +CREATE TABLE replication_tasks_dlq ( + source_cluster_name VARCHAR(255) NOT NULL, + shard_id INT NOT NULL, + task_id BIGINT NOT NULL, + -- + data MEDIUMBLOB NOT NULL, + data_encoding VARCHAR(16) NOT NULL, + PRIMARY KEY (source_cluster_name, shard_id, task_id) +); + +CREATE TABLE timer_tasks ( + shard_id INT NOT NULL, + visibility_timestamp DATETIME(6) NOT NULL, + task_id BIGINT NOT NULL, + -- + data MEDIUMBLOB NOT NULL, + data_encoding VARCHAR(16) NOT NULL, + PRIMARY KEY (shard_id, visibility_timestamp, task_id) +); + +CREATE TABLE activity_info_maps ( +-- each row corresponds to one key of one map + shard_id INT NOT NULL, + domain_id BINARY(16) NOT NULL, + workflow_id VARCHAR(255) NOT NULL, + run_id BINARY(16) NOT NULL, + schedule_id BIGINT NOT NULL, +-- + data MEDIUMBLOB NOT NULL, + data_encoding VARCHAR(16), + last_heartbeat_details BLOB, + last_heartbeat_updated_time DATETIME(6) NOT NULL, + PRIMARY KEY (shard_id, domain_id, workflow_id, run_id, schedule_id) +); + +CREATE TABLE timer_info_maps ( + shard_id INT NOT NULL, + domain_id BINARY(16) NOT NULL, + workflow_id VARCHAR(255) NOT NULL, + run_id BINARY(16) NOT NULL, + timer_id VARCHAR(255) NOT NULL, +-- + data MEDIUMBLOB NOT NULL, + data_encoding VARCHAR(16), + PRIMARY KEY (shard_id, domain_id, workflow_id, run_id, timer_id) +); + +CREATE TABLE child_execution_info_maps ( + shard_id INT NOT NULL, + domain_id BINARY(16) NOT NULL, + workflow_id VARCHAR(255) NOT NULL, + run_id BINARY(16) NOT NULL, + initiated_id BIGINT NOT NULL, +-- + data MEDIUMBLOB NOT NULL, + data_encoding VARCHAR(16), + PRIMARY KEY (shard_id, domain_id, workflow_id, run_id, initiated_id) +); + +CREATE TABLE request_cancel_info_maps ( + shard_id INT NOT NULL, + domain_id BINARY(16) NOT NULL, + workflow_id VARCHAR(255) NOT NULL, + run_id BINARY(16) NOT NULL, + initiated_id BIGINT NOT NULL, +-- + data MEDIUMBLOB NOT NULL, + data_encoding VARCHAR(16), + PRIMARY KEY (shard_id, domain_id, workflow_id, run_id, initiated_id) +); + +CREATE TABLE signal_info_maps ( + shard_id INT NOT NULL, + domain_id BINARY(16) NOT NULL, + workflow_id VARCHAR(255) NOT NULL, + run_id BINARY(16) NOT NULL, + initiated_id BIGINT NOT NULL, +-- + data MEDIUMBLOB NOT NULL, + data_encoding VARCHAR(16), + PRIMARY KEY (shard_id, domain_id, workflow_id, run_id, initiated_id) +); + +CREATE TABLE buffered_replication_task_maps ( + shard_id INT NOT NULL, + domain_id BINARY(16) NOT NULL, + workflow_id VARCHAR(255) NOT NULL, + run_id BINARY(16) NOT NULL, + first_event_id BIGINT NOT NULL, +-- + version BIGINT NOT NULL, + next_event_id BIGINT NOT NULL, + history MEDIUMBLOB, + history_encoding VARCHAR(16) NOT NULL, + new_run_history MEDIUMBLOB, + new_run_history_encoding VARCHAR(16) NOT NULL DEFAULT 'json', + event_store_version INT NOT NULL, -- indicates which version of event store to query + new_run_event_store_version INT NOT NULL, -- indicates which version of event store to query for new run(continueAsNew) + PRIMARY KEY (shard_id, domain_id, workflow_id, run_id, first_event_id) +); + +CREATE TABLE signals_requested_sets ( + shard_id INT NOT NULL, + domain_id BINARY(16) NOT NULL, + workflow_id VARCHAR(255) NOT NULL, + run_id BINARY(16) NOT NULL, + signal_id VARCHAR(64) NOT NULL, + -- + PRIMARY KEY (shard_id, domain_id, workflow_id, run_id, signal_id) +); + +-- history eventsV2: history_node stores history event data +CREATE TABLE history_node ( + shard_id INT NOT NULL, + tree_id BINARY(16) NOT NULL, + branch_id BINARY(16) NOT NULL, + node_id BIGINT NOT NULL, + txn_id BIGINT NOT NULL, + -- + data MEDIUMBLOB NOT NULL, + data_encoding VARCHAR(16) NOT NULL, + PRIMARY KEY (shard_id, tree_id, branch_id, node_id, txn_id) +); + +-- history eventsV2: history_tree stores branch metadata +CREATE TABLE history_tree ( + shard_id INT NOT NULL, + tree_id BINARY(16) NOT NULL, + branch_id BINARY(16) NOT NULL, + -- + data MEDIUMBLOB NOT NULL, + data_encoding VARCHAR(16) NOT NULL, + PRIMARY KEY (shard_id, tree_id, branch_id) +); + +CREATE TABLE queue ( + queue_type INT NOT NULL, + message_id BIGINT NOT NULL, + message_payload MEDIUMBLOB NOT NULL, + PRIMARY KEY(queue_type, message_id) +); + +CREATE TABLE queue_metadata ( + queue_type INT NOT NULL, + data MEDIUMBLOB NOT NULL, + PRIMARY KEY(queue_type) +); + +CREATE TABLE cluster_config ( + row_type INT NOT NULL, + version BIGINT NOT NULL, + -- + timestamp DATETIME(6) NOT NULL, + data MEDIUMBLOB NOT NULL, + data_encoding VARCHAR(16) NOT NULL, + PRIMARY KEY (row_type, version) +); diff --git a/schema/sqlite/v8/cadence/versioned/v0.1/base.sql b/schema/sqlite/v8/cadence/versioned/v0.1/base.sql new file mode 100644 index 00000000000..aa253c1eaf5 --- /dev/null +++ b/schema/sqlite/v8/cadence/versioned/v0.1/base.sql @@ -0,0 +1,249 @@ +CREATE TABLE domains( + shard_id INT NOT NULL DEFAULT 54321, + id BINARY(16) NOT NULL, + name VARCHAR(255) UNIQUE NOT NULL, + -- + data BLOB NOT NULL, + data_encoding VARCHAR(16) NOT NULL, + is_global TINYINT(1) NOT NULL, + PRIMARY KEY(shard_id, id) +); + +CREATE TABLE domain_metadata ( + `id` bigint(20) NOT NULL AUTO_INCREMENT, + notification_version BIGINT NOT NULL, + PRIMARY KEY (`id`) +); + +INSERT INTO domain_metadata (notification_version) VALUES (1); + +CREATE TABLE shards ( + shard_id INT NOT NULL, + -- + range_id BIGINT NOT NULL, + data BLOB NOT NULL, + data_encoding VARCHAR(16) NOT NULL, + PRIMARY KEY (shard_id) +); + +CREATE TABLE transfer_tasks( + shard_id INT NOT NULL, + task_id BIGINT NOT NULL, + -- + data BLOB NOT NULL, + data_encoding VARCHAR(16) NOT NULL, + PRIMARY KEY (shard_id, task_id) +); + +CREATE TABLE executions( + shard_id INT NOT NULL, + domain_id BINARY(16) NOT NULL, + workflow_id VARCHAR(255) NOT NULL, + run_id BINARY(16) NOT NULL, + -- + next_event_id BIGINT NOT NULL, + last_write_version BIGINT NOT NULL, + data BLOB NOT NULL, + data_encoding VARCHAR(16) NOT NULL, + PRIMARY KEY (shard_id, domain_id, workflow_id, run_id) +); + +CREATE TABLE current_executions( + shard_id INT NOT NULL, + domain_id BINARY(16) NOT NULL, + workflow_id VARCHAR(255) NOT NULL, + -- + run_id BINARY(16) NOT NULL, + create_request_id VARCHAR(64) NOT NULL, + state INT NOT NULL, + close_status INT NOT NULL, + start_version BIGINT NOT NULL, + last_write_version BIGINT NOT NULL, + PRIMARY KEY (shard_id, domain_id, workflow_id) +); + +CREATE TABLE buffered_events ( + id BIGINT AUTO_INCREMENT NOT NULL, + shard_id INT NOT NULL, + domain_id BINARY(16) NOT NULL, + workflow_id VARCHAR(255) NOT NULL, + run_id BINARY(16) NOT NULL, + -- + data MEDIUMBLOB NOT NULL, + data_encoding VARCHAR(16) NOT NULL, + PRIMARY KEY (id) +); + +CREATE INDEX buffered_events_by_events_ids ON buffered_events(shard_id, domain_id, workflow_id, run_id); + +CREATE TABLE tasks ( + domain_id BINARY(16) NOT NULL, + task_list_name VARCHAR(255) NOT NULL, + task_type TINYINT NOT NULL, -- {Activity, Decision} + task_id BIGINT NOT NULL, + -- + data BLOB NOT NULL, + data_encoding VARCHAR(16) NOT NULL, + PRIMARY KEY (domain_id, task_list_name, task_type, task_id) +); + +CREATE TABLE task_lists ( + shard_id INT NOT NULL, + domain_id BINARY(16) NOT NULL, + name VARCHAR(255) NOT NULL, + task_type TINYINT NOT NULL, -- {Activity, Decision} + -- + range_id BIGINT NOT NULL, + data BLOB NOT NULL, + data_encoding VARCHAR(16) NOT NULL, + PRIMARY KEY (shard_id, domain_id, name, task_type) +); + +CREATE TABLE replication_tasks ( + shard_id INT NOT NULL, + task_id BIGINT NOT NULL, + -- + data BLOB NOT NULL, + data_encoding VARCHAR(16) NOT NULL, + PRIMARY KEY (shard_id, task_id) +); + +CREATE TABLE timer_tasks ( + shard_id INT NOT NULL, + visibility_timestamp DATETIME(6) NOT NULL, + task_id BIGINT NOT NULL, + -- + data BLOB NOT NULL, + data_encoding VARCHAR(16) NOT NULL, + PRIMARY KEY (shard_id, visibility_timestamp, task_id) +); + +-- Deprecated in favor of history eventsV2 +CREATE TABLE events ( + domain_id BINARY(16) NOT NULL, + workflow_id VARCHAR(255) NOT NULL, + run_id BINARY(16) NOT NULL, + first_event_id BIGINT NOT NULL, + -- + batch_version BIGINT, + range_id BIGINT NOT NULL, + tx_id BIGINT NOT NULL, + data MEDIUMBLOB NOT NULL, + data_encoding VARCHAR(16) NOT NULL, + PRIMARY KEY (domain_id, workflow_id, run_id, first_event_id) +); + +CREATE TABLE activity_info_maps ( +-- each row corresponds to one key of one map + shard_id INT NOT NULL, + domain_id BINARY(16) NOT NULL, + workflow_id VARCHAR(255) NOT NULL, + run_id BINARY(16) NOT NULL, + schedule_id BIGINT NOT NULL, +-- + data BLOB NOT NULL, + data_encoding VARCHAR(16), + last_heartbeat_details BLOB, + last_heartbeat_updated_time DATETIME(6) NOT NULL, + PRIMARY KEY (shard_id, domain_id, workflow_id, run_id, schedule_id) +); + +CREATE TABLE timer_info_maps ( + shard_id INT NOT NULL, + domain_id BINARY(16) NOT NULL, + workflow_id VARCHAR(255) NOT NULL, + run_id BINARY(16) NOT NULL, + timer_id VARCHAR(255) NOT NULL, +-- + data BLOB NOT NULL, + data_encoding VARCHAR(16), + PRIMARY KEY (shard_id, domain_id, workflow_id, run_id, timer_id) +); + +CREATE TABLE child_execution_info_maps ( + shard_id INT NOT NULL, + domain_id BINARY(16) NOT NULL, + workflow_id VARCHAR(255) NOT NULL, + run_id BINARY(16) NOT NULL, + initiated_id BIGINT NOT NULL, +-- + data BLOB NOT NULL, + data_encoding VARCHAR(16), + PRIMARY KEY (shard_id, domain_id, workflow_id, run_id, initiated_id) +); + +CREATE TABLE request_cancel_info_maps ( + shard_id INT NOT NULL, + domain_id BINARY(16) NOT NULL, + workflow_id VARCHAR(255) NOT NULL, + run_id BINARY(16) NOT NULL, + initiated_id BIGINT NOT NULL, +-- + data BLOB NOT NULL, + data_encoding VARCHAR(16), + PRIMARY KEY (shard_id, domain_id, workflow_id, run_id, initiated_id) +); + +CREATE TABLE signal_info_maps ( + shard_id INT NOT NULL, + domain_id BINARY(16) NOT NULL, + workflow_id VARCHAR(255) NOT NULL, + run_id BINARY(16) NOT NULL, + initiated_id BIGINT NOT NULL, +-- + data BLOB NOT NULL, + data_encoding VARCHAR(16), + PRIMARY KEY (shard_id, domain_id, workflow_id, run_id, initiated_id) +); + +CREATE TABLE buffered_replication_task_maps ( + shard_id INT NOT NULL, + domain_id BINARY(16) NOT NULL, + workflow_id VARCHAR(255) NOT NULL, + run_id BINARY(16) NOT NULL, + first_event_id BIGINT NOT NULL, +-- + version BIGINT NOT NULL, + next_event_id BIGINT NOT NULL, + history MEDIUMBLOB, + history_encoding VARCHAR(16) NOT NULL, + new_run_history BLOB, + new_run_history_encoding VARCHAR(16) NOT NULL DEFAULT 'json', + event_store_version INT NOT NULL, -- indiciates which version of event store to query + new_run_event_store_version INT NOT NULL, -- indiciates which version of event store to query for new run(continueAsNew) + PRIMARY KEY (shard_id, domain_id, workflow_id, run_id, first_event_id) +); + +CREATE TABLE signals_requested_sets ( + shard_id INT NOT NULL, + domain_id BINARY(16) NOT NULL, + workflow_id VARCHAR(255) NOT NULL, + run_id BINARY(16) NOT NULL, + signal_id VARCHAR(64) NOT NULL, + -- + PRIMARY KEY (shard_id, domain_id, workflow_id, run_id, signal_id) +); + +-- history eventsV2: history_node stores history event data +CREATE TABLE history_node ( + shard_id INT NOT NULL, + tree_id BINARY(16) NOT NULL, + branch_id BINARY(16) NOT NULL, + node_id BIGINT NOT NULL, + txn_id BIGINT NOT NULL, + -- + data MEDIUMBLOB NOT NULL, + data_encoding VARCHAR(16) NOT NULL, + PRIMARY KEY (shard_id, tree_id, branch_id, node_id, txn_id) +); + +-- history eventsV2: history_tree stores branch metadata +CREATE TABLE history_tree ( + shard_id INT NOT NULL, + tree_id BINARY(16) NOT NULL, + branch_id BINARY(16) NOT NULL, + -- + data BLOB NOT NULL, + data_encoding VARCHAR(16) NOT NULL, + PRIMARY KEY (shard_id, tree_id, branch_id) +); \ No newline at end of file diff --git a/schema/sqlite/v8/cadence/versioned/v0.1/manifest.json b/schema/sqlite/v8/cadence/versioned/v0.1/manifest.json new file mode 100644 index 00000000000..789002c0eef --- /dev/null +++ b/schema/sqlite/v8/cadence/versioned/v0.1/manifest.json @@ -0,0 +1,8 @@ +{ + "CurrVersion": "0.1", + "MinCompatibleVersion": "0.1", + "Description": "base version of schema", + "SchemaUpdateCqlFiles": [ + "base.sql" + ] +} diff --git a/schema/sqlite/v8/cadence/versioned/v0.2/manifest.json b/schema/sqlite/v8/cadence/versioned/v0.2/manifest.json new file mode 100644 index 00000000000..941a776dd39 --- /dev/null +++ b/schema/sqlite/v8/cadence/versioned/v0.2/manifest.json @@ -0,0 +1,8 @@ +{ + "CurrVersion": "0.2", + "MinCompatibleVersion": "0.2", + "Description": "add queue and queue_metadata table", + "SchemaUpdateCqlFiles": [ + "queue.sql" + ] +} diff --git a/schema/sqlite/v8/cadence/versioned/v0.2/queue.sql b/schema/sqlite/v8/cadence/versioned/v0.2/queue.sql new file mode 100644 index 00000000000..329db35e9c8 --- /dev/null +++ b/schema/sqlite/v8/cadence/versioned/v0.2/queue.sql @@ -0,0 +1,12 @@ +CREATE TABLE queue ( + queue_type INT NOT NULL, + message_id BIGINT NOT NULL, + message_payload BLOB NOT NULL, + PRIMARY KEY(queue_type, message_id) +); + +CREATE TABLE queue_metadata ( + queue_type INT NOT NULL, + data BLOB NOT NULL, + PRIMARY KEY(queue_type) +); diff --git a/schema/sqlite/v8/cadence/versioned/v0.3/manifest.json b/schema/sqlite/v8/cadence/versioned/v0.3/manifest.json new file mode 100644 index 00000000000..ff6fc2d483c --- /dev/null +++ b/schema/sqlite/v8/cadence/versioned/v0.3/manifest.json @@ -0,0 +1,8 @@ +{ + "CurrVersion": "0.3", + "MinCompatibleVersion": "0.3", + "Description": "add replication_tasks_dlq table", + "SchemaUpdateCqlFiles": [ + "replication_tasks_dlq.sql" + ] +} diff --git a/schema/sqlite/v8/cadence/versioned/v0.3/replication_tasks_dlq.sql b/schema/sqlite/v8/cadence/versioned/v0.3/replication_tasks_dlq.sql new file mode 100644 index 00000000000..3947a7cc8fb --- /dev/null +++ b/schema/sqlite/v8/cadence/versioned/v0.3/replication_tasks_dlq.sql @@ -0,0 +1,9 @@ +CREATE TABLE replication_tasks_dlq ( + source_cluster_name VARCHAR(255) NOT NULL, + shard_id INT NOT NULL, + task_id BIGINT NOT NULL, + -- + data BLOB NOT NULL, + data_encoding VARCHAR(16) NOT NULL, + PRIMARY KEY (source_cluster_name, shard_id, task_id) +); diff --git a/schema/sqlite/v8/cadence/versioned/v0.4/blob_size.sql b/schema/sqlite/v8/cadence/versioned/v0.4/blob_size.sql new file mode 100644 index 00000000000..d71c77e5da3 --- /dev/null +++ b/schema/sqlite/v8/cadence/versioned/v0.4/blob_size.sql @@ -0,0 +1,18 @@ +ALTER TABLE domains MODIFY COLUMN data MEDIUMBLOB; +ALTER TABLE shards MODIFY COLUMN data MEDIUMBLOB; +ALTER TABLE transfer_tasks MODIFY COLUMN data MEDIUMBLOB; +ALTER TABLE executions MODIFY COLUMN data MEDIUMBLOB; +ALTER TABLE tasks MODIFY COLUMN data MEDIUMBLOB; +ALTER TABLE task_lists MODIFY COLUMN data MEDIUMBLOB; +ALTER TABLE replication_tasks MODIFY COLUMN data MEDIUMBLOB; +ALTER TABLE replication_tasks_dlq MODIFY COLUMN data MEDIUMBLOB; +ALTER TABLE timer_tasks MODIFY COLUMN data MEDIUMBLOB; +ALTER TABLE activity_info_maps MODIFY COLUMN data MEDIUMBLOB; +ALTER TABLE timer_info_maps MODIFY COLUMN data MEDIUMBLOB; +ALTER TABLE child_execution_info_maps MODIFY COLUMN data MEDIUMBLOB; +ALTER TABLE request_cancel_info_maps MODIFY COLUMN data MEDIUMBLOB; +ALTER TABLE signal_info_maps MODIFY COLUMN data MEDIUMBLOB; +ALTER TABLE buffered_replication_task_maps MODIFY COLUMN new_run_history MEDIUMBLOB; +ALTER TABLE history_tree MODIFY COLUMN data MEDIUMBLOB; +ALTER TABLE queue MODIFY COLUMN message_payload MEDIUMBLOB; +ALTER TABLE queue_metadata MODIFY COLUMN data MEDIUMBLOB; \ No newline at end of file diff --git a/schema/sqlite/v8/cadence/versioned/v0.4/manifest.json b/schema/sqlite/v8/cadence/versioned/v0.4/manifest.json new file mode 100644 index 00000000000..71b8652282b --- /dev/null +++ b/schema/sqlite/v8/cadence/versioned/v0.4/manifest.json @@ -0,0 +1,8 @@ +{ + "CurrVersion": "0.4", + "MinCompatibleVersion": "0.3", + "Description": "modify blob size", + "SchemaUpdateCqlFiles": [ + "blob_size.sql" + ] +} \ No newline at end of file diff --git a/schema/sqlite/v8/cadence/versioned/v0.5/cross_cluster_table.sql b/schema/sqlite/v8/cadence/versioned/v0.5/cross_cluster_table.sql new file mode 100644 index 00000000000..e51390b7435 --- /dev/null +++ b/schema/sqlite/v8/cadence/versioned/v0.5/cross_cluster_table.sql @@ -0,0 +1,9 @@ +CREATE TABLE cross_cluster_tasks( + target_cluster VARCHAR(255) NOT NULL, + shard_id INT NOT NULL, + task_id BIGINT NOT NULL, + -- + data MEDIUMBLOB NOT NULL, + data_encoding VARCHAR(16) NOT NULL, + PRIMARY KEY (target_cluster, shard_id, task_id) +); \ No newline at end of file diff --git a/schema/sqlite/v8/cadence/versioned/v0.5/manifest.json b/schema/sqlite/v8/cadence/versioned/v0.5/manifest.json new file mode 100644 index 00000000000..b1a206b5c2d --- /dev/null +++ b/schema/sqlite/v8/cadence/versioned/v0.5/manifest.json @@ -0,0 +1,8 @@ +{ + "CurrVersion": "0.5", + "MinCompatibleVersion": "0.5", + "Description": "create cross cluster table", + "SchemaUpdateCqlFiles": [ + "cross_cluster_table.sql" + ] +} \ No newline at end of file diff --git a/schema/sqlite/v8/cadence/versioned/v0.6/cluster_config.sql b/schema/sqlite/v8/cadence/versioned/v0.6/cluster_config.sql new file mode 100644 index 00000000000..b1628bb2eb3 --- /dev/null +++ b/schema/sqlite/v8/cadence/versioned/v0.6/cluster_config.sql @@ -0,0 +1,9 @@ +CREATE TABLE cluster_config ( + row_type INT NOT NULL, + version BIGINT NOT NULL, + -- + timestamp DATETIME(6) NOT NULL, + data MEDIUMBLOB NOT NULL, + data_encoding VARCHAR(16) NOT NULL, + PRIMARY KEY (row_type, version) +); diff --git a/schema/sqlite/v8/cadence/versioned/v0.6/manifest.json b/schema/sqlite/v8/cadence/versioned/v0.6/manifest.json new file mode 100644 index 00000000000..b841d8d3cc6 --- /dev/null +++ b/schema/sqlite/v8/cadence/versioned/v0.6/manifest.json @@ -0,0 +1,8 @@ +{ + "CurrVersion": "0.6", + "MinCompatibleVersion": "0.6", + "Description": "create cluster config table", + "SchemaUpdateCqlFiles": [ + "cluster_config.sql" + ] +} diff --git a/schema/sqlite/v8/visibility/database.sql b/schema/sqlite/v8/visibility/database.sql new file mode 100644 index 00000000000..68a30f1a94c --- /dev/null +++ b/schema/sqlite/v8/visibility/database.sql @@ -0,0 +1 @@ +CREATE DATABASE cadence_visibility character set utf8; \ No newline at end of file diff --git a/schema/sqlite/v8/visibility/schema.sql b/schema/sqlite/v8/visibility/schema.sql new file mode 100644 index 00000000000..07a3045e536 --- /dev/null +++ b/schema/sqlite/v8/visibility/schema.sql @@ -0,0 +1,25 @@ +CREATE TABLE executions_visibility ( + domain_id CHAR(64) NOT NULL, + run_id CHAR(64) NOT NULL, + start_time DATETIME(6) NOT NULL, + execution_time DATETIME(6) NOT NULL, + workflow_id VARCHAR(255) NOT NULL, + workflow_type_name VARCHAR(255) NOT NULL, + close_status INT, -- enum WorkflowExecutionCloseStatus {COMPLETED, FAILED, CANCELED, TERMINATED, CONTINUED_AS_NEW, TIMED_OUT} + close_time DATETIME(6) NULL, + history_length BIGINT, + memo BLOB, + encoding VARCHAR(64) NOT NULL, + task_list VARCHAR(255) DEFAULT '' NOT NULL, + is_cron BOOLEAN DEFAULT false NOT NULL, + num_clusters INT NULL, + update_time DATETIME(6) NULL, + shard_id INT NULL, + + PRIMARY KEY (domain_id, run_id) +); + +CREATE INDEX by_type_start_time ON executions_visibility (domain_id, workflow_type_name, close_status, start_time DESC, run_id); +CREATE INDEX by_workflow_id_start_time ON executions_visibility (domain_id, workflow_id, close_status, start_time DESC, run_id); +CREATE INDEX by_status_by_close_time ON executions_visibility (domain_id, close_status, start_time DESC, run_id); +CREATE INDEX by_close_time_by_status ON executions_visibility (domain_id, close_time DESC, run_id, close_status); diff --git a/schema/sqlite/v8/visibility/versioned/v0.1/base.sql b/schema/sqlite/v8/visibility/versioned/v0.1/base.sql new file mode 100644 index 00000000000..cbf32331a4e --- /dev/null +++ b/schema/sqlite/v8/visibility/versioned/v0.1/base.sql @@ -0,0 +1,19 @@ +CREATE TABLE executions_visibility ( + domain_id CHAR(64) NOT NULL, + run_id CHAR(64) NOT NULL, + start_time DATETIME(6) NOT NULL, + execution_time DATETIME(6) NOT NULL, + workflow_id VARCHAR(255) NOT NULL, + workflow_type_name VARCHAR(255) NOT NULL, + close_status INT, -- enum WorkflowExecutionCloseStatus {COMPLETED, FAILED, CANCELED, TERMINATED, CONTINUED_AS_NEW, TIMED_OUT} + close_time DATETIME(6) NULL, + history_length BIGINT, + memo BLOB, + encoding VARCHAR(64) NOT NULL, + + PRIMARY KEY (domain_id, run_id) +); + +CREATE INDEX by_type_start_time ON executions_visibility (domain_id, workflow_type_name, close_status, start_time DESC, run_id); +CREATE INDEX by_workflow_id_start_time ON executions_visibility (domain_id, workflow_id, close_status, start_time DESC, run_id); +CREATE INDEX by_status_by_close_time ON executions_visibility (domain_id, close_status, start_time DESC, run_id); \ No newline at end of file diff --git a/schema/sqlite/v8/visibility/versioned/v0.1/manifest.json b/schema/sqlite/v8/visibility/versioned/v0.1/manifest.json new file mode 100644 index 00000000000..442e3af5ce4 --- /dev/null +++ b/schema/sqlite/v8/visibility/versioned/v0.1/manifest.json @@ -0,0 +1,8 @@ +{ + "CurrVersion": "0.1", + "MinCompatibleVersion": "0.1", + "Description": "base version of visibility schema", + "SchemaUpdateCqlFiles": [ + "base.sql" + ] +} \ No newline at end of file diff --git a/schema/sqlite/v8/visibility/versioned/v0.2/add_task_list.sql b/schema/sqlite/v8/visibility/versioned/v0.2/add_task_list.sql new file mode 100644 index 00000000000..ab905d3c7dc --- /dev/null +++ b/schema/sqlite/v8/visibility/versioned/v0.2/add_task_list.sql @@ -0,0 +1 @@ +ALTER TABLE executions_visibility ADD task_list varchar(255) DEFAULT ''; \ No newline at end of file diff --git a/schema/sqlite/v8/visibility/versioned/v0.2/manifest.json b/schema/sqlite/v8/visibility/versioned/v0.2/manifest.json new file mode 100644 index 00000000000..9e4f740dadf --- /dev/null +++ b/schema/sqlite/v8/visibility/versioned/v0.2/manifest.json @@ -0,0 +1,8 @@ +{ + "CurrVersion": "0.2", + "MinCompatibleVersion": "0.2", + "Description": "add task_list field to visibility", + "SchemaUpdateCqlFiles": [ + "add_task_list.sql" + ] +} \ No newline at end of file diff --git a/schema/sqlite/v8/visibility/versioned/v0.3/manifest.json b/schema/sqlite/v8/visibility/versioned/v0.3/manifest.json new file mode 100644 index 00000000000..1af91893db5 --- /dev/null +++ b/schema/sqlite/v8/visibility/versioned/v0.3/manifest.json @@ -0,0 +1,8 @@ +{ + "CurrVersion": "0.3", + "MinCompatibleVersion": "0.2", + "Description": "add close time and closed state index", + "SchemaUpdateCqlFiles": [ + "vs_index.sql" + ] +} \ No newline at end of file diff --git a/schema/sqlite/v8/visibility/versioned/v0.3/vs_index.sql b/schema/sqlite/v8/visibility/versioned/v0.3/vs_index.sql new file mode 100644 index 00000000000..e9f7aea8e3d --- /dev/null +++ b/schema/sqlite/v8/visibility/versioned/v0.3/vs_index.sql @@ -0,0 +1 @@ +CREATE INDEX by_close_time_by_status ON executions_visibility (domain_id, close_time DESC, run_id, close_status); diff --git a/schema/sqlite/v8/visibility/versioned/v0.4/add_is_cron.sql b/schema/sqlite/v8/visibility/versioned/v0.4/add_is_cron.sql new file mode 100644 index 00000000000..5b0aef02514 --- /dev/null +++ b/schema/sqlite/v8/visibility/versioned/v0.4/add_is_cron.sql @@ -0,0 +1 @@ +ALTER TABLE executions_visibility ADD is_cron BOOLEAN DEFAULT false; \ No newline at end of file diff --git a/schema/sqlite/v8/visibility/versioned/v0.4/manifest.json b/schema/sqlite/v8/visibility/versioned/v0.4/manifest.json new file mode 100644 index 00000000000..39bfe0013bb --- /dev/null +++ b/schema/sqlite/v8/visibility/versioned/v0.4/manifest.json @@ -0,0 +1,8 @@ +{ + "CurrVersion": "0.4", + "MinCompatibleVersion": "0.4", + "Description": "add is_cron field to visibility", + "SchemaUpdateCqlFiles": [ + "add_is_cron.sql" + ] +} \ No newline at end of file diff --git a/schema/sqlite/v8/visibility/versioned/v0.5/add_num_clusters.sql b/schema/sqlite/v8/visibility/versioned/v0.5/add_num_clusters.sql new file mode 100644 index 00000000000..344a90cda69 --- /dev/null +++ b/schema/sqlite/v8/visibility/versioned/v0.5/add_num_clusters.sql @@ -0,0 +1 @@ +ALTER TABLE executions_visibility ADD num_clusters INT; \ No newline at end of file diff --git a/schema/sqlite/v8/visibility/versioned/v0.5/manifest.json b/schema/sqlite/v8/visibility/versioned/v0.5/manifest.json new file mode 100644 index 00000000000..f0313f1fcc3 --- /dev/null +++ b/schema/sqlite/v8/visibility/versioned/v0.5/manifest.json @@ -0,0 +1,8 @@ +{ + "CurrVersion": "0.5", + "MinCompatibleVersion": "0.5", + "Description": "add num_clusters field to visibility", + "SchemaUpdateCqlFiles": [ + "add_num_clusters.sql" + ] +} \ No newline at end of file diff --git a/schema/sqlite/v8/visibility/versioned/v0.6/add_update_time.sql b/schema/sqlite/v8/visibility/versioned/v0.6/add_update_time.sql new file mode 100644 index 00000000000..a1d5414f28c --- /dev/null +++ b/schema/sqlite/v8/visibility/versioned/v0.6/add_update_time.sql @@ -0,0 +1 @@ +ALTER TABLE executions_visibility ADD update_time DATETIME(6) DEFAULT CURRENT_TIMESTAMP(6); \ No newline at end of file diff --git a/schema/sqlite/v8/visibility/versioned/v0.6/manifest.json b/schema/sqlite/v8/visibility/versioned/v0.6/manifest.json new file mode 100644 index 00000000000..f0f12e0c14b --- /dev/null +++ b/schema/sqlite/v8/visibility/versioned/v0.6/manifest.json @@ -0,0 +1,8 @@ +{ + "CurrVersion": "0.6", + "MinCompatibleVersion": "0.6", + "Description": "add update_time field to visibility", + "SchemaUpdateCqlFiles": [ + "add_update_time.sql" + ] +} \ No newline at end of file diff --git a/schema/sqlite/v8/visibility/versioned/v0.7/add_shard_id.sql b/schema/sqlite/v8/visibility/versioned/v0.7/add_shard_id.sql new file mode 100644 index 00000000000..58b7187a47b --- /dev/null +++ b/schema/sqlite/v8/visibility/versioned/v0.7/add_shard_id.sql @@ -0,0 +1 @@ +ALTER TABLE executions_visibility ADD shard_id INT DEFAULT -1; \ No newline at end of file diff --git a/schema/sqlite/v8/visibility/versioned/v0.7/manifest.json b/schema/sqlite/v8/visibility/versioned/v0.7/manifest.json new file mode 100644 index 00000000000..5ee789d9f0e --- /dev/null +++ b/schema/sqlite/v8/visibility/versioned/v0.7/manifest.json @@ -0,0 +1,8 @@ +{ + "CurrVersion": "0.7", + "MinCompatibleVersion": "0.7", + "Description": "add shard_id field to visibility", + "SchemaUpdateCqlFiles": [ + "add_shard_id.sql" + ] +} \ No newline at end of file diff --git a/schema/sqlite/version.go b/schema/sqlite/version.go new file mode 100644 index 00000000000..b87038260eb --- /dev/null +++ b/schema/sqlite/version.go @@ -0,0 +1,29 @@ +// Copyright (c) 2019 Uber Technologies, Inc. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +package sqlite + +// NOTE: whenever there is a new data base schema update, plz update the following versions + +// Version is the SQLite database release version +const Version = "0.6" + +// VisibilityVersion is the SQLite visibility database release version +const VisibilityVersion = "0.7" diff --git a/tools/common/schema/updatetask_test.go b/tools/common/schema/updatetask_test.go index 4825c9c7b15..b940f7dd688 100644 --- a/tools/common/schema/updatetask_test.go +++ b/tools/common/schema/updatetask_test.go @@ -30,6 +30,8 @@ import ( "path/filepath" "testing" + "github.com/uber/cadence/schema/sqlite" + "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" "github.com/stretchr/testify/suite" @@ -110,6 +112,7 @@ func (s *UpdateTaskTestSuite) TestReadSchemaDir() { } func (s *UpdateTaskTestSuite) TestReadSchemaDirFromEmbeddings() { + // Cassandra fsys, err := fs.Sub(cassandra.SchemaFS, "cadence/versioned") s.NoError(err) ans, err := readSchemaDir(fsys, "0.30", "") @@ -122,6 +125,7 @@ func (s *UpdateTaskTestSuite) TestReadSchemaDirFromEmbeddings() { s.NoError(err) s.Equal([]string{"v0.7", "v0.8", "v0.9"}, ans) + // MySQL fsys, err = fs.Sub(mysql.SchemaFS, "v8/cadence/versioned") s.NoError(err) ans, err = readSchemaDir(fsys, "0.3", "") @@ -134,6 +138,20 @@ func (s *UpdateTaskTestSuite) TestReadSchemaDirFromEmbeddings() { s.NoError(err) s.Equal([]string{"v0.6", "v0.7"}, ans) + // SQLite + fsys, err = fs.Sub(sqlite.SchemaFS, "v8/cadence/versioned") + s.NoError(err) + ans, err = readSchemaDir(fsys, "0.3", "") + s.NoError(err) + s.Equal([]string{"v0.4", "v0.5", "v0.6"}, ans) + + fsys, err = fs.Sub(sqlite.SchemaFS, "v8/visibility/versioned") + s.NoError(err) + ans, err = readSchemaDir(fsys, "0.5", "") + s.NoError(err) + s.Equal([]string{"v0.6", "v0.7"}, ans) + + // Postgres fsys, err = fs.Sub(postgres.SchemaFS, "cadence/versioned") s.NoError(err) ans, err = readSchemaDir(fsys, "0.3", "")