@milaboratories/pl-middle-layer 1.23.1 → 1.23.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.
- package/dist/debug/index.d.ts +6 -0
- package/dist/debug/index.d.ts.map +1 -0
- package/dist/index.js +3 -3
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +844 -831
- package/dist/index.mjs.map +1 -1
- package/dist/middle_layer/middle_layer.d.ts.map +1 -1
- package/dist/pool/driver.d.ts +3 -1
- package/dist/pool/driver.d.ts.map +1 -1
- package/package.json +10 -10
- package/src/debug/index.ts +16 -0
- package/src/middle_layer/driver_kit.ts +1 -1
- package/src/middle_layer/middle_layer.ts +2 -3
- package/src/pool/driver.ts +56 -31
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"middle_layer.d.ts","sourceRoot":"","sources":["../../src/middle_layer/middle_layer.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,QAAQ,EACR,UAAU,EAEX,MAAM,2BAA2B,CAAC;AAInC,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AACrE,OAAO,EAAoB,QAAQ,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAC;AAChF,OAAO,EAAE,uBAAuB,EAAkB,MAAM,4BAA4B,CAAC;AACrF,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAGL,cAAc,EACd,yBAAyB,EAC1B,MAAM,OAAO,CAAC;AAEf,OAAO,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,uCAAuC,CAAC;AAClF,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAc,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACnE,OAAO,EAAiB,oBAAoB,EAAE,MAAM,cAAc,CAAC;AACnE,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAA+B,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAC5F,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,UAAU,EAAc,MAAM,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"middle_layer.d.ts","sourceRoot":"","sources":["../../src/middle_layer/middle_layer.ts"],"names":[],"mappings":"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"}
|
package/dist/pool/driver.d.ts
CHANGED
|
@@ -2,14 +2,16 @@ import { DownloadDriver } from '@milaboratories/pl-drivers';
|
|
|
2
2
|
import { PlTreeNodeAccessor } from '@milaboratories/pl-tree';
|
|
3
3
|
import { ComputableCtx } from '@milaboratories/computable';
|
|
4
4
|
import { CalculateTableDataRequest, CalculateTableDataResponse, FindColumnsRequest, FindColumnsResponse, PColumnIdAndSpec, PColumnSpec, PFrameHandle, PObjectId, PTableColumnSpec, PTableHandle, PTableShape, PTableVector, TableRange, UniqueValuesRequest, UniqueValuesResponse, PFrameDriver as SdkPFrameDriver, PColumn, PFrameDef, PTableDef, PColumnValues } from '@platforma-sdk/model';
|
|
5
|
+
import { MiLogger } from '@milaboratories/ts-helpers';
|
|
5
6
|
export declare class PFrameDriver implements SdkPFrameDriver {
|
|
6
7
|
private readonly blobDriver;
|
|
8
|
+
private readonly logger;
|
|
7
9
|
private readonly pFrames;
|
|
8
10
|
private readonly pTables;
|
|
9
11
|
private readonly blobContentCache;
|
|
10
12
|
/** Limits concurrent requests to PFrame API to prevent deadlock with Node's IO threads */
|
|
11
13
|
private readonly concurrencyLimiter;
|
|
12
|
-
constructor(blobDriver: DownloadDriver);
|
|
14
|
+
constructor(blobDriver: DownloadDriver, logger: MiLogger);
|
|
13
15
|
createPFrame(def: PFrameDef<PlTreeNodeAccessor | PColumnValues>, ctx: ComputableCtx): PFrameHandle;
|
|
14
16
|
createPTable(def: PTableDef<PColumn<PlTreeNodeAccessor | PColumnValues>>, ctx: ComputableCtx): PTableHandle;
|
|
15
17
|
findColumns(handle: PFrameHandle, request: FindColumnsRequest): Promise<FindColumnsResponse>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"driver.d.ts","sourceRoot":"","sources":["../../src/pool/driver.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAE5D,OAAO,EAAwB,kBAAkB,EAAgB,MAAM,yBAAyB,CAAC;AACjG,OAAO,EAAE,aAAa,EAA2B,MAAM,4BAA4B,CAAC;AACpF,OAAO,EACL,yBAAyB,EACzB,0BAA0B,EAC1B,kBAAkB,EAClB,mBAAmB,EAEnB,gBAAgB,EAChB,WAAW,EACX,YAAY,EACZ,SAAS,EACT,gBAAgB,EAChB,YAAY,EACZ,WAAW,EACX,YAAY,EACZ,UAAU,EACV,mBAAmB,EACnB,oBAAoB,EACpB,YAAY,IAAI,eAAe,EAC/B,OAAO,EAEP,SAAS,EAET,SAAS,EAKT,aAAa,EAEd,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"driver.d.ts","sourceRoot":"","sources":["../../src/pool/driver.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAE5D,OAAO,EAAwB,kBAAkB,EAAgB,MAAM,yBAAyB,CAAC;AACjG,OAAO,EAAE,aAAa,EAA2B,MAAM,4BAA4B,CAAC;AACpF,OAAO,EACL,yBAAyB,EACzB,0BAA0B,EAC1B,kBAAkB,EAClB,mBAAmB,EAEnB,gBAAgB,EAChB,WAAW,EACX,YAAY,EACZ,SAAS,EACT,gBAAgB,EAChB,YAAY,EACZ,WAAW,EACX,YAAY,EACZ,UAAU,EACV,mBAAmB,EACnB,oBAAoB,EACpB,YAAY,IAAI,eAAe,EAC/B,OAAO,EAEP,SAAS,EAET,SAAS,EAKT,aAAa,EAEd,MAAM,sBAAsB,CAAC;AAI9B,OAAO,EAAe,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AAsHnE,qBAAa,YAAa,YAAW,eAAe;IAQhD,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,MAAM;IARzB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAyD;IACjF,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAwE;IAChG,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAA+B;IAChE,0FAA0F;IAC1F,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAA8B;gBAG9C,UAAU,EAAE,cAAc,EAC1B,MAAM,EAAE,QAAQ;IA4D5B,YAAY,CACjB,GAAG,EAAE,SAAS,CAAC,kBAAkB,GAAG,aAAa,CAAC,EAClD,GAAG,EAAE,aAAa,GACjB,YAAY;IAaR,YAAY,CACjB,GAAG,EAAE,SAAS,CAAC,OAAO,CAAC,kBAAkB,GAAG,aAAa,CAAC,CAAC,EAC3D,GAAG,EAAE,aAAa,GACjB,YAAY;IAYF,WAAW,CACtB,MAAM,EAAE,YAAY,EACpB,OAAO,EAAE,kBAAkB,GAC1B,OAAO,CAAC,mBAAmB,CAAC;IAiBlB,aAAa,CAAC,MAAM,EAAE,YAAY,EAAE,QAAQ,EAAE,SAAS,GAAG,OAAO,CAAC,WAAW,CAAC;IAM9E,WAAW,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC;IAM9D,kBAAkB,CAC7B,MAAM,EAAE,YAAY,EACpB,OAAO,EAAE,yBAAyB,CAAC,SAAS,CAAC,GAC5C,OAAO,CAAC,0BAA0B,CAAC;IAgCzB,eAAe,CAC1B,MAAM,EAAE,YAAY,EACpB,OAAO,EAAE,mBAAmB,GAC3B,OAAO,CAAC,oBAAoB,CAAC;IAiBnB,QAAQ,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,WAAW,CAAC;IAKpD,OAAO,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC;IAK1D,OAAO,CAClB,MAAM,EAAE,YAAY,EACpB,aAAa,EAAE,MAAM,EAAE,EACvB,KAAK,CAAC,EAAE,UAAU,GACjB,OAAO,CAAC,YAAY,EAAE,CAAC;CAM3B"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@milaboratories/pl-middle-layer",
|
|
3
|
-
"version": "1.23.
|
|
3
|
+
"version": "1.23.3",
|
|
4
4
|
"description": "Pl Middle Layer",
|
|
5
5
|
"types": "./dist/index.d.ts",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -29,18 +29,18 @@
|
|
|
29
29
|
"yaml": "^2.6.1",
|
|
30
30
|
"zod": "~3.23.8",
|
|
31
31
|
"@milaboratories/pl-http": "^1.0.2",
|
|
32
|
-
"@milaboratories/resolve-helper": "^1.0.2",
|
|
33
32
|
"@milaboratories/computable": "^2.3.4",
|
|
34
|
-
"@milaboratories/
|
|
33
|
+
"@milaboratories/resolve-helper": "^1.0.2",
|
|
35
34
|
"@milaboratories/pl-client": "^2.7.1",
|
|
36
|
-
"@milaboratories/pl-
|
|
37
|
-
"@platforma-sdk/block-tools": "^2.5.
|
|
38
|
-
"@milaboratories/pl-model-common": "^1.10.
|
|
35
|
+
"@milaboratories/pl-drivers": "^1.5.6",
|
|
36
|
+
"@platforma-sdk/block-tools": "^2.5.1",
|
|
37
|
+
"@milaboratories/pl-model-common": "^1.10.2",
|
|
38
|
+
"@milaboratories/pl-model-middle-layer": "^1.6.9",
|
|
39
39
|
"@milaboratories/pl-model-backend": "^1.0.1",
|
|
40
40
|
"@milaboratories/pl-tree": "^1.4.20",
|
|
41
41
|
"@milaboratories/ts-helpers": "^1.1.3",
|
|
42
|
-
"@platforma-sdk/
|
|
43
|
-
"@platforma-sdk/
|
|
42
|
+
"@platforma-sdk/workflow-tengo": "2.8.7",
|
|
43
|
+
"@platforma-sdk/model": "^1.20.27",
|
|
44
44
|
"@milaboratories/pl-config": "^1.3.3",
|
|
45
45
|
"@milaboratories/pl-local": "^1.10.0"
|
|
46
46
|
},
|
|
@@ -54,8 +54,8 @@
|
|
|
54
54
|
"jest": "^29.7.0",
|
|
55
55
|
"@jest/globals": "^29.7.0",
|
|
56
56
|
"ts-jest": "^29.2.5",
|
|
57
|
-
"@milaboratories/
|
|
58
|
-
"@milaboratories/
|
|
57
|
+
"@milaboratories/platforma-build-configs": "1.0.2",
|
|
58
|
+
"@milaboratories/eslint-config": "^1.0.1"
|
|
59
59
|
},
|
|
60
60
|
"scripts": {
|
|
61
61
|
"type-check": "tsc --noEmit --composite false",
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export type MlDebugFlags = {
|
|
2
|
+
logPFrameRequests: boolean;
|
|
3
|
+
logTreeStats?: 'cumulative' | 'per-request';
|
|
4
|
+
};
|
|
5
|
+
|
|
6
|
+
let flags: MlDebugFlags | undefined = undefined;
|
|
7
|
+
export function getDebugFlags() {
|
|
8
|
+
if (flags) return flags;
|
|
9
|
+
flags = {
|
|
10
|
+
logPFrameRequests: process.env.MI_LOG_PFRAMES !== undefined
|
|
11
|
+
};
|
|
12
|
+
if (process.env.MI_LOG_TREE_STAT)
|
|
13
|
+
flags.logTreeStats =
|
|
14
|
+
process.env.MI_LOG_TREE_STAT === 'cumulative' ? 'cumulative' : 'per-request';
|
|
15
|
+
return flags;
|
|
16
|
+
}
|
|
@@ -28,6 +28,7 @@ import { DriverKit } from '@platforma-sdk/model';
|
|
|
28
28
|
import { DefaultVirtualLocalStorages, DownloadUrlDriver } from '@milaboratories/pl-drivers';
|
|
29
29
|
import { V2RegistryProvider } from '../block_registry';
|
|
30
30
|
import { Dispatcher, RetryAgent } from 'undici';
|
|
31
|
+
import { getDebugFlags } from '../debug';
|
|
31
32
|
|
|
32
33
|
export interface MiddleLayerEnvironment {
|
|
33
34
|
readonly pl: PlClient;
|
|
@@ -196,9 +197,7 @@ export class MiddleLayer {
|
|
|
196
197
|
..._ops
|
|
197
198
|
};
|
|
198
199
|
|
|
199
|
-
|
|
200
|
-
ops.defaultTreeOptions.logStat =
|
|
201
|
-
process.env.MI_LOG_TREE_STAT === 'cumulative' ? 'cumulative' : 'per-request';
|
|
200
|
+
ops.defaultTreeOptions.logStat = getDebugFlags().logTreeStats;
|
|
202
201
|
|
|
203
202
|
const projects = await pl.withWriteTx('MLInitialization', async (tx) => {
|
|
204
203
|
const projectsField = field(tx.clientRoot, ProjectsField);
|
package/src/pool/driver.ts
CHANGED
|
@@ -30,17 +30,18 @@ import {
|
|
|
30
30
|
PTableRecordSingleValueFilterV2,
|
|
31
31
|
PTableRecordFilter,
|
|
32
32
|
PColumnValues,
|
|
33
|
-
extractAllColumns
|
|
33
|
+
extractAllColumns
|
|
34
34
|
} from '@platforma-sdk/model';
|
|
35
35
|
import { RefCountResourcePool } from './ref_count_pool';
|
|
36
36
|
import { allBlobs, makeDataInfoResource, mapBlobs, parseDataInfoResource } from './data';
|
|
37
|
-
import { createHash } from 'crypto';
|
|
38
|
-
import { assertNever } from '@milaboratories/ts-helpers';
|
|
37
|
+
import { createHash, randomUUID } from 'crypto';
|
|
38
|
+
import { assertNever, MiLogger } from '@milaboratories/ts-helpers';
|
|
39
39
|
import canonicalize from 'canonicalize';
|
|
40
40
|
import { PFrame } from '@milaboratories/pframes-node';
|
|
41
41
|
import * as fsp from 'node:fs/promises';
|
|
42
42
|
import { LRUCache } from 'lru-cache';
|
|
43
43
|
import { ConcurrencyLimitingExecutor } from '@milaboratories/ts-helpers';
|
|
44
|
+
import { getDebugFlags } from '../debug';
|
|
44
45
|
|
|
45
46
|
function blobKey(res: ResourceInfo): string {
|
|
46
47
|
return String(res.id);
|
|
@@ -54,11 +55,11 @@ function migrateFilters(filters: PTableRecordFilter[]): PTableRecordSingleValueF
|
|
|
54
55
|
const filtersV1 = [];
|
|
55
56
|
const filtersV2: PTableRecordSingleValueFilterV2[] = [];
|
|
56
57
|
for (const filter of filters) {
|
|
57
|
-
if (filter.type as unknown === 'bySingleColumn') {
|
|
58
|
+
if ((filter.type as unknown) === 'bySingleColumn') {
|
|
58
59
|
filtersV1.push(filter);
|
|
59
60
|
filtersV2.push({
|
|
60
61
|
...filter,
|
|
61
|
-
type: 'bySingleColumnV2'
|
|
62
|
+
type: 'bySingleColumnV2'
|
|
62
63
|
});
|
|
63
64
|
} else {
|
|
64
65
|
filtersV2.push(filter);
|
|
@@ -66,11 +67,15 @@ function migrateFilters(filters: PTableRecordFilter[]): PTableRecordSingleValueF
|
|
|
66
67
|
}
|
|
67
68
|
if (filtersV1.length > 0) {
|
|
68
69
|
const filtersV1Json = JSON.stringify(filtersV1);
|
|
69
|
-
console.warn(
|
|
70
|
+
console.warn(
|
|
71
|
+
`type overriten from 'bySingleColumn' to 'bySingleColumnV2' for filters: ${filtersV1Json}`
|
|
72
|
+
);
|
|
70
73
|
}
|
|
71
74
|
return filters as PTableRecordSingleValueFilterV2[];
|
|
72
75
|
}
|
|
73
76
|
|
|
77
|
+
const bigintReplacer = (_: string, v: any) => (typeof v === 'bigint' ? v.toString() : v);
|
|
78
|
+
|
|
74
79
|
class PFrameHolder implements PFrameInternal.PFrameDataSource, Disposable {
|
|
75
80
|
public readonly pFrame = new PFrame();
|
|
76
81
|
private readonly blobIdToResource = new Map<string, ResourceInfo>();
|
|
@@ -155,7 +160,10 @@ export class PFrameDriver implements SdkPFrameDriver {
|
|
|
155
160
|
/** Limits concurrent requests to PFrame API to prevent deadlock with Node's IO threads */
|
|
156
161
|
private readonly concurrencyLimiter: ConcurrencyLimitingExecutor;
|
|
157
162
|
|
|
158
|
-
constructor(
|
|
163
|
+
constructor(
|
|
164
|
+
private readonly blobDriver: DownloadDriver,
|
|
165
|
+
private readonly logger: MiLogger
|
|
166
|
+
) {
|
|
159
167
|
const blobContentCache = new LRUCache<string, Uint8Array>({
|
|
160
168
|
maxSize: 1_000_000_000, // 1Gb
|
|
161
169
|
fetchMethod: async (key) => await fsp.readFile(key),
|
|
@@ -164,12 +172,16 @@ export class PFrameDriver implements SdkPFrameDriver {
|
|
|
164
172
|
const concurrencyLimiter = new ConcurrencyLimitingExecutor(1);
|
|
165
173
|
this.blobContentCache = blobContentCache;
|
|
166
174
|
this.concurrencyLimiter = concurrencyLimiter;
|
|
167
|
-
|
|
175
|
+
|
|
168
176
|
this.pFrames = new (class extends RefCountResourcePool<InternalPFrameData, PFrameHolder> {
|
|
169
177
|
constructor(private readonly blobDriver: DownloadDriver) {
|
|
170
178
|
super();
|
|
171
179
|
}
|
|
172
180
|
protected createNewResource(params: InternalPFrameData): PFrameHolder {
|
|
181
|
+
if (getDebugFlags().logPFrameRequests)
|
|
182
|
+
logger.info(
|
|
183
|
+
`Create PFrame (${this.calculateParamsKey(params)}): ${JSON.stringify(params, bigintReplacer)}`
|
|
184
|
+
);
|
|
173
185
|
return new PFrameHolder(this.blobDriver, blobContentCache, params);
|
|
174
186
|
}
|
|
175
187
|
protected calculateParamsKey(params: InternalPFrameData): string {
|
|
@@ -188,13 +200,16 @@ export class PFrameDriver implements SdkPFrameDriver {
|
|
|
188
200
|
}
|
|
189
201
|
protected async createNewResource(params: FullPTableDef): Promise<PFrameInternal.PTableV2> {
|
|
190
202
|
const pFrame = this.pFrames.getByKey(params.pFrameHandle);
|
|
191
|
-
const rawPTable = await concurrencyLimiter.run(
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
203
|
+
const rawPTable = await concurrencyLimiter.run(async () => {
|
|
204
|
+
if (getDebugFlags().logPFrameRequests)
|
|
205
|
+
logger.info(
|
|
206
|
+
`Create PTable (${this.calculateParamsKey(params)}): ${JSON.stringify(params, bigintReplacer)}`
|
|
207
|
+
);
|
|
208
|
+
return await pFrame.pFrame.createTable({
|
|
209
|
+
src: joinEntryToInternal(params.def.src),
|
|
210
|
+
filters: migrateFilters(params.def.filters)
|
|
211
|
+
});
|
|
212
|
+
});
|
|
198
213
|
return params.def.sorting.length !== 0 ? rawPTable.sort(params.def.sorting) : rawPTable;
|
|
199
214
|
}
|
|
200
215
|
protected calculateParamsKey(params: FullPTableDef): string {
|
|
@@ -211,10 +226,13 @@ export class PFrameDriver implements SdkPFrameDriver {
|
|
|
211
226
|
def: PFrameDef<PlTreeNodeAccessor | PColumnValues>,
|
|
212
227
|
ctx: ComputableCtx
|
|
213
228
|
): PFrameHandle {
|
|
214
|
-
const internalData = def
|
|
215
|
-
.
|
|
216
|
-
|
|
217
|
-
|
|
229
|
+
const internalData = def
|
|
230
|
+
.filter((c) => valueTypes.find((t) => t === c.spec.valueType))
|
|
231
|
+
.map((c) =>
|
|
232
|
+
mapPObjectData(c, (d) =>
|
|
233
|
+
isPlTreeNodeAccessor(d) ? parseDataInfoResource(d) : makeDataInfoResource(c.spec, d)
|
|
234
|
+
)
|
|
235
|
+
);
|
|
218
236
|
const res = this.pFrames.acquire(internalData);
|
|
219
237
|
ctx.addOnDestroy(res.unref);
|
|
220
238
|
return res.key as PFrameHandle;
|
|
@@ -271,13 +289,16 @@ export class PFrameDriver implements SdkPFrameDriver {
|
|
|
271
289
|
handle: PFrameHandle,
|
|
272
290
|
request: CalculateTableDataRequest<PObjectId>
|
|
273
291
|
): Promise<CalculateTableDataResponse> {
|
|
274
|
-
let table = await this.concurrencyLimiter.run(
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
292
|
+
let table = await this.concurrencyLimiter.run(async () => {
|
|
293
|
+
if (getDebugFlags().logPFrameRequests)
|
|
294
|
+
this.logger.info(
|
|
295
|
+
`calculateTableData, handle = ${handle}, request = ${JSON.stringify(request, bigintReplacer)}`
|
|
296
|
+
);
|
|
297
|
+
return await this.pFrames.getByKey(handle).pFrame.createTable({
|
|
298
|
+
src: joinEntryToInternal(request.src),
|
|
299
|
+
filters: migrateFilters(request.filters)
|
|
300
|
+
});
|
|
301
|
+
});
|
|
281
302
|
|
|
282
303
|
if (request.sorting.length > 0) {
|
|
283
304
|
const sortedTable = await this.concurrencyLimiter.run(
|
|
@@ -303,12 +324,16 @@ export class PFrameDriver implements SdkPFrameDriver {
|
|
|
303
324
|
handle: PFrameHandle,
|
|
304
325
|
request: UniqueValuesRequest
|
|
305
326
|
): Promise<UniqueValuesResponse> {
|
|
306
|
-
return await this.concurrencyLimiter.run(
|
|
307
|
-
|
|
327
|
+
return await this.concurrencyLimiter.run(async () => {
|
|
328
|
+
if (getDebugFlags().logPFrameRequests)
|
|
329
|
+
this.logger.info(
|
|
330
|
+
`getUniqueValues, handle = ${handle}, request = ${JSON.stringify(request, bigintReplacer)}`
|
|
331
|
+
);
|
|
332
|
+
return await this.pFrames.getByKey(handle).pFrame.getUniqueValues({
|
|
308
333
|
...request,
|
|
309
|
-
filters: migrateFilters(request.filters)
|
|
310
|
-
})
|
|
311
|
-
);
|
|
334
|
+
filters: migrateFilters(request.filters)
|
|
335
|
+
});
|
|
336
|
+
});
|
|
312
337
|
}
|
|
313
338
|
|
|
314
339
|
//
|