@milaboratories/pl-middle-layer 1.39.0 → 1.39.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/index.js +8 -8
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +1212 -1173
- package/dist/index.mjs.map +1 -1
- package/dist/middle_layer/driver_kit.d.ts.map +1 -1
- package/dist/middle_layer/ops.d.ts +4 -1
- package/dist/middle_layer/ops.d.ts.map +1 -1
- package/dist/pool/driver.d.ts +10 -2
- package/dist/pool/driver.d.ts.map +1 -1
- package/package.json +12 -12
- package/src/middle_layer/driver_kit.ts +1 -0
- package/src/middle_layer/ops.ts +15 -0
- package/src/pool/driver.ts +121 -36
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"driver_kit.d.ts","sourceRoot":"","sources":["../../src/middle_layer/driver_kit.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,KAAK,EACV,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AACvD,OAAO,EAKL,cAAc,EACd,uBAAuB,EACvB,UAAU,EAGV,YAAY,EACb,MAAM,4BAA4B,CAAC;AACpC,OAAO,KAAK,KAAK,GAAG,MAAM,iCAAiC,CAAC;AAC5D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAC;AAEzD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAC;AAEpD,OAAO,KAAK,EAEV,uBAAuB,EACxB,MAAM,OAAO,CAAC;AAMf;;;;;;KAMK;AACL,MAAM,WAAW,oBAAqB,SAAQ,GAAG,CAAC,SAAS;IAEzD,QAAQ,CAAC,UAAU,EAAE,cAAc,CAAC;IAEpC,QAAQ,CAAC,eAAe,EAAE,uBAAuB,CAAC;IAElD,QAAQ,CAAC,SAAS,EAAE,UAAU,CAAC;IAE/B,QAAQ,CAAC,QAAQ,EAAE,gBAAgB,CAAC;IAEpC,QAAQ,CAAC,YAAY,EAAE,oBAAoB,CAAC;IAE5C;;;SAGK;IACL,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAExB;;;SAGK;IACL,QAAQ,CAAC,YAAY,EAAE,YAAY,CAAC;CACrC;AAED,wBAAsB,aAAa,CACjC,EAAE,EAAE,QAAQ,EACZ,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,uBAAuB,GAC5B,OAAO,CAAC,oBAAoB,CAAC,
|
|
1
|
+
{"version":3,"file":"driver_kit.d.ts","sourceRoot":"","sources":["../../src/middle_layer/driver_kit.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,KAAK,EACV,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AACvD,OAAO,EAKL,cAAc,EACd,uBAAuB,EACvB,UAAU,EAGV,YAAY,EACb,MAAM,4BAA4B,CAAC;AACpC,OAAO,KAAK,KAAK,GAAG,MAAM,iCAAiC,CAAC;AAC5D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAC;AAEzD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAC;AAEpD,OAAO,KAAK,EAEV,uBAAuB,EACxB,MAAM,OAAO,CAAC;AAMf;;;;;;KAMK;AACL,MAAM,WAAW,oBAAqB,SAAQ,GAAG,CAAC,SAAS;IAEzD,QAAQ,CAAC,UAAU,EAAE,cAAc,CAAC;IAEpC,QAAQ,CAAC,eAAe,EAAE,uBAAuB,CAAC;IAElD,QAAQ,CAAC,SAAS,EAAE,UAAU,CAAC;IAE/B,QAAQ,CAAC,QAAQ,EAAE,gBAAgB,CAAC;IAEpC,QAAQ,CAAC,YAAY,EAAE,oBAAoB,CAAC;IAE5C;;;SAGK;IACL,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAExB;;;SAGK;IACL,QAAQ,CAAC,YAAY,EAAE,YAAY,CAAC;CACrC;AAED,wBAAsB,aAAa,CACjC,EAAE,EAAE,QAAQ,EACZ,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,uBAAuB,GAC5B,OAAO,CAAC,oBAAoB,CAAC,CAkE/B"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { TemporalSynchronizedTreeOps } from './types';
|
|
2
2
|
import { DownloadBlobToURLDriverOps, DownloadDriverOps, OpenFileDialogCallback, VirtualLocalStorageSpec, UploadDriverOps, LogsStreamDriverOps, LocalStorageProjection } from '@milaboratories/pl-drivers';
|
|
3
3
|
import { MiLogger } from '@milaboratories/ts-helpers';
|
|
4
|
+
import { PFrameDriverOps } from '../pool/driver';
|
|
4
5
|
/** Paths part of {@link DriverKitOps}. */
|
|
5
6
|
export type DriverKitOpsPaths = {
|
|
6
7
|
/** Common root where to put downloaded blobs / downloaded blob cache */
|
|
@@ -59,10 +60,12 @@ export type DriverKitOpsSettings = {
|
|
|
59
60
|
* calls from the UI.
|
|
60
61
|
*/
|
|
61
62
|
readonly openFileDialogCallback: OpenFileDialogCallback;
|
|
63
|
+
/** Settings related to the PFrame driver */
|
|
64
|
+
readonly pFrameDriverOps: PFrameDriverOps;
|
|
62
65
|
};
|
|
63
66
|
export type DriverKitOps = DriverKitOpsPaths & DriverKitOpsSettings;
|
|
64
67
|
/** Some defaults fot MiddleLayerOps. */
|
|
65
|
-
export declare const DefaultDriverKitOpsSettings: Pick<DriverKitOpsSettings, 'logger' | 'blobDriverOps' | 'downloadBlobToURLDriverOps' | 'uploadDriverOps' | 'logStreamDriverOps'>;
|
|
68
|
+
export declare const DefaultDriverKitOpsSettings: Pick<DriverKitOpsSettings, 'logger' | 'blobDriverOps' | 'downloadBlobToURLDriverOps' | 'uploadDriverOps' | 'logStreamDriverOps' | 'pFrameDriverOps'>;
|
|
66
69
|
export declare function DefaultDriverKitOpsPaths(workDir: string): Pick<DriverKitOpsPaths, 'blobDownloadPath' | 'blobDownloadRangesCachePath' | 'downloadBlobToURLPath' | 'pframesSpillPath'>;
|
|
67
70
|
/** Fields with default values are marked as optional here. */
|
|
68
71
|
export type DriverKitOpsConstructor = Omit<DriverKitOpsSettings, keyof typeof DefaultDriverKitOpsSettings> & Partial<typeof DefaultDriverKitOpsSettings> & Omit<DriverKitOpsPaths, keyof ReturnType<typeof DefaultDriverKitOpsPaths>> & Partial<ReturnType<typeof DefaultDriverKitOpsPaths>>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ops.d.ts","sourceRoot":"","sources":["../../src/middle_layer/ops.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,SAAS,CAAC;AAC3D,OAAO,KAAK,EACV,0BAA0B,EAC1B,iBAAiB,EACjB,sBAAsB,EACtB,uBAAuB,EACxB,MAAM,4BAA4B,CAAC;AACpC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAClE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACtE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AAE3D,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"ops.d.ts","sourceRoot":"","sources":["../../src/middle_layer/ops.ts"],"names":[],"mappings":"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"}
|
package/dist/pool/driver.d.ts
CHANGED
|
@@ -3,7 +3,13 @@ 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, DataInfo } from '@platforma-sdk/model';
|
|
5
5
|
import { MiLogger } from '@milaboratories/ts-helpers';
|
|
6
|
-
|
|
6
|
+
type PColumnDataUniversal = PlTreeNodeAccessor | DataInfo<PlTreeNodeAccessor> | PColumnValues;
|
|
7
|
+
export type PFrameDriverOps = {
|
|
8
|
+
pFrameConcurrency: number;
|
|
9
|
+
pTableConcurrency: number;
|
|
10
|
+
pFrameCacheMaxCount: number;
|
|
11
|
+
pFramesCacheMaxSize: number;
|
|
12
|
+
};
|
|
7
13
|
/**
|
|
8
14
|
* Extends public and safe SDK's driver API with methods used internally in the middle
|
|
9
15
|
* layer and in tests.
|
|
@@ -43,10 +49,11 @@ export declare class PFrameDriver implements InternalPFrameDriver {
|
|
|
43
49
|
private readonly spillPath;
|
|
44
50
|
private readonly pFrames;
|
|
45
51
|
private readonly pTables;
|
|
52
|
+
private readonly pTableCache;
|
|
46
53
|
private readonly frameConcurrencyLimiter;
|
|
47
54
|
private readonly tableConcurrencyLimiter;
|
|
48
55
|
pprofDump(): Promise<Uint8Array>;
|
|
49
|
-
static init(blobDriver: DownloadDriver, logger: MiLogger, spillPath: string): Promise<PFrameDriver>;
|
|
56
|
+
static init(blobDriver: DownloadDriver, logger: MiLogger, spillPath: string, ops: PFrameDriverOps): Promise<PFrameDriver>;
|
|
50
57
|
private constructor();
|
|
51
58
|
createPFrame(def: PFrameDef<PColumnDataUniversal>, ctx: ComputableCtx): PFrameHandle;
|
|
52
59
|
createPTable(rawDef: PTableDef<PColumn<PColumnDataUniversal>>, ctx: ComputableCtx): PTableHandle;
|
|
@@ -59,4 +66,5 @@ export declare class PFrameDriver implements InternalPFrameDriver {
|
|
|
59
66
|
getShape(handle: PTableHandle, signal?: AbortSignal): Promise<PTableShape>;
|
|
60
67
|
getData(handle: PTableHandle, columnIndices: number[], range: TableRange | undefined, signal?: AbortSignal): Promise<PTableVector[]>;
|
|
61
68
|
}
|
|
69
|
+
export {};
|
|
62
70
|
//# 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;AAc9B,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AAQ3D,
|
|
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.39.
|
|
3
|
+
"version": "1.39.2",
|
|
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.50",
|
|
26
26
|
"canonicalize": "~2.1.0",
|
|
27
27
|
"denque": "^2.1.0",
|
|
28
28
|
"lru-cache": "^11.1.0",
|
|
@@ -33,21 +33,21 @@
|
|
|
33
33
|
"zod": "~3.23.8",
|
|
34
34
|
"remeda": "^2.22.6",
|
|
35
35
|
"@milaboratories/pl-http": "^1.1.4",
|
|
36
|
-
"@platforma-sdk/block-tools": "^2.5.63",
|
|
37
36
|
"@milaboratories/resolve-helper": "^1.1.0",
|
|
38
|
-
"@milaboratories/pl-client": "^2.11.2",
|
|
39
37
|
"@milaboratories/pl-drivers": "^1.6.0",
|
|
40
|
-
"@
|
|
41
|
-
"@milaboratories/pl-model-common": "~1.16.0",
|
|
38
|
+
"@milaboratories/pl-client": "^2.11.2",
|
|
42
39
|
"@milaboratories/computable": "^2.6.0",
|
|
43
|
-
"@
|
|
44
|
-
"@
|
|
40
|
+
"@platforma-sdk/block-tools": "^2.5.64",
|
|
41
|
+
"@milaboratories/pl-model-common": "~1.16.0",
|
|
42
|
+
"@milaboratories/pl-model-middle-layer": "~1.7.46",
|
|
45
43
|
"@milaboratories/pl-model-backend": "~1.1.2",
|
|
46
|
-
"@
|
|
47
|
-
"@milaboratories/
|
|
44
|
+
"@platforma-sdk/model": "~1.39.0",
|
|
45
|
+
"@milaboratories/ts-helpers": "^1.4.1",
|
|
46
|
+
"@milaboratories/pl-tree": "~1.7.0",
|
|
47
|
+
"@platforma-sdk/workflow-tengo": "4.9.3",
|
|
48
48
|
"@milaboratories/pl-config": "^1.6.1",
|
|
49
|
-
"@milaboratories/pl-
|
|
50
|
-
"@milaboratories/
|
|
49
|
+
"@milaboratories/pl-errors": "^1.1.9",
|
|
50
|
+
"@milaboratories/pl-deployments": "^2.4.3"
|
|
51
51
|
},
|
|
52
52
|
"devDependencies": {
|
|
53
53
|
"semver": "^7.7.2",
|
package/src/middle_layer/ops.ts
CHANGED
|
@@ -11,6 +11,7 @@ import type { MiLogger } from '@milaboratories/ts-helpers';
|
|
|
11
11
|
import { ConsoleLoggerAdapter } from '@milaboratories/ts-helpers';
|
|
12
12
|
import type { LocalStorageProjection } from '@milaboratories/pl-drivers';
|
|
13
13
|
import path from 'node:path';
|
|
14
|
+
import type { PFrameDriverOps } from '../pool/driver';
|
|
14
15
|
|
|
15
16
|
/** Paths part of {@link DriverKitOps}. */
|
|
16
17
|
export type DriverKitOpsPaths = {
|
|
@@ -111,6 +112,13 @@ export type DriverKitOpsSettings = {
|
|
|
111
112
|
* calls from the UI.
|
|
112
113
|
*/
|
|
113
114
|
readonly openFileDialogCallback: OpenFileDialogCallback;
|
|
115
|
+
|
|
116
|
+
//
|
|
117
|
+
// PFrame Driver
|
|
118
|
+
//
|
|
119
|
+
|
|
120
|
+
/** Settings related to the PFrame driver */
|
|
121
|
+
readonly pFrameDriverOps: PFrameDriverOps;
|
|
114
122
|
};
|
|
115
123
|
|
|
116
124
|
export type DriverKitOps = DriverKitOpsPaths & DriverKitOpsSettings;
|
|
@@ -123,6 +131,7 @@ export const DefaultDriverKitOpsSettings: Pick<
|
|
|
123
131
|
| 'downloadBlobToURLDriverOps'
|
|
124
132
|
| 'uploadDriverOps'
|
|
125
133
|
| 'logStreamDriverOps'
|
|
134
|
+
| 'pFrameDriverOps'
|
|
126
135
|
> = {
|
|
127
136
|
logger: new ConsoleLoggerAdapter(),
|
|
128
137
|
blobDriverOps: {
|
|
@@ -145,6 +154,12 @@ export const DefaultDriverKitOpsSettings: Pick<
|
|
|
145
154
|
pollingInterval: 1000,
|
|
146
155
|
stopPollingDelay: 1000,
|
|
147
156
|
},
|
|
157
|
+
pFrameDriverOps: {
|
|
158
|
+
pFrameConcurrency: 1,
|
|
159
|
+
pTableConcurrency: 1,
|
|
160
|
+
pFrameCacheMaxCount: 18, // SHM trees create 3 PTables per graphic, we want to cache 6 graphics per PFrame
|
|
161
|
+
pFramesCacheMaxSize: 8 * 1024 * 1024 * 1024, // 8 GB
|
|
162
|
+
},
|
|
148
163
|
};
|
|
149
164
|
|
|
150
165
|
export function DefaultDriverKitOpsPaths(
|
package/src/pool/driver.ts
CHANGED
|
@@ -41,7 +41,7 @@ import {
|
|
|
41
41
|
ensureError,
|
|
42
42
|
} from '@platforma-sdk/model';
|
|
43
43
|
import { LRUCache } from 'lru-cache';
|
|
44
|
-
import type {
|
|
44
|
+
import type { PollResource } from './ref_count_pool';
|
|
45
45
|
import { RefCountResourcePool } from './ref_count_pool';
|
|
46
46
|
import { allBlobs, makeDataInfoFromPColumnValues, mapBlobs, parseDataInfoResource } from './data';
|
|
47
47
|
import { createHash } from 'node:crypto';
|
|
@@ -53,7 +53,7 @@ import * as fsp from 'node:fs/promises';
|
|
|
53
53
|
import * as path from 'node:path';
|
|
54
54
|
import { getDebugFlags } from '../debug';
|
|
55
55
|
|
|
56
|
-
|
|
56
|
+
type PColumnDataUniversal = PlTreeNodeAccessor | DataInfo<PlTreeNodeAccessor> | PColumnValues;
|
|
57
57
|
|
|
58
58
|
function blobKey(res: ResourceInfo): string {
|
|
59
59
|
return String(res.id);
|
|
@@ -106,10 +106,72 @@ function migratePTableFilters<T>(
|
|
|
106
106
|
|
|
107
107
|
const bigintReplacer = (_: string, v: unknown) => (typeof v === 'bigint' ? v.toString() : v);
|
|
108
108
|
|
|
109
|
+
class PTableCache {
|
|
110
|
+
private readonly perFrame = new Map<PFrameHandle, LRUCache<PTableHandle, PollResource<PTableHolder>>>();
|
|
111
|
+
private readonly global: LRUCache<PTableHandle, PollResource<PTableHolder>>;
|
|
112
|
+
private readonly disposeListeners = new Map<PTableHandle, () => void>();
|
|
113
|
+
|
|
114
|
+
constructor(
|
|
115
|
+
private readonly logger: MiLogger,
|
|
116
|
+
private readonly ops: PFrameDriverOps,
|
|
117
|
+
) {
|
|
118
|
+
this.global = new LRUCache<PTableHandle, PollResource<PTableHolder>>({
|
|
119
|
+
maxSize: this.ops.pFramesCacheMaxSize,
|
|
120
|
+
dispose: (resource, key, reason) => {
|
|
121
|
+
if (reason === 'evict') {
|
|
122
|
+
this.perFrame.get(resource.resource.pFrame)?.delete(key);
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
if (this.perFrame.get(resource.resource.pFrame)?.size === 0) {
|
|
126
|
+
this.perFrame.delete(resource.resource.pFrame);
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
const disposeListener = this.disposeListeners.get(key)!;
|
|
130
|
+
this.disposeListeners.delete(key);
|
|
131
|
+
resource.resource.disposeSignal.removeEventListener('abort', disposeListener);
|
|
132
|
+
|
|
133
|
+
resource.unref();
|
|
134
|
+
if (getDebugFlags().logPFrameRequests) {
|
|
135
|
+
this.logger.info(`calculateTableData cache - removed PTable ${key}`);
|
|
136
|
+
}
|
|
137
|
+
},
|
|
138
|
+
});
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
public cache(resource: PollResource<PTableHolder>, size: number): void {
|
|
142
|
+
const key = resource.key as PTableHandle;
|
|
143
|
+
if (getDebugFlags().logPFrameRequests) {
|
|
144
|
+
this.logger.info(`calculateTableData cache - added PTable ${key} with size ${size}`);
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
this.global.set(key, resource, { size });
|
|
148
|
+
|
|
149
|
+
let perFrame = this.perFrame.get(resource.resource.pFrame);
|
|
150
|
+
if (!perFrame) {
|
|
151
|
+
perFrame = new LRUCache<PTableHandle, PollResource<PTableHolder>>({
|
|
152
|
+
max: this.ops.pFrameCacheMaxCount,
|
|
153
|
+
dispose: (_resource, key, reason) => {
|
|
154
|
+
if (reason === 'evict') {
|
|
155
|
+
this.global.delete(key);
|
|
156
|
+
}
|
|
157
|
+
},
|
|
158
|
+
});
|
|
159
|
+
this.perFrame.set(resource.resource.pFrame, perFrame);
|
|
160
|
+
}
|
|
161
|
+
perFrame.set(key, resource);
|
|
162
|
+
|
|
163
|
+
const disposeListener = () => {
|
|
164
|
+
this.perFrame.get(resource.resource.pFrame)?.delete(key);
|
|
165
|
+
this.global.delete(key);
|
|
166
|
+
};
|
|
167
|
+
this.disposeListeners.set(key, disposeListener);
|
|
168
|
+
resource.resource.disposeSignal.addEventListener('abort', disposeListener);
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
|
|
109
172
|
class PFrameHolder implements PFrameInternal.PFrameDataSource, Disposable {
|
|
110
|
-
public readonly pFrame: PFrameInternal.
|
|
173
|
+
public readonly pFrame: PFrameInternal.PFrameV8;
|
|
111
174
|
private readonly abortController = new AbortController();
|
|
112
|
-
private readonly pTableCache: LRUCache<PTableHandle, UnrefFn>;
|
|
113
175
|
private readonly blobIdToResource = new Map<string, ResourceInfo>();
|
|
114
176
|
private readonly blobHandleComputables = new Map<
|
|
115
177
|
string,
|
|
@@ -151,11 +213,6 @@ class PFrameHolder implements PFrameInternal.PFrameDataSource, Disposable {
|
|
|
151
213
|
`Rust PFrame creation failed, columns: ${JSON.stringify(distinctСolumns)}, error: ${err as Error}`,
|
|
152
214
|
);
|
|
153
215
|
}
|
|
154
|
-
|
|
155
|
-
this.pTableCache = new LRUCache<PTableHandle, UnrefFn>({
|
|
156
|
-
max: 5, // TODO: calculate size on disk, not number of PTables
|
|
157
|
-
dispose: (unref) => unref(),
|
|
158
|
-
});
|
|
159
216
|
}
|
|
160
217
|
|
|
161
218
|
private getOrCreateComputableForBlob(blobId: string) {
|
|
@@ -188,13 +245,8 @@ class PFrameHolder implements PFrameInternal.PFrameDataSource, Disposable {
|
|
|
188
245
|
return this.abortController.signal;
|
|
189
246
|
}
|
|
190
247
|
|
|
191
|
-
public cache(handle: PTableHandle, unref: UnrefFn): void {
|
|
192
|
-
this.pTableCache.set(handle, unref);
|
|
193
|
-
}
|
|
194
|
-
|
|
195
248
|
[Symbol.dispose](): void {
|
|
196
249
|
this.abortController.abort();
|
|
197
|
-
this.pTableCache.clear();
|
|
198
250
|
for (const computable of this.blobHandleComputables.values()) computable.resetState();
|
|
199
251
|
this.pFrame.dispose();
|
|
200
252
|
}
|
|
@@ -205,9 +257,10 @@ class PTableHolder implements Disposable {
|
|
|
205
257
|
private readonly combinedDisposeSignal: AbortSignal;
|
|
206
258
|
|
|
207
259
|
constructor(
|
|
260
|
+
public readonly pFrame: PFrameHandle,
|
|
208
261
|
pFrameDisposeSignal: AbortSignal,
|
|
209
|
-
public readonly pTable: PFrameInternal.
|
|
210
|
-
|
|
262
|
+
public readonly pTable: PFrameInternal.PTableV6,
|
|
263
|
+
public readonly predecessor?: PollResource<PTableHolder>,
|
|
211
264
|
) {
|
|
212
265
|
this.combinedDisposeSignal = AbortSignal.any([pFrameDisposeSignal, this.abortController.signal]);
|
|
213
266
|
}
|
|
@@ -219,7 +272,7 @@ class PTableHolder implements Disposable {
|
|
|
219
272
|
[Symbol.dispose](): void {
|
|
220
273
|
this.abortController.abort();
|
|
221
274
|
this.pTable.dispose();
|
|
222
|
-
this.
|
|
275
|
+
this.predecessor?.unref();
|
|
223
276
|
}
|
|
224
277
|
}
|
|
225
278
|
|
|
@@ -228,6 +281,19 @@ type FullPTableDef = {
|
|
|
228
281
|
def: PTableDef<PObjectId>;
|
|
229
282
|
};
|
|
230
283
|
|
|
284
|
+
export type PFrameDriverOps = {
|
|
285
|
+
// Concurrency limits for `getUniqueValues` and `calculateTableData` requests
|
|
286
|
+
pFrameConcurrency: number;
|
|
287
|
+
// Concurrency limits for `getShape` and `getData` requests
|
|
288
|
+
pTableConcurrency: number;
|
|
289
|
+
// Maximum number of `calculateTableData` results cached for each PFrame
|
|
290
|
+
pFrameCacheMaxCount: number;
|
|
291
|
+
// Maximum size of `calculateTableData` results cached for PFrames overall.
|
|
292
|
+
// The limit is soft, as the same table could be materialized with other requests and will not be deleted in such case.
|
|
293
|
+
// Also each table has predeccessors, overlapping predecessors will be counted twice, so the effective limit is smaller.
|
|
294
|
+
pFramesCacheMaxSize: number;
|
|
295
|
+
};
|
|
296
|
+
|
|
231
297
|
/**
|
|
232
298
|
* Extends public and safe SDK's driver API with methods used internally in the middle
|
|
233
299
|
* layer and in tests.
|
|
@@ -294,6 +360,7 @@ export interface InternalPFrameDriver extends SdkPFrameDriver {
|
|
|
294
360
|
export class PFrameDriver implements InternalPFrameDriver {
|
|
295
361
|
private readonly pFrames: RefCountResourcePool<InternalPFrameData, PFrameHolder>;
|
|
296
362
|
private readonly pTables: RefCountResourcePool<FullPTableDef, PTableHolder>;
|
|
363
|
+
private readonly pTableCache: PTableCache;
|
|
297
364
|
private readonly frameConcurrencyLimiter: ConcurrencyLimitingExecutor;
|
|
298
365
|
private readonly tableConcurrencyLimiter: ConcurrencyLimitingExecutor;
|
|
299
366
|
|
|
@@ -305,20 +372,24 @@ export class PFrameDriver implements InternalPFrameDriver {
|
|
|
305
372
|
blobDriver: DownloadDriver,
|
|
306
373
|
logger: MiLogger,
|
|
307
374
|
spillPath: string,
|
|
375
|
+
ops: PFrameDriverOps,
|
|
308
376
|
): Promise<PFrameDriver> {
|
|
309
377
|
const resolvedSpillPath = path.resolve(spillPath);
|
|
310
378
|
await emptyDir(resolvedSpillPath);
|
|
311
|
-
return new PFrameDriver(blobDriver, logger, resolvedSpillPath);
|
|
379
|
+
return new PFrameDriver(blobDriver, logger, resolvedSpillPath, ops);
|
|
312
380
|
}
|
|
313
381
|
|
|
314
382
|
private constructor(
|
|
315
383
|
private readonly blobDriver: DownloadDriver,
|
|
316
384
|
private readonly logger: MiLogger,
|
|
317
385
|
private readonly spillPath: string,
|
|
386
|
+
ops: PFrameDriverOps,
|
|
318
387
|
) {
|
|
319
|
-
const concurrencyLimiter = new ConcurrencyLimitingExecutor(
|
|
388
|
+
const concurrencyLimiter = new ConcurrencyLimitingExecutor(ops.pFrameConcurrency);
|
|
320
389
|
this.frameConcurrencyLimiter = concurrencyLimiter;
|
|
321
|
-
this.tableConcurrencyLimiter = new ConcurrencyLimitingExecutor(
|
|
390
|
+
this.tableConcurrencyLimiter = new ConcurrencyLimitingExecutor(ops.pTableConcurrency);
|
|
391
|
+
|
|
392
|
+
this.pTableCache = new PTableCache(this.logger, ops);
|
|
322
393
|
|
|
323
394
|
this.pFrames = new (class extends RefCountResourcePool<InternalPFrameData, PFrameHolder> {
|
|
324
395
|
constructor(
|
|
@@ -364,28 +435,30 @@ export class PFrameDriver implements InternalPFrameDriver {
|
|
|
364
435
|
|
|
365
436
|
// 3. Sort
|
|
366
437
|
if (params.def.sorting.length > 0) {
|
|
367
|
-
const
|
|
438
|
+
const predecessor = this.acquire({
|
|
368
439
|
...params,
|
|
369
440
|
def: {
|
|
370
441
|
...params.def,
|
|
371
442
|
sorting: [],
|
|
372
443
|
},
|
|
373
444
|
});
|
|
445
|
+
const { resource: { pTable } } = predecessor;
|
|
374
446
|
const sortedTable = pTable.sort(params.def.sorting);
|
|
375
|
-
return new PTableHolder(disposeSignal, sortedTable,
|
|
447
|
+
return new PTableHolder(handle, disposeSignal, sortedTable, predecessor);
|
|
376
448
|
}
|
|
377
449
|
|
|
378
450
|
// 2. Filter
|
|
379
451
|
if (params.def.filters.length > 0) {
|
|
380
|
-
const
|
|
452
|
+
const predecessor = this.acquire({
|
|
381
453
|
...params,
|
|
382
454
|
def: {
|
|
383
455
|
...params.def,
|
|
384
456
|
filters: [],
|
|
385
457
|
},
|
|
386
458
|
});
|
|
459
|
+
const { resource: { pTable } } = predecessor;
|
|
387
460
|
const filteredTable = pTable.filter(params.def.filters);
|
|
388
|
-
return new PTableHolder(disposeSignal, filteredTable,
|
|
461
|
+
return new PTableHolder(handle, disposeSignal, filteredTable, predecessor);
|
|
389
462
|
}
|
|
390
463
|
|
|
391
464
|
// 1. Join
|
|
@@ -393,7 +466,7 @@ export class PFrameDriver implements InternalPFrameDriver {
|
|
|
393
466
|
src: joinEntryToInternal(params.def.src),
|
|
394
467
|
filters: params.def.partitionFilters,
|
|
395
468
|
});
|
|
396
|
-
return new PTableHolder(disposeSignal, table);
|
|
469
|
+
return new PTableHolder(handle, disposeSignal, table);
|
|
397
470
|
}
|
|
398
471
|
|
|
399
472
|
protected calculateParamsKey(params: FullPTableDef): string {
|
|
@@ -502,23 +575,35 @@ export class PFrameDriver implements InternalPFrameDriver {
|
|
|
502
575
|
);
|
|
503
576
|
}
|
|
504
577
|
|
|
505
|
-
const
|
|
578
|
+
const table = this.pTables.acquire({
|
|
506
579
|
pFrameHandle: handle,
|
|
507
580
|
def: migratePTableFilters(request),
|
|
508
581
|
});
|
|
582
|
+
const { resource: { pTable, disposeSignal } } = table;
|
|
509
583
|
const combinedSignal = AbortSignal.any([signal, disposeSignal].filter((s) => !!s));
|
|
510
584
|
|
|
511
585
|
return await this.frameConcurrencyLimiter.run(async () => {
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
586
|
+
try {
|
|
587
|
+
const spec = pTable.getSpec();
|
|
588
|
+
const data = await pTable.getData([...spec.keys()], {
|
|
589
|
+
range,
|
|
590
|
+
signal: combinedSignal,
|
|
591
|
+
});
|
|
592
|
+
|
|
593
|
+
const size = await pTable.getFootprint({
|
|
594
|
+
withPredecessors: true,
|
|
595
|
+
signal: combinedSignal,
|
|
596
|
+
});
|
|
597
|
+
this.pTableCache.cache(table, size);
|
|
598
|
+
|
|
599
|
+
return spec.map((spec, i) => ({
|
|
600
|
+
spec: spec,
|
|
601
|
+
data: data[i],
|
|
602
|
+
}));
|
|
603
|
+
} catch (err: unknown) {
|
|
604
|
+
table.unref();
|
|
605
|
+
throw err;
|
|
606
|
+
}
|
|
522
607
|
});
|
|
523
608
|
}
|
|
524
609
|
|