@rocicorp/zero 0.23.2025081401 → 0.23.2025081901

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (202) hide show
  1. package/out/analyze-query/src/bin-analyze.d.ts.map +1 -1
  2. package/out/analyze-query/src/bin-analyze.js +56 -99
  3. package/out/analyze-query/src/bin-analyze.js.map +1 -1
  4. package/out/analyze-query/src/explain-queries.d.ts +4 -0
  5. package/out/analyze-query/src/explain-queries.d.ts.map +1 -0
  6. package/out/analyze-query/src/explain-queries.js +18 -0
  7. package/out/analyze-query/src/explain-queries.js.map +1 -0
  8. package/out/analyze-query/src/run-ast.d.ts +29 -0
  9. package/out/analyze-query/src/run-ast.d.ts.map +1 -0
  10. package/out/analyze-query/src/run-ast.js +68 -0
  11. package/out/analyze-query/src/run-ast.js.map +1 -0
  12. package/out/{chunk-KKPRF2XZ.js → chunk-DYTMKRKN.js} +124 -63
  13. package/out/{chunk-KKPRF2XZ.js.map → chunk-DYTMKRKN.js.map} +4 -4
  14. package/out/{chunk-O536GEIT.js → chunk-RPVWLROJ.js} +80 -35
  15. package/out/{chunk-O536GEIT.js.map → chunk-RPVWLROJ.js.map} +3 -3
  16. package/out/{chunk-ZIZNSAHP.js → chunk-ZOMIZNT3.js} +55 -58
  17. package/out/chunk-ZOMIZNT3.js.map +7 -0
  18. package/out/{inspector-J5P4DOGH.js → inspector-NC47TWFX.js} +4 -3
  19. package/out/{inspector-J5P4DOGH.js.map → inspector-NC47TWFX.js.map} +2 -2
  20. package/out/react.js +2 -2
  21. package/out/solid.js +3 -3
  22. package/out/zero/package.json +1 -1
  23. package/out/zero/src/server/reaper.d.ts +2 -0
  24. package/out/zero/src/server/reaper.d.ts.map +1 -0
  25. package/out/zero/src/server/reaper.js +2 -0
  26. package/out/zero/src/server/reaper.js.map +1 -0
  27. package/out/zero-cache/src/auth/write-authorizer.d.ts.map +1 -1
  28. package/out/zero-cache/src/auth/write-authorizer.js +2 -3
  29. package/out/zero-cache/src/auth/write-authorizer.js.map +1 -1
  30. package/out/zero-cache/src/config/zero-config.d.ts +4 -0
  31. package/out/zero-cache/src/config/zero-config.d.ts.map +1 -1
  32. package/out/zero-cache/src/config/zero-config.js +9 -1
  33. package/out/zero-cache/src/config/zero-config.js.map +1 -1
  34. package/out/zero-cache/src/custom-queries/transform-query.d.ts +2 -3
  35. package/out/zero-cache/src/custom-queries/transform-query.d.ts.map +1 -1
  36. package/out/zero-cache/src/custom-queries/transform-query.js +18 -4
  37. package/out/zero-cache/src/custom-queries/transform-query.js.map +1 -1
  38. package/out/zero-cache/src/observability/events.js +1 -2
  39. package/out/zero-cache/src/observability/events.js.map +1 -1
  40. package/out/zero-cache/src/server/inspect-metrics-delegate.d.ts +23 -0
  41. package/out/zero-cache/src/server/inspect-metrics-delegate.d.ts.map +1 -0
  42. package/out/zero-cache/src/server/inspect-metrics-delegate.js +55 -0
  43. package/out/zero-cache/src/server/inspect-metrics-delegate.js.map +1 -0
  44. package/out/zero-cache/src/server/main.d.ts.map +1 -1
  45. package/out/zero-cache/src/server/main.js +12 -15
  46. package/out/zero-cache/src/server/main.js.map +1 -1
  47. package/out/zero-cache/src/server/reaper.d.ts +3 -0
  48. package/out/zero-cache/src/server/reaper.d.ts.map +1 -0
  49. package/out/zero-cache/src/server/reaper.js +31 -0
  50. package/out/zero-cache/src/server/reaper.js.map +1 -0
  51. package/out/zero-cache/src/server/runner/zero-dispatcher.d.ts.map +1 -1
  52. package/out/zero-cache/src/server/runner/zero-dispatcher.js +6 -0
  53. package/out/zero-cache/src/server/runner/zero-dispatcher.js.map +1 -1
  54. package/out/zero-cache/src/server/syncer.d.ts.map +1 -1
  55. package/out/zero-cache/src/server/syncer.js +3 -1
  56. package/out/zero-cache/src/server/syncer.js.map +1 -1
  57. package/out/zero-cache/src/services/analyze.d.ts +6 -0
  58. package/out/zero-cache/src/services/analyze.d.ts.map +1 -0
  59. package/out/zero-cache/src/services/analyze.js +70 -0
  60. package/out/zero-cache/src/services/analyze.js.map +1 -0
  61. package/out/zero-cache/src/services/change-source/custom/change-source.js +1 -1
  62. package/out/zero-cache/src/services/change-source/pg/initial-sync.d.ts.map +1 -1
  63. package/out/zero-cache/src/services/change-source/pg/initial-sync.js +8 -3
  64. package/out/zero-cache/src/services/change-source/pg/initial-sync.js.map +1 -1
  65. package/out/zero-cache/src/services/mutagen/pusher.d.ts +38 -2
  66. package/out/zero-cache/src/services/mutagen/pusher.d.ts.map +1 -1
  67. package/out/zero-cache/src/services/replicator/change-processor.d.ts +3 -2
  68. package/out/zero-cache/src/services/replicator/change-processor.d.ts.map +1 -1
  69. package/out/zero-cache/src/services/replicator/change-processor.js +39 -34
  70. package/out/zero-cache/src/services/replicator/change-processor.js.map +1 -1
  71. package/out/zero-cache/src/services/replicator/incremental-sync.d.ts.map +1 -1
  72. package/out/zero-cache/src/services/replicator/incremental-sync.js +1 -3
  73. package/out/zero-cache/src/services/replicator/incremental-sync.js.map +1 -1
  74. package/out/zero-cache/src/services/replicator/replication-status.js +1 -1
  75. package/out/zero-cache/src/services/replicator/replication-status.js.map +1 -1
  76. package/out/zero-cache/src/services/running-state.d.ts +5 -0
  77. package/out/zero-cache/src/services/running-state.d.ts.map +1 -1
  78. package/out/zero-cache/src/services/running-state.js +8 -1
  79. package/out/zero-cache/src/services/running-state.js.map +1 -1
  80. package/out/zero-cache/src/services/view-syncer/client-handler.d.ts +2 -0
  81. package/out/zero-cache/src/services/view-syncer/client-handler.d.ts.map +1 -1
  82. package/out/zero-cache/src/services/view-syncer/client-handler.js +3 -0
  83. package/out/zero-cache/src/services/view-syncer/client-handler.js.map +1 -1
  84. package/out/zero-cache/src/services/view-syncer/cvr-purger.d.ts +16 -0
  85. package/out/zero-cache/src/services/view-syncer/cvr-purger.d.ts.map +1 -0
  86. package/out/zero-cache/src/services/view-syncer/cvr-purger.js +86 -0
  87. package/out/zero-cache/src/services/view-syncer/cvr-purger.js.map +1 -0
  88. package/out/zero-cache/src/services/view-syncer/pipeline-driver.d.ts +16 -9
  89. package/out/zero-cache/src/services/view-syncer/pipeline-driver.d.ts.map +1 -1
  90. package/out/zero-cache/src/services/view-syncer/pipeline-driver.js +50 -30
  91. package/out/zero-cache/src/services/view-syncer/pipeline-driver.js.map +1 -1
  92. package/out/zero-cache/src/services/view-syncer/schema/cvr.d.ts.map +1 -1
  93. package/out/zero-cache/src/services/view-syncer/schema/cvr.js +36 -26
  94. package/out/zero-cache/src/services/view-syncer/schema/cvr.js.map +1 -1
  95. package/out/zero-cache/src/services/view-syncer/schema/init.d.ts.map +1 -1
  96. package/out/zero-cache/src/services/view-syncer/schema/init.js +27 -0
  97. package/out/zero-cache/src/services/view-syncer/schema/init.js.map +1 -1
  98. package/out/zero-cache/src/services/view-syncer/view-syncer.d.ts +2 -9
  99. package/out/zero-cache/src/services/view-syncer/view-syncer.d.ts.map +1 -1
  100. package/out/zero-cache/src/services/view-syncer/view-syncer.js +93 -75
  101. package/out/zero-cache/src/services/view-syncer/view-syncer.js.map +1 -1
  102. package/out/zero-cache/src/types/pg.d.ts +1 -1
  103. package/out/zero-cache/src/types/pg.js +1 -1
  104. package/out/zero-client/src/client/context.d.ts +1 -0
  105. package/out/zero-client/src/client/context.d.ts.map +1 -1
  106. package/out/zero-client/src/client/inspector/inspector.d.ts.map +1 -1
  107. package/out/zero-client/src/client/inspector/types.d.ts +1 -0
  108. package/out/zero-client/src/client/inspector/types.d.ts.map +1 -1
  109. package/out/zero-client/src/client/zero.d.ts.map +1 -1
  110. package/out/zero-client/src/mod.d.ts +1 -1
  111. package/out/zero-client/src/mod.d.ts.map +1 -1
  112. package/out/zero-events/src/status.d.ts +10 -9
  113. package/out/zero-events/src/status.d.ts.map +1 -1
  114. package/out/zero-events/src/status.js +7 -10
  115. package/out/zero-events/src/status.js.map +1 -1
  116. package/out/zero-protocol/src/custom-queries.d.ts +77 -5
  117. package/out/zero-protocol/src/custom-queries.d.ts.map +1 -1
  118. package/out/zero-protocol/src/custom-queries.js +19 -1
  119. package/out/zero-protocol/src/custom-queries.js.map +1 -1
  120. package/out/zero-protocol/src/down.d.ts +19 -1
  121. package/out/zero-protocol/src/down.d.ts.map +1 -1
  122. package/out/zero-protocol/src/down.js +2 -1
  123. package/out/zero-protocol/src/down.js.map +1 -1
  124. package/out/zero-protocol/src/inspect-down.d.ts +8 -0
  125. package/out/zero-protocol/src/inspect-down.d.ts.map +1 -1
  126. package/out/zero-protocol/src/inspect-down.js +1 -0
  127. package/out/zero-protocol/src/inspect-down.js.map +1 -1
  128. package/out/zero-protocol/src/protocol-version.d.ts +1 -1
  129. package/out/zero-protocol/src/protocol-version.d.ts.map +1 -1
  130. package/out/zero-protocol/src/protocol-version.js +3 -1
  131. package/out/zero-protocol/src/protocol-version.js.map +1 -1
  132. package/out/zero-server/src/mod.d.ts +1 -0
  133. package/out/zero-server/src/mod.d.ts.map +1 -1
  134. package/out/zero-server/src/mod.js +1 -0
  135. package/out/zero-server/src/mod.js.map +1 -1
  136. package/out/zero-server/src/process-mutations.d.ts +46 -0
  137. package/out/zero-server/src/process-mutations.d.ts.map +1 -0
  138. package/out/zero-server/src/process-mutations.js +187 -0
  139. package/out/zero-server/src/process-mutations.js.map +1 -0
  140. package/out/zero-server/src/push-processor.d.ts +2 -27
  141. package/out/zero-server/src/push-processor.d.ts.map +1 -1
  142. package/out/zero-server/src/push-processor.js +17 -154
  143. package/out/zero-server/src/push-processor.js.map +1 -1
  144. package/out/zero-server/src/queries/process-queries.d.ts +1 -1
  145. package/out/zero-server/src/queries/process-queries.d.ts.map +1 -1
  146. package/out/zero-server/src/queries/process-queries.js +1 -1
  147. package/out/zero-server/src/queries/process-queries.js.map +1 -1
  148. package/out/zero-server/src/zql-database.d.ts +1 -1
  149. package/out/zero-server/src/zql-database.d.ts.map +1 -1
  150. package/out/zero.js +14 -10
  151. package/out/zql/src/builder/builder.d.ts +5 -1
  152. package/out/zql/src/builder/builder.d.ts.map +1 -1
  153. package/out/zql/src/builder/builder.js +49 -16
  154. package/out/zql/src/builder/builder.js.map +1 -1
  155. package/out/zql/src/builder/debug-delegate.d.ts +29 -0
  156. package/out/zql/src/builder/debug-delegate.d.ts.map +1 -0
  157. package/out/zql/src/builder/debug-delegate.js +55 -0
  158. package/out/zql/src/builder/debug-delegate.js.map +1 -0
  159. package/out/zql/src/builder/filter.d.ts +0 -3
  160. package/out/zql/src/builder/filter.d.ts.map +1 -1
  161. package/out/zql/src/builder/filter.js +0 -3
  162. package/out/zql/src/builder/filter.js.map +1 -1
  163. package/out/zql/src/ivm/filter-operators.d.ts +2 -1
  164. package/out/zql/src/ivm/filter-operators.d.ts.map +1 -1
  165. package/out/zql/src/ivm/filter-operators.js +7 -2
  166. package/out/zql/src/ivm/filter-operators.js.map +1 -1
  167. package/out/zql/src/ivm/memory-source.d.ts +2 -0
  168. package/out/zql/src/ivm/memory-source.d.ts.map +1 -1
  169. package/out/zql/src/ivm/memory-source.js.map +1 -1
  170. package/out/zql/src/ivm/source.d.ts +2 -1
  171. package/out/zql/src/ivm/source.d.ts.map +1 -1
  172. package/out/zql/src/query/measure-push-operator.d.ts +19 -0
  173. package/out/zql/src/query/measure-push-operator.d.ts.map +1 -0
  174. package/out/zql/src/query/measure-push-operator.js +36 -0
  175. package/out/zql/src/query/measure-push-operator.js.map +1 -0
  176. package/out/zql/src/query/metrics-delegate.d.ts +3 -0
  177. package/out/zql/src/query/metrics-delegate.d.ts.map +1 -1
  178. package/out/zql/src/query/metrics-delegate.js +6 -1
  179. package/out/zql/src/query/metrics-delegate.js.map +1 -1
  180. package/out/zql/src/query/named.d.ts +38 -9
  181. package/out/zql/src/query/named.d.ts.map +1 -1
  182. package/out/zql/src/query/named.js +49 -24
  183. package/out/zql/src/query/named.js.map +1 -1
  184. package/out/zql/src/query/query-impl.d.ts +1 -1
  185. package/out/zql/src/query/query-impl.d.ts.map +1 -1
  186. package/out/zql/src/query/query-impl.js.map +1 -1
  187. package/out/zqlite/src/query-delegate.d.ts +1 -0
  188. package/out/zqlite/src/query-delegate.d.ts.map +1 -1
  189. package/out/zqlite/src/query-delegate.js +2 -1
  190. package/out/zqlite/src/query-delegate.js.map +1 -1
  191. package/out/zqlite/src/table-source.d.ts +3 -2
  192. package/out/zqlite/src/table-source.d.ts.map +1 -1
  193. package/out/zqlite/src/table-source.js +8 -10
  194. package/out/zqlite/src/table-source.js.map +1 -1
  195. package/package.json +1 -1
  196. package/out/chunk-ZIZNSAHP.js.map +0 -7
  197. package/out/zero-client/src/client/measure-push-operator.d.ts +0 -17
  198. package/out/zero-client/src/client/measure-push-operator.d.ts.map +0 -1
  199. package/out/zqlite/src/runtime-debug.d.ts +0 -23
  200. package/out/zqlite/src/runtime-debug.d.ts.map +0 -1
  201. package/out/zqlite/src/runtime-debug.js +0 -69
  202. package/out/zqlite/src/runtime-debug.js.map +0 -1
