Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion config/dynamicconfig/development-sql.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@
### END of Worker Versioning Replay Test configs

limit.maxIDLength:
- value: 255
- value: 1000
constraints: {}
frontend.workerVersioningDataAPIs:
- value: true
Expand Down
20 changes: 10 additions & 10 deletions schema/mysql/v8/temporal/schema.sql
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ CREATE TABLE shards (
CREATE TABLE executions(
shard_id INT NOT NULL,
namespace_id BINARY(16) NOT NULL,
workflow_id VARCHAR(255) NOT NULL,
workflow_id VARBINARY(1000) NOT NULL,
run_id BINARY(16) NOT NULL,
--
next_event_id BIGINT NOT NULL,
Expand All @@ -46,7 +46,7 @@ CREATE TABLE executions(
CREATE TABLE current_executions(
shard_id INT NOT NULL,
namespace_id BINARY(16) NOT NULL,
workflow_id VARCHAR(255) NOT NULL,
workflow_id VARBINARY(1000) NOT NULL,
--
run_id BINARY(16) NOT NULL,
create_request_id VARCHAR(255) NOT NULL,
Expand Down Expand Up @@ -83,7 +83,7 @@ CREATE TABLE current_chasm_executions(
CREATE TABLE buffered_events (
shard_id INT NOT NULL,
namespace_id BINARY(16) NOT NULL,
workflow_id VARCHAR(255) NOT NULL,
workflow_id VARBINARY(1000) NOT NULL,
run_id BINARY(16) NOT NULL,
id BIGINT AUTO_INCREMENT NOT NULL UNIQUE,
--
Expand Down Expand Up @@ -227,7 +227,7 @@ CREATE TABLE activity_info_maps (
-- each row corresponds to one key of one map<string, ActivityInfo>
shard_id INT NOT NULL,
namespace_id BINARY(16) NOT NULL,
workflow_id VARCHAR(255) NOT NULL,
workflow_id VARBINARY(1000) NOT NULL,
run_id BINARY(16) NOT NULL,
schedule_id BIGINT NOT NULL,
--
Expand All @@ -239,7 +239,7 @@ CREATE TABLE activity_info_maps (
CREATE TABLE timer_info_maps (
shard_id INT NOT NULL,
namespace_id BINARY(16) NOT NULL,
workflow_id VARCHAR(255) NOT NULL,
workflow_id VARBINARY(1000) NOT NULL,
run_id BINARY(16) NOT NULL,
timer_id VARCHAR(255) NOT NULL,
--
Expand All @@ -251,7 +251,7 @@ CREATE TABLE timer_info_maps (
CREATE TABLE child_execution_info_maps (
shard_id INT NOT NULL,
namespace_id BINARY(16) NOT NULL,
workflow_id VARCHAR(255) NOT NULL,
workflow_id VARBINARY(1000) NOT NULL,
run_id BINARY(16) NOT NULL,
initiated_id BIGINT NOT NULL,
--
Expand All @@ -263,7 +263,7 @@ CREATE TABLE child_execution_info_maps (
CREATE TABLE request_cancel_info_maps (
shard_id INT NOT NULL,
namespace_id BINARY(16) NOT NULL,
workflow_id VARCHAR(255) NOT NULL,
workflow_id VARBINARY(1000) NOT NULL,
run_id BINARY(16) NOT NULL,
initiated_id BIGINT NOT NULL,
--
Expand All @@ -275,7 +275,7 @@ CREATE TABLE request_cancel_info_maps (
CREATE TABLE signal_info_maps (
shard_id INT NOT NULL,
namespace_id BINARY(16) NOT NULL,
workflow_id VARCHAR(255) NOT NULL,
workflow_id VARBINARY(1000) NOT NULL,
run_id BINARY(16) NOT NULL,
initiated_id BIGINT NOT NULL,
--
Expand All @@ -287,7 +287,7 @@ CREATE TABLE signal_info_maps (
CREATE TABLE signals_requested_sets (
shard_id INT NOT NULL,
namespace_id BINARY(16) NOT NULL,
workflow_id VARCHAR(255) NOT NULL,
workflow_id VARBINARY(1000) NOT NULL,
run_id BINARY(16) NOT NULL,
signal_id VARCHAR(255) NOT NULL,
--
Expand All @@ -297,7 +297,7 @@ CREATE TABLE signals_requested_sets (
CREATE TABLE chasm_node_maps (
shard_id INT NOT NULL,
namespace_id BINARY(16) NOT NULL,
workflow_id VARCHAR(255) NOT NULL,
workflow_id VARBINARY(1000) NOT NULL,
run_id BINARY(16) NOT NULL,
chasm_path VARBINARY(1536) NOT NULL,
--
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
ALTER TABLE executions MODIFY workflow_id VARBINARY(1000) NOT NULL;
ALTER TABLE current_executions MODIFY workflow_id VARBINARY(1000) NOT NULL;
ALTER TABLE buffered_events MODIFY workflow_id VARBINARY(1000) NOT NULL;
ALTER TABLE activity_info_maps MODIFY workflow_id VARBINARY(1000) NOT NULL;
ALTER TABLE timer_info_maps MODIFY workflow_id VARBINARY(1000) NOT NULL;
ALTER TABLE child_execution_info_maps MODIFY workflow_id VARBINARY(1000) NOT NULL;
ALTER TABLE request_cancel_info_maps MODIFY workflow_id VARBINARY(1000) NOT NULL;
ALTER TABLE signal_info_maps MODIFY workflow_id VARBINARY(1000) NOT NULL;
ALTER TABLE signals_requested_sets MODIFY workflow_id VARBINARY(1000) NOT NULL;
ALTER TABLE chasm_node_maps MODIFY workflow_id VARBINARY(1000) NOT NULL;
8 changes: 8 additions & 0 deletions schema/mysql/v8/temporal/versioned/v1.20/manifest.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
{
"CurrVersion": "1.20",
"MinCompatibleVersion": "1.0",
"Description": "Increase workflow ID columns to 1000 bytes",
"SchemaUpdateCqlFiles": [
"alter_workflow_id_columns.sql"
]
}
4 changes: 2 additions & 2 deletions schema/mysql/v8/version.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ package v8
// NOTE: whenever there is a new database schema update, plz update the following versions

// Version is the MySQL database release version
const Version = "1.19"
const Version = "1.20"

// VisibilityVersion is the MySQL visibility database release version
const VisibilityVersion = "1.14"
const VisibilityVersion = "1.15"
6 changes: 3 additions & 3 deletions schema/mysql/v8/visibility/schema.sql
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ CREATE TABLE executions_visibility (
_version BIGINT NOT NULL DEFAULT 0, -- increasing version, used to reject upserts which are out of order
start_time DATETIME(6) NOT NULL,
execution_time DATETIME(6) NOT NULL,
workflow_id VARCHAR(255) NOT NULL,
workflow_id VARBINARY(1000) NOT NULL,
workflow_type_name VARCHAR(255) NOT NULL,
status INT NOT NULL, -- enum WorkflowExecutionStatus {RUNNING, COMPLETED, FAILED, CANCELED, TERMINATED, CONTINUED_AS_NEW, TIMED_OUT}
close_time DATETIME(6) NULL,
Expand All @@ -16,9 +16,9 @@ CREATE TABLE executions_visibility (
encoding VARCHAR(64) NOT NULL,
task_queue VARCHAR(255) NOT NULL DEFAULT '',
search_attributes JSON NULL,
parent_workflow_id VARCHAR(255) NULL,
parent_workflow_id VARBINARY(1000) NULL,
parent_run_id VARCHAR(255) NULL,
root_workflow_id VARCHAR(255) NOT NULL DEFAULT '',
root_workflow_id VARBINARY(1000) NOT NULL DEFAULT '',
root_run_id VARCHAR(255) NOT NULL DEFAULT '',

-- Each search attribute has its own generated column.
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
ALTER TABLE executions_visibility MODIFY workflow_id VARBINARY(1000) NOT NULL;
ALTER TABLE executions_visibility MODIFY parent_workflow_id VARBINARY(1000) NULL;
ALTER TABLE executions_visibility MODIFY root_workflow_id VARBINARY(1000) NOT NULL DEFAULT '';
8 changes: 8 additions & 0 deletions schema/mysql/v8/visibility/versioned/v1.15/manifest.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
{
"CurrVersion": "1.15",
"MinCompatibleVersion": "0.1",
"Description": "Increase workflow ID columns to 1000 bytes",
"SchemaUpdateCqlFiles": [
"alter_workflow_id_columns.sql"
]
}
20 changes: 10 additions & 10 deletions schema/postgresql/v12/temporal/schema.sql
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ CREATE TABLE shards (
CREATE TABLE executions(
shard_id INTEGER NOT NULL,
namespace_id BYTEA NOT NULL,
workflow_id VARCHAR(255) NOT NULL,
workflow_id VARCHAR(1000) NOT NULL,
run_id BYTEA NOT NULL,
--
next_event_id BIGINT NOT NULL,
Expand All @@ -46,7 +46,7 @@ CREATE TABLE executions(
CREATE TABLE current_executions(
shard_id INTEGER NOT NULL,
namespace_id BYTEA NOT NULL,
workflow_id VARCHAR(255) NOT NULL,
workflow_id VARCHAR(1000) NOT NULL,
--
run_id BYTEA NOT NULL,
create_request_id VARCHAR(255) NOT NULL,
Expand Down Expand Up @@ -83,7 +83,7 @@ CREATE TABLE current_chasm_executions(
CREATE TABLE buffered_events (
shard_id INTEGER NOT NULL,
namespace_id BYTEA NOT NULL,
workflow_id VARCHAR(255) NOT NULL,
workflow_id VARCHAR(1000) NOT NULL,
run_id BYTEA NOT NULL,
id BIGSERIAL NOT NULL UNIQUE,
--
Expand Down Expand Up @@ -227,7 +227,7 @@ CREATE TABLE activity_info_maps (
-- each row corresponds to one key of one map<string, ActivityInfo>
shard_id INTEGER NOT NULL,
namespace_id BYTEA NOT NULL,
workflow_id VARCHAR(255) NOT NULL,
workflow_id VARCHAR(1000) NOT NULL,
run_id BYTEA NOT NULL,
schedule_id BIGINT NOT NULL,
--
Expand All @@ -239,7 +239,7 @@ CREATE TABLE activity_info_maps (
CREATE TABLE timer_info_maps (
shard_id INTEGER NOT NULL,
namespace_id BYTEA NOT NULL,
workflow_id VARCHAR(255) NOT NULL,
workflow_id VARCHAR(1000) NOT NULL,
run_id BYTEA NOT NULL,
timer_id VARCHAR(255) NOT NULL,
--
Expand All @@ -251,7 +251,7 @@ CREATE TABLE timer_info_maps (
CREATE TABLE child_execution_info_maps (
shard_id INTEGER NOT NULL,
namespace_id BYTEA NOT NULL,
workflow_id VARCHAR(255) NOT NULL,
workflow_id VARCHAR(1000) NOT NULL,
run_id BYTEA NOT NULL,
initiated_id BIGINT NOT NULL,
--
Expand All @@ -263,7 +263,7 @@ CREATE TABLE child_execution_info_maps (
CREATE TABLE request_cancel_info_maps (
shard_id INTEGER NOT NULL,
namespace_id BYTEA NOT NULL,
workflow_id VARCHAR(255) NOT NULL,
workflow_id VARCHAR(1000) NOT NULL,
run_id BYTEA NOT NULL,
initiated_id BIGINT NOT NULL,
--
Expand All @@ -275,7 +275,7 @@ CREATE TABLE request_cancel_info_maps (
CREATE TABLE signal_info_maps (
shard_id INTEGER NOT NULL,
namespace_id BYTEA NOT NULL,
workflow_id VARCHAR(255) NOT NULL,
workflow_id VARCHAR(1000) NOT NULL,
run_id BYTEA NOT NULL,
initiated_id BIGINT NOT NULL,
--
Expand All @@ -287,7 +287,7 @@ CREATE TABLE signal_info_maps (
CREATE TABLE signals_requested_sets (
shard_id INTEGER NOT NULL,
namespace_id BYTEA NOT NULL,
workflow_id VARCHAR(255) NOT NULL,
workflow_id VARCHAR(1000) NOT NULL,
run_id BYTEA NOT NULL,
signal_id VARCHAR(255) NOT NULL,
--
Expand All @@ -297,7 +297,7 @@ CREATE TABLE signals_requested_sets (
CREATE TABLE chasm_node_maps (
shard_id INTEGER NOT NULL,
namespace_id BYTEA NOT NULL,
workflow_id VARCHAR(255) NOT NULL,
workflow_id VARCHAR(1000) NOT NULL,
run_id BYTEA NOT NULL,
chasm_path BYTEA NOT NULL,
--
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
ALTER TABLE executions ALTER COLUMN workflow_id TYPE VARCHAR(1000);
ALTER TABLE current_executions ALTER COLUMN workflow_id TYPE VARCHAR(1000);
ALTER TABLE buffered_events ALTER COLUMN workflow_id TYPE VARCHAR(1000);
ALTER TABLE activity_info_maps ALTER COLUMN workflow_id TYPE VARCHAR(1000);
ALTER TABLE timer_info_maps ALTER COLUMN workflow_id TYPE VARCHAR(1000);
ALTER TABLE child_execution_info_maps ALTER COLUMN workflow_id TYPE VARCHAR(1000);
ALTER TABLE request_cancel_info_maps ALTER COLUMN workflow_id TYPE VARCHAR(1000);
ALTER TABLE signal_info_maps ALTER COLUMN workflow_id TYPE VARCHAR(1000);
ALTER TABLE signals_requested_sets ALTER COLUMN workflow_id TYPE VARCHAR(1000);
ALTER TABLE chasm_node_maps ALTER COLUMN workflow_id TYPE VARCHAR(1000);
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
{
"CurrVersion": "1.20",
"MinCompatibleVersion": "1.0",
"Description": "Increase workflow ID columns to 1000 characters",
"SchemaUpdateCqlFiles": [
"alter_workflow_id_columns.sql"
]
}
4 changes: 2 additions & 2 deletions schema/postgresql/v12/version.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@ package v12

// Version is the Postgres database release version
// Temporal supports both MySQL and Postgres officially, so upgrade should be performed for both MySQL and Postgres
const Version = "1.19"
const Version = "1.20"

// VisibilityVersion is the Postgres visibility database release version
// Temporal supports both MySQL and Postgres officially, so upgrade should be performed for both MySQL and Postgres
const VisibilityVersion = "1.14"
const VisibilityVersion = "1.15"
8 changes: 4 additions & 4 deletions schema/postgresql/v12/visibility/schema.sql
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ CREATE TABLE executions_visibility (
_version BIGINT NOT NULL DEFAULT 0, -- increasing version, used to reject upserts which are out of order
start_time TIMESTAMP NOT NULL,
execution_time TIMESTAMP NOT NULL,
workflow_id VARCHAR(255) NOT NULL,
workflow_id VARCHAR(1000) NOT NULL,
workflow_type_name VARCHAR(255) NOT NULL,
status INTEGER NOT NULL, -- enum WorkflowExecutionStatus {RUNNING, COMPLETED, FAILED, CANCELED, TERMINATED, CONTINUED_AS_NEW, TIMED_OUT}
close_time TIMESTAMP NULL,
Expand All @@ -31,9 +31,9 @@ CREATE TABLE executions_visibility (
encoding VARCHAR(64) NOT NULL,
task_queue VARCHAR(255) NOT NULL DEFAULT '',
search_attributes JSONB NULL,
parent_workflow_id VARCHAR(255) NULL,
parent_workflow_id VARCHAR(1000) NULL,
parent_run_id VARCHAR(255) NULL,
root_workflow_id VARCHAR(255) NOT NULL DEFAULT '',
root_workflow_id VARCHAR(1000) NOT NULL DEFAULT '',
root_run_id VARCHAR(255) NOT NULL DEFAULT '',

-- Each search attribute has its own generated column.
Expand Down Expand Up @@ -187,4 +187,4 @@ CREATE INDEX by_temporal_keyword_03 ON executions_visibility (na
CREATE INDEX by_temporal_keyword_04 ON executions_visibility (namespace_id, TemporalKeyword04, (COALESCE(close_time, '9999-12-31 23:59:59')) DESC, start_time DESC, run_id);
CREATE INDEX by_temporal_low_cardinality_keyword_01 ON executions_visibility (namespace_id, TemporalLowCardinalityKeyword01, (COALESCE(close_time, '9999-12-31 23:59:59')) DESC, start_time DESC, run_id);
CREATE INDEX by_temporal_keyword_list_01 ON executions_visibility USING GIN (namespace_id, TemporalKeywordList01 jsonb_path_ops);
CREATE INDEX by_temporal_keyword_list_02 ON executions_visibility USING GIN (namespace_id, TemporalKeywordList02 jsonb_path_ops);
CREATE INDEX by_temporal_keyword_list_02 ON executions_visibility USING GIN (namespace_id, TemporalKeywordList02 jsonb_path_ops);
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
ALTER TABLE executions_visibility ALTER COLUMN workflow_id TYPE VARCHAR(1000);
ALTER TABLE executions_visibility ALTER COLUMN parent_workflow_id TYPE VARCHAR(1000);
ALTER TABLE executions_visibility ALTER COLUMN root_workflow_id TYPE VARCHAR(1000);
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
{
"CurrVersion": "1.15",
"MinCompatibleVersion": "0.1",
"Description": "Increase workflow ID columns to 1000 characters",
"SchemaUpdateCqlFiles": [
"alter_workflow_id_columns.sql"
]
}
52 changes: 52 additions & 0 deletions service/history/api/command_attr_validator_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package api
import (
"fmt"
"math/rand"
"strings"
"testing"
"time"

Expand Down Expand Up @@ -842,6 +843,57 @@ func (s *commandAttrValidatorSuite) TestValidateStartChildExecutionAttributes_In
}
}

func (s *commandAttrValidatorSuite) TestValidateStartChildExecutionAttributes_WorkflowIDLengthLimit() {
parentInfo := &persistencespb.WorkflowExecutionInfo{
TaskQueue: "test-parent-task-queue",
WorkflowId: "test-parent-wf-id",
WorkflowTypeName: "test-parent-wf-type",
}

for _, tt := range []struct {
name string
workflowID string
expectError bool
}{
{
name: "limit accepted",
workflowID: strings.Repeat("a", 1000),
},
{
name: "over limit rejected",
workflowID: strings.Repeat("a", 1001),
expectError: true,
},
} {
s.Run(tt.name, func() {
attributes := &commandpb.StartChildWorkflowExecutionCommandAttributes{
WorkflowId: tt.workflowID,
WorkflowType: &commonpb.WorkflowType{
Name: "test-child-wf-type",
},
TaskQueue: &taskqueuepb.TaskQueue{
Name: "test-child-task-queue",
},
Namespace: "test-ns",
}
_, err := s.validator.ValidateStartChildExecutionAttributes(
s.testNamespaceID,
s.testNamespaceID,
namespace.Name("test-ns"),
attributes,
parentInfo,
dynamicconfig.GetDurationPropertyFnFilteredByNamespace(time.Second),
)

if tt.expectError {
s.ErrorContains(err, "WorkflowId on StartChildWorkflowExecutionCommand exceeds length limit")
} else {
s.NoError(err)
}
})
}
}

func (s *commandAttrValidatorSuite) TestValidateActivityScheduleAttributes_WorkflowTaskQueue() {
testCases := []struct {
name string
Expand Down
Loading