@effect/cluster 0.46.2 → 0.46.3

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.
@@ -118,7 +118,7 @@ const toHttpApiGroup = (name, entity) => {
118
118
  for (const parentRpc_ of entity.protocol.requests.values()) {
119
119
  const parentRpc = parentRpc_;
120
120
  const endpoint = HttpApiEndpoint.post(parentRpc._tag, `/${tagToPath(parentRpc._tag)}/:entityId`).setPath(entityIdPath).setPayload(parentRpc.payloadSchema).addSuccess(parentRpc.successSchema).addError(Schema.Union(parentRpc.errorSchema, ...clientErrors)).annotateContext(parentRpc.annotations);
121
- const endpointDiscard = HttpApiEndpoint.post(parentRpc._tag, `/${tagToPath(parentRpc._tag)}/:entityId/discard`).setPath(entityIdPath).setPayload(parentRpc.payloadSchema).addError(Schema.Union(...clientErrors)).annotateContext(parentRpc.annotations);
121
+ const endpointDiscard = HttpApiEndpoint.post(`${parentRpc._tag}Discard`, `/${tagToPath(parentRpc._tag)}/:entityId/discard`).setPath(entityIdPath).setPayload(parentRpc.payloadSchema).addError(Schema.Union(...clientErrors)).annotateContext(parentRpc.annotations);
122
122
  group = group.add(endpoint).add(endpointDiscard);
123
123
  }
124
124
  return group;
@@ -1 +1 @@
1
- {"version":3,"file":"EntityProxy.js","names":["HttpApiEndpoint","_interopRequireWildcard","require","HttpApiGroup","Rpc","RpcGroup","Schema","_ClusterError","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","clientErrors","MailboxFull","AlreadyProcessingMessage","PersistenceError","EntityNotManagedByRunner","toRpcGroup","entity","rpcs","parentRpc_","protocol","requests","values","parentRpc","payloadSchema","Struct","entityId","String","payload","oldMake","make","input","options","rpc","type","_tag","error","Union","errorSchema","success","successSchema","annotateContext","annotations","rpcDiscard","push","exports","entityIdPath","toHttpApiGroup","name","group","endpoint","post","tagToPath","setPath","setPayload","addSuccess","addError","endpointDiscard","add","tag","replace","toLowerCase"],"sources":["../../src/EntityProxy.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"EntityProxy.js","names":["HttpApiEndpoint","_interopRequireWildcard","require","HttpApiGroup","Rpc","RpcGroup","Schema","_ClusterError","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","clientErrors","MailboxFull","AlreadyProcessingMessage","PersistenceError","EntityNotManagedByRunner","toRpcGroup","entity","rpcs","parentRpc_","protocol","requests","values","parentRpc","payloadSchema","Struct","entityId","String","payload","oldMake","make","input","options","rpc","type","_tag","error","Union","errorSchema","success","successSchema","annotateContext","annotations","rpcDiscard","push","exports","entityIdPath","toHttpApiGroup","name","group","endpoint","post","tagToPath","setPath","setPayload","addSuccess","addError","endpointDiscard","add","tag","replace","toLowerCase"],"sources":["../../src/EntityProxy.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
@@ -21,12 +21,22 @@ const layerHttpApi = (api, name, entity) => HttpApiBuilder.group(api, name, Effe
21
21
  handlers = handlers.handle(parentRpc._tag, ({
22
22
  path,
23
23
  payload
24
- }) => client(path.entityId)[parentRpc._tag](payload)).handle(`${parentRpc._tag}Discard`, ({
24
+ }) => client(path.entityId)[parentRpc._tag](payload).pipe(Effect.tapDefect(Effect.logError), Effect.annotateLogs({
25
+ module: "EntityProxyServer",
26
+ entity: entity.type,
27
+ entityId: path.entityId,
28
+ method: parentRpc._tag
29
+ }))).handle(`${parentRpc._tag}Discard`, ({
25
30
  path,
26
31
  payload
27
32
  }) => client(path.entityId)[parentRpc._tag](payload, {
28
33
  discard: true
29
- }));
34
+ }).pipe(Effect.tapDefect(Effect.logError), Effect.annotateLogs({
35
+ module: "EntityProxyServer",
36
+ entity: entity.type,
37
+ entityId: path.entityId,
38
+ method: `${parentRpc._tag}Discard`
39
+ })));
30
40
  }
