shared-timestamp-bindings.td 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171
  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. $ set-arg-default single-replica-cluster=quickstart
  10. $ postgres-execute connection=postgres://mz_system:materialize@${testdrive.materialize-internal-sql-addr}
  11. ALTER SYSTEM SET min_timestamp_interval = '90ms'
  12. #
  13. # Make sure that all materialized views dealing with the same source
  14. # see the same records at the same timestamp.
  15. #
  16. # As per Ruchir's idea, this is being tested by running queries like
  17. # SELECT some_view EXCEPT ALL select_some_other_view
  18. # and making sure they return no rows
  19. #
  20. # Unfortunately this failed to reproduce the original problem, so the
  21. # test is being pushed here in the hope that it will somehow end up
  22. # being useful in the future.
  23. #
  24. $ set schema={
  25. "type": "record",
  26. "name": "envelope",
  27. "fields": [
  28. {"name": "a", "type": "long"}
  29. ]
  30. }
  31. $ kafka-create-topic topic=data partitions=16
  32. $ kafka-ingest format=avro topic=data partition=0 schema=${schema}
  33. {"a": 10}
  34. {"a": 5}
  35. $ kafka-ingest format=avro topic=data partition=1 schema=${schema}
  36. {"a": 1}
  37. {"a": 7}
  38. {"a": 6}
  39. $ kafka-ingest format=avro topic=data partition=2 schema=${schema}
  40. {"a": 10}
  41. {"a": 1}
  42. {"a": 7}
  43. {"a": 8}
  44. $ kafka-ingest format=avro topic=data partition=3 schema=${schema}
  45. {"a": 6}
  46. > CREATE CONNECTION kafka_conn
  47. TO KAFKA (BROKER '${testdrive.kafka-addr}', SECURITY PROTOCOL PLAINTEXT);
  48. > CREATE SOURCE direct_source1
  49. IN CLUSTER ${arg.single-replica-cluster}
  50. FROM KAFKA CONNECTION kafka_conn (TOPIC 'testdrive-data-${testdrive.seed}')
  51. WITH (TIMESTAMP INTERVAL '90ms');
  52. > CREATE TABLE direct_source1_tbl FROM SOURCE direct_source1 (REFERENCE "testdrive-data-${testdrive.seed}")
  53. FORMAT AVRO USING SCHEMA '${schema}';
  54. > CREATE SOURCE direct_source2
  55. IN CLUSTER ${arg.single-replica-cluster}
  56. FROM KAFKA CONNECTION kafka_conn (TOPIC 'testdrive-data-${testdrive.seed}')
  57. WITH (TIMESTAMP INTERVAL '100ms');
  58. > CREATE TABLE direct_source2_tbl FROM SOURCE direct_source2 (REFERENCE "testdrive-data-${testdrive.seed}")
  59. FORMAT AVRO USING SCHEMA '${schema}';
  60. $ kafka-ingest format=avro topic=data partition=4 schema=${schema}
  61. {"a": 5}
  62. $ kafka-ingest format=avro topic=data partition=5 schema=${schema}
  63. {"a": 1}
  64. {"a": 10}
  65. {"a": 2}
  66. {"a": 5}
  67. $ kafka-ingest format=avro topic=data partition=6 schema=${schema}
  68. {"a": 9}
  69. {"a": 4}
  70. $ kafka-ingest format=avro topic=data partition=7 schema=${schema}
  71. {"a": 5}
  72. {"a": 8}
  73. {"a": 1}
  74. > CREATE MATERIALIZED VIEW direct_view1a AS SELECT a + 0 AS a FROM direct_source1_tbl;
  75. # Sleep so that the views are not all created at the same time
  76. > SELECT mz_unsafe.mz_sleep(2);
  77. <null>
  78. > CREATE MATERIALIZED VIEW direct_view1b AS SELECT a + 0 AS a FROM direct_source1_tbl;
  79. > CREATE MATERIALIZED VIEW derived_view1a AS SELECT a + 0 AS a FROM direct_view1a;
  80. > SELECT mz_unsafe.mz_sleep(2);
  81. <null>
  82. > CREATE MATERIALIZED VIEW derived_view1b AS SELECT a + 0 AS a FROM direct_view1b;
  83. > CREATE MATERIALIZED VIEW join_view1 AS SELECT a1.a + 0 AS a FROM direct_source1_tbl AS a1, direct_view1a;
  84. > CREATE MATERIALIZED VIEW join_view2 AS SELECT a1.a + 0 AS a FROM direct_view1a AS a1, direct_view1b;
  85. > CREATE MATERIALIZED VIEW join_view3 AS SELECT a2.a + 0 AS a FROM direct_view1a, derived_view1b AS a2;
  86. $ kafka-ingest format=avro topic=data partition=8 schema=${schema}
  87. {"a": 2}
  88. {"a": 8}
  89. {"a": 5}
  90. {"a": 9}
  91. $ kafka-ingest format=avro topic=data partition=9 schema=${schema}
  92. {"a": 6}
  93. $ kafka-ingest format=avro topic=data partition=10 schema=${schema}
  94. {"a": 4}
  95. $ kafka-ingest format=avro topic=data partition=11 schema=${schema}
  96. {"a": 7}
  97. {"a": 2}
  98. {"a": 10}
  99. {"a": 1}
  100. > CREATE MATERIALIZED VIEW check_v1 AS SELECT a + 0 AS a FROM direct_source1_tbl EXCEPT ALL SELECT a - 0 AS a FROM direct_source1_tbl;
  101. > CREATE MATERIALIZED VIEW check_v2 AS SELECT a + 0 AS a FROM direct_view1a EXCEPT ALL SELECT a - 0 AS a FROM direct_view1a;
  102. > CREATE MATERIALIZED VIEW check_v3 AS SELECT a + 0 AS a FROM direct_view1a EXCEPT ALL SELECT a - 0 AS a FROM direct_view1b;
  103. > CREATE MATERIALIZED VIEW check_v4 AS SELECT a + 0 AS a FROM derived_view1a EXCEPT ALL SELECT a - 0 AS a FROM derived_view1a;
  104. > CREATE MATERIALIZED VIEW check_v5 AS SELECT a + 0 AS a FROM derived_view1a EXCEPT ALL SELECT a - 0 AS a FROM derived_view1b;
  105. > CREATE MATERIALIZED VIEW check_v6 AS SELECT a + 0 AS a FROM join_view1 EXCEPT ALL SELECT a - 0 AS a FROM join_view2;
  106. > CREATE MATERIALIZED VIEW check_v7 AS SELECT a + 0 AS a FROM join_view2 EXCEPT ALL SELECT a - 0 AS a FROM join_view3;
  107. $ kafka-ingest format=avro topic=data partition=12 schema=${schema}
  108. {"a": 31}
  109. {"a": 32}
  110. $ kafka-ingest format=avro topic=data partition=13 schema=${schema}
  111. {"a": 33}
  112. {"a": 34}
  113. {"a": 35}
  114. $ kafka-ingest format=avro topic=data partition=14 schema=${schema}
  115. {"a": 36}
  116. {"a": 37}
  117. $ kafka-ingest format=avro topic=data partition=15 schema=${schema}
  118. {"a": 38}
  119. {"a": 39}
  120. {"a": 40}
  121. # Make sure that none of the 'EXCEPT ALL' views above has ever produced any records.
  122. # In case the environment has other replicas
  123. > SET cluster_replica = r1
  124. > SELECT COUNT(*) FROM mz_introspection.mz_records_per_dataflow WHERE name LIKE '%check_v%' AND records > 0;
  125. 0