@milaboratories/pl-middle-layer 1.37.76 → 1.37.77
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/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +45 -39
- package/dist/index.mjs.map +1 -1
- package/dist/pool/driver.d.ts +7 -5
- package/dist/pool/driver.d.ts.map +1 -1
- package/package.json +6 -6
- package/src/pool/driver.ts +55 -48
package/dist/pool/driver.d.ts
CHANGED
|
@@ -19,11 +19,13 @@ export interface InternalPFrameDriver extends SdkPFrameDriver {
|
|
|
19
19
|
/** Create a new PFrame */
|
|
20
20
|
createPFrame(def: PFrameDef<PlTreeNodeAccessor | PColumnValues | DataInfo<PlTreeNodeAccessor>>, ctx: ComputableCtx): PFrameHandle;
|
|
21
21
|
/** Create a new PTable */
|
|
22
|
-
createPTable(def: PTableDef<PColumn<PlTreeNodeAccessor | PColumnValues | DataInfo<PlTreeNodeAccessor>>>, ctx: ComputableCtx
|
|
22
|
+
createPTable(def: PTableDef<PColumn<PlTreeNodeAccessor | PColumnValues | DataInfo<PlTreeNodeAccessor>>>, ctx: ComputableCtx): PTableHandle;
|
|
23
23
|
/** Calculates data for the table and returns complete data representation of it */
|
|
24
24
|
calculateTableData(handle: PFrameHandle, request: CalculateTableDataRequest<PObjectId>, range: TableRange | undefined, signal?: AbortSignal): Promise<CalculateTableDataResponse>;
|
|
25
25
|
/** Calculate set of unique values for a specific axis for the filtered set of records */
|
|
26
26
|
getUniqueValues(handle: PFrameHandle, request: UniqueValuesRequest, signal?: AbortSignal): Promise<UniqueValuesResponse>;
|
|
27
|
+
/** Unified table shape */
|
|
28
|
+
getShape(handle: PTableHandle, signal?: AbortSignal): Promise<PTableShape>;
|
|
27
29
|
/**
|
|
28
30
|
* Retrieve the data from the table. To retrieve only data required, it can be
|
|
29
31
|
* sliced both horizontally ({@link columnIndices}) and vertically
|
|
@@ -40,20 +42,20 @@ export declare class PFrameDriver implements InternalPFrameDriver {
|
|
|
40
42
|
private readonly spillPath;
|
|
41
43
|
private readonly pFrames;
|
|
42
44
|
private readonly pTables;
|
|
43
|
-
private readonly
|
|
44
|
-
private readonly
|
|
45
|
+
private readonly frameConcurrencyLimiter;
|
|
46
|
+
private readonly tableConcurrencyLimiter;
|
|
45
47
|
pprofDump(): Promise<Uint8Array>;
|
|
46
48
|
static init(blobDriver: DownloadDriver, logger: MiLogger, spillPath: string): Promise<PFrameDriver>;
|
|
47
49
|
private constructor();
|
|
48
50
|
createPFrame(def: PFrameDef<PlTreeNodeAccessor | PColumnValues | DataInfo<PlTreeNodeAccessor>>, ctx: ComputableCtx): PFrameHandle;
|
|
49
|
-
createPTable(def: PTableDef<PColumn<PlTreeNodeAccessor | PColumnValues | DataInfo<PlTreeNodeAccessor>>>, ctx: ComputableCtx
|
|
51
|
+
createPTable(def: PTableDef<PColumn<PlTreeNodeAccessor | PColumnValues | DataInfo<PlTreeNodeAccessor>>>, ctx: ComputableCtx): PTableHandle;
|
|
50
52
|
findColumns(handle: PFrameHandle, request: FindColumnsRequest): Promise<FindColumnsResponse>;
|
|
51
53
|
getColumnSpec(handle: PFrameHandle, columnId: PObjectId): Promise<PColumnSpec>;
|
|
52
54
|
listColumns(handle: PFrameHandle): Promise<PColumnIdAndSpec[]>;
|
|
53
55
|
calculateTableData(handle: PFrameHandle, request: CalculateTableDataRequest<PObjectId>, range: TableRange | undefined, signal?: AbortSignal): Promise<CalculateTableDataResponse>;
|
|
54
56
|
getUniqueValues(handle: PFrameHandle, request: UniqueValuesRequest, signal?: AbortSignal): Promise<UniqueValuesResponse>;
|
|
55
|
-
getShape(handle: PTableHandle): Promise<PTableShape>;
|
|
56
57
|
getSpec(handle: PTableHandle): Promise<PTableColumnSpec[]>;
|
|
58
|
+
getShape(handle: PTableHandle, signal?: AbortSignal): Promise<PTableShape>;
|
|
57
59
|
getData(handle: PTableHandle, columnIndices: number[], range: TableRange | undefined, signal?: AbortSignal): Promise<PTableVector[]>;
|
|
58
60
|
}
|
|
59
61
|
//# sourceMappingURL=driver.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"driver.d.ts","sourceRoot":"","sources":["../../src/pool/driver.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAEjE,OAAO,KAAK,EAAE,kBAAkB,EAAgB,MAAM,yBAAyB,CAAC;AAEhF,OAAO,KAAK,EAAE,aAAa,EAA2B,MAAM,4BAA4B,CAAC;AACzF,OAAO,KAAK,EACV,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,EACP,SAAS,EAET,SAAS,EAIT,aAAa,EACb,QAAQ,EAET,MAAM,sBAAsB,CAAC;AAW9B,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"driver.d.ts","sourceRoot":"","sources":["../../src/pool/driver.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@milaboratories/pl-middle-layer",
|
|
3
|
-
"version": "1.37.
|
|
3
|
+
"version": "1.37.77",
|
|
4
4
|
"description": "Pl Middle Layer",
|
|
5
5
|
"engines": {
|
|
6
6
|
"node": ">=20.16.0"
|
|
@@ -22,7 +22,7 @@
|
|
|
22
22
|
"keywords": [],
|
|
23
23
|
"license": "UNLICENSED",
|
|
24
24
|
"dependencies": {
|
|
25
|
-
"@milaboratories/pframes-rs-node": "1.0.
|
|
25
|
+
"@milaboratories/pframes-rs-node": "1.0.44",
|
|
26
26
|
"canonicalize": "~2.1.0",
|
|
27
27
|
"denque": "^2.1.0",
|
|
28
28
|
"lru-cache": "^11.1.0",
|
|
@@ -33,14 +33,14 @@
|
|
|
33
33
|
"zod": "~3.23.8",
|
|
34
34
|
"remeda": "^2.22.6",
|
|
35
35
|
"@milaboratories/pl-http": "^1.1.3",
|
|
36
|
+
"@milaboratories/computable": "^2.5.0",
|
|
36
37
|
"@milaboratories/resolve-helper": "^1.1.0",
|
|
37
|
-
"@milaboratories/pl-model-middle-layer": "^1.7.38",
|
|
38
|
-
"@platforma-sdk/block-tools": "^2.5.56",
|
|
39
38
|
"@milaboratories/pl-client": "^2.11.0",
|
|
40
39
|
"@milaboratories/pl-drivers": "^1.5.68",
|
|
41
|
-
"@
|
|
42
|
-
"@milaboratories/pl-model-backend": "^1.1.0",
|
|
40
|
+
"@platforma-sdk/block-tools": "^2.5.57",
|
|
43
41
|
"@milaboratories/pl-model-common": "^1.15.5",
|
|
42
|
+
"@milaboratories/pl-model-backend": "^1.1.0",
|
|
43
|
+
"@milaboratories/pl-model-middle-layer": "^1.7.39",
|
|
44
44
|
"@milaboratories/pl-tree": "^1.6.9",
|
|
45
45
|
"@platforma-sdk/model": "^1.34.10",
|
|
46
46
|
"@milaboratories/ts-helpers": "^1.4.0",
|
package/src/pool/driver.ts
CHANGED
|
@@ -84,7 +84,7 @@ function migrateFilters(filters: PTableRecordFilter[]): PTableRecordFilter[] {
|
|
|
84
84
|
const bigintReplacer = (_: string, v: unknown) => (typeof v === 'bigint' ? v.toString() : v);
|
|
85
85
|
|
|
86
86
|
class PFrameHolder implements PFrameInternal.PFrameDataSource, Disposable {
|
|
87
|
-
public readonly pFrame: PFrameInternal.
|
|
87
|
+
public readonly pFrame: PFrameInternal.PFrameV7;
|
|
88
88
|
private readonly abortController = new AbortController();
|
|
89
89
|
private readonly blobIdToResource = new Map<string, ResourceInfo>();
|
|
90
90
|
private readonly blobHandleComputables = new Map<
|
|
@@ -179,7 +179,7 @@ class PFrameHolder implements PFrameInternal.PFrameDataSource, Disposable {
|
|
|
179
179
|
|
|
180
180
|
class PTableHolder implements Disposable {
|
|
181
181
|
constructor(
|
|
182
|
-
public readonly
|
|
182
|
+
public readonly pTable: PFrameInternal.PTableV5,
|
|
183
183
|
private readonly abortController: AbortController,
|
|
184
184
|
) {}
|
|
185
185
|
|
|
@@ -189,15 +189,13 @@ class PTableHolder implements Disposable {
|
|
|
189
189
|
|
|
190
190
|
[Symbol.dispose](): void {
|
|
191
191
|
this.abortController.abort();
|
|
192
|
-
|
|
193
|
-
this.table.then((table) => table.dispose());
|
|
192
|
+
this.pTable.dispose();
|
|
194
193
|
}
|
|
195
194
|
}
|
|
196
195
|
|
|
197
196
|
type FullPTableDef = {
|
|
198
197
|
pFrameHandle: PFrameHandle;
|
|
199
198
|
def: PTableDef<PObjectId>;
|
|
200
|
-
signal?: AbortSignal;
|
|
201
199
|
};
|
|
202
200
|
|
|
203
201
|
/**
|
|
@@ -224,7 +222,6 @@ export interface InternalPFrameDriver extends SdkPFrameDriver {
|
|
|
224
222
|
createPTable(
|
|
225
223
|
def: PTableDef<PColumn<PlTreeNodeAccessor | PColumnValues | DataInfo<PlTreeNodeAccessor>>>,
|
|
226
224
|
ctx: ComputableCtx,
|
|
227
|
-
signal?: AbortSignal,
|
|
228
225
|
): PTableHandle;
|
|
229
226
|
|
|
230
227
|
/** Calculates data for the table and returns complete data representation of it */
|
|
@@ -242,6 +239,12 @@ export interface InternalPFrameDriver extends SdkPFrameDriver {
|
|
|
242
239
|
signal?: AbortSignal
|
|
243
240
|
): Promise<UniqueValuesResponse>;
|
|
244
241
|
|
|
242
|
+
/** Unified table shape */
|
|
243
|
+
getShape(
|
|
244
|
+
handle: PTableHandle,
|
|
245
|
+
signal?: AbortSignal,
|
|
246
|
+
): Promise<PTableShape>;
|
|
247
|
+
|
|
245
248
|
/**
|
|
246
249
|
* Retrieve the data from the table. To retrieve only data required, it can be
|
|
247
250
|
* sliced both horizontally ({@link columnIndices}) and vertically
|
|
@@ -261,8 +264,8 @@ export interface InternalPFrameDriver extends SdkPFrameDriver {
|
|
|
261
264
|
export class PFrameDriver implements InternalPFrameDriver {
|
|
262
265
|
private readonly pFrames: RefCountResourcePool<InternalPFrameData, PFrameHolder>;
|
|
263
266
|
private readonly pTables: RefCountResourcePool<FullPTableDef, PTableHolder>;
|
|
264
|
-
private readonly
|
|
265
|
-
private readonly
|
|
267
|
+
private readonly frameConcurrencyLimiter: ConcurrencyLimitingExecutor;
|
|
268
|
+
private readonly tableConcurrencyLimiter: ConcurrencyLimitingExecutor;
|
|
266
269
|
|
|
267
270
|
public async pprofDump(): Promise<Uint8Array> {
|
|
268
271
|
return await PFrame.pprofDump();
|
|
@@ -284,8 +287,8 @@ export class PFrameDriver implements InternalPFrameDriver {
|
|
|
284
287
|
private readonly spillPath: string,
|
|
285
288
|
) {
|
|
286
289
|
const concurrencyLimiter = new ConcurrencyLimitingExecutor(1);
|
|
287
|
-
this.
|
|
288
|
-
this.
|
|
290
|
+
this.frameConcurrencyLimiter = concurrencyLimiter;
|
|
291
|
+
this.tableConcurrencyLimiter = new ConcurrencyLimitingExecutor(1);
|
|
289
292
|
|
|
290
293
|
this.pFrames = new (class extends RefCountResourcePool<InternalPFrameData, PFrameHolder> {
|
|
291
294
|
constructor(
|
|
@@ -329,28 +332,22 @@ export class PFrameDriver implements InternalPFrameDriver {
|
|
|
329
332
|
|
|
330
333
|
const pFrameHolder = this.pFrames.getByKey(handle);
|
|
331
334
|
const abortController = new AbortController();
|
|
332
|
-
const combinedSignal = AbortSignal.any(
|
|
333
|
-
[params.signal, abortController.signal, pFrameHolder.disposeSignal].filter((s) => !!s),
|
|
334
|
-
);
|
|
335
|
-
|
|
336
|
-
const tablePromise = concurrencyLimiter.run(async () => {
|
|
337
|
-
const table = await pFrameHolder.pFrame.createTable({
|
|
338
|
-
src: joinEntryToInternal(params.def.src),
|
|
339
|
-
filters: migrateFilters(params.def.filters),
|
|
340
|
-
}, combinedSignal);
|
|
341
|
-
|
|
342
|
-
let sortedTable = table;
|
|
343
|
-
if (params.def.sorting.length > 0) {
|
|
344
|
-
try {
|
|
345
|
-
sortedTable = await table.sort(params.def.sorting, combinedSignal);
|
|
346
|
-
} finally {
|
|
347
|
-
table.dispose();
|
|
348
|
-
}
|
|
349
|
-
}
|
|
350
335
|
|
|
351
|
-
|
|
336
|
+
const table = pFrameHolder.pFrame.createTable({
|
|
337
|
+
src: joinEntryToInternal(params.def.src),
|
|
338
|
+
filters: migrateFilters(params.def.filters),
|
|
352
339
|
});
|
|
353
|
-
|
|
340
|
+
|
|
341
|
+
let sortedTable = table;
|
|
342
|
+
if (params.def.sorting.length > 0) {
|
|
343
|
+
try {
|
|
344
|
+
sortedTable = table.sort(params.def.sorting);
|
|
345
|
+
} finally {
|
|
346
|
+
table.dispose();
|
|
347
|
+
}
|
|
348
|
+
}
|
|
349
|
+
|
|
350
|
+
return new PTableHolder(sortedTable, abortController);
|
|
354
351
|
}
|
|
355
352
|
|
|
356
353
|
protected calculateParamsKey(params: FullPTableDef): string {
|
|
@@ -386,11 +383,10 @@ export class PFrameDriver implements InternalPFrameDriver {
|
|
|
386
383
|
public createPTable(
|
|
387
384
|
def: PTableDef<PColumn<PlTreeNodeAccessor | PColumnValues | DataInfo<PlTreeNodeAccessor>>>,
|
|
388
385
|
ctx: ComputableCtx,
|
|
389
|
-
signal?: AbortSignal,
|
|
390
386
|
): PTableHandle {
|
|
391
387
|
const pFrameHandle = this.createPFrame(extractAllColumns(def.src), ctx);
|
|
392
388
|
const defIds = mapPTableDef(def, (c) => c.id);
|
|
393
|
-
const res = this.pTables.acquire({ def: defIds, pFrameHandle
|
|
389
|
+
const res = this.pTables.acquire({ def: defIds, pFrameHandle });
|
|
394
390
|
if (getDebugFlags().logPFrameRequests)
|
|
395
391
|
this.logger.info(
|
|
396
392
|
`Create PTable call (pFrameHandle = ${pFrameHandle}; pTableHandle = ${JSON.stringify(res)}): ${JSON.stringify(
|
|
@@ -455,18 +451,18 @@ export class PFrameDriver implements InternalPFrameDriver {
|
|
|
455
451
|
`Call calculateTableData, handle = ${handle}, request = ${JSON.stringify(request, bigintReplacer)}`,
|
|
456
452
|
);
|
|
457
453
|
}
|
|
458
|
-
return await this.
|
|
454
|
+
return await this.frameConcurrencyLimiter.run(async () => {
|
|
459
455
|
const pFrameHolder = this.pFrames.getByKey(handle);
|
|
460
456
|
const combinedSignal = AbortSignal.any([signal, pFrameHolder.disposeSignal].filter((s) => !!s));
|
|
461
|
-
const table =
|
|
457
|
+
const table = pFrameHolder.pFrame.createTable({
|
|
462
458
|
src: joinEntryToInternal(request.src),
|
|
463
459
|
filters: migrateFilters(request.filters),
|
|
464
|
-
}
|
|
460
|
+
});
|
|
465
461
|
|
|
466
462
|
let sortedTable = table;
|
|
467
463
|
if (request.sorting.length > 0) {
|
|
468
464
|
try {
|
|
469
|
-
sortedTable =
|
|
465
|
+
sortedTable = table.sort(request.sorting);
|
|
470
466
|
} finally {
|
|
471
467
|
table.dispose();
|
|
472
468
|
}
|
|
@@ -474,7 +470,10 @@ export class PFrameDriver implements InternalPFrameDriver {
|
|
|
474
470
|
|
|
475
471
|
try {
|
|
476
472
|
const spec = sortedTable.getSpec();
|
|
477
|
-
const data = await sortedTable.getData([...spec.keys()],
|
|
473
|
+
const data = await sortedTable.getData([...spec.keys()], {
|
|
474
|
+
range,
|
|
475
|
+
signal: combinedSignal,
|
|
476
|
+
});
|
|
478
477
|
return spec.map((spec, i) => ({
|
|
479
478
|
spec: spec,
|
|
480
479
|
data: data[i],
|
|
@@ -495,13 +494,15 @@ export class PFrameDriver implements InternalPFrameDriver {
|
|
|
495
494
|
`Call getUniqueValues, handle = ${handle}, request = ${JSON.stringify(request, bigintReplacer)}`,
|
|
496
495
|
);
|
|
497
496
|
}
|
|
498
|
-
return await this.
|
|
497
|
+
return await this.frameConcurrencyLimiter.run(async () => {
|
|
499
498
|
const pFrameHolder = this.pFrames.getByKey(handle);
|
|
500
499
|
const combinedSignal = AbortSignal.any([signal, pFrameHolder.disposeSignal].filter((s) => !!s));
|
|
501
500
|
return await pFrameHolder.pFrame.getUniqueValues({
|
|
502
501
|
...request,
|
|
503
502
|
filters: migrateFilters(request.filters),
|
|
504
|
-
},
|
|
503
|
+
}, {
|
|
504
|
+
signal: combinedSignal,
|
|
505
|
+
});
|
|
505
506
|
});
|
|
506
507
|
}
|
|
507
508
|
|
|
@@ -509,14 +510,18 @@ export class PFrameDriver implements InternalPFrameDriver {
|
|
|
509
510
|
// PTable istance methods
|
|
510
511
|
//
|
|
511
512
|
|
|
512
|
-
public
|
|
513
|
-
const pTable =
|
|
514
|
-
return pTable.
|
|
513
|
+
public getSpec(handle: PTableHandle): Promise<PTableColumnSpec[]> {
|
|
514
|
+
const pTable = this.pTables.getByKey(handle).pTable;
|
|
515
|
+
return Promise.resolve(pTable.getSpec());
|
|
515
516
|
}
|
|
516
517
|
|
|
517
|
-
public async
|
|
518
|
-
|
|
519
|
-
|
|
518
|
+
public async getShape(handle: PTableHandle, signal?: AbortSignal): Promise<PTableShape> {
|
|
519
|
+
return await this.tableConcurrencyLimiter.run(async () => {
|
|
520
|
+
const pTable = this.pTables.getByKey(handle).pTable;
|
|
521
|
+
return await pTable.getShape({
|
|
522
|
+
signal,
|
|
523
|
+
});
|
|
524
|
+
});
|
|
520
525
|
}
|
|
521
526
|
|
|
522
527
|
public async getData(
|
|
@@ -525,11 +530,13 @@ export class PFrameDriver implements InternalPFrameDriver {
|
|
|
525
530
|
range: TableRange | undefined,
|
|
526
531
|
signal?: AbortSignal,
|
|
527
532
|
): Promise<PTableVector[]> {
|
|
528
|
-
return await this.
|
|
533
|
+
return await this.tableConcurrencyLimiter.run(async () => {
|
|
529
534
|
const pTableHolder = this.pTables.getByKey(handle);
|
|
530
|
-
const pTable = await pTableHolder.table;
|
|
531
535
|
const combinedSignal = AbortSignal.any([signal, pTableHolder.disposeSignal].filter((s) => !!s));
|
|
532
|
-
return await pTable.getData(columnIndices,
|
|
536
|
+
return await pTableHolder.pTable.getData(columnIndices, {
|
|
537
|
+
range,
|
|
538
|
+
signal: combinedSignal,
|
|
539
|
+
});
|
|
533
540
|
});
|
|
534
541
|
}
|
|
535
542
|
}
|