@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.
@@ -1 +1 @@
1
- {"version":3,"file":"middle_layer.d.ts","sourceRoot":"","sources":["../../src/middle_layer/middle_layer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"middle_layer.d.ts","sourceRoot":"","sources":["../../src/middle_layer/middle_layer.ts"],"names":[],"mappings":"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"}
@@ -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;AAqH9B,qBAAa,YAAa,YAAW,eAAe;IAOtC,OAAO,CAAC,QAAQ,CAAC,UAAU;IANvC,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;gBAEpC,UAAU,EAAE,cAAc;IAoDhD,YAAY,CACjB,GAAG,EAAE,SAAS,CAAC,kBAAkB,GAAG,aAAa,CAAC,EAClD,GAAG,EAAE,aAAa,GACjB,YAAY;IAUR,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;IA6BzB,eAAe,CAC1B,MAAM,EAAE,YAAY,EACpB,OAAO,EAAE,mBAAmB,GAC3B,OAAO,CAAC,oBAAoB,CAAC;IAanB,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"}
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.1",
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/pl-drivers": "^1.5.5",
33
+ "@milaboratories/resolve-helper": "^1.0.2",
35
34
  "@milaboratories/pl-client": "^2.7.1",
36
- "@milaboratories/pl-model-middle-layer": "^1.6.8",
37
- "@platforma-sdk/block-tools": "^2.5.0",
38
- "@milaboratories/pl-model-common": "^1.10.1",
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/model": "^1.20.24",
43
- "@platforma-sdk/workflow-tengo": "2.8.5",
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/eslint-config": "^1.0.1",
58
- "@milaboratories/platforma-build-configs": "1.0.2"
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
+ }
@@ -96,7 +96,7 @@ export async function initDriverKit(
96
96
  ops.virtualLocalStoragesOverride
97
97
  );
98
98
 
99
- const pFrameDriver = new PFrameDriver(blobDriver);
99
+ const pFrameDriver = new PFrameDriver(blobDriver, ops.logger);
100
100
 
101
101
  return {
102
102
  blobDriver,
@@ -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
- if (process.env.MI_LOG_TREE_STAT)
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);
@@ -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(`type overriten from 'bySingleColumn' to 'bySingleColumnV2' for filters: ${filtersV1Json}`);
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(private readonly blobDriver: DownloadDriver) {
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
- async () =>
193
- await pFrame.pFrame.createTable({
194
- src: joinEntryToInternal(params.def.src),
195
- filters: migrateFilters(params.def.filters),
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.filter((c) => valueTypes.find((t) => t === c.spec.valueType))
215
- .map((c) => mapPObjectData(c, (d) =>
216
- isPlTreeNodeAccessor(d) ? parseDataInfoResource(d) : makeDataInfoResource(c.spec, d)
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
- async () =>
276
- await this.pFrames.getByKey(handle).pFrame.createTable({
277
- src: joinEntryToInternal(request.src),
278
- filters: migrateFilters(request.filters),
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
- async () => await this.pFrames.getByKey(handle).pFrame.getUniqueValues({
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
  //