@rocicorp/zero 1.8.0 → 1.9.0-canary.0
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.
- package/out/shared/src/cache.d.ts +8 -1
- package/out/shared/src/cache.d.ts.map +1 -1
- package/out/shared/src/cache.js +25 -9
- package/out/shared/src/cache.js.map +1 -1
- package/out/shared/src/objects.d.ts +6 -1
- package/out/shared/src/objects.d.ts.map +1 -1
- package/out/shared/src/objects.js +19 -4
- package/out/shared/src/objects.js.map +1 -1
- package/out/zero/package.js +2 -19
- package/out/zero/package.js.map +1 -1
- package/out/zero-cache/src/config/zero-config.d.ts +4 -0
- package/out/zero-cache/src/config/zero-config.d.ts.map +1 -1
- package/out/zero-cache/src/config/zero-config.js +21 -6
- package/out/zero-cache/src/config/zero-config.js.map +1 -1
- package/out/zero-cache/src/custom-queries/transform-query.d.ts +6 -0
- package/out/zero-cache/src/custom-queries/transform-query.d.ts.map +1 -1
- package/out/zero-cache/src/custom-queries/transform-query.js +8 -0
- package/out/zero-cache/src/custom-queries/transform-query.js.map +1 -1
- package/out/zero-cache/src/db/migration-lite.d.ts.map +1 -1
- package/out/zero-cache/src/db/migration-lite.js +5 -2
- package/out/zero-cache/src/db/migration-lite.js.map +1 -1
- package/out/zero-cache/src/db/migration.d.ts.map +1 -1
- package/out/zero-cache/src/db/migration.js +3 -1
- package/out/zero-cache/src/db/migration.js.map +1 -1
- package/out/zero-cache/src/db/sqlite-corruption.d.ts +11 -0
- package/out/zero-cache/src/db/sqlite-corruption.d.ts.map +1 -0
- package/out/zero-cache/src/db/sqlite-corruption.js +191 -0
- package/out/zero-cache/src/db/sqlite-corruption.js.map +1 -0
- package/out/zero-cache/src/server/anonymous-otel-start.d.ts +1 -1
- package/out/zero-cache/src/server/anonymous-otel-start.js.map +1 -1
- package/out/zero-cache/src/server/backup-watermark-reader.js +1 -1
- package/out/zero-cache/src/server/backup-watermark-reader.js.map +1 -1
- package/out/zero-cache/src/server/change-streamer.d.ts.map +1 -1
- package/out/zero-cache/src/server/change-streamer.js +7 -2
- package/out/zero-cache/src/server/change-streamer.js.map +1 -1
- package/out/zero-cache/src/server/logging.d.ts +8 -0
- package/out/zero-cache/src/server/logging.d.ts.map +1 -1
- package/out/zero-cache/src/server/logging.js +27 -5
- package/out/zero-cache/src/server/logging.js.map +1 -1
- package/out/zero-cache/src/server/main.d.ts.map +1 -1
- package/out/zero-cache/src/server/main.js +6 -1
- package/out/zero-cache/src/server/main.js.map +1 -1
- package/out/zero-cache/src/server/mutator.js +1 -1
- package/out/zero-cache/src/server/mutator.js.map +1 -1
- package/out/zero-cache/src/server/otel-log-sink.d.ts +7 -1
- package/out/zero-cache/src/server/otel-log-sink.d.ts.map +1 -1
- package/out/zero-cache/src/server/otel-log-sink.js +7 -2
- package/out/zero-cache/src/server/otel-log-sink.js.map +1 -1
- package/out/zero-cache/src/server/reaper.js +1 -1
- package/out/zero-cache/src/server/reaper.js.map +1 -1
- package/out/zero-cache/src/server/replicator.d.ts.map +1 -1
- package/out/zero-cache/src/server/replicator.js +11 -1
- package/out/zero-cache/src/server/replicator.js.map +1 -1
- package/out/zero-cache/src/server/shadow-syncer.js +1 -1
- package/out/zero-cache/src/server/shadow-syncer.js.map +1 -1
- package/out/zero-cache/src/server/syncer.d.ts.map +1 -1
- package/out/zero-cache/src/server/syncer.js +6 -1
- package/out/zero-cache/src/server/syncer.js.map +1 -1
- package/out/zero-cache/src/services/change-source/common/replica-schema.d.ts.map +1 -1
- package/out/zero-cache/src/services/change-source/common/replica-schema.js +8 -5
- package/out/zero-cache/src/services/change-source/common/replica-schema.js.map +1 -1
- package/out/zero-cache/src/services/change-source/pg/change-source.d.ts +36 -2
- package/out/zero-cache/src/services/change-source/pg/change-source.d.ts.map +1 -1
- package/out/zero-cache/src/services/change-source/pg/change-source.js +76 -33
- package/out/zero-cache/src/services/change-source/pg/change-source.js.map +1 -1
- package/out/zero-cache/src/services/change-source/pg/initial-sync.d.ts +15 -0
- package/out/zero-cache/src/services/change-source/pg/initial-sync.d.ts.map +1 -1
- package/out/zero-cache/src/services/change-source/pg/initial-sync.js +41 -10
- package/out/zero-cache/src/services/change-source/pg/initial-sync.js.map +1 -1
- package/out/zero-cache/src/services/change-source/pg/logical-replication/stream.d.ts +21 -0
- package/out/zero-cache/src/services/change-source/pg/logical-replication/stream.d.ts.map +1 -1
- package/out/zero-cache/src/services/change-source/pg/logical-replication/stream.js +34 -5
- package/out/zero-cache/src/services/change-source/pg/logical-replication/stream.js.map +1 -1
- package/out/zero-cache/src/services/change-source/pg/replication-slots.d.ts +2 -2
- package/out/zero-cache/src/services/change-source/pg/replication-slots.d.ts.map +1 -1
- package/out/zero-cache/src/services/change-source/pg/replication-slots.js.map +1 -1
- package/out/zero-cache/src/services/change-source/pg/schema/ddl.d.ts +61 -87
- package/out/zero-cache/src/services/change-source/pg/schema/ddl.d.ts.map +1 -1
- package/out/zero-cache/src/services/change-source/pg/schema/ddl.js +17 -12
- package/out/zero-cache/src/services/change-source/pg/schema/ddl.js.map +1 -1
- package/out/zero-cache/src/services/life-cycle.d.ts +1 -1
- package/out/zero-cache/src/services/life-cycle.d.ts.map +1 -1
- package/out/zero-cache/src/services/life-cycle.js +15 -3
- package/out/zero-cache/src/services/life-cycle.js.map +1 -1
- package/out/zero-cache/src/services/litestream/commands.d.ts.map +1 -1
- package/out/zero-cache/src/services/litestream/commands.js +20 -3
- package/out/zero-cache/src/services/litestream/commands.js.map +1 -1
- package/out/zero-cache/src/services/litestream/vfs-watermark-reader.js +2 -2
- package/out/zero-cache/src/services/mutagen/mutagen.d.ts.map +1 -1
- package/out/zero-cache/src/services/mutagen/mutagen.js +4 -1
- package/out/zero-cache/src/services/mutagen/mutagen.js.map +1 -1
- package/out/zero-cache/src/services/replicator/change-processor.d.ts.map +1 -1
- package/out/zero-cache/src/services/replicator/change-processor.js +28 -15
- package/out/zero-cache/src/services/replicator/change-processor.js.map +1 -1
- package/out/zero-cache/src/services/replicator/reporter/recorder.d.ts +1 -1
- package/out/zero-cache/src/services/replicator/reporter/recorder.d.ts.map +1 -1
- package/out/zero-cache/src/services/replicator/reporter/recorder.js +5 -12
- package/out/zero-cache/src/services/replicator/reporter/recorder.js.map +1 -1
- package/out/zero-cache/src/services/replicator/write-worker.js +38 -7
- package/out/zero-cache/src/services/replicator/write-worker.js.map +1 -1
- package/out/zero-cache/src/services/view-syncer/cvr.d.ts.map +1 -1
- package/out/zero-cache/src/services/view-syncer/cvr.js +8 -1
- package/out/zero-cache/src/services/view-syncer/cvr.js.map +1 -1
- package/out/zero-cache/src/services/view-syncer/pipeline-driver.d.ts.map +1 -1
- package/out/zero-cache/src/services/view-syncer/pipeline-driver.js +66 -26
- package/out/zero-cache/src/services/view-syncer/pipeline-driver.js.map +1 -1
- package/out/zero-cache/src/services/view-syncer/query-covering.d.ts +28 -0
- package/out/zero-cache/src/services/view-syncer/query-covering.d.ts.map +1 -0
- package/out/zero-cache/src/services/view-syncer/query-covering.js +159 -0
- package/out/zero-cache/src/services/view-syncer/query-covering.js.map +1 -0
- package/out/zero-cache/src/services/view-syncer/view-syncer.d.ts +2 -0
- package/out/zero-cache/src/services/view-syncer/view-syncer.d.ts.map +1 -1
- package/out/zero-cache/src/services/view-syncer/view-syncer.js +71 -1
- package/out/zero-cache/src/services/view-syncer/view-syncer.js.map +1 -1
- package/out/zero-cache/src/types/lite.d.ts.map +1 -1
- package/out/zero-cache/src/types/lite.js +4 -1
- package/out/zero-cache/src/types/lite.js.map +1 -1
- package/out/zero-cache/src/types/pg.d.ts +18 -0
- package/out/zero-cache/src/types/pg.d.ts.map +1 -1
- package/out/zero-cache/src/types/pg.js +50 -0
- package/out/zero-cache/src/types/pg.js.map +1 -1
- package/out/zero-cache/src/workers/syncer.d.ts +1 -1
- package/out/zero-cache/src/workers/syncer.d.ts.map +1 -1
- package/out/zero-cache/src/workers/syncer.js +1 -0
- package/out/zero-cache/src/workers/syncer.js.map +1 -1
- package/out/zero-client/src/client/crud.d.ts.map +1 -1
- package/out/zero-client/src/client/crud.js +3 -4
- package/out/zero-client/src/client/crud.js.map +1 -1
- package/out/zero-client/src/client/version.js +1 -1
- package/out/zero-schema/src/builder/relationship-builder.d.ts.map +1 -1
- package/out/zero-schema/src/builder/relationship-builder.js +3 -2
- package/out/zero-schema/src/builder/relationship-builder.js.map +1 -1
- package/out/zero-schema/src/builder/schema-builder.d.ts.map +1 -1
- package/out/zero-schema/src/builder/schema-builder.js +7 -7
- package/out/zero-schema/src/builder/schema-builder.js.map +1 -1
- package/out/zero-schema/src/builder/table-builder.d.ts.map +1 -1
- package/out/zero-schema/src/builder/table-builder.js +2 -1
- package/out/zero-schema/src/builder/table-builder.js.map +1 -1
- package/out/zero-server/src/custom.js +2 -1
- package/out/zero-server/src/custom.js.map +1 -1
- package/out/zql/src/ivm/view-apply-change.d.ts.map +1 -1
- package/out/zql/src/ivm/view-apply-change.js +2 -1
- package/out/zql/src/ivm/view-apply-change.js.map +1 -1
- package/out/zql/src/mutate/crud.d.ts +10 -8
- package/out/zql/src/mutate/crud.d.ts.map +1 -1
- package/out/zql/src/mutate/crud.js +3 -4
- package/out/zql/src/mutate/crud.js.map +1 -1
- package/out/zqlite/src/db.js +2 -2
- package/out/zqlite/src/internal/statement-cache.d.ts +25 -1
- package/out/zqlite/src/internal/statement-cache.d.ts.map +1 -1
- package/out/zqlite/src/internal/statement-cache.js +48 -18
- package/out/zqlite/src/internal/statement-cache.js.map +1 -1
- package/out/zqlite/src/query-builder.js +3 -3
- package/out/zqlite/src/query-builder.js.map +1 -1
- package/out/zqlite/src/sqlite-cost-model.js +5 -5
- package/out/zqlite/src/table-source.js +3 -3
- package/package.json +2 -33
|
@@ -26,6 +26,7 @@ import { tracer } from "./tracer.js";
|
|
|
26
26
|
import { CVRStore, ClientNotFoundError } from "./cvr-store.js";
|
|
27
27
|
import { CVRConfigDrivenUpdater, CVRQueryDrivenUpdater, nextEvictionTime } from "./cvr.js";
|
|
28
28
|
import { handleInspect } from "./inspect-handler.js";
|
|
29
|
+
import { QueryCoveringIndex } from "./query-covering.js";
|
|
29
30
|
import { resolver } from "@rocicorp/resolver";
|
|
30
31
|
import { Lock } from "@rocicorp/lock";
|
|
31
32
|
//#region ../zero-cache/src/services/view-syncer/view-syncer.ts
|
|
@@ -109,6 +110,7 @@ var ViewSyncerService = class {
|
|
|
109
110
|
#lockWaitTime = getOrCreateLatencyHistogram("sync", "lock-wait-time", "Time spent waiting to acquire the ViewSyncer lock.");
|
|
110
111
|
#pipelineResets = getOrCreateCounter("sync", "pipeline-resets", "Number of pipeline resets");
|
|
111
112
|
#rowSetSignatureDrifts = getOrCreateCounter("sync", "query.row-set-signature-drifts", "Number of times re-hydration of an unchanged query produced a different row-set signature than what is stored in the CVR (forcing a configVersion bump and full re-execution). Expected to be near-zero in steady state; persistent non-zero values indicate non-deterministic query execution (e.g. Cap operator picking different N-row subsets).");
|
|
113
|
+
#sameHashRehydrationVersionBumps = getOrCreateCounter("sync", "query.same-hash-rehydrations-forced-bump", "Number of times query-set reconciliation forced a configVersion bump for already-gotten same-transformation-hash query rehydration because trackQueries would not otherwise bump. Expected to be near-zero; non-zero values indicate pipeline/CVR row-set drift reached query-set reconciliation.");
|
|
112
114
|
#inspectorDelegate;
|
|
113
115
|
#config;
|
|
114
116
|
#runPriorityOp;
|
|
@@ -251,6 +253,9 @@ var ViewSyncerService = class {
|
|
|
251
253
|
get servedVersion() {
|
|
252
254
|
return this.#servedVersion;
|
|
253
255
|
}
|
|
256
|
+
get servingLagEligible() {
|
|
257
|
+
return this.#clients.size > 0 && this.connContextManager.getBackgroundConnectionContext() !== void 0;
|
|
258
|
+
}
|
|
254
259
|
#markVersionServed(version) {
|
|
255
260
|
this.#servedVersion = version.stateVersion;
|
|
256
261
|
}
|
|
@@ -630,9 +635,19 @@ var ViewSyncerService = class {
|
|
|
630
635
|
}
|
|
631
636
|
lc.info?.(`hydrateUnchangedQueries: ${gotQueries.length} got queries, ${inactivatedCount} inactivated, ${customErrorCount} custom transform errors, ${customHashMismatchCount} custom hash mismatches, ${otherHashMismatchCount} other hash mismatches, ${transformedQueries.length} hydrated`);
|
|
632
637
|
const driftedQueryIDs = /* @__PURE__ */ new Set();
|
|
638
|
+
const queryCoveringIndex = this.#config.enableQueryCovering ? new QueryCoveringIndex(this.#pipelines.queries()) : void 0;
|
|
639
|
+
let totalHydratedQueries = 0;
|
|
640
|
+
let coveredHydratedQueries = 0;
|
|
641
|
+
let firstCoveredQuery;
|
|
633
642
|
for (const { id: queryID, transformationHash, transformedAst } of transformedQueries) {
|
|
634
643
|
const query = cvr.queries[queryID];
|
|
635
644
|
const queryName = query.type === "custom" ? query.name : void 0;
|
|
645
|
+
const covered = queryCoveringIndex ? this.#findQueryCoverageShadowHit(queryCoveringIndex, queryID, transformationHash, transformedAst, queryName) : void 0;
|
|
646
|
+
totalHydratedQueries++;
|
|
647
|
+
if (covered) {
|
|
648
|
+
coveredHydratedQueries++;
|
|
649
|
+
firstCoveredQuery ??= covered;
|
|
650
|
+
}
|
|
636
651
|
const timer = new TimeSliceTimer(lc);
|
|
637
652
|
let count = 0;
|
|
638
653
|
await startAsyncSpan(tracer, "vs.#hydrateUnchangedQueries.addQuery", async (span) => {
|
|
@@ -649,6 +664,7 @@ var ViewSyncerService = class {
|
|
|
649
664
|
this.#addQueryMaterializationServerMetric(transformationHash, elapsed);
|
|
650
665
|
this.#inspectorDelegate.addQuery(transformationHash, transformedAst);
|
|
651
666
|
lc.debug?.(`hydrated ${count} rows for ${queryID} (${elapsed} ms)`);
|
|
667
|
+
let drifted = false;
|
|
652
668
|
const storedSigHex = cvr.queries[queryID]?.rowSetSignature;
|
|
653
669
|
if (storedSigHex !== void 0 && storedSigHex !== null) {
|
|
654
670
|
const priorSig = parseSignature(storedSigHex);
|
|
@@ -658,9 +674,16 @@ var ViewSyncerService = class {
|
|
|
658
674
|
this.#rowSetSignatureDrifts.add(1);
|
|
659
675
|
this.#pipelines.removeQuery(queryID);
|
|
660
676
|
driftedQueryIDs.add(queryID);
|
|
677
|
+
drifted = true;
|
|
661
678
|
}
|
|
662
679
|
}
|
|
680
|
+
if (!drifted && queryCoveringIndex) queryCoveringIndex.add(queryID, {
|
|
681
|
+
transformedAst,
|
|
682
|
+
transformationHash,
|
|
683
|
+
...queryName !== void 0 && { queryName }
|
|
684
|
+
});
|
|
663
685
|
}
|
|
686
|
+
this.#logQueryCoverageShadowSummary(lc, "hydrate-unchanged", totalHydratedQueries, coveredHydratedQueries, firstCoveredQuery);
|
|
664
687
|
return driftedQueryIDs;
|
|
665
688
|
}
|
|
666
689
|
#processTransformedCustomQueries(lc, transformedCustomQueries, cb, customQueryMap) {
|
|
@@ -706,6 +729,28 @@ var ViewSyncerService = class {
|
|
|
706
729
|
#addQueryMaterializationServerMetric(queryID, elapsed) {
|
|
707
730
|
this.#inspectorDelegate.addMetric("query-materialization-server", elapsed, queryID);
|
|
708
731
|
}
|
|
732
|
+
#findQueryCoverageShadowHit(queryCoveringIndex, queryID, transformationHash, ast, queryName) {
|
|
733
|
+
const covering = queryCoveringIndex.findCoveringQuery(queryID, ast);
|
|
734
|
+
if (!covering) return;
|
|
735
|
+
return {
|
|
736
|
+
coveredQueryHash: queryID,
|
|
737
|
+
coveredTransformationHash: transformationHash,
|
|
738
|
+
...queryName !== void 0 && { coveredQueryName: queryName },
|
|
739
|
+
coveringQueryHash: covering.queryID,
|
|
740
|
+
coveringTransformationHash: covering.transformationHash,
|
|
741
|
+
...covering.queryName !== void 0 && { coveringQueryName: covering.queryName }
|
|
742
|
+
};
|
|
743
|
+
}
|
|
744
|
+
#logQueryCoverageShadowSummary(lc, hydrationPath, totalHydratedQueries, coveredHydratedQueries, firstCoveredQuery) {
|
|
745
|
+
if (!this.#config.enableQueryCovering || totalHydratedQueries === 0) return;
|
|
746
|
+
let coverageLC = lc.withContext("appID", this.#shard.appID).withContext("shardNum", this.#shard.shardNum).withContext("clientGroupID", this.id).withContext("queryCoverageMode", "shadow").withContext("hydrationPath", hydrationPath).withContext("totalHydratedQueries", totalHydratedQueries).withContext("coveredHydratedQueries", coveredHydratedQueries).withContext("uncoveredHydratedQueries", totalHydratedQueries - coveredHydratedQueries);
|
|
747
|
+
if (firstCoveredQuery) {
|
|
748
|
+
coverageLC = coverageLC.withContext("firstCoveredQueryHash", firstCoveredQuery.coveredQueryHash).withContext("firstCoveredTransformationHash", firstCoveredQuery.coveredTransformationHash).withContext("firstCoveringQueryHash", firstCoveredQuery.coveringQueryHash).withContext("firstCoveringTransformationHash", firstCoveredQuery.coveringTransformationHash);
|
|
749
|
+
if (firstCoveredQuery.coveredQueryName !== void 0) coverageLC = coverageLC.withContext("firstCoveredQueryName", firstCoveredQuery.coveredQueryName);
|
|
750
|
+
if (firstCoveredQuery.coveringQueryName !== void 0) coverageLC = coverageLC.withContext("firstCoveringQueryName", firstCoveredQuery.coveringQueryName);
|
|
751
|
+
}
|
|
752
|
+
coverageLC.info?.("query coverage shadow summary");
|
|
753
|
+
}
|
|
709
754
|
/**
|
|
710
755
|
* Adds and/or removes queries to/from the PipelineDriver to bring it
|
|
711
756
|
* in sync with the set of queries in the CVR (both got and desired).
|
|
@@ -843,7 +888,15 @@ var ViewSyncerService = class {
|
|
|
843
888
|
lc = lc.withContext("stateVersion", stateVersion);
|
|
844
889
|
lc.info?.(`hydrating ${addQueries.length} queries`);
|
|
845
890
|
const updater = new CVRQueryDrivenUpdater(this.#cvrStore, cvr, stateVersion, this.#pipelines.replicaVersion, (queryID) => this.#pipelines.rowSetSignature(queryID));
|
|
846
|
-
|
|
891
|
+
const sameHashRehydratedQueryIDs = addQueries.filter((q) => cvr.queries[q.id]?.transformationHash === q.transformationHash).map((q) => q.id);
|
|
892
|
+
const trackQueriesWillBumpVersion = stateVersion > cvr.version.stateVersion || removeQueries.length > 0 || addQueries.some((q) => cvr.queries[q.id]?.transformationHash !== q.transformationHash);
|
|
893
|
+
if (sameHashRehydratedQueryIDs.length > 0 && !trackQueriesWillBumpVersion) {
|
|
894
|
+
const drifted = sameHashRehydratedQueryIDs.filter((id) => driftedQueryIDs.has(id)).length;
|
|
895
|
+
const missing = sameHashRehydratedQueryIDs.length - drifted;
|
|
896
|
+
const reason = drifted && missing ? "mixed" : drifted ? "row-set-signature-drift" : "missing-pipeline";
|
|
897
|
+
this.#sameHashRehydrationVersionBumps.add(1, { reason });
|
|
898
|
+
updater.ensureNewVersion();
|
|
899
|
+
}
|
|
847
900
|
const { queryPatches, newVersion } = updater.trackQueries(lc, addQueries, removeQueries);
|
|
848
901
|
const pokers = startPoke(this.#getClients(), newVersion);
|
|
849
902
|
for (const patch of queryPatches) await pokers.addPatch(patch);
|
|
@@ -857,6 +910,10 @@ var ViewSyncerService = class {
|
|
|
857
910
|
const pipelines = this.#pipelines;
|
|
858
911
|
const hydrations = this.#hydrations;
|
|
859
912
|
const hydrationTime = this.#hydrationTime;
|
|
913
|
+
const queryCoveringIndex = this.#config.enableQueryCovering ? new QueryCoveringIndex(this.#pipelines.queries()) : void 0;
|
|
914
|
+
let totalHydratedQueries = 0;
|
|
915
|
+
let coveredHydratedQueries = 0;
|
|
916
|
+
let firstCoveredQuery;
|
|
860
917
|
const self = this;
|
|
861
918
|
await yieldProcess(lc);
|
|
862
919
|
function* generateRowChanges(slowHydrateThreshold) {
|
|
@@ -864,11 +921,22 @@ var ViewSyncerService = class {
|
|
|
864
921
|
let queryLC = lc.withContext("hash", q.id).withContext("queryHash", q.id).withContext("transformationHash", q.transformationHash);
|
|
865
922
|
if (q.name !== void 0) queryLC = queryLC.withContext("queryName", q.name);
|
|
866
923
|
queryLC.debug?.(`adding pipeline for query`, q.ast);
|
|
924
|
+
const covered = queryCoveringIndex ? self.#findQueryCoverageShadowHit(queryCoveringIndex, q.id, q.transformationHash, q.ast, q.name) : void 0;
|
|
925
|
+
totalHydratedQueries++;
|
|
926
|
+
if (covered) {
|
|
927
|
+
coveredHydratedQueries++;
|
|
928
|
+
firstCoveredQuery ??= covered;
|
|
929
|
+
}
|
|
867
930
|
yield* pipelines.addQuery(q.transformationHash, q.id, q.ast, timer.startWithoutYielding(), q.name, "query-set-sync");
|
|
868
931
|
const elapsed = timer.stop();
|
|
869
932
|
totalProcessTime += elapsed;
|
|
870
933
|
self.#addQueryMaterializationServerMetric(q.id, elapsed);
|
|
871
934
|
self.#inspectorDelegate.addQuery(q.id, q.ast);
|
|
935
|
+
queryCoveringIndex?.add(q.id, {
|
|
936
|
+
transformedAst: q.ast,
|
|
937
|
+
transformationHash: q.transformationHash,
|
|
938
|
+
...q.name !== void 0 && { queryName: q.name }
|
|
939
|
+
});
|
|
872
940
|
if (elapsed > slowHydrateThreshold) queryLC.warn?.("Slow query materialization", elapsed, q.ast);
|
|
873
941
|
manualSpan(tracer, "vs.addAndConsumeQuery", elapsed, {
|
|
874
942
|
hash: q.id,
|
|
@@ -880,6 +948,7 @@ var ViewSyncerService = class {
|
|
|
880
948
|
hydrationTime.recordMs(totalProcessTime);
|
|
881
949
|
}
|
|
882
950
|
await this.#processChanges(lc, timer, generateRowChanges(this.#slowHydrateThreshold), updater, pokers);
|
|
951
|
+
this.#logQueryCoverageShadowSummary(lc, "add", totalHydratedQueries, coveredHydratedQueries, firstCoveredQuery);
|
|
883
952
|
await startAsyncSpan(tracer, "vs.#syncQueryPipelineSet.deleteUnreferencedRows", async () => {
|
|
884
953
|
for (const patch of await updater.deleteUnreferencedRows(lc)) await pokers.addPatch(patch);
|
|
885
954
|
});
|
|
@@ -1159,6 +1228,7 @@ var ViewSyncerService = class {
|
|
|
1159
1228
|
this.#stopTTLClockInterval();
|
|
1160
1229
|
this.#stopExpireTimer();
|
|
1161
1230
|
this.#stopAuthMaintenanceTimer();
|
|
1231
|
+
this.#customQueryTransformer?.destroy();
|
|
1162
1232
|
for (const client of this.#clients.values()) if (err) client.fail(err);
|
|
1163
1233
|
else client.close(`closed clientGroupID=${this.id}`);
|
|
1164
1234
|
await this.#lock.withLock(() => {});
|