mirror of
https://github.com/hanzoai/tasks.git
synced 2026-10-04 02:04:03 +00:00
## What changed? This change adds a flag to `temporal-sql-tool` and `temporal-cassandra-tool`'s `update-schema` and `setup-schema` to specify an embedded schema instead of a path to the schema directory or schema file. ``` NAME: temporal-cassandra-tool update-schema - update cassandra schema to a specific version USAGE: temporal-cassandra-tool update-schema [command options] [arguments...] OPTIONS: --version value, -v value target version for the schema update, defaults to latest --schema-dir value, -d value path to directory containing versioned schema --schema-name value, -s value name of embedded versioned schema, one of: [cassandra/temporal cassandra/visibility] ``` ``` NAME: temporal-sql-tool update-schema - update sql schema to a specific version USAGE: temporal-sql-tool update-schema [command options] [arguments...] OPTIONS: --version value, -v value target version for the schema update, defaults to latest --schema-dir value, -d value path to directory containing versioned schema --schema-name value, -s value name of embedded versioned schema, one of: [mysql/v57/temporal mysql/v57/visibility mysql/v8/temporal mysql/v8/visibility postgresql/v96/temporal postgresql/v96/visibility postgresql/v12/temporal postgresql/v12/visibility] ``` ## Why? We want to embed the db schemas in the `temporal-sql-tool` and `temporal-cassandra-tool` with `go:embed` so that customers can simply specify which schema they want using a flag instead of having to copy the schema files to wherever they're running the db tool and passing the path to the schema. https://github.com/temporalio/temporal/issues/2059 ## How did you test it? I wrote a new unit test for reading the embedded file system, and the existing codepath of the changed functions are all tested by the existing unit tests. I also updated the unit test for config validation to reflect the new changes. I tested this locally with a locally running Postgres. Since the more complex changes are in `updatetask.go`, which is shared by the sql and the cassandra tool, I think there is no need to also test with a real cassandra db. I also built the cassandra command line tool and confirmed that the flags and validation checks behaved as expected. ## Potential risks Schema updates could fail. But the changes are pretty contained to the new `-s` flag which isn't used anywhere in production yet, so the risk is very low. The code for the `-d` flag remained basically the same. ## Is hotfix candidate? No
Using the SQL schema tool
This package contains the tooling for temporal sql operations. The tooling itself is agnostic of the storage engine behind the sql interface. So, this same tool can be used against, say, OracleDB and MySQLDB
For localhost development
SQL_USER=$USERNAME SQL_PASSWORD=$PASSWD make install-schema-mysql
For production
Create the binary
- Run
make temporal-sql-toolon the root of repositroy - You should see an executable
temporal-sql-tool - Temporal officially support MySQL and Postgres for SQL.
- For other SQL database, you can add it easily as we do for MySQL/Postgres following our code in sql-extensions
Do one time database creation and schema setup for a new cluster
- All command below are taking MySQL as example. For postgres, simply use with "--plugin postgres"
./temporal-sql-tool --ep $SQL_HOST -p $port --db temporal --plugin mysql create
./temporal-sql-tool --ep $SQL_HOST -p $port --db temporal_visibility --plugin mysql create
./temporal-sql-tool --ep $SQL_HOST -p $port --plugin mysql --db temporal setup-schema -v 0.0 -- this sets up just the schema version tables with initial version of 0.0
./temporal-sql-tool --ep $SQL_HOST -p $port --plugin mysql --db temporal update-schema -d ./schema/mysql/v57/temporal/versioned -- upgrades your schema to the latest version
./temporal-sql-tool --ep $SQL_HOST -p $port --plugin mysql --db temporal_visibility setup-schema -v 0.0 -- this sets up just the schema version tables with initial version of 0.0 for visibility
./temporal-sql-tool --ep $SQL_HOST -p $port --plugin mysql --db temporal_visibility update-schema -d ./schema/mysql/v57/visibility/versioned -- upgrades your schema to the latest version for visibility
Update schema as part of a release
You can only upgrade to a new version after the initial setup done above.
./temporal-sql-tool --ep $SQL_HOST -p $port --plugin mysql --db temporal update-schema -d ./schema/mysql/v57/temporal/versioned -v x.x -- executes the upgrade to version x.x
./temporal-sql-tool --ep $SQL_HOST -p $port --plugin mysql --db temporal_visibility update-schema -d ./schema/mysql/v57/visibility/versioned -v x.x -- executes the upgrade to version x.x