@@ -23,6 +23,10 @@ CREATE TABLE ${schema(shard)}.instances (
23
23
  "grantedAt" TIMESTAMPTZ, -- The time at which the current owner was last granted ownership (most recent connection time).
24
24
  "clientSchema" JSONB -- ClientSchema of the client group
25
25
  );
26
+
27
+ -- For garbage collection.
28
+ CREATE INDEX instances_last_active
29
+ ON ${schema(shard)}.instances ("lastActive");
26
30
  `;
27
31
  }
28
32
  export function compareInstancesRows(a, b) {
@@ -39,6 +43,7 @@ CREATE TABLE ${schema(shard)}.clients (
39
43
  CONSTRAINT fk_clients_client_group
40
44
  FOREIGN KEY("clientGroupID")
41
45
  REFERENCES ${schema(shard)}.instances("clientGroupID")
46
+ ON DELETE CASCADE
42
47
  );
43
48
 
44
49
  `;
@@ -69,6 +74,7 @@ CREATE TABLE ${schema(shard)}.queries (
69
74
  CONSTRAINT fk_queries_client_group
70
75
  FOREIGN KEY("clientGroupID")
71
76
  REFERENCES ${schema(shard)}.instances("clientGroupID")
77
+ ON DELETE CASCADE
72
78
  );
