@sentio/runtime 2.39.7-rc.17 → 2.39.7-rc.19
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/lib/db-context.d.ts +4 -1
- package/lib/db-context.d.ts.map +1 -1
- package/lib/db-context.js +38 -1
- package/lib/db-context.js.map +1 -1
- package/package.json +2 -2
- package/src/db-context.ts +50 -2
package/lib/db-context.d.ts
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
import { Subject } from 'rxjs';
|
2
|
-
import { DBRequest, DBResponse, DeepPartial, ProcessStreamResponse } from '@sentio/protos';
|
2
|
+
import { DBRequest, DBRequest_DBUpsert, DBResponse, DeepPartial, ProcessStreamResponse } from '@sentio/protos';
|
3
3
|
type Request = Omit<DBRequest, 'opId'>;
|
4
4
|
export declare const timeoutError: unique symbol;
|
5
5
|
export declare class StoreContext {
|
@@ -13,6 +13,9 @@ export declare class StoreContext {
|
|
13
13
|
result(dbResult: DBResponse): void;
|
14
14
|
error(processId: number, e: any): void;
|
15
15
|
close(): void;
|
16
|
+
queuedUpsert: DBRequest_DBUpsert | undefined;
|
17
|
+
queuedUpsertPromise: Promise<DBResponse> | undefined;
|
18
|
+
private sendUpsert;
|
16
19
|
}
|
17
20
|
export {};
|
18
21
|
//# sourceMappingURL=db-context.d.ts.map
|
package/lib/db-context.d.ts.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"db-context.d.ts","sourceRoot":"","sources":["../src/db-context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAA;AAC9B,OAAO,
|
1
|
+
{"version":3,"file":"db-context.d.ts","sourceRoot":"","sources":["../src/db-context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAA;AAC9B,OAAO,EACL,SAAS,EACT,kBAAkB,EAClB,UAAU,EACV,WAAW,EAEX,qBAAqB,EACtB,MAAM,gBAAgB,CAAA;AAEvB,KAAK,OAAO,GAAG,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC,CAAA;AACtC,eAAO,MAAM,YAAY,eAAW,CAAA;AAEpC,qBAAa,YAAY;IAMrB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,WAAW,CAAC,qBAAqB,CAAC,CAAC;IAC7D,QAAQ,CAAC,SAAS,EAAE,MAAM;IAN5B,OAAO,CAAC,MAAM,CAAC,SAAS,CAAK;IAE7B,OAAO,CAAC,MAAM,CAAuF;gBAG1F,OAAO,EAAE,OAAO,CAAC,WAAW,CAAC,qBAAqB,CAAC,CAAC,EACpD,SAAS,EAAE,MAAM;IAG5B,UAAU,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM;IAM1B,WAAW,CAAC,OAAO,EAAE,WAAW,CAAC,OAAO,CAAC,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IA6CrF,MAAM,CAAC,QAAQ,EAAE,UAAU;IAc3B,KAAK,CAAC,SAAS,EAAE,MAAM,EAAE,CAAC,EAAE,GAAG;IAa/B,KAAK;IAQL,YAAY,EAAE,kBAAkB,GAAG,SAAS,CAAA;IAC5C,mBAAmB,EAAE,OAAO,CAAC,UAAU,CAAC,GAAG,SAAS,CAAA;YAEtC,UAAU;CA4BzB"}
|
package/lib/db-context.js
CHANGED
@@ -15,16 +15,20 @@ export class StoreContext {
|
|
15
15
|
});
|
16
16
|
}
|
17
17
|
sendRequest(request, timeoutSecs) {
|
18
|
+
if (request.upsert) {
|
19
|
+
// batch upsert if possible
|
20
|
+
return this.sendUpsert(request.upsert);
|
21
|
+
}
|
18
22
|
const opId = StoreContext.opCounter++;
|
19
23
|
const promise = this.newPromise(opId);
|
20
24
|
const start = Date.now();
|
21
25
|
const promises = [promise];
|
22
26
|
console.debug('sending db request ', opId, request);
|
27
|
+
let timer;
|
23
28
|
if (timeoutSecs) {
|
24
29
|
const timeoutPromise = new Promise((_r, rej) => (timer = setTimeout(rej, timeoutSecs * 1000, timeoutError)));
|
25
30
|
promises.push(timeoutPromise);
|
26
31
|
}
|
27
|
-
let timer;
|
28
32
|
const requestType = Object.keys(request)[0];
|
29
33
|
this.subject.next({
|
30
34
|
dbRequest: {
|
@@ -83,5 +87,38 @@ export class StoreContext {
|
|
83
87
|
}
|
84
88
|
this.defers.clear();
|
85
89
|
}
|
90
|
+
queuedUpsert;
|
91
|
+
queuedUpsertPromise;
|
92
|
+
async sendUpsert(req, batchIdleMs = 1) {
|
93
|
+
if (this.queuedUpsert && this.queuedUpsertPromise) {
|
94
|
+
// merge the upserts
|
95
|
+
req.entity = this.queuedUpsert.entity.concat(req.entity);
|
96
|
+
req.entityData = this.queuedUpsert.entityData.concat(req.entityData);
|
97
|
+
req.id = this.queuedUpsert.id.concat(req.id);
|
98
|
+
req.data = this.queuedUpsert.data.concat(req.data);
|
99
|
+
return this.queuedUpsertPromise;
|
100
|
+
}
|
101
|
+
else {
|
102
|
+
this.queuedUpsert = req;
|
103
|
+
const opId = StoreContext.opCounter++;
|
104
|
+
const promise = this.newPromise(opId);
|
105
|
+
this.queuedUpsertPromise = promise;
|
106
|
+
await delay(batchIdleMs);
|
107
|
+
this.queuedUpsertPromise = undefined;
|
108
|
+
this.queuedUpsert = undefined;
|
109
|
+
console.log('sending upsert', opId, 'batch size', req.entity.length);
|
110
|
+
this.subject.next({
|
111
|
+
dbRequest: {
|
112
|
+
upsert: req,
|
113
|
+
opId
|
114
|
+
},
|
115
|
+
processId: this.processId
|
116
|
+
});
|
117
|
+
return promise;
|
118
|
+
}
|
119
|
+
}
|
120
|
+
}
|
121
|
+
function delay(ms) {
|
122
|
+
return new Promise((resolve) => setTimeout(resolve, ms));
|
86
123
|
}
|
87
124
|
//# sourceMappingURL=db-context.js.map
|
package/lib/db-context.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"db-context.js","sourceRoot":"","sources":["../src/db-context.ts"],"names":[],"mappings":"AACA,OAAO,
|
1
|
+
{"version":3,"file":"db-context.js","sourceRoot":"","sources":["../src/db-context.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "@sentio/runtime",
|
3
|
-
"version": "2.39.7-rc.
|
3
|
+
"version": "2.39.7-rc.19",
|
4
4
|
"license": "Apache-2.0",
|
5
5
|
"type": "module",
|
6
6
|
"exports": {
|
@@ -35,7 +35,7 @@
|
|
35
35
|
"rxjs": "^7.8.1",
|
36
36
|
"utility-types": "^3.11.0",
|
37
37
|
"winston": "^3.11.0",
|
38
|
-
"@sentio/protos": "2.39.7-rc.
|
38
|
+
"@sentio/protos": "2.39.7-rc.19"
|
39
39
|
},
|
40
40
|
"devDependencies": {
|
41
41
|
"@types/command-line-args": "^5.2.3",
|
package/src/db-context.ts
CHANGED
@@ -1,5 +1,12 @@
|
|
1
1
|
import { Subject } from 'rxjs'
|
2
|
-
import {
|
2
|
+
import {
|
3
|
+
DBRequest,
|
4
|
+
DBRequest_DBUpsert,
|
5
|
+
DBResponse,
|
6
|
+
DeepPartial,
|
7
|
+
ProcessResult,
|
8
|
+
ProcessStreamResponse
|
9
|
+
} from '@sentio/protos'
|
3
10
|
|
4
11
|
type Request = Omit<DBRequest, 'opId'>
|
5
12
|
export const timeoutError = Symbol()
|
@@ -21,18 +28,23 @@ export class StoreContext {
|
|
21
28
|
}
|
22
29
|
|
23
30
|
sendRequest(request: DeepPartial<Request>, timeoutSecs?: number): Promise<DBResponse> {
|
31
|
+
if (request.upsert) {
|
32
|
+
// batch upsert if possible
|
33
|
+
return this.sendUpsert(request.upsert as DBRequest_DBUpsert)
|
34
|
+
}
|
35
|
+
|
24
36
|
const opId = StoreContext.opCounter++
|
25
37
|
const promise = this.newPromise(opId)
|
26
38
|
|
27
39
|
const start = Date.now()
|
28
40
|
const promises = [promise]
|
29
41
|
console.debug('sending db request ', opId, request)
|
42
|
+
let timer: NodeJS.Timeout | undefined
|
30
43
|
if (timeoutSecs) {
|
31
44
|
const timeoutPromise = new Promise((_r, rej) => (timer = setTimeout(rej, timeoutSecs * 1000, timeoutError)))
|
32
45
|
promises.push(timeoutPromise)
|
33
46
|
}
|
34
47
|
|
35
|
-
let timer: NodeJS.Timeout | undefined
|
36
48
|
const requestType = Object.keys(request)[0] as string
|
37
49
|
this.subject.next({
|
38
50
|
dbRequest: {
|
@@ -94,4 +106,40 @@ export class StoreContext {
|
|
94
106
|
}
|
95
107
|
this.defers.clear()
|
96
108
|
}
|
109
|
+
|
110
|
+
queuedUpsert: DBRequest_DBUpsert | undefined
|
111
|
+
queuedUpsertPromise: Promise<DBResponse> | undefined
|
112
|
+
|
113
|
+
private async sendUpsert(req: DBRequest_DBUpsert, batchIdleMs = 1): Promise<DBResponse> {
|
114
|
+
if (this.queuedUpsert && this.queuedUpsertPromise) {
|
115
|
+
// merge the upserts
|
116
|
+
req.entity = this.queuedUpsert.entity.concat(req.entity)
|
117
|
+
req.entityData = this.queuedUpsert.entityData.concat(req.entityData)
|
118
|
+
req.id = this.queuedUpsert.id.concat(req.id)
|
119
|
+
req.data = this.queuedUpsert.data.concat(req.data)
|
120
|
+
return this.queuedUpsertPromise
|
121
|
+
} else {
|
122
|
+
this.queuedUpsert = req
|
123
|
+
const opId = StoreContext.opCounter++
|
124
|
+
const promise = this.newPromise<DBResponse>(opId)
|
125
|
+
this.queuedUpsertPromise = promise
|
126
|
+
await delay(batchIdleMs)
|
127
|
+
this.queuedUpsertPromise = undefined
|
128
|
+
this.queuedUpsert = undefined
|
129
|
+
console.log('sending upsert', opId, 'batch size', req.entity.length)
|
130
|
+
this.subject.next({
|
131
|
+
dbRequest: {
|
132
|
+
upsert: req,
|
133
|
+
opId
|
134
|
+
},
|
135
|
+
processId: this.processId
|
136
|
+
})
|
137
|
+
|
138
|
+
return promise
|
139
|
+
}
|
140
|
+
}
|
141
|
+
}
|
142
|
+
|
143
|
+
function delay(ms: number) {
|
144
|
+
return new Promise((resolve) => setTimeout(resolve, ms))
|
97
145
|
}
|