@rotorsoft/act-tck 1.34.0 → 1.34.2
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/dist/.tsbuildinfo +1 -1
- package/dist/@types/store-differential-tck.d.ts.map +1 -1
- package/dist/@types/store-property-tck.d.ts.map +1 -1
- package/dist/@types/store-tck.d.ts +3 -3
- package/dist/@types/store-tck.d.ts.map +1 -1
- package/dist/index.cjs +154 -119
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +154 -119
- package/dist/index.js.map +1 -1
- package/package.json +5 -5
package/dist/index.js
CHANGED
|
@@ -384,6 +384,24 @@ ${content}`;
|
|
|
384
384
|
// src/store-differential-tck.ts
|
|
385
385
|
import { SNAP_EVENT } from "@rotorsoft/act";
|
|
386
386
|
import { afterAll as afterAll2, beforeAll as beforeAll2, describe as describe6, expect as expect6, it as it6 } from "vitest";
|
|
387
|
+
var mark_all = async (store) => {
|
|
388
|
+
const rows = [];
|
|
389
|
+
const { maxEventId } = await store.query_streams(
|
|
390
|
+
(p) => rows.push({
|
|
391
|
+
stream: p.stream,
|
|
392
|
+
at: p.at,
|
|
393
|
+
priority: p.priority,
|
|
394
|
+
lane: p.lane
|
|
395
|
+
})
|
|
396
|
+
);
|
|
397
|
+
const marks = rows.filter((r) => r.at < maxEventId).map((r) => ({
|
|
398
|
+
stream: r.stream,
|
|
399
|
+
priority: r.priority,
|
|
400
|
+
lane: r.lane,
|
|
401
|
+
correlated_at: maxEventId
|
|
402
|
+
}));
|
|
403
|
+
await store.subscribe(marks);
|
|
404
|
+
};
|
|
387
405
|
var mulberry322 = (seed) => {
|
|
388
406
|
let a = seed >>> 0;
|
|
389
407
|
return () => {
|
|
@@ -600,6 +618,7 @@ var apply_plan = async (store, plan, pii_isolation) => {
|
|
|
600
618
|
]);
|
|
601
619
|
} else if (op.t === "claim") {
|
|
602
620
|
const by = uid();
|
|
621
|
+
await mark_all(store);
|
|
603
622
|
const leased = await store.claim(1e5, 1e5, by, op.millis);
|
|
604
623
|
for (const l of leased) if (owned.has(l.stream)) held.set(l.stream, by);
|
|
605
624
|
} else if (op.t === "ack") {
|
|
@@ -856,6 +875,24 @@ var runStoreDifferentialTck = (options) => {
|
|
|
856
875
|
// src/store-property-tck.ts
|
|
857
876
|
import { fc, test } from "@fast-check/vitest";
|
|
858
877
|
import { afterAll as afterAll3, beforeAll as beforeAll3, describe as describe7, expect as expect7 } from "vitest";
|
|
878
|
+
var mark_all2 = async (store) => {
|
|
879
|
+
const rows = [];
|
|
880
|
+
const { maxEventId } = await store.query_streams(
|
|
881
|
+
(p) => rows.push({
|
|
882
|
+
stream: p.stream,
|
|
883
|
+
at: p.at,
|
|
884
|
+
priority: p.priority,
|
|
885
|
+
lane: p.lane
|
|
886
|
+
})
|
|
887
|
+
);
|
|
888
|
+
const marks = rows.filter((r) => r.at < maxEventId).map((r) => ({
|
|
889
|
+
stream: r.stream,
|
|
890
|
+
priority: r.priority,
|
|
891
|
+
lane: r.lane,
|
|
892
|
+
correlated_at: maxEventId
|
|
893
|
+
}));
|
|
894
|
+
await store.subscribe(marks);
|
|
895
|
+
};
|
|
859
896
|
var streamArb = fc.constantFrom("s1", "s2", "s3");
|
|
860
897
|
var commitArb = fc.record({
|
|
861
898
|
stream: streamArb,
|
|
@@ -963,6 +1000,7 @@ var runStorePropertyTck = (options) => {
|
|
|
963
1000
|
make_meta({ stream: op.stream })
|
|
964
1001
|
);
|
|
965
1002
|
} else if (op.kind === "claim") {
|
|
1003
|
+
await mark_all2(store);
|
|
966
1004
|
const claimed = await store.claim(5, 5, "worker", 6e4);
|
|
967
1005
|
totalClaims += claimed.length;
|
|
968
1006
|
pending = [...pending, ...claimed];
|
|
@@ -1004,6 +1042,7 @@ var runStorePropertyTck = (options) => {
|
|
|
1004
1042
|
make_meta({ stream })
|
|
1005
1043
|
);
|
|
1006
1044
|
}
|
|
1045
|
+
await mark_all2(store);
|
|
1007
1046
|
const acked1 = await store.ack(
|
|
1008
1047
|
await store.claim(10, 10, "worker", 6e4)
|
|
1009
1048
|
);
|
|
@@ -1016,6 +1055,7 @@ var runStorePropertyTck = (options) => {
|
|
|
1016
1055
|
make_meta({ stream })
|
|
1017
1056
|
);
|
|
1018
1057
|
}
|
|
1058
|
+
await mark_all2(store);
|
|
1019
1059
|
const acked2 = await store.ack(
|
|
1020
1060
|
await store.claim(10, 10, "worker", 6e4)
|
|
1021
1061
|
);
|
|
@@ -1039,6 +1079,7 @@ var runStorePropertyTck = (options) => {
|
|
|
1039
1079
|
make_meta({ stream })
|
|
1040
1080
|
);
|
|
1041
1081
|
}
|
|
1082
|
+
await mark_all2(store);
|
|
1042
1083
|
const claimed = await store.claim(10, 10, "worker", 6e4);
|
|
1043
1084
|
await store.block(claimed.map((l) => ({ ...l, error: "test" })));
|
|
1044
1085
|
const blockedSet = new Set(claimed.map((l) => l.stream));
|
|
@@ -1048,6 +1089,7 @@ var runStorePropertyTck = (options) => {
|
|
|
1048
1089
|
[inc(1)],
|
|
1049
1090
|
make_meta({ stream: "ctrl" })
|
|
1050
1091
|
);
|
|
1092
|
+
await mark_all2(store);
|
|
1051
1093
|
const reclaim = await store.claim(10, 10, "worker2", 6e4);
|
|
1052
1094
|
for (const l of reclaim) expect7(blockedSet.has(l.stream)).toBe(false);
|
|
1053
1095
|
});
|
|
@@ -1069,6 +1111,38 @@ var runStoreTck = (options) => {
|
|
|
1069
1111
|
describe8(`TCK / Store / ${options.name}`, () => {
|
|
1070
1112
|
let store;
|
|
1071
1113
|
const caps = { ...options.capabilities };
|
|
1114
|
+
const is_literal = (source) => !/[\]^$.*+?()[{}|\\]/.test(source);
|
|
1115
|
+
const correlate = async (target = store) => {
|
|
1116
|
+
const rows = [];
|
|
1117
|
+
await target.query_streams(
|
|
1118
|
+
(p) => rows.push({
|
|
1119
|
+
stream: p.stream,
|
|
1120
|
+
source: p.source,
|
|
1121
|
+
at: p.at,
|
|
1122
|
+
priority: p.priority,
|
|
1123
|
+
lane: p.lane
|
|
1124
|
+
}),
|
|
1125
|
+
{ limit: 1e3 }
|
|
1126
|
+
);
|
|
1127
|
+
const marks = [];
|
|
1128
|
+
for (const row of rows) {
|
|
1129
|
+
let mark = -1;
|
|
1130
|
+
await target.query(
|
|
1131
|
+
(e) => {
|
|
1132
|
+
mark = Math.max(mark, e.id);
|
|
1133
|
+
},
|
|
1134
|
+
row.source !== void 0 ? { stream: row.source, stream_exact: is_literal(row.source) } : {}
|
|
1135
|
+
);
|
|
1136
|
+
if (mark > row.at)
|
|
1137
|
+
marks.push({
|
|
1138
|
+
stream: row.stream,
|
|
1139
|
+
priority: row.priority,
|
|
1140
|
+
lane: row.lane,
|
|
1141
|
+
correlated_at: mark
|
|
1142
|
+
});
|
|
1143
|
+
}
|
|
1144
|
+
if (marks.length) await target.subscribe(marks);
|
|
1145
|
+
};
|
|
1072
1146
|
beforeAll4(async () => {
|
|
1073
1147
|
store = await options.factory();
|
|
1074
1148
|
await store.drop();
|
|
@@ -1695,18 +1769,21 @@ var runStoreTck = (options) => {
|
|
|
1695
1769
|
const s = `fresh-empty-${uid()}`;
|
|
1696
1770
|
const src = `fresh-src-${uid()}`;
|
|
1697
1771
|
await store.subscribe([{ stream: s, source: src }]);
|
|
1772
|
+
await correlate();
|
|
1698
1773
|
const leases = await store.claim(5, 5, `w-${uid()}`, 5e3);
|
|
1699
1774
|
expect8(leases.filter((l) => l.stream === s)).toHaveLength(0);
|
|
1700
1775
|
});
|
|
1701
|
-
it7("claims a fresh subscription as soon as its first event
|
|
1776
|
+
it7("claims a fresh subscription as soon as its first event is marked", async () => {
|
|
1702
1777
|
const s = `fresh-first-${uid()}`;
|
|
1703
1778
|
const src = `fresh-first-src-${uid()}`;
|
|
1704
1779
|
await store.subscribe([{ stream: s, source: src }]);
|
|
1705
|
-
await store.commit(
|
|
1780
|
+
const [first] = await store.commit(
|
|
1706
1781
|
src,
|
|
1707
1782
|
[inc(1)],
|
|
1708
1783
|
make_meta({ stream: src })
|
|
1709
1784
|
);
|
|
1785
|
+
await store.subscribe([{ stream: s, correlated_at: first.id }]);
|
|
1786
|
+
await correlate();
|
|
1710
1787
|
const leases = await store.claim(5, 5, `w-${uid()}`, 5e3);
|
|
1711
1788
|
const mine = leases.filter((l) => l.stream === s);
|
|
1712
1789
|
expect8(mine).toHaveLength(1);
|
|
@@ -1799,7 +1876,7 @@ var runStoreTck = (options) => {
|
|
|
1799
1876
|
expect8(seen).not.toContain("correlated");
|
|
1800
1877
|
});
|
|
1801
1878
|
});
|
|
1802
|
-
describe8
|
|
1879
|
+
describe8("subscription work set", () => {
|
|
1803
1880
|
const claimable = async (stream) => {
|
|
1804
1881
|
const leased = await store.claim(100, 0, `w-${uid()}`, 1);
|
|
1805
1882
|
const mine = leased.find((l) => l.stream === stream);
|
|
@@ -1886,16 +1963,17 @@ var runStoreTck = (options) => {
|
|
|
1886
1963
|
await store.prioritize({ stream: s, stream_exact: true }, 5);
|
|
1887
1964
|
expect8(await claimable(s)).toBe(true);
|
|
1888
1965
|
});
|
|
1889
|
-
it7("
|
|
1890
|
-
const s = `ws-
|
|
1891
|
-
const src = `ws-
|
|
1966
|
+
it7("never claims an unmarked stream, however much work the log holds", async () => {
|
|
1967
|
+
const s = `ws-unmarked-${uid()}`;
|
|
1968
|
+
const src = `ws-unmarked-src-${uid()}`;
|
|
1892
1969
|
await store.subscribe([{ stream: s, source: src }]);
|
|
1893
|
-
|
|
1894
|
-
await store.commit(
|
|
1970
|
+
const [event] = await store.commit(
|
|
1895
1971
|
src,
|
|
1896
1972
|
[inc(1)],
|
|
1897
1973
|
make_meta({ stream: src })
|
|
1898
1974
|
);
|
|
1975
|
+
expect8(await claimable(s)).toBe(false);
|
|
1976
|
+
await store.subscribe([{ stream: s, correlated_at: event.id }]);
|
|
1899
1977
|
expect8(await claimable(s)).toBe(true);
|
|
1900
1978
|
});
|
|
1901
1979
|
it7("surfaces the mark on query_streams positions", async () => {
|
|
@@ -1928,6 +2006,7 @@ var runStoreTck = (options) => {
|
|
|
1928
2006
|
make_meta({ stream: s })
|
|
1929
2007
|
);
|
|
1930
2008
|
const by = `worker-${uid()}`;
|
|
2009
|
+
await correlate();
|
|
1931
2010
|
const leased = await store.claim(100, 0, by, 1e4);
|
|
1932
2011
|
const mine = leased.find((l) => l.stream === s);
|
|
1933
2012
|
expect8(mine).toBeDefined();
|
|
@@ -1950,6 +2029,7 @@ var runStoreTck = (options) => {
|
|
|
1950
2029
|
[inc(1)],
|
|
1951
2030
|
make_meta({ stream: s })
|
|
1952
2031
|
);
|
|
2032
|
+
await correlate();
|
|
1953
2033
|
const leasedA = await store.claim(100, 0, `wA-${uid()}`, 1e5);
|
|
1954
2034
|
const targetA = leasedA.find((l) => l.stream === s);
|
|
1955
2035
|
expect8(targetA).toBeDefined();
|
|
@@ -1959,6 +2039,7 @@ var runStoreTck = (options) => {
|
|
|
1959
2039
|
[inc(2)],
|
|
1960
2040
|
make_meta({ stream: other })
|
|
1961
2041
|
);
|
|
2042
|
+
await correlate();
|
|
1962
2043
|
const leasedB = await store.claim(100, 0, `wB-${uid()}`, 1e5);
|
|
1963
2044
|
expect8(leasedB.length).toBeGreaterThan(0);
|
|
1964
2045
|
expect8(leasedB.find((l) => l.stream === s)).toBeUndefined();
|
|
@@ -1972,11 +2053,13 @@ var runStoreTck = (options) => {
|
|
|
1972
2053
|
[inc(1), inc(2)],
|
|
1973
2054
|
make_meta({ stream: s })
|
|
1974
2055
|
);
|
|
2056
|
+
await correlate();
|
|
1975
2057
|
const leasedA = await store.claim(100, 0, `wA-${uid()}`, 1);
|
|
1976
2058
|
const a = leasedA.find((l) => l.stream === s);
|
|
1977
2059
|
expect8(a).toBeDefined();
|
|
1978
2060
|
expect8(a.retry).toBe(0);
|
|
1979
2061
|
await new Promise((r) => setTimeout(r, 50));
|
|
2062
|
+
await correlate();
|
|
1980
2063
|
const leasedB = await store.claim(100, 0, `wB-${uid()}`, 1e5);
|
|
1981
2064
|
const b = leasedB.find((l) => l.stream === s);
|
|
1982
2065
|
expect8(b).toBeDefined();
|
|
@@ -1997,10 +2080,12 @@ var runStoreTck = (options) => {
|
|
|
1997
2080
|
[inc(1), inc(2)],
|
|
1998
2081
|
make_meta({ stream: s })
|
|
1999
2082
|
);
|
|
2083
|
+
await correlate();
|
|
2000
2084
|
const first = await store.claim(100, 0, `w-${uid()}`, 1);
|
|
2001
2085
|
const mine = first.find((l) => l.stream === s);
|
|
2002
2086
|
expect8(mine).toBeDefined();
|
|
2003
2087
|
await store.ack([{ ...mine, at: mine.at + 1 }]);
|
|
2088
|
+
await correlate();
|
|
2004
2089
|
const second = await store.claim(0, 100, `w-${uid()}`, 1);
|
|
2005
2090
|
expect8(second.find((l) => l.stream === s)).toBeDefined();
|
|
2006
2091
|
});
|
|
@@ -2034,6 +2119,7 @@ var runStoreTck = (options) => {
|
|
|
2034
2119
|
let low_claimed = false;
|
|
2035
2120
|
const MAX_CYCLES = 20;
|
|
2036
2121
|
for (let cycle = 0; cycle < MAX_CYCLES && !low_claimed; cycle++) {
|
|
2122
|
+
await correlate(fresh);
|
|
2037
2123
|
const leases = await fresh.claim(4, 0, by, 1e3);
|
|
2038
2124
|
if (leases.some((l) => l.stream === low)) {
|
|
2039
2125
|
low_claimed = true;
|
|
@@ -2061,6 +2147,7 @@ var runStoreTck = (options) => {
|
|
|
2061
2147
|
[inc(1)],
|
|
2062
2148
|
make_meta({ stream: s })
|
|
2063
2149
|
);
|
|
2150
|
+
await correlate();
|
|
2064
2151
|
const claimed = await store.claim(100, 100, `w-${uid()}`, 1e5);
|
|
2065
2152
|
const matches = claimed.filter((l) => l.stream === s);
|
|
2066
2153
|
expect8(matches).toHaveLength(1);
|
|
@@ -2079,6 +2166,7 @@ var runStoreTck = (options) => {
|
|
|
2079
2166
|
[inc(2)],
|
|
2080
2167
|
make_meta({ stream: sibling })
|
|
2081
2168
|
);
|
|
2169
|
+
await correlate();
|
|
2082
2170
|
const leased = await store.claim(100, 0, `right-${uid()}`, 1e5);
|
|
2083
2171
|
const mine = leased.find((l) => l.stream === s);
|
|
2084
2172
|
const sibling_lease = leased.find((l) => l.stream === sibling);
|
|
@@ -2095,6 +2183,7 @@ var runStoreTck = (options) => {
|
|
|
2095
2183
|
const s = `ack-stale-${uid()}`;
|
|
2096
2184
|
await store.subscribe([{ stream: s }]);
|
|
2097
2185
|
const by = `w-${uid()}`;
|
|
2186
|
+
await correlate();
|
|
2098
2187
|
const leased = await store.claim(100, 0, by, 1e5);
|
|
2099
2188
|
const mine = leased.find((l) => l.stream === s);
|
|
2100
2189
|
expect8(mine).toBeDefined();
|
|
@@ -2107,6 +2196,7 @@ var runStoreTck = (options) => {
|
|
|
2107
2196
|
try {
|
|
2108
2197
|
await fresh.drop();
|
|
2109
2198
|
await fresh.seed();
|
|
2199
|
+
await correlate(fresh);
|
|
2110
2200
|
const claimed = await fresh.claim(1, 1, `w-${uid()}`, 1e3);
|
|
2111
2201
|
expect8(claimed).toEqual([]);
|
|
2112
2202
|
} finally {
|
|
@@ -2127,10 +2217,12 @@ var runStoreTck = (options) => {
|
|
|
2127
2217
|
[inc(1)],
|
|
2128
2218
|
make_meta({ stream: s })
|
|
2129
2219
|
);
|
|
2220
|
+
await correlate(fresh);
|
|
2130
2221
|
const first = await fresh.claim(1, 0, `w-${uid()}`, 0);
|
|
2131
2222
|
const f = first.find((l) => l.stream === s);
|
|
2132
2223
|
expect8(f).toBeDefined();
|
|
2133
2224
|
expect8(f.retry).toBe(0);
|
|
2225
|
+
await correlate(fresh);
|
|
2134
2226
|
const second = await fresh.claim(1, 0, `w-${uid()}`, 1e5);
|
|
2135
2227
|
const sec = second.find((l) => l.stream === s);
|
|
2136
2228
|
expect8(sec).toBeDefined();
|
|
@@ -2151,8 +2243,10 @@ var runStoreTck = (options) => {
|
|
|
2151
2243
|
[inc(1)],
|
|
2152
2244
|
make_meta({ stream: s })
|
|
2153
2245
|
);
|
|
2246
|
+
await correlate(fresh);
|
|
2154
2247
|
const lag = await fresh.claim(1, 0, `w-${uid()}`, 0);
|
|
2155
2248
|
expect8(lag.find((l) => l.stream === s)?.lagging).toBe(true);
|
|
2249
|
+
await correlate(fresh);
|
|
2156
2250
|
const lead = await fresh.claim(0, 1, `w-${uid()}`, 1e5);
|
|
2157
2251
|
expect8(lead.find((l) => l.stream === s)?.lagging).toBe(false);
|
|
2158
2252
|
} finally {
|
|
@@ -2167,14 +2261,17 @@ var runStoreTck = (options) => {
|
|
|
2167
2261
|
const s = `lease-timeout-${uid()}`;
|
|
2168
2262
|
await fresh.subscribe([{ stream: s }]);
|
|
2169
2263
|
const [e1] = await seed_stream(fresh, s, 1);
|
|
2264
|
+
await correlate(fresh);
|
|
2170
2265
|
const a = await fresh.claim(1, 0, `wA-${uid()}`, 0);
|
|
2171
2266
|
expect8(a.find((l) => l.stream === s)?.retry).toBe(0);
|
|
2267
|
+
await correlate(fresh);
|
|
2172
2268
|
const b = await fresh.claim(1, 0, `wB-${uid()}`, 3e4);
|
|
2173
2269
|
const b_lease = b.find((l) => l.stream === s);
|
|
2174
2270
|
expect8(b_lease).toBeDefined();
|
|
2175
2271
|
expect8(b_lease.retry).toBe(1);
|
|
2176
2272
|
await fresh.ack([{ ...b_lease, at: e1.id }]);
|
|
2177
2273
|
await seed_stream(fresh, s, 1);
|
|
2274
|
+
await correlate(fresh);
|
|
2178
2275
|
const c = await fresh.claim(1, 0, `wC-${uid()}`, 3e4);
|
|
2179
2276
|
expect8(c.find((l) => l.stream === s)?.retry).toBe(0);
|
|
2180
2277
|
} finally {
|
|
@@ -2182,42 +2279,7 @@ var runStoreTck = (options) => {
|
|
|
2182
2279
|
}
|
|
2183
2280
|
});
|
|
2184
2281
|
});
|
|
2185
|
-
describe8("
|
|
2186
|
-
it7("treats source as an exact stream name \u2014 no substring or pattern overmatch", async () => {
|
|
2187
|
-
const fresh = await options.factory();
|
|
2188
|
-
try {
|
|
2189
|
-
await fresh.drop();
|
|
2190
|
-
await fresh.seed();
|
|
2191
|
-
const base = `src-${uid()}`;
|
|
2192
|
-
const sibling = `${base}2`;
|
|
2193
|
-
const target = `agg-${uid()}`;
|
|
2194
|
-
const control = `ctl-${uid()}`;
|
|
2195
|
-
await fresh.subscribe([
|
|
2196
|
-
{ stream: target, source: base },
|
|
2197
|
-
// Control subscription sourced from the sibling — it DOES see
|
|
2198
|
-
// the sibling commit below, so the negative assertion runs
|
|
2199
|
-
// through a populated claim result.
|
|
2200
|
-
{ stream: control, source: sibling }
|
|
2201
|
-
]);
|
|
2202
|
-
const [seeded] = await seed_stream(fresh, base, 1);
|
|
2203
|
-
const [ctl_seeded] = await seed_stream(fresh, sibling, 1);
|
|
2204
|
-
const first = await fresh.claim(100, 0, `w-${uid()}`, 3e4);
|
|
2205
|
-
const mine = first.find((l) => l.stream === target);
|
|
2206
|
-
const ctl = first.find((l) => l.stream === control);
|
|
2207
|
-
expect8(mine).toBeDefined();
|
|
2208
|
-
expect8(ctl).toBeDefined();
|
|
2209
|
-
await fresh.ack([
|
|
2210
|
-
{ ...mine, at: seeded.id },
|
|
2211
|
-
{ ...ctl, at: ctl_seeded.id }
|
|
2212
|
-
]);
|
|
2213
|
-
await seed_stream(fresh, sibling, 1);
|
|
2214
|
-
const second = await fresh.claim(100, 0, `w-${uid()}`, 3e4);
|
|
2215
|
-
expect8(second.find((l) => l.stream === control)).toBeDefined();
|
|
2216
|
-
expect8(second.find((l) => l.stream === target)).toBeUndefined();
|
|
2217
|
-
} finally {
|
|
2218
|
-
await fresh.dispose();
|
|
2219
|
-
}
|
|
2220
|
-
});
|
|
2282
|
+
describe8("source windows and lease exclusivity", () => {
|
|
2221
2283
|
it7("receives exactly its source stream's events", async () => {
|
|
2222
2284
|
const fresh = await options.factory();
|
|
2223
2285
|
try {
|
|
@@ -2227,12 +2289,14 @@ var runStoreTck = (options) => {
|
|
|
2227
2289
|
const target = `agg-${uid()}`;
|
|
2228
2290
|
await fresh.subscribe([{ stream: target, source: base }]);
|
|
2229
2291
|
const [e1] = await seed_stream(fresh, base, 1);
|
|
2292
|
+
await correlate(fresh);
|
|
2230
2293
|
const first = await fresh.claim(100, 0, `w-${uid()}`, 3e4);
|
|
2231
2294
|
const f = first.find((l) => l.stream === target);
|
|
2232
2295
|
expect8(f).toBeDefined();
|
|
2233
2296
|
expect8(f.source).toBe(base);
|
|
2234
2297
|
await fresh.ack([{ ...f, at: e1.id }]);
|
|
2235
2298
|
const [e2] = await seed_stream(fresh, base, 1);
|
|
2299
|
+
await correlate(fresh);
|
|
2236
2300
|
const second = await fresh.claim(100, 0, `w-${uid()}`, 3e4);
|
|
2237
2301
|
const sec = second.find((l) => l.stream === target);
|
|
2238
2302
|
expect8(sec).toBeDefined();
|
|
@@ -2257,6 +2321,7 @@ var runStoreTck = (options) => {
|
|
|
2257
2321
|
await fresh.subscribe([{ stream: target, source: base }]);
|
|
2258
2322
|
const [b1] = await seed_stream(fresh, base, 1);
|
|
2259
2323
|
await seed_stream(fresh, sibling, 1);
|
|
2324
|
+
await correlate(fresh);
|
|
2260
2325
|
const claimed = await fresh.claim(100, 0, `w-${uid()}`, 3e4);
|
|
2261
2326
|
const lease = claimed.find((l) => l.stream === target);
|
|
2262
2327
|
expect8(lease).toBeDefined();
|
|
@@ -2272,64 +2337,6 @@ var runStoreTck = (options) => {
|
|
|
2272
2337
|
}
|
|
2273
2338
|
});
|
|
2274
2339
|
});
|
|
2275
|
-
describe8.skipIf(!caps.pattern_claim_source)(
|
|
2276
|
-
"claim pattern source matching (capability)",
|
|
2277
|
-
() => {
|
|
2278
|
-
it7("claims a pattern-source target when any matched stream has work (^(A|B)$)", async () => {
|
|
2279
|
-
const fresh = await options.factory();
|
|
2280
|
-
try {
|
|
2281
|
-
await fresh.drop();
|
|
2282
|
-
await fresh.seed();
|
|
2283
|
-
const a = `A-${uid()}`;
|
|
2284
|
-
const b = `B-${uid()}`;
|
|
2285
|
-
const target = `board-${uid()}`;
|
|
2286
|
-
const pattern = `^(${a}|${b})$`;
|
|
2287
|
-
await fresh.subscribe([{ stream: target, source: pattern }]);
|
|
2288
|
-
const [ea] = await seed_stream(fresh, a, 1);
|
|
2289
|
-
const first = await fresh.claim(100, 0, `w-${uid()}`, 3e4);
|
|
2290
|
-
const l1 = first.find((s) => s.stream === target);
|
|
2291
|
-
expect8(l1).toBeDefined();
|
|
2292
|
-
await fresh.ack([{ ...l1, at: ea.id }]);
|
|
2293
|
-
const [eb] = await seed_stream(fresh, b, 1);
|
|
2294
|
-
const second = await fresh.claim(100, 0, `w-${uid()}`, 3e4);
|
|
2295
|
-
expect8(second.find((s) => s.stream === target)).toBeDefined();
|
|
2296
|
-
expect8(eb.stream).toBe(b);
|
|
2297
|
-
} finally {
|
|
2298
|
-
await fresh.dispose();
|
|
2299
|
-
}
|
|
2300
|
-
});
|
|
2301
|
-
it7("does not claim a pattern-source target when no matched stream has work", async () => {
|
|
2302
|
-
const fresh = await options.factory();
|
|
2303
|
-
try {
|
|
2304
|
-
await fresh.drop();
|
|
2305
|
-
await fresh.seed();
|
|
2306
|
-
const a = `A-${uid()}`;
|
|
2307
|
-
const b = `B-${uid()}`;
|
|
2308
|
-
const other = `Z-${uid()}`;
|
|
2309
|
-
const target = `board-${uid()}`;
|
|
2310
|
-
const control = `ctl-${uid()}`;
|
|
2311
|
-
const pattern = `^(${a}|${b})$`;
|
|
2312
|
-
await fresh.subscribe([
|
|
2313
|
-
{ stream: target, source: pattern },
|
|
2314
|
-
{ stream: control, source: other }
|
|
2315
|
-
]);
|
|
2316
|
-
const [ea] = await seed_stream(fresh, a, 1);
|
|
2317
|
-
const first = await fresh.claim(100, 0, `w-${uid()}`, 3e4);
|
|
2318
|
-
const l1 = first.find((s) => s.stream === target);
|
|
2319
|
-
expect8(l1).toBeDefined();
|
|
2320
|
-
expect8(first.map((s) => s.stream)).not.toContain(control);
|
|
2321
|
-
await fresh.ack([{ ...l1, at: ea.id }]);
|
|
2322
|
-
await seed_stream(fresh, other, 1);
|
|
2323
|
-
const claimed = await fresh.claim(100, 0, `w-${uid()}`, 3e4);
|
|
2324
|
-
const streams = claimed.map((s) => s.stream);
|
|
2325
|
-
expect8(streams).toContain(control);
|
|
2326
|
-
expect8(streams).not.toContain(target);
|
|
2327
|
-
} finally {
|
|
2328
|
-
await fresh.dispose();
|
|
2329
|
-
}
|
|
2330
|
-
});
|
|
2331
|
-
}
|
|
2332
|
-
);
|
|
2333
2340
|
describe8.skipIf(!caps.rejects_nonportable_claim_source)(
|
|
2334
2341
|
"claim source registration (capability)",
|
|
2335
2342
|
() => {
|
|
@@ -2347,23 +2354,6 @@ var runStoreTck = (options) => {
|
|
|
2347
2354
|
await fresh.dispose();
|
|
2348
2355
|
}
|
|
2349
2356
|
});
|
|
2350
|
-
it7("accepts a portable-subset pattern claim source (^prefix.*) and claims on match", async () => {
|
|
2351
|
-
const fresh = await options.factory();
|
|
2352
|
-
try {
|
|
2353
|
-
await fresh.drop();
|
|
2354
|
-
await fresh.seed();
|
|
2355
|
-
const prefix = `pfx${uid()}`.replace(/-/g, "");
|
|
2356
|
-
const matched = `${prefix}child`;
|
|
2357
|
-
const target = `board-${uid()}`;
|
|
2358
|
-
await fresh.subscribe([{ stream: target, source: `^${prefix}.*` }]);
|
|
2359
|
-
const [e] = await seed_stream(fresh, matched, 1);
|
|
2360
|
-
const claimed = await fresh.claim(100, 0, `w-${uid()}`, 3e4);
|
|
2361
|
-
expect8(claimed.find((s) => s.stream === target)).toBeDefined();
|
|
2362
|
-
expect8(e.stream).toBe(matched);
|
|
2363
|
-
} finally {
|
|
2364
|
-
await fresh.dispose();
|
|
2365
|
-
}
|
|
2366
|
-
});
|
|
2367
2357
|
}
|
|
2368
2358
|
);
|
|
2369
2359
|
describe8.skipIf(!caps.concurrent_claim)("concurrency (capability)", () => {
|
|
@@ -2385,6 +2375,7 @@ var runStoreTck = (options) => {
|
|
|
2385
2375
|
);
|
|
2386
2376
|
}
|
|
2387
2377
|
const owned = new Set(streams);
|
|
2378
|
+
await correlate(fresh);
|
|
2388
2379
|
const [a, b] = await Promise.all([
|
|
2389
2380
|
fresh.claim(100, 100, `wA-${uid()}`, 6e4),
|
|
2390
2381
|
fresh.claim(100, 100, `wB-${uid()}`, 6e4)
|
|
@@ -2405,10 +2396,12 @@ var runStoreTck = (options) => {
|
|
|
2405
2396
|
const other = `unexpired-other-${uid()}`;
|
|
2406
2397
|
await fresh.subscribe([{ stream: s }]);
|
|
2407
2398
|
await seed_stream(fresh, s, 1);
|
|
2399
|
+
await correlate(fresh);
|
|
2408
2400
|
const a = await fresh.claim(100, 100, `wA-${uid()}`, 6e4);
|
|
2409
2401
|
expect8(a.find((l) => l.stream === s)).toBeDefined();
|
|
2410
2402
|
await fresh.subscribe([{ stream: other }]);
|
|
2411
2403
|
await seed_stream(fresh, other, 1);
|
|
2404
|
+
await correlate(fresh);
|
|
2412
2405
|
const b = await fresh.claim(100, 100, `wB-${uid()}`, 6e4);
|
|
2413
2406
|
expect8(b.find((l) => l.stream === other)).toBeDefined();
|
|
2414
2407
|
expect8(b.find((l) => l.stream === s)).toBeUndefined();
|
|
@@ -2424,6 +2417,7 @@ var runStoreTck = (options) => {
|
|
|
2424
2417
|
const s = `expired-${uid()}`;
|
|
2425
2418
|
await fresh.subscribe([{ stream: s }]);
|
|
2426
2419
|
const [e1] = await seed_stream(fresh, s, 1);
|
|
2420
|
+
await correlate(fresh);
|
|
2427
2421
|
const dead = await fresh.claim(100, 0, `wDead-${uid()}`, 0);
|
|
2428
2422
|
expect8(dead.find((l) => l.stream === s)?.retry).toBe(0);
|
|
2429
2423
|
const [b, c] = await Promise.all([
|
|
@@ -2435,6 +2429,7 @@ var runStoreTck = (options) => {
|
|
|
2435
2429
|
expect8(winners[0].retry).toBe(1);
|
|
2436
2430
|
await fresh.ack([{ ...winners[0], at: e1.id }]);
|
|
2437
2431
|
await seed_stream(fresh, s, 1);
|
|
2432
|
+
await correlate(fresh);
|
|
2438
2433
|
const again = await fresh.claim(100, 0, `wNext-${uid()}`, 6e4);
|
|
2439
2434
|
expect8(again.find((l) => l.stream === s)?.retry).toBe(0);
|
|
2440
2435
|
} finally {
|
|
@@ -2451,6 +2446,7 @@ var runStoreTck = (options) => {
|
|
|
2451
2446
|
[inc(1)],
|
|
2452
2447
|
make_meta({ stream: s })
|
|
2453
2448
|
);
|
|
2449
|
+
await correlate();
|
|
2454
2450
|
const leased = await store.claim(100, 0, `w-${uid()}`, 1e5);
|
|
2455
2451
|
const mine = leased.find((l) => l.stream === s);
|
|
2456
2452
|
expect8(mine).toBeDefined();
|
|
@@ -2461,6 +2457,7 @@ var runStoreTck = (options) => {
|
|
|
2461
2457
|
]);
|
|
2462
2458
|
expect8(blocked).toHaveLength(1);
|
|
2463
2459
|
expect8(blocked[0].error).toBe("boom");
|
|
2460
|
+
await correlate();
|
|
2464
2461
|
const again = await store.claim(100, 100, `w2-${uid()}`, 1e5);
|
|
2465
2462
|
expect8(again.find((l) => l.stream === s)).toBeUndefined();
|
|
2466
2463
|
});
|
|
@@ -2472,6 +2469,7 @@ var runStoreTck = (options) => {
|
|
|
2472
2469
|
[inc(1)],
|
|
2473
2470
|
make_meta({ stream: s })
|
|
2474
2471
|
);
|
|
2472
|
+
await correlate();
|
|
2475
2473
|
const leased = await store.claim(100, 0, `w-${uid()}`, 1e5);
|
|
2476
2474
|
const mine = leased.find((l) => l.stream === s);
|
|
2477
2475
|
expect8(mine).toBeDefined();
|
|
@@ -2497,6 +2495,7 @@ var runStoreTck = (options) => {
|
|
|
2497
2495
|
[inc(1)],
|
|
2498
2496
|
make_meta({ stream: s })
|
|
2499
2497
|
);
|
|
2498
|
+
await correlate();
|
|
2500
2499
|
const leased = await store.claim(100, 0, `right-${uid()}`, 1e5);
|
|
2501
2500
|
const mine = leased.find((l) => l.stream === s);
|
|
2502
2501
|
expect8(mine).toBeDefined();
|
|
@@ -2515,6 +2514,7 @@ var runStoreTck = (options) => {
|
|
|
2515
2514
|
[inc(1)],
|
|
2516
2515
|
make_meta({ stream: s })
|
|
2517
2516
|
);
|
|
2517
|
+
await correlate();
|
|
2518
2518
|
const leased = await store.claim(100, 0, `w-${uid()}`, 1e5);
|
|
2519
2519
|
const mine = leased.find((l) => l.stream === s);
|
|
2520
2520
|
expect8(mine).toBeDefined();
|
|
@@ -2541,6 +2541,7 @@ var runStoreTck = (options) => {
|
|
|
2541
2541
|
make_meta({ stream: st })
|
|
2542
2542
|
);
|
|
2543
2543
|
expect8(await store.defer([s], Date.now() + 36e5)).toBe(1);
|
|
2544
|
+
await correlate();
|
|
2544
2545
|
const leased = await store.claim(100, 100, `w-${uid()}`, 1e5);
|
|
2545
2546
|
expect8(leased.find((l) => l.stream === ctl)).toBeDefined();
|
|
2546
2547
|
expect8(leased.find((l) => l.stream === s)).toBeUndefined();
|
|
@@ -2554,6 +2555,7 @@ var runStoreTck = (options) => {
|
|
|
2554
2555
|
make_meta({ stream: s })
|
|
2555
2556
|
);
|
|
2556
2557
|
expect8(await store.defer([s], Date.now() - 1e3)).toBe(1);
|
|
2558
|
+
await correlate();
|
|
2557
2559
|
const leased = await store.claim(100, 100, `w-${uid()}`, 1e5);
|
|
2558
2560
|
const mine = leased.find((l) => l.stream === s);
|
|
2559
2561
|
expect8(mine).toBeDefined();
|
|
@@ -2570,9 +2572,12 @@ var runStoreTck = (options) => {
|
|
|
2570
2572
|
make_meta({ stream: s })
|
|
2571
2573
|
);
|
|
2572
2574
|
await store.defer([s], Date.now() + 36e5);
|
|
2575
|
+
await correlate();
|
|
2573
2576
|
await store.claim(100, 100, `w1-${uid()}`, 1e5);
|
|
2577
|
+
await correlate();
|
|
2574
2578
|
await store.claim(100, 100, `w2-${uid()}`, 1e5);
|
|
2575
2579
|
await store.defer([s], Date.now() - 1e3);
|
|
2580
|
+
await correlate();
|
|
2576
2581
|
const leased = await store.claim(100, 100, `w3-${uid()}`, 1e5);
|
|
2577
2582
|
const mine = leased.find((l) => l.stream === s);
|
|
2578
2583
|
expect8(mine).toBeDefined();
|
|
@@ -2591,6 +2596,7 @@ var runStoreTck = (options) => {
|
|
|
2591
2596
|
);
|
|
2592
2597
|
await store.defer([s], Date.now() + 36e5);
|
|
2593
2598
|
expect8(await store.reset([s])).toBe(1);
|
|
2599
|
+
await correlate();
|
|
2594
2600
|
const leased = await store.claim(100, 100, `w-${uid()}`, 1e5);
|
|
2595
2601
|
expect8(leased.find((l) => l.stream === s)).toBeDefined();
|
|
2596
2602
|
});
|
|
@@ -2639,6 +2645,7 @@ var runStoreTck = (options) => {
|
|
|
2639
2645
|
Date.now() + 36e5
|
|
2640
2646
|
);
|
|
2641
2647
|
expect8(n).toBe(2);
|
|
2648
|
+
await correlate();
|
|
2642
2649
|
const leased = await store.claim(100, 100, `w-${uid()}`, 1e5);
|
|
2643
2650
|
expect8(leased.find((l) => l.stream === ctl)).toBeDefined();
|
|
2644
2651
|
expect8(leased.find((l) => l.stream === a)).toBeUndefined();
|
|
@@ -2674,6 +2681,7 @@ var runStoreTck = (options) => {
|
|
|
2674
2681
|
[inc(1)],
|
|
2675
2682
|
make_meta({ stream: ctl })
|
|
2676
2683
|
);
|
|
2684
|
+
await correlate();
|
|
2677
2685
|
const leased = await store.claim(100, 100, `w-${uid()}`, 1e5);
|
|
2678
2686
|
const s_lease = leased.find((l) => l.stream === s);
|
|
2679
2687
|
const ctl_lease = leased.find((l) => l.stream === ctl);
|
|
@@ -2688,6 +2696,7 @@ var runStoreTck = (options) => {
|
|
|
2688
2696
|
[inc(2)],
|
|
2689
2697
|
make_meta({ stream: ctl })
|
|
2690
2698
|
);
|
|
2699
|
+
await correlate();
|
|
2691
2700
|
const again = await store.claim(100, 100, `w-${uid()}`, 1e5);
|
|
2692
2701
|
expect8(again.find((l) => l.stream === ctl)).toBeDefined();
|
|
2693
2702
|
expect8(again.find((l) => l.stream === s)).toBeUndefined();
|
|
@@ -2700,9 +2709,11 @@ var runStoreTck = (options) => {
|
|
|
2700
2709
|
[inc(1)],
|
|
2701
2710
|
make_meta({ stream: s })
|
|
2702
2711
|
);
|
|
2712
|
+
await correlate();
|
|
2703
2713
|
const leased = await store.claim(100, 100, `w-${uid()}`, 1e5);
|
|
2704
2714
|
const mine = leased.find((l) => l.stream === s);
|
|
2705
2715
|
await store.ack([{ ...mine, due: Date.now() - 1e3, retry: -1 }]);
|
|
2716
|
+
await correlate();
|
|
2706
2717
|
const again = await store.claim(100, 100, `w-${uid()}`, 1e5);
|
|
2707
2718
|
const re = again.find((l) => l.stream === s);
|
|
2708
2719
|
expect8(re).toBeDefined();
|
|
@@ -2718,9 +2729,11 @@ var runStoreTck = (options) => {
|
|
|
2718
2729
|
[inc(1)],
|
|
2719
2730
|
make_meta({ stream: s })
|
|
2720
2731
|
);
|
|
2732
|
+
await correlate();
|
|
2721
2733
|
const leased = await store.claim(100, 100, `w-${uid()}`, 1e5);
|
|
2722
2734
|
const mine = leased.find((l) => l.stream === s);
|
|
2723
2735
|
await store.ack([{ ...mine, due: Date.now() - 1e3, retry: 3 }]);
|
|
2736
|
+
await correlate();
|
|
2724
2737
|
const again = await store.claim(100, 100, `w-${uid()}`, 1e5);
|
|
2725
2738
|
const re = again.find((l) => l.stream === s);
|
|
2726
2739
|
expect8(re).toBeDefined();
|
|
@@ -2741,12 +2754,14 @@ var runStoreTck = (options) => {
|
|
|
2741
2754
|
[inc(1)],
|
|
2742
2755
|
make_meta({ stream: s })
|
|
2743
2756
|
);
|
|
2757
|
+
await correlate();
|
|
2744
2758
|
const leased = await store.claim(100, 100, `w-${uid()}`, 1e5);
|
|
2745
2759
|
const mine = leased.find((l) => l.stream === s);
|
|
2746
2760
|
expect8(mine.at).toBeLessThan(e1.id);
|
|
2747
2761
|
await store.ack([
|
|
2748
2762
|
{ ...mine, at: e1.id, due: Date.now() - 1e3, retry: 2 }
|
|
2749
2763
|
]);
|
|
2764
|
+
await correlate();
|
|
2750
2765
|
const again = await store.claim(100, 100, `w-${uid()}`, 1e5);
|
|
2751
2766
|
const re = again.find((l) => l.stream === s);
|
|
2752
2767
|
expect8(re).toBeDefined();
|
|
@@ -2762,6 +2777,7 @@ var runStoreTck = (options) => {
|
|
|
2762
2777
|
[inc(1)],
|
|
2763
2778
|
make_meta({ stream: s })
|
|
2764
2779
|
);
|
|
2780
|
+
await correlate();
|
|
2765
2781
|
const leased = await store.claim(100, 100, `w-${uid()}`, 1e5);
|
|
2766
2782
|
const mine = leased.find((l) => l.stream === s);
|
|
2767
2783
|
await store.ack([
|
|
@@ -2780,11 +2796,13 @@ var runStoreTck = (options) => {
|
|
|
2780
2796
|
[inc(1)],
|
|
2781
2797
|
make_meta({ stream: s })
|
|
2782
2798
|
);
|
|
2799
|
+
await correlate();
|
|
2783
2800
|
const leased = await store.claim(100, 0, `w-${uid()}`, 1e5);
|
|
2784
2801
|
const mine = leased.find((l) => l.stream === s);
|
|
2785
2802
|
expect8(mine).toBeDefined();
|
|
2786
2803
|
await store.ack([{ ...mine, at: 99 }]);
|
|
2787
2804
|
expect8(await store.reset([s])).toBe(1);
|
|
2805
|
+
await correlate();
|
|
2788
2806
|
const after = await store.claim(100, 0, `w2-${uid()}`, 1e5);
|
|
2789
2807
|
const back = after.find((l) => l.stream === s);
|
|
2790
2808
|
expect8(back).toBeDefined();
|
|
@@ -2798,12 +2816,14 @@ var runStoreTck = (options) => {
|
|
|
2798
2816
|
[inc(1)],
|
|
2799
2817
|
make_meta({ stream: s })
|
|
2800
2818
|
);
|
|
2819
|
+
await correlate();
|
|
2801
2820
|
const leased = await store.claim(100, 0, `w-${uid()}`, 1e5);
|
|
2802
2821
|
const mine = leased.find((l) => l.stream === s);
|
|
2803
2822
|
const others = leased.filter((l) => l.stream !== s);
|
|
2804
2823
|
await store.ack(others);
|
|
2805
2824
|
await store.block([{ ...mine, error: "boom" }]);
|
|
2806
2825
|
expect8(await store.reset([s])).toBe(1);
|
|
2826
|
+
await correlate();
|
|
2807
2827
|
const after = await store.claim(100, 0, `w2-${uid()}`, 1e5);
|
|
2808
2828
|
expect8(after.find((l) => l.stream === s)).toBeDefined();
|
|
2809
2829
|
});
|
|
@@ -2836,9 +2856,11 @@ var runStoreTck = (options) => {
|
|
|
2836
2856
|
[inc(2)],
|
|
2837
2857
|
make_meta({ stream: s })
|
|
2838
2858
|
);
|
|
2859
|
+
await correlate();
|
|
2839
2860
|
const first = await store.claim(100, 0, `w-${uid()}`, 1e5);
|
|
2840
2861
|
const m1 = first.find((l) => l.stream === s);
|
|
2841
2862
|
await store.ack([{ ...m1, at: m1.at }]);
|
|
2863
|
+
await correlate();
|
|
2842
2864
|
const before_block = await store.claim(100, 0, `w-${uid()}`, 1e5);
|
|
2843
2865
|
const m2 = before_block.find((l) => l.stream === s);
|
|
2844
2866
|
expect8(m2).toBeDefined();
|
|
@@ -2853,6 +2875,7 @@ var runStoreTck = (options) => {
|
|
|
2853
2875
|
);
|
|
2854
2876
|
expect8(blocked_flag).toBe(true);
|
|
2855
2877
|
expect8(await store.unblock([s])).toBe(1);
|
|
2878
|
+
await correlate();
|
|
2856
2879
|
const after = await store.claim(100, 0, `w-${uid()}`, 1e5);
|
|
2857
2880
|
const back = after.find((l) => l.stream === s);
|
|
2858
2881
|
expect8(back).toBeDefined();
|
|
@@ -2887,6 +2910,7 @@ var runStoreTck = (options) => {
|
|
|
2887
2910
|
[inc(1)],
|
|
2888
2911
|
make_meta({ stream: s2 })
|
|
2889
2912
|
);
|
|
2913
|
+
await correlate();
|
|
2890
2914
|
const leased = await store.claim(100, 0, `w-${uid()}`, 1e5);
|
|
2891
2915
|
const m1 = leased.find((l) => l.stream === s1);
|
|
2892
2916
|
const others = leased.filter((l) => l.stream !== s1);
|
|
@@ -2915,6 +2939,7 @@ var runStoreTck = (options) => {
|
|
|
2915
2939
|
[inc(1)],
|
|
2916
2940
|
make_meta({ stream: s3 })
|
|
2917
2941
|
);
|
|
2942
|
+
await correlate();
|
|
2918
2943
|
const leased = await store.claim(100, 0, `w-${uid()}`, 1e5);
|
|
2919
2944
|
const blockable = leased.filter((l) => l.stream === s1 || l.stream === s2 || l.stream === s3).map((l) => ({ ...l, error: "boom" }));
|
|
2920
2945
|
await store.ack(
|
|
@@ -2927,6 +2952,7 @@ var runStoreTck = (options) => {
|
|
|
2927
2952
|
stream: `^unblock-filter-${tag}-`
|
|
2928
2953
|
});
|
|
2929
2954
|
expect8(count).toBe(2);
|
|
2955
|
+
await correlate();
|
|
2930
2956
|
const after = await store.claim(100, 0, `w-${uid()}`, 1e5);
|
|
2931
2957
|
expect8(after.find((l) => l.stream === s3)).toBeUndefined();
|
|
2932
2958
|
expect8(after.find((l) => l.stream === s1)).toBeDefined();
|
|
@@ -2947,6 +2973,7 @@ var runStoreTck = (options) => {
|
|
|
2947
2973
|
[inc(1)],
|
|
2948
2974
|
make_meta({ stream: s2 })
|
|
2949
2975
|
);
|
|
2976
|
+
await correlate();
|
|
2950
2977
|
const leased = await store.claim(100, 0, `w-${uid()}`, 1e5);
|
|
2951
2978
|
const mine = leased.filter((l) => l.stream === s1 || l.stream === s2);
|
|
2952
2979
|
await store.ack(leased.filter((l) => !mine.includes(l)));
|
|
@@ -3001,6 +3028,7 @@ var runStoreTck = (options) => {
|
|
|
3001
3028
|
[inc(1)],
|
|
3002
3029
|
make_meta({ stream: other })
|
|
3003
3030
|
);
|
|
3031
|
+
await correlate();
|
|
3004
3032
|
const leased = await store.claim(100, 0, `w-${uid()}`, 1e5);
|
|
3005
3033
|
const mine = leased.filter(
|
|
3006
3034
|
(l) => l.stream === s1 || l.stream === s2 || l.stream === other
|
|
@@ -3037,6 +3065,7 @@ var runStoreTck = (options) => {
|
|
|
3037
3065
|
[inc(1)],
|
|
3038
3066
|
make_meta({ stream: s2 })
|
|
3039
3067
|
);
|
|
3068
|
+
await correlate();
|
|
3040
3069
|
const leased = await store.claim(100, 0, `w-${uid()}`, 1e5);
|
|
3041
3070
|
const m1 = leased.find((l) => l.stream === s1);
|
|
3042
3071
|
await store.ack(leased.filter((l) => l.stream !== s1));
|
|
@@ -3127,6 +3156,7 @@ var runStoreTck = (options) => {
|
|
|
3127
3156
|
{ stream: sub_default, source: src1 },
|
|
3128
3157
|
{ stream: sub_slow, source: src2, lane: "slow" }
|
|
3129
3158
|
]);
|
|
3159
|
+
await correlate();
|
|
3130
3160
|
const slow = await store.claim(50, 0, `w-slow-${tag}`, 1e3, "slow");
|
|
3131
3161
|
const slow_mine = slow.filter(
|
|
3132
3162
|
(l) => l.stream === sub_default || l.stream === sub_slow
|
|
@@ -3134,6 +3164,7 @@ var runStoreTck = (options) => {
|
|
|
3134
3164
|
expect8(slow_mine.map((l) => l.stream)).toEqual([sub_slow]);
|
|
3135
3165
|
expect8(slow_mine[0]?.lane).toBe("slow");
|
|
3136
3166
|
await store.ack(slow_mine.map((l) => ({ ...l, at: l.at + 1 })));
|
|
3167
|
+
await correlate();
|
|
3137
3168
|
const all = await store.claim(50, 0, `w-all-${tag}`, 1e3);
|
|
3138
3169
|
const all_mine = all.filter((l) => l.stream === sub_default || l.stream === sub_slow).map((l) => ({ stream: l.stream, lane: l.lane }));
|
|
3139
3170
|
expect8(all_mine).toEqual(
|
|
@@ -3193,6 +3224,7 @@ var runStoreTck = (options) => {
|
|
|
3193
3224
|
{ stream: a, source: src, lane: `rslow-${tag}` },
|
|
3194
3225
|
{ stream: b, source: src, lane: `rfast-${tag}` }
|
|
3195
3226
|
]);
|
|
3227
|
+
await correlate();
|
|
3196
3228
|
const leases = await store.claim(50, 0, `w-${tag}`, 5e3);
|
|
3197
3229
|
const mine = leases.filter((l) => l.stream === a || l.stream === b);
|
|
3198
3230
|
await store.ack(mine.map((l) => ({ ...l, at: l.at + 1 })));
|
|
@@ -3222,6 +3254,7 @@ var runStoreTck = (options) => {
|
|
|
3222
3254
|
{ stream: a, source: src, lane: `uslow-${tag}` },
|
|
3223
3255
|
{ stream: b, source: src, lane: `ufast-${tag}` }
|
|
3224
3256
|
]);
|
|
3257
|
+
await correlate();
|
|
3225
3258
|
const leases = await store.claim(50, 0, `w-${tag}`, 5e3);
|
|
3226
3259
|
const mine = leases.filter((l) => l.stream === a || l.stream === b);
|
|
3227
3260
|
await store.block(mine.map((l) => ({ ...l, error: "boom" })));
|
|
@@ -3612,6 +3645,7 @@ var runStoreTck = (options) => {
|
|
|
3612
3645
|
[inc(1)],
|
|
3613
3646
|
make_meta({ stream: s })
|
|
3614
3647
|
);
|
|
3648
|
+
await correlate();
|
|
3615
3649
|
const leased = await store.claim(100, 0, `w-${uid()}`, 1e5);
|
|
3616
3650
|
const mine = leased.find((l) => l.stream === s);
|
|
3617
3651
|
const others = leased.filter((l) => l.stream !== s);
|
|
@@ -3860,6 +3894,7 @@ var runStoreTck = (options) => {
|
|
|
3860
3894
|
[inc(2)],
|
|
3861
3895
|
make_meta({ stream: b })
|
|
3862
3896
|
);
|
|
3897
|
+
await correlate();
|
|
3863
3898
|
const leased = await store.claim(100, 0, `w-${uid()}`, 1e5);
|
|
3864
3899
|
const mine = leased.find((l) => l.stream === a);
|
|
3865
3900
|
expect8(mine).toBeDefined();
|