73
79
 
74
80
  -- For catchup patches.
@@ -163,11 +169,33 @@ export function compareRowsRows(a, b) {
163
169
  return stringCompare(stringifySorted(a.rowKey), stringifySorted(b.rowKey));
164
170
  }
165
171
  /**
172
+ * The version of the data in the `cvr.rows` table. This may lag
173
+ * `version` in `cvr.instances` but eventually catches up, modulo
174
+ * exceptional circumstances like a server crash.
175
+ *
176
+ * The `rowsVersion` is tracked in a separate table (as opposed to
177
+ * a column in the `cvr.instances` table) so that general `cvr` updates
178
+ * and `row` updates can be executed independently without serialization
179
+ * conflicts.
180
+ *
166
181
  * Note: Although `clientGroupID` logically references the same column in
167
182
  * `cvr.instances`, a FOREIGN KEY constraint must not be declared as the
168
183
  * `cvr.rows` TABLE needs to be updated without affecting the
169
184
  * `SELECT ... FOR UPDATE` lock when `cvr.instances` is updated.
170
185
  */
186
+ export function createRowsVersionTable(shard) {
187
+ return `
188
+ CREATE TABLE ${schema(shard)}."rowsVersion" (
189
+ "clientGroupID" TEXT PRIMARY KEY,
190
+ "version" TEXT NOT NULL
191
+ );
192
+ `;
193
+ }
194
+ /**
195
+ * CVR `rows` are updated asynchronously from the CVR metadata
196
+ * (i.e. `instances`). The `rowsVersion` table is updated atomically with
197
+ * updates to the `rows` data.
198
+ */
171
199
  function createRowsTable(shard) {
172
200
  return `
173
201
  CREATE TABLE ${schema(shard)}.rows (
@@ -179,7 +207,12 @@ CREATE TABLE ${schema(shard)}.rows (
179
207
  "patchVersion" TEXT NOT NULL,
180
208
  "refCounts" JSONB, -- {[queryHash: string]: number}, NULL for tombstone
181
209
 
182
- PRIMARY KEY ("clientGroupID", "schema", "table", "rowKey")
210
+ PRIMARY KEY ("clientGroupID", "schema", "table", "rowKey"),
211
+
212
+ CONSTRAINT fk_rows_client_group
213
+ FOREIGN KEY("clientGroupID")
214
+ REFERENCES ${schema(shard)}."rowsVersion" ("clientGroupID")
215
+ ON DELETE CASCADE
183
216
  );
184
217
 
185
218
  -- For catchup patches.
@@ -192,37 +225,14 @@ CREATE INDEX row_ref_counts ON ${schema(shard)}.rows
192
225
  USING GIN ("refCounts");
193
226
  `;
194
227
  }
