blue-green.td 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180
  1. # Copyright Materialize, Inc. and contributors. All rights reserved.
  2. #
  3. # Use of this software is governed by the Business Source License
  4. # included in the LICENSE file at the root of this repository.
  5. #
  6. # As of the Change Date specified in that file, in accordance with
  7. # the Business Source License, use of this software will be governed
  8. # by the Apache License, Version 2.0.
  9. $ postgres-execute connection=postgres://mz_system:materialize@${testdrive.materialize-internal-sql-addr}
  10. ALTER SYSTEM SET enable_alter_swap = true;
  11. > CREATE SCHEMA blue;
  12. > CREATE SCHEMA green;
  13. $ set-from-sql var=og-blue-schema-id
  14. SELECT id FROM mz_schemas WHERE name = 'blue';
  15. $ set-from-sql var=og-green-schema-id
  16. SELECT id FROM mz_schemas WHERE name = 'green';
  17. > BEGIN;
  18. > ALTER SCHEMA blue SWAP WITH green;
  19. > COMMIT;
  20. > SELECT name FROM mz_schemas WHERE id = '${og-blue-schema-id}'
  21. "green"
  22. > BEGIN
  23. > ALTER SCHEMA green RENAME TO purple;
  24. > ALTER SCHEMA purple RENAME TO orange;
  25. > ALTER SCHEMA orange RENAME TO green;
  26. > ALTER SCHEMA green SWAP WITH blue;
  27. > COMMIT
  28. > SELECT name FROM mz_schemas WHERE ID = '${og-blue-schema-id}'
  29. "blue"
  30. > BEGIN
  31. > ALTER SCHEMA blue RENAME TO purple
  32. > ROLLBACK
  33. # Should stay blue since we rolled back the transaction.
  34. > SELECT name FROM mz_schemas WHERE ID = '${og-blue-schema-id}'
  35. "blue"
  36. # Cleanup.
  37. > DROP SCHEMA blue
  38. > DROP SCHEMA green
  39. # Mock out a real-ish Blue/Green scenario.
  40. > CREATE TABLE source_data (x int)
  41. > INSERT INTO source_data VALUES (10), (20), (30)
  42. > CREATE CLUSTER blue_compute SIZE '1'
  43. > CREATE CLUSTER blue_serving SIZE '1'
  44. > CREATE SCHEMA blue
  45. > CREATE MATERIALIZED VIEW blue.mv1 IN CLUSTER blue_compute AS ( SELECT SUM(x) FROM source_data );
  46. > CREATE DEFAULT INDEX IN CLUSTER blue_serving ON blue.mv1;
  47. > SET cluster TO blue_serving;
  48. > SELECT * FROM blue.mv1;
  49. 60
  50. ? EXPLAIN OPTIMIZED PLAN AS VERBOSE TEXT FOR SELECT * FROM blue.mv1;
  51. Explained Query (fast path):
  52. ReadIndex on=materialize.blue.mv1 mv1_primary_idx=[*** full scan ***]
  53. Used Indexes:
  54. - materialize.blue.mv1_primary_idx (*** full scan ***)
  55. Target cluster: blue_serving
  56. > SET cluster TO quickstart;
  57. # Spin up a new stack.
  58. > CREATE CLUSTER green_compute SIZE '1'
  59. > CREATE CLUSTER green_serving SIZE '1'
  60. > CREATE SCHEMA green
  61. > CREATE MATERIALIZED VIEW green.mv1 IN CLUSTER green_compute AS ( SELECT AVG(x) FROM source_data );
  62. > CREATE DEFAULT INDEX IN CLUSTER green_serving ON green.mv1;
  63. > SET cluster to green_serving;
  64. > SELECT * FROM green.mv1;
  65. 20
  66. ? EXPLAIN OPTIMIZED PLAN AS VERBOSE TEXT FOR SELECT * FROM green.mv1;
  67. Explained Query (fast path):
  68. ReadIndex on=materialize.green.mv1 mv1_primary_idx=[*** full scan ***]
  69. Used Indexes:
  70. - materialize.green.mv1_primary_idx (*** full scan ***)
  71. Target cluster: green_serving
  72. > SET cluster to defaut;
  73. # Do the swap!
  74. $ set-from-sql var=og-green-schema-id
  75. SELECT id FROM mz_schemas WHERE name = 'green';
  76. $ set-from-sql var=og-green-compute-id
  77. SELECT id FROM mz_clusters WHERE name = 'green_compute';
  78. $ set-from-sql var=og-green-serving-id
  79. SELECT id FROM mz_clusters WHERE name = 'green_serving';
  80. > BEGIN;
  81. > ALTER SCHEMA blue SWAP WITH green;
  82. > ALTER CLUSTER blue_serving SWAP WITH green_serving;
  83. > ALTER CLUSTER blue_compute SWAP WITH green_compute;
  84. > COMMIT;
  85. # Validate the swap.
  86. > SET CLUSTER to blue_serving;
  87. > SELECT * FROM blue.mv1;
  88. 20
  89. ? EXPLAIN OPTIMIZED PLAN AS VERBOSE TEXT FOR SELECT * FROM blue.mv1;
  90. Explained Query (fast path):
  91. ReadIndex on=materialize.blue.mv1 mv1_primary_idx=[*** full scan ***]
  92. Used Indexes:
  93. - materialize.blue.mv1_primary_idx (*** full scan ***)
  94. Target cluster: blue_serving
  95. > SELECT name FROM mz_schemas WHERE id = '${og-green-schema-id}';
  96. "blue"
  97. > SELECT name FROM mz_clusters WHERE id = '${og-green-compute-id}';
  98. "blue_compute"
  99. > SELECT name FROM mz_clusters WHERE id = '${og-green-serving-id}';
  100. "blue_serving"
  101. # Drop unused resources.
  102. > DROP CLUSTER green_compute CASCADE;
  103. > DROP CLUSTER green_serving CASCADE;
  104. # Make sure everything still works.
  105. > SELECT * FROM blue.mv1;
  106. 20
  107. ? EXPLAIN OPTIMIZED PLAN AS VERBOSE TEXT FOR SELECT * FROM blue.mv1;
  108. Explained Query (fast path):
  109. ReadIndex on=materialize.blue.mv1 mv1_primary_idx=[*** full scan ***]
  110. Used Indexes:
  111. - materialize.blue.mv1_primary_idx (*** full scan ***)
  112. Target cluster: blue_serving