31
41
  return handlers;
32
42
  }));
@@ -1 +1 @@
1
- {"version":3,"file":"EntityProxyServer.js","names":["HttpApiBuilder","_interopRequireWildcard","require","Context","Effect","Layer","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","layerHttpApi","api","name","entity","group","fnUntraced","handlers_","client","handlers","parentRpc_","protocol","requests","values","parentRpc","handle","_tag","path","payload","entityId","discard","exports","layerRpcHandlers","effectContext","gen","context","Map","tag","type","key","handler","unsafeMake"],"sources":["../../src/EntityProxyServer.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"EntityProxyServer.js","names":["HttpApiBuilder","_interopRequireWildcard","require","Context","Effect","Layer","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","layerHttpApi","api","name","entity","group","fnUntraced","handlers_","client","handlers","parentRpc_","protocol","requests","values","parentRpc","handle","_tag","path","payload","entityId","pipe","tapDefect","logError","annotateLogs","module","type","method","discard","exports","layerRpcHandlers","effectContext","gen","context","Map","tag","key","handler","unsafeMake"],"sources":["../../src/EntityProxyServer.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
@@ -4,6 +4,7 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.make = exports.layerWith = exports.layer = void 0;
7
+ var Migrator = _interopRequireWildcard(require("@effect/sql/Migrator"));
7
8
  var SqlClient = _interopRequireWildcard(require("@effect/sql/SqlClient"));
8
9
  var Arr = _interopRequireWildcard(require("effect/Array"));
9
10
  var Effect = _interopRequireWildcard(require("effect/Effect"));
@@ -29,248 +30,16 @@ const make = exports.make = /*#__PURE__*/Effect.fnUntraced(function* (options) {
29
30
  const sql = (yield* SqlClient.SqlClient).withoutTransforms();
30
31
  const prefix = options?.prefix ?? "cluster";
31
32
  const table = name => `${prefix}_${name}`;
33
+ yield* Effect.orDie(Migrator.make({})({
34
+ loader: migrations(options),
35
+ table: table("migrations")
36
+ }));
32
37
  const messageKindAckChunk = sql.literal(String(messageKind.AckChunk));
33
38
  const replyKindWithExit = sql.literal(String(replyKind.WithExit));
34
39
  const messagesTable = table("messages");
35
40
  const messagesTableSql = sql(messagesTable);
36
41
  const repliesTable = table("replies");
37
42
  const repliesTableSql = sql(repliesTable);
38
- yield* sql.onDialectOrElse({
39
- mssql: () => sql`
40
- IF OBJECT_ID(N'${messagesTableSql}', N'U') IS NULL
41
- CREATE TABLE ${messagesTableSql} (
42
- id BIGINT PRIMARY KEY,
43
- rowid BIGINT IDENTITY(1,1),
44
- message_id VARCHAR(255),
45
- shard_id VARCHAR(50) NOT NULL,
46
- entity_type VARCHAR(50) NOT NULL,
47
- entity_id VARCHAR(255) NOT NULL,
48
- kind INT NOT NULL,
49
- tag VARCHAR(50),
50
- payload TEXT,
51
- headers TEXT,
52
- trace_id VARCHAR(32),
53
- span_id VARCHAR(16),
54
- sampled BIT,
55
- processed BIT NOT NULL DEFAULT 0,
56
- request_id BIGINT NOT NULL,
57
- reply_id BIGINT,
58
- last_reply_id BIGINT,
59
- last_read DATETIME,
60
- deliver_at BIGINT,
61
- UNIQUE (message_id),
62
- FOREIGN KEY (request_id) REFERENCES ${messagesTableSql} (id) ON DELETE CASCADE
63
- )
64
- `,
65
- mysql: () => sql`
66
- CREATE TABLE IF NOT EXISTS ${messagesTableSql} (
67
- id BIGINT NOT NULL,
68
- rowid BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY,
69
- message_id VARCHAR(255),
70
- shard_id VARCHAR(50) NOT NULL,
71
- entity_type VARCHAR(50) NOT NULL,
72
- entity_id VARCHAR(255) NOT NULL,
73
- kind INT NOT NULL,
74
- tag VARCHAR(50),
75
- payload TEXT,
76
- headers TEXT,
77
- trace_id VARCHAR(32),
78
- span_id VARCHAR(16),
79
- sampled BOOLEAN,
80
- processed BOOLEAN NOT NULL DEFAULT FALSE,
81
- request_id BIGINT NOT NULL,
82
- reply_id BIGINT,
83
- last_reply_id BIGINT,
84
- last_read DATETIME,
85
- deliver_at BIGINT,
86
- UNIQUE (id),
87
- UNIQUE (message_id),
88
- FOREIGN KEY (request_id) REFERENCES ${messagesTableSql} (id) ON DELETE CASCADE
89
- )
90
- `,
91
- pg: () => sql`
92
- CREATE TABLE IF NOT EXISTS ${messagesTableSql} (
93
- id BIGINT PRIMARY KEY,
94
- rowid BIGSERIAL,
95
- message_id VARCHAR(255),
96
- shard_id VARCHAR(50) NOT NULL,
97
- entity_type VARCHAR(50) NOT NULL,
98
- entity_id VARCHAR(255) NOT NULL,
99
- kind INT NOT NULL,
100
- tag VARCHAR(50),
101
- payload TEXT,
102
- headers TEXT,
103
- trace_id VARCHAR(32),
104
- span_id VARCHAR(16),
105
- sampled BOOLEAN,
106
- processed BOOLEAN NOT NULL DEFAULT FALSE,
107
- request_id BIGINT NOT NULL,
108
- reply_id BIGINT,
109
- last_reply_id BIGINT,
110
- last_read TIMESTAMP,
111
- deliver_at BIGINT,
112
- UNIQUE (message_id),
113
- FOREIGN KEY (request_id) REFERENCES ${messagesTableSql} (id) ON DELETE CASCADE
114
- )
115
- `.pipe(Effect.ignore),
116
- orElse: () =>
117
- // sqlite
118
- sql`
119
- CREATE TABLE IF NOT EXISTS ${messagesTableSql} (
120
- id INTEGER PRIMARY KEY,
121
- message_id TEXT,
122
- shard_id TEXT NOT NULL,
123
- entity_type TEXT NOT NULL,
124
- entity_id TEXT NOT NULL,
125
- kind INTEGER NOT NULL,
126
- tag TEXT,
127
- payload TEXT,
128
- headers TEXT,
129
- trace_id TEXT,
130
- span_id TEXT,
131
- sampled BOOLEAN,
132
- processed BOOLEAN NOT NULL DEFAULT FALSE,
133
- request_id INTEGER NOT NULL,
134
- reply_id INTEGER,
135
- last_reply_id INTEGER,
136
- last_read TEXT,
137
- deliver_at INTEGER,
138
- UNIQUE (message_id),
139
- FOREIGN KEY (request_id) REFERENCES ${messagesTableSql} (id) ON DELETE CASCADE
140
- )
141
- `
142
- });
143
- // Add message indexes optimized for the specific query patterns
144
- const shardLookupIndex = `${messagesTable}_shard_idx`;
145
- const requestIdLookupIndex = `${messagesTable}_request_id_idx`;
146
- yield* sql.onDialectOrElse({
147
- mssql: () => sql`
148
- IF NOT EXISTS (SELECT * FROM sys.indexes WHERE name = ${shardLookupIndex})
149
- CREATE INDEX ${sql(shardLookupIndex)}
150
- ON ${messagesTableSql} (shard_id, processed, last_read, deliver_at);
151
-
152
- IF NOT EXISTS (SELECT * FROM sys.indexes WHERE name = ${requestIdLookupIndex})
153
- CREATE INDEX ${sql(requestIdLookupIndex)}
154
- ON ${messagesTableSql} (request_id);
155
- `,
156
- mysql: () => sql`
157
- CREATE INDEX ${sql(shardLookupIndex)}
158
- ON ${messagesTableSql} (shard_id, processed, last_read, deliver_at);
159
-
160
- CREATE INDEX ${sql(requestIdLookupIndex)}
161
- ON ${messagesTableSql} (request_id);
162
- `.unprepared.pipe(Effect.ignore),
163
- pg: () => sql`
164
- CREATE INDEX IF NOT EXISTS ${sql(shardLookupIndex)}
165
- ON ${messagesTableSql} (shard_id, processed, last_read, deliver_at);
166
-
167
- CREATE INDEX IF NOT EXISTS ${sql(requestIdLookupIndex)}
168
- ON ${messagesTableSql} (request_id);
169
- `.pipe(Effect.tapDefect(error => Effect.annotateLogs(Effect.logDebug("Failed to create indexes", error), {
170
- package: "@effect/cluster",
171
- module: "SqlMessageStorage"
172
- })), Effect.retry({
173
- schedule: Schedule.spaced(1000)
174
- })),
175
- orElse: () =>
176
- // sqlite
177
- Effect.all([sql`
178
- CREATE INDEX IF NOT EXISTS ${sql(shardLookupIndex)}
179
- ON ${messagesTableSql} (shard_id, processed, last_read, deliver_at)
180
- `, sql`
181
- CREATE INDEX IF NOT EXISTS ${sql(requestIdLookupIndex)}
182
- ON ${messagesTableSql} (request_id)
183
- `]).pipe(sql.withTransaction)
184
- });
185
- yield* sql.onDialectOrElse({
186
- mssql: () => sql`
187
- IF OBJECT_ID(N'${repliesTableSql}', N'U') IS NULL
188
- CREATE TABLE ${repliesTableSql} (
189
- id BIGINT PRIMARY KEY,
190
- rowid BIGINT IDENTITY(1,1),
191
- kind INT,
192
- request_id BIGINT NOT NULL,
193
- payload TEXT NOT NULL,
194
- sequence INT,
195
- acked BIT NOT NULL DEFAULT 0,
196
- CONSTRAINT ${sql(repliesTable + "_one_exit")} UNIQUE (request_id, kind),
197
- CONSTRAINT ${sql(repliesTable + "_sequence")} UNIQUE (request_id, sequence),
198
- FOREIGN KEY (request_id) REFERENCES ${messagesTableSql} (id) ON DELETE CASCADE
199
- )
200
- `,
201
- mysql: () => sql`
202
- CREATE TABLE IF NOT EXISTS ${repliesTableSql} (
203
- id BIGINT NOT NULL,
204
- rowid BIGINT AUTO_INCREMENT PRIMARY KEY,
205
- kind INT,
206
- request_id BIGINT NOT NULL,
207
- payload TEXT NOT NULL,
208
- sequence INT,
209
- acked BOOLEAN NOT NULL DEFAULT FALSE,
210
- UNIQUE (id),
211
- UNIQUE (request_id, kind),
212
- UNIQUE (request_id, sequence),
213
- FOREIGN KEY (request_id) REFERENCES ${messagesTableSql} (id) ON DELETE CASCADE
214
- )
215
- `,
216
- pg: () => sql`
217
- CREATE TABLE IF NOT EXISTS ${repliesTableSql} (
218
- id BIGINT PRIMARY KEY,
219
- rowid BIGSERIAL,
220
- kind INT,
221
- request_id BIGINT NOT NULL,
222
- payload TEXT NOT NULL,
223
- sequence INT,
224
- acked BOOLEAN NOT NULL DEFAULT FALSE,
225
- UNIQUE (request_id, kind),
226
- UNIQUE (request_id, sequence),
227
- FOREIGN KEY (request_id) REFERENCES ${messagesTableSql} (id) ON DELETE CASCADE
228
- )
229
- `,
230
- orElse: () =>
231
- // sqlite
232
- sql`
233
- CREATE TABLE IF NOT EXISTS ${repliesTableSql} (
234
- id INTEGER PRIMARY KEY,
235
- kind INTEGER,
236
- request_id INTEGER NOT NULL,
237
- payload TEXT NOT NULL,
238
- sequence INTEGER,
239
- acked BOOLEAN NOT NULL DEFAULT FALSE,
240
- UNIQUE (request_id, kind),
241
- UNIQUE (request_id, sequence),
242
- FOREIGN KEY (request_id) REFERENCES ${messagesTableSql} (id) ON DELETE CASCADE
243
- )
244
- `
245
- });
246
- // Add reply indexes optimized for request_id lookups
247
- const replyLookupIndex = `${repliesTable}_request_lookup_idx`;
248
- yield* sql.onDialectOrElse({
249
- mssql: () => sql`
250
- IF NOT EXISTS (SELECT * FROM sys.indexes WHERE name = ${replyLookupIndex})
251
- CREATE INDEX ${sql(replyLookupIndex)}
252
- ON ${repliesTableSql} (request_id, kind, acked);
253
- `,
254
- mysql: () => sql`
255
- CREATE INDEX ${sql(replyLookupIndex)}
256
- ON ${repliesTableSql} (request_id, kind, acked);
257
- `.unprepared.pipe(Effect.ignore),
258
- pg: () => sql`
259
- CREATE INDEX IF NOT EXISTS ${sql(replyLookupIndex)}
260
- ON ${repliesTableSql} (request_id, kind, acked);
261
- `.pipe(Effect.tapDefect(error => Effect.annotateLogs(Effect.logDebug("Failed to create indexes", error), {
262
- package: "@effect/cluster",
263
- module: "SqlMessageStorage"
264
- })), Effect.retry({
265
- schedule: Schedule.spaced(1000)
266
- })),
267
- orElse: () =>
268
- // sqlite
269
- sql`
270
- CREATE INDEX IF NOT EXISTS ${sql(replyLookupIndex)}
271
- ON ${repliesTableSql} (request_id, kind, acked);
272
- `
273
- });
274
43
  const envelopeToRow = (envelope, message_id, deliver_at) => {
275
44
  switch (envelope._tag) {
276
45
  case "Request":
@@ -679,6 +448,274 @@ const layerWith = options => Layer.scoped(MessageStorage.MessageStorage, make(op
679
448
  // internal
680
449
  // -------------------------------------------------------------------------------------------------
681
450
  exports.layerWith = layerWith;
451
+ const migrations = options => {
452
+ const prefix = options?.prefix ?? "cluster";
453
+ const table = name => `${prefix}_${name}`;
454
+ const messagesTable = table("messages");
455
+ const repliesTable = table("replies");
456
+ return Migrator.fromRecord({
457
+ "0001_create_tables": Effect.gen(function* () {
458
+ const sql = (yield* SqlClient.SqlClient).withoutTransforms();
459
+ const messagesTableSql = sql(messagesTable);
460
+ const repliesTableSql = sql(repliesTable);
461
+ yield* sql.onDialectOrElse({
462
+ mssql: () => sql`
463
+ IF OBJECT_ID(N'${messagesTableSql}', N'U') IS NULL
464
+ CREATE TABLE ${messagesTableSql} (
465
+ id BIGINT PRIMARY KEY,
466
+ rowid BIGINT IDENTITY(1,1),
467
+ message_id VARCHAR(255),
468
+ shard_id VARCHAR(50) NOT NULL,
469
+ entity_type VARCHAR(150) NOT NULL,
470
+ entity_id VARCHAR(255) NOT NULL,
471
+ kind INT NOT NULL,
472
+ tag VARCHAR(50),
473
+ payload TEXT,
474
+ headers TEXT,
475
+ trace_id VARCHAR(32),
476
+ span_id VARCHAR(16),
477
+ sampled BIT,
478
+ processed BIT NOT NULL DEFAULT 0,
479
+ request_id BIGINT NOT NULL,
480
+ reply_id BIGINT,
481
+ last_reply_id BIGINT,
482
+ last_read DATETIME,
483
+ deliver_at BIGINT,
484
+ UNIQUE (message_id),
485
+ FOREIGN KEY (request_id) REFERENCES ${messagesTableSql} (id) ON DELETE CASCADE
486
+ )
487
+ `,
488
+ mysql: () => sql`
489
+ CREATE TABLE IF NOT EXISTS ${messagesTableSql} (
490
+ id BIGINT NOT NULL,
491
+ rowid BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY,
492
+ message_id VARCHAR(255),
493
+ shard_id VARCHAR(50) NOT NULL,
494
+ entity_type VARCHAR(150) NOT NULL,
495
+ entity_id VARCHAR(255) NOT NULL,
496
+ kind INT NOT NULL,
497
+ tag VARCHAR(50),
498
+ payload TEXT,
499
+ headers TEXT,
500
+ trace_id VARCHAR(32),
501
+ span_id VARCHAR(16),
502
+ sampled BOOLEAN,
503
+ processed BOOLEAN NOT NULL DEFAULT FALSE,
504
+ request_id BIGINT NOT NULL,
505
+ reply_id BIGINT,
506
+ last_reply_id BIGINT,
507
+ last_read DATETIME,
508
+ deliver_at BIGINT,
509
+ UNIQUE (id),
510
+ UNIQUE (message_id),
511
+ FOREIGN KEY (request_id) REFERENCES ${messagesTableSql} (id) ON DELETE CASCADE
512
+ )
513
+ `,
514
+ pg: () => sql`
515
+ CREATE TABLE IF NOT EXISTS ${messagesTableSql} (
516
+ id BIGINT PRIMARY KEY,
517
+ rowid BIGSERIAL,
518
+ message_id VARCHAR(255),
519
+ shard_id VARCHAR(50) NOT NULL,
520
+ entity_type VARCHAR(150) NOT NULL,
521
+ entity_id VARCHAR(255) NOT NULL,
522
+ kind INT NOT NULL,
523
+ tag VARCHAR(50),
524
+ payload TEXT,
525
+ headers TEXT,
526
+ trace_id VARCHAR(32),
527
+ span_id VARCHAR(16),
528
+ sampled BOOLEAN,
529
+ processed BOOLEAN NOT NULL DEFAULT FALSE,
530
+ request_id BIGINT NOT NULL,
531
+ reply_id BIGINT,
532
+ last_reply_id BIGINT,
533
+ last_read TIMESTAMP,
534
+ deliver_at BIGINT,
535
+ UNIQUE (message_id),
536
+ FOREIGN KEY (request_id) REFERENCES ${messagesTableSql} (id) ON DELETE CASCADE
537
+ )
538
+ `.pipe(Effect.ignore),
539
+ orElse: () =>
540
+ // sqlite
541
+ sql`
542
+ CREATE TABLE IF NOT EXISTS ${messagesTableSql} (
543
+ id INTEGER PRIMARY KEY,
544
+ message_id TEXT,
545
+ shard_id TEXT NOT NULL,
546
+ entity_type TEXT NOT NULL,
547
+ entity_id TEXT NOT NULL,
548
+ kind INTEGER NOT NULL,
549
+ tag TEXT,
550
+ payload TEXT,
551
+ headers TEXT,
552
+ trace_id TEXT,
553
+ span_id TEXT,
554
+ sampled BOOLEAN,
555
+ processed BOOLEAN NOT NULL DEFAULT FALSE,
556
+ request_id INTEGER NOT NULL,
557
+ reply_id INTEGER,
558
+ last_reply_id INTEGER,
559
+ last_read TEXT,
560
+ deliver_at INTEGER,
561
+ UNIQUE (message_id),
562
+ FOREIGN KEY (request_id) REFERENCES ${messagesTableSql} (id) ON DELETE CASCADE
563
+ )
564
+ `
565
+ });
566
+ // Add message indexes optimized for the specific query patterns
567
+ const shardLookupIndex = `${messagesTable}_shard_idx`;
568
+ const requestIdLookupIndex = `${messagesTable}_request_id_idx`;
569
+ yield* sql.onDialectOrElse({
570
+ mssql: () => sql`
571
+ IF NOT EXISTS (SELECT * FROM sys.indexes WHERE name = ${shardLookupIndex})
572
+ CREATE INDEX ${sql(shardLookupIndex)}
573
+ ON ${messagesTableSql} (shard_id, processed, last_read, deliver_at);
574
+
575
+ IF NOT EXISTS (SELECT * FROM sys.indexes WHERE name = ${requestIdLookupIndex})
576
+ CREATE INDEX ${sql(requestIdLookupIndex)}
577
+ ON ${messagesTableSql} (request_id);
578
+ `,
579
+ mysql: () => sql`
580
+ CREATE INDEX ${sql(shardLookupIndex)}
581
+ ON ${messagesTableSql} (shard_id, processed, last_read, deliver_at);
582
+
583
+ CREATE INDEX ${sql(requestIdLookupIndex)}
584
+ ON ${messagesTableSql} (request_id);
585
+ `.unprepared.pipe(Effect.ignore),
586
+ pg: () => sql`
587
+ CREATE INDEX IF NOT EXISTS ${sql(shardLookupIndex)}
588
+ ON ${messagesTableSql} (shard_id, processed, last_read, deliver_at);
589
+
590
+ CREATE INDEX IF NOT EXISTS ${sql(requestIdLookupIndex)}
591
+ ON ${messagesTableSql} (request_id);
592
+ `.pipe(Effect.tapDefect(error => Effect.annotateLogs(Effect.logDebug("Failed to create indexes", error), {
593
+ package: "@effect/cluster",
594
+ module: "SqlMessageStorage"
595
+ })), Effect.retry({
596
+ schedule: Schedule.spaced(1000)
597
+ })),
598
+ orElse: () =>
599
+ // sqlite
600
+ Effect.all([sql`
601
+ CREATE INDEX IF NOT EXISTS ${sql(shardLookupIndex)}
602
+ ON ${messagesTableSql} (shard_id, processed, last_read, deliver_at)
603
+ `, sql`
604
+ CREATE INDEX IF NOT EXISTS ${sql(requestIdLookupIndex)}
605
+ ON ${messagesTableSql} (request_id)
606
+ `]).pipe(sql.withTransaction)
607
+ });
608
+ yield* sql.onDialectOrElse({
609
+ mssql: () => sql`
610
+ IF OBJECT_ID(N'${repliesTableSql}', N'U') IS NULL
611
+ CREATE TABLE ${repliesTableSql} (
612
+ id BIGINT PRIMARY KEY,
613
+ rowid BIGINT IDENTITY(1,1),
614
+ kind INT,
615
+ request_id BIGINT NOT NULL,
616
+ payload TEXT NOT NULL,
617
+ sequence INT,
618
+ acked BIT NOT NULL DEFAULT 0,
619
+ CONSTRAINT ${sql(repliesTable + "_one_exit")} UNIQUE (request_id, kind),
620
+ CONSTRAINT ${sql(repliesTable + "_sequence")} UNIQUE (request_id, sequence),
621
+ FOREIGN KEY (request_id) REFERENCES ${messagesTableSql} (id) ON DELETE CASCADE
622
+ )
623
+ `,
624
+ mysql: () => sql`
625
+ CREATE TABLE IF NOT EXISTS ${repliesTableSql} (
626
+ id BIGINT NOT NULL,
627
+ rowid BIGINT AUTO_INCREMENT PRIMARY KEY,
628
+ kind INT,
629
+ request_id BIGINT NOT NULL,
630
+ payload TEXT NOT NULL,
631
+ sequence INT,
632
+ acked BOOLEAN NOT NULL DEFAULT FALSE,
633
+ UNIQUE (id),
634
+ UNIQUE (request_id, kind),
635
+ UNIQUE (request_id, sequence),
636
+ FOREIGN KEY (request_id) REFERENCES ${messagesTableSql} (id) ON DELETE CASCADE
637
+ )
638
+ `,
639
+ pg: () => sql`
640
+ CREATE TABLE IF NOT EXISTS ${repliesTableSql} (
641
+ id BIGINT PRIMARY KEY,
642
+ rowid BIGSERIAL,
643
+ kind INT,
644
+ request_id BIGINT NOT NULL,
645
+ payload TEXT NOT NULL,
646
+ sequence INT,
647
+ acked BOOLEAN NOT NULL DEFAULT FALSE,
648
+ UNIQUE (request_id, kind),
649
+ UNIQUE (request_id, sequence),
650
+ FOREIGN KEY (request_id) REFERENCES ${messagesTableSql} (id) ON DELETE CASCADE
651
+ )
652
+ `,
653
+ orElse: () =>
654
+ // sqlite
655
+ sql`
656
+ CREATE TABLE IF NOT EXISTS ${repliesTableSql} (
657
+ id INTEGER PRIMARY KEY,
658
+ kind INTEGER,
659
+ request_id INTEGER NOT NULL,
660
+ payload TEXT NOT NULL,
661
+ sequence INTEGER,
662
+ acked BOOLEAN NOT NULL DEFAULT FALSE,
663
+ UNIQUE (request_id, kind),
664
+ UNIQUE (request_id, sequence),
665
+ FOREIGN KEY (request_id) REFERENCES ${messagesTableSql} (id) ON DELETE CASCADE
666
+ )
667
+ `
668
+ });
669
+ // Add reply indexes optimized for request_id lookups
670
+ const replyLookupIndex = `${repliesTable}_request_lookup_idx`;
671
+ yield* sql.onDialectOrElse({
672
+ mssql: () => sql`
673
+ IF NOT EXISTS (SELECT * FROM sys.indexes WHERE name = ${replyLookupIndex})
674
+ CREATE INDEX ${sql(replyLookupIndex)}
675
+ ON ${repliesTableSql} (request_id, kind, acked);
676
+ `,
677
+ mysql: () => sql`
678
+ CREATE INDEX ${sql(replyLookupIndex)}
679
+ ON ${repliesTableSql} (request_id, kind, acked);
680
+ `.unprepared.pipe(Effect.ignore),
681
+ pg: () => sql`
682
+ CREATE INDEX IF NOT EXISTS ${sql(replyLookupIndex)}
683
+ ON ${repliesTableSql} (request_id, kind, acked);
684
+ `.pipe(Effect.tapDefect(error => Effect.annotateLogs(Effect.logDebug("Failed to create indexes", error), {
685
+ package: "@effect/cluster",
686
+ module: "SqlMessageStorage"
687
+ })), Effect.retry({
688
+ schedule: Schedule.spaced(1000)
689
+ })),
690
+ orElse: () =>
691
+ // sqlite
692
+ sql`
693
+ CREATE INDEX IF NOT EXISTS ${sql(replyLookupIndex)}
694
+ ON ${repliesTableSql} (request_id, kind, acked);
695
+ `
696
+ });
697
+ }),
698
+ "0002_entity_type_size": Effect.gen(function* () {
699
+ const sql = (yield* SqlClient.SqlClient).withoutTransforms();
700
+ const messagesTableSql = sql(messagesTable);
701
+ // resize entity_type to 150 characters
702
+ yield* sql.onDialectOrElse({
703
+ mssql: () => sql`
704
+ ALTER TABLE ${messagesTableSql} ALTER COLUMN entity_type VARCHAR(150) NOT NULL;
705
+ `,
706
+ mysql: () => sql`
707
+ ALTER TABLE ${messagesTableSql} MODIFY entity_type VARCHAR(150) NOT NULL;
708
+ `.unprepared.pipe(Effect.ignore),
709
+ pg: () => sql`
710
+ ALTER TABLE ${messagesTableSql} ALTER COLUMN entity_type TYPE VARCHAR(150);
711
+ `,
712
+ orElse: () =>
713
+ // sqlite
714
+ Effect.void
715
+ });
716
+ })
717
+ });
718
+ };
682
719
  const messageKind = {
683
720
  "Request": 0,
684
721
  "AckChunk": 1,