195
- /**
196
- * The version of the data in the `cvr.rows` table. This may lag
197
- * `version` in `cvr.instances` but eventually catches up, modulo
198
- * exceptional circumstances like a server crash.
199
- *
200
- * The `rowsVersion` is tracked in a separate table (as opposed to
201
- * a column in the `cvr.instances` table) so that general `cvr` updates
202
- * and `row` updates can be executed independently without serialization
203
- * conflicts.
204
- *
205
- * Note: Although `clientGroupID` logically references the same column in
206
- * `cvr.instances`, a FOREIGN KEY constraint must not be declared as the
207
- * `cvr.rows` TABLE needs to be updated without affecting the
208
- * `SELECT ... FOR UPDATE` lock when `cvr.instances` is updated.
209
- */
210
- export function createRowsVersionTable(shard) {
211
- return `
212
- CREATE TABLE ${schema(shard)}."rowsVersion" (
213
- "clientGroupID" TEXT PRIMARY KEY,
214
- "version" TEXT NOT NULL
215
- );
216
- `;
217
- }
218
228
  function createTables(shard) {
219
229
  return (createSchema(shard) +
220
230
  createInstancesTable(shard) +
221
231
  createClientsTable(shard) +
222
232
  createQueriesTable(shard) +
223
233
  createDesiresTable(shard) +
224
- createRowsTable(shard) +
225
- createRowsVersionTable(shard));
234
+ createRowsVersionTable(shard) +
235
+ createRowsTable(shard));
226
236
  }
227
237
  export async function setupCVRTables(lc, db, shard) {
228
238
  lc.info?.(`Setting up CVR tables`);
@@ -1 +1 @@
1
- {"version":3,"file":"cvr.js","sourceRoot":"","sources":["../../../../../../../zero-cache/src/services/view-syncer/schema/cvr.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cvr.js","sourceRoot":"","sources":["../../../../../../../zero-cache/src/services/view-syncer/schema/cvr.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../../../../../../zero-cache/src/services/view-syncer/schema/init.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,UAAU,EAAC,MAAM,kBAAkB,CAAC;AAOjD,OAAO,KAAK,EAAC,UAAU,EAAC,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAY,KAAK,OAAO,EAAC,MAAM,0BAA0B,CAAC;AAGjE,wBAAsB,oBAAoB,CACxC,GAAG,EAAE,UAAU,EACf,EAAE,EAAE,UAAU,EACd,KAAK,EAAE,OAAO,GACb,OAAO,CAAC,IAAI,CAAC,CAuJf"}
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../../../../../../zero-cache/src/services/view-syncer/schema/init.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,UAAU,EAAC,MAAM,kBAAkB,CAAC;AAOjD,OAAO,KAAK,EAAC,UAAU,EAAC,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAY,KAAK,OAAO,EAAC,MAAM,0BAA0B,CAAC;AAGjE,wBAAsB,oBAAoB,CACxC,GAAG,EAAE,UAAU,EACf,EAAE,EAAE,UAAU,EACd,KAAK,EAAE,OAAO,GACb,OAAO,CAAC,IAAI,CAAC,CAoLf"}
@@ -92,6 +92,29 @@ export async function initViewSyncerSchema(log, db, shard) {
92
92
  await tx `ALTER TABLE ${tx(schema)}.instances ADD COLUMN "ttlClock" DOUBLE PRECISION NOT NULL DEFAULT 0`;
93
93
  },
94
94
  };
95
+ const migratedV13ToV14 = {
96
+ migrateSchema: async (_, sql) => {
97
+ await sql `
98
+ CREATE INDEX instances_last_active ON ${sql(schema)}.instances ("lastActive");
99
+ `;
100
+ // Update / add foreign key constraints to cascade deletes.
101
+ for (const [table, reference] of [
102
+ ['clients', 'instances'],
103
+ ['queries', 'instances'],
104
+ ['rows', 'rowsVersion'],
105
+ ]) {
106
+ const constraint = sql(`fk_${table}_client_group`);
107
+ await sql `
108
+ ALTER TABLE ${sql(schema)}.${sql(table)} DROP CONSTRAINT IF EXISTS ${constraint}`;
109
+ await sql `
110
+ ALTER TABLE ${sql(schema)}.${sql(table)} ADD CONSTRAINT ${constraint}
111
+ FOREIGN KEY("clientGroupID")
112
+ REFERENCES ${sql(schema)}.${sql(reference)} ("clientGroupID")
113
+ ON DELETE CASCADE;
114
+ `;
115
+ }
116
+ },
117
+ };
95
118
  const schemaVersionMigrationMap = {
96
119
  2: migrateV1toV2,
97
120
  3: migrateV2ToV3,
@@ -113,6 +136,10 @@ export async function initViewSyncerSchema(log, db, shard) {
113
136
  12: migratedV11ToV12,
114
137
  // V13 adds instances."ttlClock"
115
138
  13: migratedV12ToV13,
139
+ // V14 adds an index on instances."lastActive" and a FK constraint
140
+ // from rows."clientGroupID" to rowsVersion."clientGroupID" for
141
+ // garbage collection
142
+ 14: migratedV13ToV14,
116
143
  };
117
144
  await runSchemaMigrations(log, 'view-syncer', cvrSchema(shard), db, setupMigration, schemaVersionMigrationMap);
118
145
  }
@@ -1 +1 @@
1
- {"version":3,"file":"init.js","sourceRoot":"","sources":["../../../../../../../zero-cache/src/services/view-syncer/schema/init.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../../../../../../zero-cache/src/services/view-syncer/schema/init.ts"],"names":[],"mappings":"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"}
@@ -1,12 +1,12 @@
1
1
  import type { LogContext } from '@rocicorp/logger';
2
2
  import type { JWTPayload } from 'jose';
3
- import { TDigest } from '../../../../shared/src/tdigest.ts';
4
3
  import type { ChangeDesiredQueriesMessage } from '../../../../zero-protocol/src/change-desired-queries.ts';
5
4
  import type { InitConnectionMessage } from '../../../../zero-protocol/src/connect.ts';
6
5
  import type { DeleteClientsMessage } from '../../../../zero-protocol/src/delete-clients.ts';
7
6
  import type { Downstream } from '../../../../zero-protocol/src/down.ts';
8
7
  import type { InspectUpMessage } from '../../../../zero-protocol/src/inspect-up.ts';
9
8
  import { type ZeroConfig } from '../../config/zero-config.ts';
9
+ import { InspectMetricsDelegate } from '../../server/inspect-metrics-delegate.ts';
10
10
  import type { PostgresDB } from '../../types/pg.ts';
11
11
  import type { ShardID } from '../../types/shards.ts';
12
12
  import type { Source } from '../../types/streams.ts';
@@ -28,13 +28,6 @@ export type SyncContext = {
28
28
  readonly tokenData: TokenData | undefined;
29
29
  readonly httpCookie: string | undefined;
30
30
  };
31
- /**
32
- * Server-side metrics collected for queries during materialization.
33
- * These metrics are reported via the inspector and complement client-side metrics.
34
- */
35
- export type ServerMetrics = {
36
- 'query-materialization-server': TDigest;
37
- };
38
31
  export interface ViewSyncer {
39
32
  initConnection(ctx: SyncContext, msg: InitConnectionMessage): Source<Downstream>;
40
33
  changeDesiredQueries(ctx: SyncContext, msg: ChangeDesiredQueriesMessage): Promise<void>;
@@ -59,7 +52,7 @@ type PartialZeroConfig = Pick<ZeroConfig, 'query' | 'serverVersion'>;
59
52
  export declare class ViewSyncerService implements ViewSyncer, ActivityBasedService {
60
53
  #private;
61
54
  readonly id: string;
62
- constructor(config: PartialZeroConfig, lc: LogContext, shard: ShardID, taskID: string, clientGroupID: string, cvrDb: PostgresDB, upstreamDb: PostgresDB | undefined, pipelineDriver: PipelineDriver, versionChanges: Subscription<ReplicaState>, drainCoordinator: DrainCoordinator, slowHydrateThreshold: number, keepaliveMs?: number, setTimeoutFn?: SetTimeout);
55
+ constructor(config: PartialZeroConfig, lc: LogContext, shard: ShardID, taskID: string, clientGroupID: string, cvrDb: PostgresDB, upstreamDb: PostgresDB | undefined, pipelineDriver: PipelineDriver, versionChanges: Subscription<ReplicaState>, drainCoordinator: DrainCoordinator, slowHydrateThreshold: number, inspectMetricsDelegate: InspectMetricsDelegate, keepaliveMs?: number, setTimeoutFn?: SetTimeout);
63
56
  run(): Promise<void>;
64
57
  /**
65
58
  * Guarantees that the ViewSyncer will remain running for at least
@@ -1 +1 @@
1
- {"version":3,"file":"view-syncer.d.ts","sourceRoot":"","sources":["../../../../../../zero-cache/src/services/view-syncer/view-syncer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"view-syncer.d.ts","sourceRoot":"","sources":["../../../../../../zero-cache/src/services/view-syncer/view-syncer.ts"],"names":[],"mappings":"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"}
@@ -7,15 +7,14 @@ import { assert, unreachable } from "../../../../shared/src/asserts.js";
7
7
  import { stringify } from "../../../../shared/src/bigint-json.js";
8
8
  import { CustomKeyMap } from "../../../../shared/src/custom-key-map.js";
9
9
  import { must } from "../../../../shared/src/must.js";
10
- import { mapValues } from "../../../../shared/src/objects.js";
11
10
  import { randInt } from "../../../../shared/src/rand.js";
12
- import { TDigest } from "../../../../shared/src/tdigest.js";
13
11
  import { ErrorKind } from "../../../../zero-protocol/src/error-kind.js";
14
12
  import { clampTTL, MAX_TTL_MS } from "../../../../zql/src/query/ttl.js";
15
13
  import { transformAndHashQuery, } from "../../auth/read-authorizer.js";
16
14
  import { getServerVersion } from "../../config/zero-config.js";
17
15
  import { CustomQueryTransformer } from "../../custom-queries/transform-query.js";
18
16
  import { getOrCreateCounter, getOrCreateHistogram, getOrCreateUpDownCounter, } from "../../observability/metrics.js";
17
+ import { InspectMetricsDelegate } from "../../server/inspect-metrics-delegate.js";
19
18
  import { ErrorForClient, getLogLevel } from "../../types/error-for-client.js";
20
19
  import { rowIDString } from "../../types/row-key.js";
21
20
  import { Subscription } from "../../types/subscription.js";
@@ -27,6 +26,7 @@ import { PipelineDriver } from "./pipeline-driver.js";
27
26
  import { cmpVersions, EMPTY_CVR_VERSION, versionFromString, versionString, versionToCookie, } from "./schema/types.js";
28
27
  import { ResetPipelinesSignal } from "./snapshotter.js";
29
28
  import { ttlClockAsNumber, ttlClockFromNumber, } from "./ttl-clock.js";
29
+ import { wrapIterable } from "../../../../shared/src/iterables.js";
30
30
  const tracer = trace.getTracer('view-syncer', version);
31
31
  const PROTOCOL_VERSION_ATTR = 'protocol.version';
32
32
  const DEFAULT_KEEPALIVE_MS = 5_000;
@@ -112,13 +112,9 @@ export class ViewSyncerService {
112
112
  description: 'Time to advance all queries for a given client group after applying a new transaction to the replica.',
113
113
  unit: 's',
114
114
  });
115
- // Store per-query server-side materialization metrics for inspector
116
- #perQueryServerMetrics = new Map();
117
- #serverMetrics = {
118
- 'query-materialization-server': new TDigest(),
119
- };
115
+ #inspectMetricsDelegate;
120
116
  #config;
121
- constructor(config, lc, shard, taskID, clientGroupID, cvrDb, upstreamDb, pipelineDriver, versionChanges, drainCoordinator, slowHydrateThreshold, keepaliveMs = DEFAULT_KEEPALIVE_MS, setTimeoutFn = setTimeout.bind(globalThis)) {
117
+ constructor(config, lc, shard, taskID, clientGroupID, cvrDb, upstreamDb, pipelineDriver, versionChanges, drainCoordinator, slowHydrateThreshold, inspectMetricsDelegate, keepaliveMs = DEFAULT_KEEPALIVE_MS, setTimeoutFn = setTimeout.bind(globalThis)) {
122
118
  const { query: pullConfig } = config;
123
119
  this.#config = config;
124
120
  this.id = clientGroupID;
@@ -130,6 +126,7 @@ export class ViewSyncerService {
130
126
  this.#drainCoordinator = drainCoordinator;
131
127
  this.#keepaliveMs = keepaliveMs;
132
128
  this.#slowHydrateThreshold = slowHydrateThreshold;
129
+ this.#inspectMetricsDelegate = inspectMetricsDelegate;
133
130
  this.#cvrStore = new CVRStore(lc, cvrDb, upstreamDb, shard, taskID, clientGroupID,
134
131
  // On failure, cancel the #stateChanges subscription. The run()
135
132
  // loop will then await #cvrStore.flushed() which rejects if necessary.
@@ -627,7 +624,7 @@ export class ViewSyncerService {
627
624
  return; // hydration needs to be run with the CVR updater.
628
625
  }
629
626
  const gotQueries = Object.entries(cvr.queries).filter(([_, state]) => state.transformationHash !== undefined);
630
- const customQueries = [];
627
+ const customQueries = new Map();
631
628
  const otherQueries = [];
632
629
  for (const [, query] of gotQueries) {
633
630
  if (query.type !== 'internal' &&
@@ -635,38 +632,27 @@ export class ViewSyncerService {
635
632
  continue; // No longer desired.
636
633
  }
637
634
  if (query.type === 'custom') {
638
- customQueries.push(query);
635
+ customQueries.set(query.id, query);
639
636
  }
640
637
  else {
641
638
  otherQueries.push(query);
642
639
  }
643
640
  }
644
641
  const transformedQueries = [];
645
- if (customQueries.length > 0 && !this.#customQueryTransformer) {
642
+ if (customQueries.size > 0 && !this.#customQueryTransformer) {
646
643
  lc.error?.('Custom/named queries were requested but no `ZERO_QUERY_URL` is configured for Zero Cache.');
647
644
  }
648
- if (this.#customQueryTransformer && customQueries.length > 0) {
645
+ const [_, byOriginalHash] = this.#pipelines.addedQueries();
646
+ if (this.#customQueryTransformer && customQueries.size > 0) {
647
+ const filteredCustomQueries = this.#filterCustomQueries(customQueries.values(), byOriginalHash, undefined);
649
648
  const transformedCustomQueries = await this.#customQueryTransformer.transform({
650
649
  apiKey: this.#queryConfig.apiKey,
651
650
  token: this.#authData?.raw,
652
651
  cookie: this.#queryConfig.forwardCookies
653
652
  ? this.#httpCookie
654
653
  : undefined,
655
- }, customQueries);
656
- // TODO: collected errors need to make it downstream to the client.
657
- if (Array.isArray(transformedCustomQueries)) {
658
- for (const q of transformedCustomQueries) {
659
- if ('error' in q) {
660
- lc.error?.(`Error transforming custom query ${q.name}: ${q.error}`);
661
- continue;
662
- }
663
- transformedQueries.push(q);
664
- }
665
- }
666
- else {
667
- // If the result is not an array, it is an error.
668
- lc.error?.('Error calling API server to transform custom queries', transformedCustomQueries);
669
- }
654
+ }, filteredCustomQueries);
655
+ this.#processTransformedCustomQueries(lc, transformedCustomQueries, (q) => transformedQueries.push(q), customQueries);
670
656
  }
671
657
  for (const q of otherQueries) {
672
658
  const transformed = transformAndHashQuery(lc, q.id, q.ast, must(this.#pipelines.currentPermissions()).permissions ?? {
@@ -684,7 +670,7 @@ export class ViewSyncerService {
684
670
  span.setAttribute('queryHash', hash);
685
671
  span.setAttribute('transformationHash', transformationHash);
686
672
  span.setAttribute('table', transformedAst.table);
687
- for (const _ of this.#pipelines.addQuery(transformationHash, transformedAst, timer.start())) {
673
+ for (const _ of this.#pipelines.addQuery(transformationHash, hash, transformedAst, timer.start())) {
688
674
  if (++count % TIME_SLICE_CHECK_SIZE === 0) {
689
675
  if (timer.elapsedLap() > TIME_SLICE_MS) {
690
676
  timer.stopLap();
@@ -697,19 +683,45 @@ export class ViewSyncerService {
697
683
  const elapsed = timer.totalElapsed();
698
684
  this.#hydrations.add(1);
699
685
  this.#hydrationTime.record(elapsed / 1000);
700
- this.#addQueryMaterializationServerMetric(hash, elapsed);
686
+ this.#addQueryMaterializationServerMetric(transformationHash, elapsed);
701
687
  lc.debug?.(`hydrated ${count} rows for ${hash} (${elapsed} ms)`);
702
688
  }
703
689
  }
704
- #addQueryMaterializationServerMetric(queryID, elapsed) {
705
- let perQueryMetrics = this.#perQueryServerMetrics.get(queryID);
706
- if (!perQueryMetrics) {
707
- this.#perQueryServerMetrics.set(queryID, (perQueryMetrics = {
708
- 'query-materialization-server': new TDigest(),
709
- }));
690
+ #processTransformedCustomQueries(lc, transformedCustomQueries, cb, customQueryMap) {
691
+ const errors = [];
692
+ for (const q of transformedCustomQueries) {
693
+ if ('error' in q) {
694
+ lc.error?.(`Error transforming custom query ${q.name}: ${q.error}`);
695
+ errors.push(q);
696
+ continue;
697
+ }
698
+ cb(q);
699
+ }
700
+ // todo: fan errors out to connected clients
701
+ // based on the client data from queries
702
+ this.#sendQueryTransformErrorToClients(customQueryMap, errors);
703
+ }
704
+ #sendQueryTransformErrorToClients(customQueryMap, errors) {
705
+ const errorGroups = new Map();
706
+ for (const err of errors) {
707
+ const q = customQueryMap.get(err.id);
708
+ assert(q, 'got an error that does not map back to a custom query');
709
+ const clientIds = Object.keys(q.clientState);
710
+ for (const clientId of clientIds) {
711
+ const group = errorGroups.get(clientId) ?? [];
712
+ group.push(err);
713
+ errorGroups.set(clientId, group);
714
+ }
715
+ }
716
+ for (const [clientId, errors] of errorGroups) {
717
+ const client = this.#clients.get(clientId);
718
+ if (client) {
719
+ client.sendQueryTransformErrors(errors);
720
+ }
710
721
  }
711
- perQueryMetrics['query-materialization-server'].add(elapsed);
712
- this.#serverMetrics['query-materialization-server'].add(elapsed);
722
+ }
723
+ #addQueryMaterializationServerMetric(transformationHash, elapsed) {
724
+ this.#inspectMetricsDelegate.addMetric('query-materialization-server', elapsed, transformationHash);
713
725
  }
714
726
  /**
715
727
  * Adds and/or removes queries to/from the PipelineDriver to bring it
@@ -722,7 +734,7 @@ export class ViewSyncerService {
722
734
  #syncQueryPipelineSet(lc, cvr) {
723
735
  return startAsyncSpan(tracer, 'vs.#syncQueryPipelineSet', async () => {
724
736
  assert(this.#pipelines.initialized(), 'pipelines must be initialized (syncQueryPipelineSet)');
725
- const hydratedQueries = this.#pipelines.addedQueries();
737
+ const [hydratedQueries, byOriginalHash] = this.#pipelines.addedQueries();
726
738
  // Convert queries to their transformed ast's and hashes
727
739
  const hashToIDs = new Map();
728
740
  if (this.#ttlClock === undefined) {
@@ -766,29 +778,29 @@ export class ViewSyncerService {
766
778
  lc.error?.('Custom/named queries were requested but no `ZERO_QUERY_URL` is configured for Zero Cache.');
767
779
  }
768
780
  if (this.#customQueryTransformer && customQueries.size > 0) {
781
+ const filteredCustomQueries = this.#filterCustomQueries(customQueries.values(), byOriginalHash, (origQuery, existing) => {
782
+ for (const transformed of existing) {
783
+ transformedQueries.push({
784
+ id: origQuery.id,
785
+ origQuery,
786
+ transformed: {
787
+ id: origQuery.id,
788
+ transformationHash: transformed.transformationHash,
789
+ transformedAst: transformed.transformedAst,
790
+ },
791
+ });
792
+ }
793
+ });
769
794
  const transformedCustomQueries = await this.#customQueryTransformer.transform({
770
795
  apiKey: this.#queryConfig.apiKey,
771
796
  token: this.#authData?.raw,
772
797
  cookie: this.#httpCookie,
773
- }, customQueries.values());
774
- // TODO: collected errors need to make it downstream to the client.
775
- if (Array.isArray(transformedCustomQueries)) {
776
- for (const q of transformedCustomQueries) {
777
- if ('error' in q) {
778
- lc.error?.(`Error transforming custom query ${q.name}: ${q.error}`);
779
- continue;
780
- }
781
- transformedQueries.push({
782
- id: q.id,
783
- origQuery: must(customQueries.get(q.id)),
784
- transformed: q,
785
- });
786
- }
787
- }
788
- else {
789
- // If the result is not an array, it is an error.
790
- lc.error?.('Error calling API server to transform custom queries', transformedCustomQueries);
791
- }
798
+ }, filteredCustomQueries);
799
+ this.#processTransformedCustomQueries(lc, transformedCustomQueries, (q) => transformedQueries.push({
800
+ id: q.id,
801
+ origQuery: must(customQueries.get(q.id)),
802
+ transformed: q,
803
+ }), customQueries);
792
804
  }
793
805
  const serverQueries = transformedQueries.map(({ id, origQuery, transformed }) => {
794
806
  const ids = hashToIDs.get(transformed.transformationHash);
@@ -823,6 +835,21 @@ export class ViewSyncerService {
823
835
  }
824
836
  });
825
837
  }
838
+ // Removes queries from `customQueries` that are already
839
+ // transformed and in the pipelines. We do not want to re-transform
840
+ // a query that has already been transformed. The reason is that
841
+ // we do not want a query that is already running to suddenly flip
842
+ // to error due to re-calling transform.
843
+ #filterCustomQueries(customQueries, byOriginalHash, onExisting) {
844
+ return wrapIterable(customQueries).filter(origQuery => {
845
+ const existing = byOriginalHash.get(origQuery.id);
846
+ if (existing) {
847
+ onExisting?.(origQuery, existing);
848
+ return false;
849
+ }
850
+ return true;
851
+ });
852
+ }
826
853
  // This must be called from within the #lock.
827
854
  #addAndRemoveQueries(lc, cvr, addQueries, removeQueries, unhydrateQueries, hashToIDs) {
828
855
  return startAsyncSpan(tracer, 'vs.#addAndRemoveQueries', async () => {
@@ -847,7 +874,7 @@ export class ViewSyncerService {
847
874
  for (const q of removeQueries) {
848
875
  this.#pipelines.removeQuery(q.transformationHash);
849
876
  // Remove per-query server metrics when query is deleted
850
- this.#perQueryServerMetrics.delete(q.id);
877
+ this.#inspectMetricsDelegate.deleteMetricsForQuery(q.id);
851
878
  }
852
879
  for (const hash of unhydrateQueries) {
853
880
  this.#pipelines.removeQuery(hash);
@@ -855,7 +882,7 @@ export class ViewSyncerService {
855
882
  const ids = hashToIDs.get(hash);
856
883
  if (ids) {
857
884
  for (const id of ids) {
858
- this.#perQueryServerMetrics.delete(id);
885
+ this.#inspectMetricsDelegate.deleteMetricsForQuery(id);
859
886
  }
860
887
  }
861
888
  }
@@ -872,10 +899,10 @@ export class ViewSyncerService {
872
899
  .withContext('hash', q.id)
873
900
  .withContext('transformationHash', q.transformationHash);
874
901
  lc.debug?.(`adding pipeline for query`, q.ast);
875
- yield* pipelines.addQuery(q.transformationHash, q.ast, timer.start());
902
+ yield* pipelines.addQuery(q.transformationHash, q.id, q.ast, timer.start());
876
903
  const elapsed = timer.stop();
877
904
  totalProcessTime += elapsed;
878
- self.#addQueryMaterializationServerMetric(q.id, elapsed);
905
+ self.#addQueryMaterializationServerMetric(q.transformationHash, elapsed);
879
906
  if (elapsed > slowHydrateThreshold) {
880
907
  lc.warn?.('Slow query materialization', elapsed, q.ast);
881
908
  }
@@ -1093,18 +1120,10 @@ export class ViewSyncerService {
1093
1120
  case 'queries': {
1094
1121
  const queryRows = await this.#cvrStore.inspectQueries(lc, cvr.ttlClock, body.clientID);
1095
1122
  // Enhance query rows with server-side materialization metrics
1096
- const enhancedRows = queryRows.map(row => {
1097
- const serverMetrics = this.#perQueryServerMetrics.get(row.queryID);
1098
- const metrics = serverMetrics
1099
- ? {
1100
- 'query-materialization-server': serverMetrics['query-materialization-server'].toJSON(),
1101
- }
1102
- : null;
1103
- return {
1104
- ...row,
1105
- metrics,
1106
- };
1107
- });
1123
+ const enhancedRows = queryRows.map(row => ({
1124
+ ...row,
1125
+ metrics: this.#inspectMetricsDelegate.getMetricsJSONForQuery(row.queryID),
1126
+ }));
1108
1127
  client.sendInspectResponse(lc, {
1109
1128
  op: 'queries',
1110
1129
  id: body.id,
@@ -1113,11 +1132,10 @@ export class ViewSyncerService {
1113
1132
  break;
1114
1133
  }
1115
1134
  case 'metrics': {
1116
- const serverMetrics = mapValues(this.#serverMetrics, metric => metric.toJSON());
1117
1135
  client.sendInspectResponse(lc, {
1118
1136
  op: 'metrics',
1119
1137
  id: body.id,
1120
- value: serverMetrics,
1138
+ value: this.#inspectMetricsDelegate.getMetricsJSON(),
1121
1139
  });
1122
1140
  break;
1123
1141
  }