@milaboratories/pl-middle-layer 1.42.15 → 1.42.17

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.
@@ -153,7 +153,7 @@ class PFrameHolder {
153
153
  })).map((item) => [canonicalize(item), item])).values(),
154
154
  ];
155
155
  try {
156
- const pFrame = new pframesRsNode.PFrame(this.spillPath, logFunc);
156
+ const pFrame = pframesRsNode.PFrameFactory.createPFrame({ spillPath: this.spillPath, logger: logFunc });
157
157
  pFrame.setDataSource(this);
158
158
  const promises = [];
159
159
  for (const column of distinctСolumns) {
@@ -203,6 +203,9 @@ class PFrameHolder {
203
203
  const path = this.blobDriver.getLocalPath((await computable.awaitStableValue(this.disposeSignal)).handle);
204
204
  return await fs__namespace.readFile(path);
205
205
  };
206
+ get parquetServer() {
207
+ return undefined;
208
+ }
206
209
  get disposeSignal() {
207
210
  return this.abortController.signal;
208
211
  }
@@ -251,7 +254,7 @@ class PFrameDriver {
251
254
  frameConcurrencyLimiter;
252
255
  tableConcurrencyLimiter;
253
256
  async pprofDump() {
254
- return await pframesRsNode.PFrame.pprofDump();
257
+ return await pframesRsNode.PFrameFactory.pprofDump();
255
258
  }
256
259
  static async init(blobDriver, logger, spillPath, ops) {
257
260
  const resolvedSpillPath = path__namespace.resolve(spillPath);
@@ -1 +1 @@
1
- {"version":3,"file":"driver.cjs","sources":["../../src/pool/driver.ts"],"sourcesContent":["import type { DownloadDriver } from '@milaboratories/pl-drivers';\nimport type { PFrameInternal } from '@milaboratories/pl-model-middle-layer';\nimport type { PlTreeNodeAccessor, ResourceInfo } from '@milaboratories/pl-tree';\nimport { isPlTreeNodeAccessor } from '@milaboratories/pl-tree';\nimport type { ComputableCtx, ComputableStableDefined } from '@milaboratories/computable';\nimport type {\n CalculateTableDataRequest,\n CalculateTableDataResponse,\n FindColumnsRequest,\n FindColumnsResponse,\n LocalBlobHandleAndSize,\n PColumnIdAndSpec,\n PColumnSpec,\n PFrameHandle,\n PObjectId,\n PTableColumnSpec,\n PTableHandle,\n PTableShape,\n PTableVector,\n TableRange,\n UniqueValuesRequest,\n UniqueValuesResponse,\n PFrameDriver as SdkPFrameDriver,\n PColumn,\n PFrameDef,\n JoinEntry,\n PTableDef,\n ValueType,\n PTableRecordSingleValueFilterV2,\n PTableRecordFilter,\n PColumnValues,\n DataInfo,\n PColumnValue,\n} from '@platforma-sdk/model';\nimport {\n mapPObjectData,\n mapPTableDef,\n extractAllColumns,\n mapDataInfo,\n isDataInfo,\n ensureError,\n PFrameDriverError,\n isAbortError,\n isPFrameDriverError,\n} from '@platforma-sdk/model';\nimport { LRUCache } from 'lru-cache';\nimport { allBlobs, makeDataInfoFromPColumnValues, mapBlobs, parseDataInfoResource, traverseParquetPartitionedResource } from './data';\nimport { createHash } from 'node:crypto';\nimport type { MiLogger } from '@milaboratories/ts-helpers';\nimport {\n assertNever,\n emptyDir,\n ConcurrencyLimitingExecutor,\n RefCountResourcePool,\n type PollResource,\n} from '@milaboratories/ts-helpers';\nimport canonicalize from 'canonicalize';\nimport { PFrame } from '@milaboratories/pframes-rs-node';\nimport * as fsp from 'node:fs/promises';\nimport * as path from 'node:path';\nimport { getDebugFlags } from '../debug';\n\ntype PColumnDataUniversal = PlTreeNodeAccessor | DataInfo<PlTreeNodeAccessor> | PColumnValues;\n\nfunction blobKey(res: ResourceInfo): string {\n return String(res.id);\n}\n\ntype InternalPFrameData = PFrameDef<PFrameInternal.DataInfo<ResourceInfo>>;\n\nconst valueTypes: ValueType[] = ['Int', 'Long', 'Float', 'Double', 'String', 'Bytes'] as const;\n\nfunction migrateFilters(filters: PTableRecordFilter[]): PTableRecordFilter[] {\n const filtersV1 = [];\n const filtersV2: PTableRecordSingleValueFilterV2[] = [];\n for (const filter of filters) {\n if ((filter.type as unknown) === 'bySingleColumn') {\n filtersV1.push(filter);\n filtersV2.push({\n ...filter,\n type: 'bySingleColumnV2',\n });\n } else {\n filtersV2.push(filter);\n }\n }\n if (filtersV1.length > 0) {\n const filtersV1Json = JSON.stringify(filtersV1);\n console.warn(\n `type overriten from 'bySingleColumn' to 'bySingleColumnV2' for filters: ${filtersV1Json}`,\n );\n }\n return filtersV2;\n}\n\nfunction migratePTableFilters<T>(\n def: Omit<PTableDef<T>, 'partitionFilters'> | PTableDef<T>,\n): PTableDef<T> {\n if (!('partitionFilters' in def)) {\n // For old blocks assume all axes filters to be partition filters\n return {\n ...def,\n partitionFilters: migrateFilters(def.filters.filter((f) => f.column.type === 'axis')),\n filters: migrateFilters(def.filters.filter((f) => f.column.type === 'column')),\n };\n }\n return {\n ...def,\n partitionFilters: migrateFilters(def.partitionFilters),\n filters: migrateFilters(def.filters),\n };\n}\n\nconst bigintReplacer = (_: string, v: unknown) => (typeof v === 'bigint' ? v.toString() : v);\n\nclass PTableCache {\n private readonly perFrame = new Map<PFrameHandle, LRUCache<PTableHandle, PollResource<PTableHolder>>>();\n private readonly global: LRUCache<PTableHandle, PollResource<PTableHolder>>;\n private readonly disposeListeners = new Map<PTableHandle, () => void>();\n\n constructor(\n private readonly logger: MiLogger,\n private readonly ops: PFrameDriverOps,\n ) {\n this.global = new LRUCache<PTableHandle, PollResource<PTableHolder>>({\n maxSize: this.ops.pFramesCacheMaxSize,\n dispose: (resource, key, reason) => {\n if (reason === 'evict') {\n this.perFrame.get(resource.resource.pFrame)?.delete(key);\n }\n\n if (this.perFrame.get(resource.resource.pFrame)?.size === 0) {\n this.perFrame.delete(resource.resource.pFrame);\n }\n\n const disposeListener = this.disposeListeners.get(key)!;\n this.disposeListeners.delete(key);\n resource.resource.disposeSignal.removeEventListener('abort', disposeListener);\n\n resource.unref();\n if (getDebugFlags().logPFrameRequests) {\n this.logger.info(`calculateTableData cache - removed PTable ${key}`);\n }\n },\n });\n }\n\n public cache(resource: PollResource<PTableHolder>, size: number): void {\n const key = resource.key as PTableHandle;\n if (getDebugFlags().logPFrameRequests) {\n this.logger.info(`calculateTableData cache - added PTable ${key} with size ${size}`);\n }\n\n this.global.set(key, resource, { size });\n\n let perFrame = this.perFrame.get(resource.resource.pFrame);\n if (!perFrame) {\n perFrame = new LRUCache<PTableHandle, PollResource<PTableHolder>>({\n max: this.ops.pFrameCacheMaxCount,\n dispose: (_resource, key, reason) => {\n if (reason === 'evict') {\n this.global.delete(key);\n }\n },\n });\n this.perFrame.set(resource.resource.pFrame, perFrame);\n }\n perFrame.set(key, resource);\n\n const disposeListener = () => {\n this.perFrame.get(resource.resource.pFrame)?.delete(key);\n this.global.delete(key);\n };\n this.disposeListeners.set(key, disposeListener);\n resource.resource.disposeSignal.addEventListener('abort', disposeListener);\n }\n}\n\nclass PFrameHolder implements PFrameInternal.PFrameDataSource, AsyncDisposable {\n public readonly pFramePromise: Promise<PFrameInternal.PFrameV9>;\n private readonly abortController = new AbortController();\n private readonly blobIdToResource = new Map<string, ResourceInfo>();\n private readonly blobHandleComputables = new Map<\n string,\n ComputableStableDefined<LocalBlobHandleAndSize>\n >();\n\n constructor(\n private readonly blobDriver: DownloadDriver,\n private readonly logger: MiLogger,\n private readonly spillPath: string,\n columns: InternalPFrameData,\n ) {\n const logFunc: PFrameInternal.Logger = (level, message) => this.logger[level](message);\n\n for (const column of columns) {\n for (const blob of allBlobs(column.data)) {\n this.blobIdToResource.set(blobKey(blob), blob);\n }\n }\n const distinctСolumns = [\n ...new Map(columns.map((column) => ({\n ...column,\n data: mapBlobs(column.data, blobKey),\n })).map(\n (item) => [canonicalize(item)!, item] as const,\n )).values(),\n ];\n\n try {\n const pFrame = new PFrame(this.spillPath, logFunc);\n pFrame.setDataSource(this);\n const promises: Promise<void>[] = [];\n for (const column of distinctСolumns) {\n pFrame.addColumnSpec(column.id, column.spec);\n promises.push(pFrame.setColumnData(column.id, column.data, { signal: this.disposeSignal }));\n }\n this.pFramePromise = Promise.all(promises)\n .then(() => pFrame)\n .catch((err) => {\n this.dispose();\n pFrame.dispose();\n throw new PFrameDriverError(\n `PFrame creation failed asynchronously, columns: ${JSON.stringify(distinctСolumns)}, error: ${ensureError(err)}`,\n );\n });\n } catch (err: unknown) {\n throw new PFrameDriverError(\n `PFrame creation failed synchronously, columns: ${JSON.stringify(distinctСolumns)}, error: ${ensureError(err)}`,\n );\n }\n }\n\n private getOrCreateComputableForBlob(blobId: string) {\n let computable = this.blobHandleComputables.get(blobId);\n if (computable !== undefined) return computable;\n\n const blobResource = this.blobIdToResource.get(blobId);\n if (blobResource === undefined) throw new PFrameDriverError(`Blob with id ${blobId} not found.`);\n\n // precalculation of value tree will trigger the download proecess right away\n computable = this.blobDriver.getDownloadedBlob(blobResource).withPreCalculatedValueTree();\n\n this.blobHandleComputables.set(blobId, computable);\n\n return computable;\n }\n\n public readonly preloadBlob = async (blobIds: string[]): Promise<void> => {\n const computables = blobIds.map((blobId) => this.getOrCreateComputableForBlob(blobId));\n for (const computable of computables) {\n try {\n await computable.awaitStableFullValue(this.disposeSignal);\n } catch (err: unknown) {\n if (isAbortError(err)) {\n break; // silence abort errors\n }\n throw err;\n }\n }\n };\n\n public readonly resolveBlobContent = async (blobId: string): Promise<Uint8Array> => {\n const computable = this.getOrCreateComputableForBlob(blobId);\n const path = this.blobDriver.getLocalPath((await computable.awaitStableValue(this.disposeSignal)).handle);\n return await fsp.readFile(path);\n };\n\n public get disposeSignal(): AbortSignal {\n return this.abortController.signal;\n }\n\n private dispose(): void {\n this.abortController.abort();\n for (const computable of this.blobHandleComputables.values()) computable.resetState();\n }\n\n async [Symbol.asyncDispose](): Promise<void> {\n this.dispose();\n await this.pFramePromise\n .then((pFrame) => pFrame.dispose())\n .catch(() => { /* mute error */ });\n }\n}\n\nclass PTableHolder implements AsyncDisposable {\n private readonly abortController = new AbortController();\n private readonly combinedDisposeSignal: AbortSignal;\n\n constructor(\n public readonly pFrame: PFrameHandle,\n pFrameDisposeSignal: AbortSignal,\n public readonly pTablePromise: Promise<PFrameInternal.PTableV6>,\n public readonly predecessor?: PollResource<PTableHolder>,\n ) {\n this.combinedDisposeSignal = AbortSignal.any([pFrameDisposeSignal, this.abortController.signal]);\n }\n\n public get disposeSignal(): AbortSignal {\n return this.combinedDisposeSignal;\n }\n\n async [Symbol.asyncDispose](): Promise<void> {\n this.abortController.abort();\n await this.pTablePromise\n .then((pTable) => pTable.dispose())\n .catch(() => { /* mute error */ });\n this.predecessor?.unref();\n }\n}\n\ntype FullPTableDef = {\n pFrameHandle: PFrameHandle;\n def: PTableDef<PObjectId>;\n};\n\nexport type PFrameDriverOps = {\n // Concurrency limits for `getUniqueValues` and `calculateTableData` requests\n pFrameConcurrency: number;\n // Concurrency limits for `getShape` and `getData` requests\n pTableConcurrency: number;\n // Maximum number of `calculateTableData` results cached for each PFrame\n pFrameCacheMaxCount: number;\n // Maximum size of `calculateTableData` results cached for PFrames overall.\n // The limit is soft, as the same table could be materialized with other requests and will not be deleted in such case.\n // Also each table has predeccessors, overlapping predecessors will be counted twice, so the effective limit is smaller.\n pFramesCacheMaxSize: number;\n};\n\n/**\n * Extends public and safe SDK's driver API with methods used internally in the middle\n * layer and in tests.\n */\nexport interface InternalPFrameDriver extends SdkPFrameDriver {\n /**\n * Dump active PFrames allocations in pprof format.\n * The result of this function should be saved as `profile.pb.gz`.\n * Use {@link https://pprof.me/} or {@link https://www.speedscope.app/}\n * to view the allocation flamechart.\n * @warning This method will always reject on Windows!\n */\n pprofDump(): Promise<Uint8Array>;\n\n /** Create a new PFrame */\n createPFrame(\n def: PFrameDef<PColumnDataUniversal>,\n ctx: ComputableCtx,\n ): PFrameHandle;\n\n /** Create a new PTable */\n createPTable(\n def: PTableDef<PColumn<PColumnDataUniversal>>,\n ctx: ComputableCtx,\n ): PTableHandle;\n\n /** Calculates data for the table and returns complete data representation of it */\n calculateTableData(\n handle: PFrameHandle,\n request: CalculateTableDataRequest<PObjectId>,\n range: TableRange | undefined,\n signal?: AbortSignal\n ): Promise<CalculateTableDataResponse>;\n\n /** Calculate set of unique values for a specific axis for the filtered set of records */\n getUniqueValues(\n handle: PFrameHandle,\n request: UniqueValuesRequest,\n signal?: AbortSignal\n ): Promise<UniqueValuesResponse>;\n\n /** Unified table shape */\n getShape(\n handle: PTableHandle,\n signal?: AbortSignal,\n ): Promise<PTableShape>;\n\n /**\n * Retrieve the data from the table. To retrieve only data required, it can be\n * sliced both horizontally ({@link columnIndices}) and vertically\n * ({@link range}).\n *\n * @param columnIndices unified indices of columns to be retrieved\n * @param range optionally limit the range of records to retrieve\n * */\n getData(\n handle: PTableHandle,\n columnIndices: number[],\n range: TableRange | undefined,\n signal?: AbortSignal,\n ): Promise<PTableVector[]>;\n}\n\nexport class PFrameDriver implements InternalPFrameDriver {\n private readonly pFrames: RefCountResourcePool<InternalPFrameData, PFrameHolder>;\n private readonly pTables: RefCountResourcePool<FullPTableDef, PTableHolder>;\n private readonly pTableCache: PTableCache;\n private readonly frameConcurrencyLimiter: ConcurrencyLimitingExecutor;\n private readonly tableConcurrencyLimiter: ConcurrencyLimitingExecutor;\n\n public async pprofDump(): Promise<Uint8Array> {\n return await PFrame.pprofDump();\n }\n\n public static async init(\n blobDriver: DownloadDriver,\n logger: MiLogger,\n spillPath: string,\n ops: PFrameDriverOps,\n ): Promise<PFrameDriver> {\n const resolvedSpillPath = path.resolve(spillPath);\n await emptyDir(resolvedSpillPath);\n return new PFrameDriver(blobDriver, logger, resolvedSpillPath, ops);\n }\n\n private constructor(\n private readonly blobDriver: DownloadDriver,\n private readonly logger: MiLogger,\n private readonly spillPath: string,\n ops: PFrameDriverOps,\n ) {\n const concurrencyLimiter = new ConcurrencyLimitingExecutor(ops.pFrameConcurrency);\n this.frameConcurrencyLimiter = concurrencyLimiter;\n this.tableConcurrencyLimiter = new ConcurrencyLimitingExecutor(ops.pTableConcurrency);\n\n this.pTableCache = new PTableCache(this.logger, ops);\n\n this.pFrames = new (class extends RefCountResourcePool<InternalPFrameData, PFrameHolder> {\n constructor(\n private readonly blobDriver: DownloadDriver,\n private readonly logger: MiLogger,\n private readonly spillPath: string,\n ) {\n super();\n }\n\n public acquire(params: InternalPFrameData): PollResource<PFrameHolder> {\n return super.acquire(params);\n }\n\n public getByKey(key: PFrameHandle): PFrameHolder {\n const resource = super.tryGetByKey(key);\n if (!resource) throw new PFrameDriverError(`PFrame not found, handle = ${key}`);\n return resource;\n }\n\n protected createNewResource(params: InternalPFrameData): PFrameHolder {\n if (getDebugFlags().logPFrameRequests)\n logger.info(\n `PFrame creation (pFrameHandle = ${this.calculateParamsKey(params)}): ${JSON.stringify(params, bigintReplacer)}`,\n );\n return new PFrameHolder(this.blobDriver, this.logger, this.spillPath, params);\n }\n\n protected calculateParamsKey(params: InternalPFrameData): string {\n try {\n return stableKeyFromPFrameData(params);\n } catch (err: unknown) {\n if (isPFrameDriverError(err)) throw err;\n throw new PFrameDriverError(`PFrame handle calculation failed, request: ${JSON.stringify(params, bigintReplacer)}, error: ${ensureError(err)}`);\n }\n }\n })(this.blobDriver, this.logger, this.spillPath);\n\n this.pTables = new (class extends RefCountResourcePool<\n FullPTableDef,\n PTableHolder\n > {\n constructor(\n private readonly pFrames: RefCountResourcePool<InternalPFrameData, PFrameHolder>,\n ) {\n super();\n }\n\n public getByKey(key: PTableHandle): PTableHolder {\n const resource = super.tryGetByKey(key);\n if (!resource) throw new PFrameDriverError(`PTable not found, handle = ${key}`);\n return resource;\n }\n\n protected createNewResource(params: FullPTableDef): PTableHolder {\n if (getDebugFlags().logPFrameRequests) {\n logger.info(\n `PTable creation (pTableHandle = ${this.calculateParamsKey(params)}): ${JSON.stringify(params, bigintReplacer)}`,\n );\n }\n\n const handle = params.pFrameHandle;\n const { pFramePromise, disposeSignal } = this.pFrames.getByKey(handle);\n\n // 3. Sort\n if (params.def.sorting.length > 0) {\n const predecessor = this.acquire({\n ...params,\n def: {\n ...params.def,\n sorting: [],\n },\n });\n const { resource: { pTablePromise } } = predecessor;\n const sortedTable = pTablePromise.then((pTable) => pTable.sort(params.def.sorting));\n return new PTableHolder(handle, disposeSignal, sortedTable, predecessor);\n }\n\n // 2. Filter\n if (params.def.filters.length > 0) {\n const predecessor = this.acquire({\n ...params,\n def: {\n ...params.def,\n filters: [],\n },\n });\n const { resource: { pTablePromise } } = predecessor;\n const filteredTable = pTablePromise.then((pTable) => pTable.filter(params.def.filters));\n return new PTableHolder(handle, disposeSignal, filteredTable, predecessor);\n }\n\n // 1. Join\n const table = pFramePromise.then((pFrame) => pFrame.createTable({\n src: joinEntryToInternal(params.def.src),\n filters: params.def.partitionFilters,\n }));\n return new PTableHolder(handle, disposeSignal, table);\n }\n\n protected calculateParamsKey(params: FullPTableDef): string {\n try {\n return stableKeyFromFullPTableDef(params);\n } catch (err: unknown) {\n throw new PFrameDriverError(`PTable handle calculation failed, request: ${JSON.stringify(params)}, error: ${ensureError(err)}`);\n }\n }\n })(this.pFrames);\n }\n\n //\n // Internal / Config API Methods\n //\n\n public createPFrame(\n def: PFrameDef<PColumnDataUniversal>,\n ctx: ComputableCtx,\n ): PFrameHandle {\n const internalData: InternalPFrameData = def\n .filter((c) => valueTypes.find((t) => t === c.spec.valueType))\n .map((c) =>\n mapPObjectData(c, (d) =>\n isPlTreeNodeAccessor(d)\n ? parseDataInfoResource(d)\n : isDataInfo(d)\n ? d.type === 'ParquetPartitioned'\n ? mapDataInfo(d, (a) => traverseParquetPartitionedResource(a))\n : mapDataInfo(d, (a) => a.resourceInfo)\n : makeDataInfoFromPColumnValues(c.spec, d),\n ),\n );\n const res = this.pFrames.acquire(internalData);\n ctx.addOnDestroy(res.unref);\n return res.key as PFrameHandle;\n }\n\n public createPTable(\n rawDef: PTableDef<PColumn<PColumnDataUniversal>>,\n ctx: ComputableCtx,\n ): PTableHandle {\n const def = migratePTableFilters(rawDef);\n const pFrameHandle = this.createPFrame(extractAllColumns(def.src), ctx);\n const defIds = mapPTableDef(def, (c) => c.id);\n const res = this.pTables.acquire({ def: defIds, pFrameHandle });\n if (getDebugFlags().logPFrameRequests)\n this.logger.info(\n `Create PTable call (pFrameHandle = ${pFrameHandle}; pTableHandle = ${JSON.stringify(res)}): ${JSON.stringify(\n mapPTableDef(def, (c) => c.spec),\n bigintReplacer,\n )}`,\n );\n ctx.addOnDestroy(res.unref); // in addition to pframe unref added in createPFrame above\n return res.key as PTableHandle;\n }\n\n //\n // PFrame istance methods\n //\n\n public async findColumns(\n handle: PFrameHandle,\n request: FindColumnsRequest,\n ): Promise<FindColumnsResponse> {\n const iRequest: PFrameInternal.FindColumnsRequest = {\n ...request,\n compatibleWith:\n request.compatibleWith.length !== 0\n ? [{\n axesSpec: [\n ...new Map(request.compatibleWith.map(\n (item) => [canonicalize(item)!, item] as const,\n )).values(),\n ],\n qualifications: [],\n }]\n : [],\n };\n const { pFramePromise } = this.pFrames.getByKey(handle);\n const pFrame = await pFramePromise;\n const responce = await pFrame.findColumns(iRequest);\n return {\n hits: responce.hits\n .filter((h) => // only exactly matching columns\n h.mappingVariants.length === 0\n || h.mappingVariants.some((v) =>\n v.qualifications.forHit.length === 0\n && v.qualifications.forQueries.every((q) => q.length === 0)))\n .map((h) => h.hit),\n };\n }\n\n public async getColumnSpec(handle: PFrameHandle, columnId: PObjectId): Promise<PColumnSpec> {\n const { pFramePromise } = this.pFrames.getByKey(handle);\n const pFrame = await pFramePromise;\n return await pFrame.getColumnSpec(columnId);\n }\n\n public async listColumns(handle: PFrameHandle): Promise<PColumnIdAndSpec[]> {\n const { pFramePromise } = this.pFrames.getByKey(handle);\n const pFrame = await pFramePromise;\n return await pFrame.listColumns();\n }\n\n public async calculateTableData(\n handle: PFrameHandle,\n request: CalculateTableDataRequest<PObjectId>,\n range: TableRange | undefined,\n signal?: AbortSignal,\n ): Promise<CalculateTableDataResponse> {\n if (getDebugFlags().logPFrameRequests) {\n this.logger.info(\n `Call calculateTableData, handle = ${handle}, request = ${JSON.stringify(request, bigintReplacer)}`,\n );\n }\n\n const table = this.pTables.acquire({\n pFrameHandle: handle,\n def: migratePTableFilters(request),\n });\n const { resource: { pTablePromise, disposeSignal } } = table;\n const pTable = await pTablePromise;\n const combinedSignal = AbortSignal.any([signal, disposeSignal].filter((s) => !!s));\n\n return await this.frameConcurrencyLimiter.run(async () => {\n try {\n const spec = pTable.getSpec();\n const data = await pTable.getData([...spec.keys()], {\n range,\n signal: combinedSignal,\n });\n\n const size = await pTable.getFootprint({\n withPredecessors: true,\n signal: combinedSignal,\n });\n this.pTableCache.cache(table, size);\n\n return spec.map((spec, i) => ({\n spec: spec,\n data: data[i],\n }));\n } catch (err: unknown) {\n table.unref();\n throw err;\n }\n });\n }\n\n public async getUniqueValues(\n handle: PFrameHandle,\n request: UniqueValuesRequest,\n signal?: AbortSignal,\n ): Promise<UniqueValuesResponse> {\n if (getDebugFlags().logPFrameRequests) {\n this.logger.info(\n `Call getUniqueValues, handle = ${handle}, request = ${JSON.stringify(request, bigintReplacer)}`,\n );\n }\n\n const { pFramePromise, disposeSignal } = this.pFrames.getByKey(handle);\n const pFrame = await pFramePromise;\n const combinedSignal = AbortSignal.any([signal, disposeSignal].filter((s) => !!s));\n\n return await this.frameConcurrencyLimiter.run(async () => {\n return await pFrame.getUniqueValues({\n ...request,\n filters: migrateFilters(request.filters),\n }, {\n signal: combinedSignal,\n });\n });\n }\n\n //\n // PTable istance methods\n //\n\n public async getSpec(handle: PTableHandle): Promise<PTableColumnSpec[]> {\n const { pTablePromise } = this.pTables.getByKey(handle);\n const pTable = await pTablePromise;\n return pTable.getSpec();\n }\n\n public async getShape(handle: PTableHandle, signal?: AbortSignal): Promise<PTableShape> {\n const { pTablePromise, disposeSignal } = this.pTables.getByKey(handle);\n const pTable = await pTablePromise;\n const combinedSignal = AbortSignal.any([signal, disposeSignal].filter((s) => !!s));\n\n return await this.tableConcurrencyLimiter.run(async () => {\n return await pTable.getShape({\n signal: combinedSignal,\n });\n });\n }\n\n public async getData(\n handle: PTableHandle,\n columnIndices: number[],\n range: TableRange | undefined,\n signal?: AbortSignal,\n ): Promise<PTableVector[]> {\n const { pTablePromise, disposeSignal } = this.pTables.getByKey(handle);\n const pTable = await pTablePromise;\n const combinedSignal = AbortSignal.any([signal, disposeSignal].filter((s) => !!s));\n\n return await this.tableConcurrencyLimiter.run(async () => {\n return await pTable.getData(columnIndices, {\n range,\n signal: combinedSignal,\n });\n });\n }\n}\n\nfunction joinEntryToInternal(entry: JoinEntry<PObjectId>): PFrameInternal.JoinEntryV3 {\n switch (entry.type) {\n case 'column':\n return {\n type: 'column',\n columnId: entry.column,\n };\n case 'slicedColumn':\n return {\n type: 'slicedColumn',\n columnId: entry.column,\n newId: entry.newId,\n axisFilters: entry.axisFilters,\n };\n case 'inlineColumn':\n return {\n type: 'inlineColumn',\n newId: entry.column.id,\n spec: entry.column.spec,\n dataInfo: {\n type: 'Json',\n keyLength: entry.column.spec.axesSpec.length,\n data: entry.column.data.reduce((acc, row) => {\n acc[JSON.stringify(row.key)] = row.val;\n return acc;\n }, {} as Record<string, PColumnValue>),\n },\n };\n case 'inner':\n case 'full':\n return {\n type: entry.type,\n entries: entry.entries.map((col) => joinEntryToInternal(col)),\n };\n case 'outer':\n return {\n type: 'outer',\n primary: joinEntryToInternal(entry.primary),\n secondary: entry.secondary.map((col) => joinEntryToInternal(col)),\n };\n default:\n assertNever(entry);\n }\n}\n\nfunction stableKeyFromFullPTableDef(data: FullPTableDef): string {\n const hash = createHash('sha256');\n hash.update(canonicalize(data)!);\n return hash.digest().toString('hex');\n}\n\nfunction stableKeyFromPFrameData(data: PColumn<PFrameInternal.DataInfo<ResourceInfo>>[]): string {\n const orderedData = [...data].map((column) =>\n mapPObjectData(column, (r) => {\n let result: {\n type: string;\n keyLength: number;\n payload: {\n key: string;\n value: null | number | string | [string, string];\n }[];\n };\n const type = r.type;\n switch (type) {\n case 'Json':\n result = {\n type: r.type,\n keyLength: r.keyLength,\n payload: Object.entries(r.data).map(([part, value]) => ({\n key: part,\n value,\n })),\n };\n break;\n case 'JsonPartitioned':\n result = {\n type: r.type,\n keyLength: r.partitionKeyLength,\n payload: Object.entries(r.parts).map(([part, info]) => ({\n key: part,\n value: blobKey(info),\n })),\n };\n break;\n case 'BinaryPartitioned':\n result = {\n type: r.type,\n keyLength: r.partitionKeyLength,\n payload: Object.entries(r.parts).map(([part, info]) => ({\n key: part,\n value: [blobKey(info.index), blobKey(info.values)] as const,\n })),\n };\n break;\n case 'ParquetPartitioned':\n result = {\n type: r.type,\n keyLength: r.partitionKeyLength,\n payload: Object.entries(r.parts).map(([part, info]) => ({\n key: part,\n value: info.dataDigest || [\n blobKey(info.data),\n JSON.stringify({ axes: info.axes, column: info.column }),\n ] as const,\n })),\n };\n break;\n default:\n throw new PFrameDriverError(`unsupported resource type: ${JSON.stringify(type satisfies never)}`);\n }\n result.payload.sort((lhs, rhs) => lhs.key.localeCompare(rhs.key));\n return result;\n }),\n );\n orderedData.sort((lhs, rhs) => lhs.id.localeCompare(rhs.id));\n\n const hash = createHash('sha256');\n hash.update(canonicalize(orderedData)!);\n return hash.digest().toString('hex');\n}\n"],"names":["LRUCache","getDebugFlags","allBlobs","mapBlobs","PFrame","PFrameDriverError","ensureError","isAbortError","fsp","path","emptyDir","ConcurrencyLimitingExecutor","RefCountResourcePool","isPFrameDriverError","mapPObjectData","isPlTreeNodeAccessor","parseDataInfoResource","isDataInfo","mapDataInfo","traverseParquetPartitionedResource","makeDataInfoFromPColumnValues","extractAllColumns","mapPTableDef","assertNever","createHash"],"mappings":"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"}
1
+ {"version":3,"file":"driver.cjs","sources":["../../src/pool/driver.ts"],"sourcesContent":["import type { DownloadDriver } from '@milaboratories/pl-drivers';\nimport type { PFrameInternal } from '@milaboratories/pl-model-middle-layer';\nimport type { PlTreeNodeAccessor, ResourceInfo } from '@milaboratories/pl-tree';\nimport { isPlTreeNodeAccessor } from '@milaboratories/pl-tree';\nimport type { ComputableCtx, ComputableStableDefined } from '@milaboratories/computable';\nimport type {\n CalculateTableDataRequest,\n CalculateTableDataResponse,\n FindColumnsRequest,\n FindColumnsResponse,\n LocalBlobHandleAndSize,\n PColumnIdAndSpec,\n PColumnSpec,\n PFrameHandle,\n PObjectId,\n PTableColumnSpec,\n PTableHandle,\n PTableShape,\n PTableVector,\n TableRange,\n UniqueValuesRequest,\n UniqueValuesResponse,\n PFrameDriver as SdkPFrameDriver,\n PColumn,\n PFrameDef,\n JoinEntry,\n PTableDef,\n ValueType,\n PTableRecordSingleValueFilterV2,\n PTableRecordFilter,\n PColumnValues,\n DataInfo,\n PColumnValue,\n} from '@platforma-sdk/model';\nimport {\n mapPObjectData,\n mapPTableDef,\n extractAllColumns,\n mapDataInfo,\n isDataInfo,\n ensureError,\n PFrameDriverError,\n isAbortError,\n isPFrameDriverError,\n} from '@platforma-sdk/model';\nimport { LRUCache } from 'lru-cache';\nimport { allBlobs, makeDataInfoFromPColumnValues, mapBlobs, parseDataInfoResource, traverseParquetPartitionedResource } from './data';\nimport { createHash } from 'node:crypto';\nimport type { MiLogger } from '@milaboratories/ts-helpers';\nimport {\n assertNever,\n emptyDir,\n ConcurrencyLimitingExecutor,\n RefCountResourcePool,\n type PollResource,\n} from '@milaboratories/ts-helpers';\nimport canonicalize from 'canonicalize';\nimport { PFrameFactory } from '@milaboratories/pframes-rs-node';\nimport * as fsp from 'node:fs/promises';\nimport * as path from 'node:path';\nimport { getDebugFlags } from '../debug';\n\ntype PColumnDataUniversal = PlTreeNodeAccessor | DataInfo<PlTreeNodeAccessor> | PColumnValues;\n\nfunction blobKey(res: ResourceInfo): string {\n return String(res.id);\n}\n\ntype InternalPFrameData = PFrameDef<PFrameInternal.DataInfo<ResourceInfo>>;\n\nconst valueTypes: ValueType[] = ['Int', 'Long', 'Float', 'Double', 'String', 'Bytes'] as const;\n\nfunction migrateFilters(filters: PTableRecordFilter[]): PTableRecordFilter[] {\n const filtersV1 = [];\n const filtersV2: PTableRecordSingleValueFilterV2[] = [];\n for (const filter of filters) {\n if ((filter.type as unknown) === 'bySingleColumn') {\n filtersV1.push(filter);\n filtersV2.push({\n ...filter,\n type: 'bySingleColumnV2',\n });\n } else {\n filtersV2.push(filter);\n }\n }\n if (filtersV1.length > 0) {\n const filtersV1Json = JSON.stringify(filtersV1);\n console.warn(\n `type overriten from 'bySingleColumn' to 'bySingleColumnV2' for filters: ${filtersV1Json}`,\n );\n }\n return filtersV2;\n}\n\nfunction migratePTableFilters<T>(\n def: Omit<PTableDef<T>, 'partitionFilters'> | PTableDef<T>,\n): PTableDef<T> {\n if (!('partitionFilters' in def)) {\n // For old blocks assume all axes filters to be partition filters\n return {\n ...def,\n partitionFilters: migrateFilters(def.filters.filter((f) => f.column.type === 'axis')),\n filters: migrateFilters(def.filters.filter((f) => f.column.type === 'column')),\n };\n }\n return {\n ...def,\n partitionFilters: migrateFilters(def.partitionFilters),\n filters: migrateFilters(def.filters),\n };\n}\n\nconst bigintReplacer = (_: string, v: unknown) => (typeof v === 'bigint' ? v.toString() : v);\n\nclass PTableCache {\n private readonly perFrame = new Map<PFrameHandle, LRUCache<PTableHandle, PollResource<PTableHolder>>>();\n private readonly global: LRUCache<PTableHandle, PollResource<PTableHolder>>;\n private readonly disposeListeners = new Map<PTableHandle, () => void>();\n\n constructor(\n private readonly logger: MiLogger,\n private readonly ops: PFrameDriverOps,\n ) {\n this.global = new LRUCache<PTableHandle, PollResource<PTableHolder>>({\n maxSize: this.ops.pFramesCacheMaxSize,\n dispose: (resource, key, reason) => {\n if (reason === 'evict') {\n this.perFrame.get(resource.resource.pFrame)?.delete(key);\n }\n\n if (this.perFrame.get(resource.resource.pFrame)?.size === 0) {\n this.perFrame.delete(resource.resource.pFrame);\n }\n\n const disposeListener = this.disposeListeners.get(key)!;\n this.disposeListeners.delete(key);\n resource.resource.disposeSignal.removeEventListener('abort', disposeListener);\n\n resource.unref();\n if (getDebugFlags().logPFrameRequests) {\n this.logger.info(`calculateTableData cache - removed PTable ${key}`);\n }\n },\n });\n }\n\n public cache(resource: PollResource<PTableHolder>, size: number): void {\n const key = resource.key as PTableHandle;\n if (getDebugFlags().logPFrameRequests) {\n this.logger.info(`calculateTableData cache - added PTable ${key} with size ${size}`);\n }\n\n this.global.set(key, resource, { size });\n\n let perFrame = this.perFrame.get(resource.resource.pFrame);\n if (!perFrame) {\n perFrame = new LRUCache<PTableHandle, PollResource<PTableHolder>>({\n max: this.ops.pFrameCacheMaxCount,\n dispose: (_resource, key, reason) => {\n if (reason === 'evict') {\n this.global.delete(key);\n }\n },\n });\n this.perFrame.set(resource.resource.pFrame, perFrame);\n }\n perFrame.set(key, resource);\n\n const disposeListener = () => {\n this.perFrame.get(resource.resource.pFrame)?.delete(key);\n this.global.delete(key);\n };\n this.disposeListeners.set(key, disposeListener);\n resource.resource.disposeSignal.addEventListener('abort', disposeListener);\n }\n}\n\nclass PFrameHolder implements PFrameInternal.PFrameDataSource, AsyncDisposable {\n public readonly pFramePromise: Promise<PFrameInternal.PFrameV10>;\n private readonly abortController = new AbortController();\n private readonly blobIdToResource = new Map<string, ResourceInfo>();\n private readonly blobHandleComputables = new Map<\n string,\n ComputableStableDefined<LocalBlobHandleAndSize>\n >();\n\n constructor(\n private readonly blobDriver: DownloadDriver,\n private readonly logger: MiLogger,\n private readonly spillPath: string,\n columns: InternalPFrameData,\n ) {\n const logFunc: PFrameInternal.Logger = (level, message) => this.logger[level](message);\n\n for (const column of columns) {\n for (const blob of allBlobs(column.data)) {\n this.blobIdToResource.set(blobKey(blob), blob);\n }\n }\n const distinctСolumns = [\n ...new Map(columns.map((column) => ({\n ...column,\n data: mapBlobs(column.data, blobKey),\n })).map(\n (item) => [canonicalize(item)!, item] as const,\n )).values(),\n ];\n\n try {\n const pFrame = PFrameFactory.createPFrame({ spillPath: this.spillPath, logger: logFunc });\n pFrame.setDataSource(this);\n const promises: Promise<void>[] = [];\n for (const column of distinctСolumns) {\n pFrame.addColumnSpec(column.id, column.spec);\n promises.push(pFrame.setColumnData(column.id, column.data, { signal: this.disposeSignal }));\n }\n this.pFramePromise = Promise.all(promises)\n .then(() => pFrame)\n .catch((err) => {\n this.dispose();\n pFrame.dispose();\n throw new PFrameDriverError(\n `PFrame creation failed asynchronously, columns: ${JSON.stringify(distinctСolumns)}, error: ${ensureError(err)}`,\n );\n });\n } catch (err: unknown) {\n throw new PFrameDriverError(\n `PFrame creation failed synchronously, columns: ${JSON.stringify(distinctСolumns)}, error: ${ensureError(err)}`,\n );\n }\n }\n\n private getOrCreateComputableForBlob(blobId: string) {\n let computable = this.blobHandleComputables.get(blobId);\n if (computable !== undefined) return computable;\n\n const blobResource = this.blobIdToResource.get(blobId);\n if (blobResource === undefined) throw new PFrameDriverError(`Blob with id ${blobId} not found.`);\n\n // precalculation of value tree will trigger the download proecess right away\n computable = this.blobDriver.getDownloadedBlob(blobResource).withPreCalculatedValueTree();\n\n this.blobHandleComputables.set(blobId, computable);\n\n return computable;\n }\n\n public readonly preloadBlob = async (blobIds: string[]): Promise<void> => {\n const computables = blobIds.map((blobId) => this.getOrCreateComputableForBlob(blobId));\n for (const computable of computables) {\n try {\n await computable.awaitStableFullValue(this.disposeSignal);\n } catch (err: unknown) {\n if (isAbortError(err)) {\n break; // silence abort errors\n }\n throw err;\n }\n }\n };\n\n public readonly resolveBlobContent = async (blobId: string): Promise<Uint8Array> => {\n const computable = this.getOrCreateComputableForBlob(blobId);\n const path = this.blobDriver.getLocalPath((await computable.awaitStableValue(this.disposeSignal)).handle);\n return await fsp.readFile(path);\n };\n\n public get parquetServer(): PFrameInternal.ParquetServerConfig | undefined {\n return undefined;\n }\n\n public get disposeSignal(): AbortSignal {\n return this.abortController.signal;\n }\n\n private dispose(): void {\n this.abortController.abort();\n for (const computable of this.blobHandleComputables.values()) computable.resetState();\n }\n\n async [Symbol.asyncDispose](): Promise<void> {\n this.dispose();\n await this.pFramePromise\n .then((pFrame) => pFrame.dispose())\n .catch(() => { /* mute error */ });\n }\n}\n\nclass PTableHolder implements AsyncDisposable {\n private readonly abortController = new AbortController();\n private readonly combinedDisposeSignal: AbortSignal;\n\n constructor(\n public readonly pFrame: PFrameHandle,\n pFrameDisposeSignal: AbortSignal,\n public readonly pTablePromise: Promise<PFrameInternal.PTableV7>,\n public readonly predecessor?: PollResource<PTableHolder>,\n ) {\n this.combinedDisposeSignal = AbortSignal.any([pFrameDisposeSignal, this.abortController.signal]);\n }\n\n public get disposeSignal(): AbortSignal {\n return this.combinedDisposeSignal;\n }\n\n async [Symbol.asyncDispose](): Promise<void> {\n this.abortController.abort();\n await this.pTablePromise\n .then((pTable) => pTable.dispose())\n .catch(() => { /* mute error */ });\n this.predecessor?.unref();\n }\n}\n\ntype FullPTableDef = {\n pFrameHandle: PFrameHandle;\n def: PTableDef<PObjectId>;\n};\n\nexport type PFrameDriverOps = {\n // Concurrency limits for `getUniqueValues` and `calculateTableData` requests\n pFrameConcurrency: number;\n // Concurrency limits for `getShape` and `getData` requests\n pTableConcurrency: number;\n // Maximum number of `calculateTableData` results cached for each PFrame\n pFrameCacheMaxCount: number;\n // Maximum size of `calculateTableData` results cached for PFrames overall.\n // The limit is soft, as the same table could be materialized with other requests and will not be deleted in such case.\n // Also each table has predeccessors, overlapping predecessors will be counted twice, so the effective limit is smaller.\n pFramesCacheMaxSize: number;\n};\n\n/**\n * Extends public and safe SDK's driver API with methods used internally in the middle\n * layer and in tests.\n */\nexport interface InternalPFrameDriver extends SdkPFrameDriver {\n /**\n * Dump active PFrames allocations in pprof format.\n * The result of this function should be saved as `profile.pb.gz`.\n * Use {@link https://pprof.me/} or {@link https://www.speedscope.app/}\n * to view the allocation flamechart.\n * @warning This method will always reject on Windows!\n */\n pprofDump(): Promise<Uint8Array>;\n\n /** Create a new PFrame */\n createPFrame(\n def: PFrameDef<PColumnDataUniversal>,\n ctx: ComputableCtx,\n ): PFrameHandle;\n\n /** Create a new PTable */\n createPTable(\n def: PTableDef<PColumn<PColumnDataUniversal>>,\n ctx: ComputableCtx,\n ): PTableHandle;\n\n /** Calculates data for the table and returns complete data representation of it */\n calculateTableData(\n handle: PFrameHandle,\n request: CalculateTableDataRequest<PObjectId>,\n range: TableRange | undefined,\n signal?: AbortSignal\n ): Promise<CalculateTableDataResponse>;\n\n /** Calculate set of unique values for a specific axis for the filtered set of records */\n getUniqueValues(\n handle: PFrameHandle,\n request: UniqueValuesRequest,\n signal?: AbortSignal\n ): Promise<UniqueValuesResponse>;\n\n /** Unified table shape */\n getShape(\n handle: PTableHandle,\n signal?: AbortSignal,\n ): Promise<PTableShape>;\n\n /**\n * Retrieve the data from the table. To retrieve only data required, it can be\n * sliced both horizontally ({@link columnIndices}) and vertically\n * ({@link range}).\n *\n * @param columnIndices unified indices of columns to be retrieved\n * @param range optionally limit the range of records to retrieve\n * */\n getData(\n handle: PTableHandle,\n columnIndices: number[],\n range: TableRange | undefined,\n signal?: AbortSignal,\n ): Promise<PTableVector[]>;\n}\n\nexport class PFrameDriver implements InternalPFrameDriver {\n private readonly pFrames: RefCountResourcePool<InternalPFrameData, PFrameHolder>;\n private readonly pTables: RefCountResourcePool<FullPTableDef, PTableHolder>;\n private readonly pTableCache: PTableCache;\n private readonly frameConcurrencyLimiter: ConcurrencyLimitingExecutor;\n private readonly tableConcurrencyLimiter: ConcurrencyLimitingExecutor;\n\n public async pprofDump(): Promise<Uint8Array> {\n return await PFrameFactory.pprofDump();\n }\n\n public static async init(\n blobDriver: DownloadDriver,\n logger: MiLogger,\n spillPath: string,\n ops: PFrameDriverOps,\n ): Promise<PFrameDriver> {\n const resolvedSpillPath = path.resolve(spillPath);\n await emptyDir(resolvedSpillPath);\n return new PFrameDriver(blobDriver, logger, resolvedSpillPath, ops);\n }\n\n private constructor(\n private readonly blobDriver: DownloadDriver,\n private readonly logger: MiLogger,\n private readonly spillPath: string,\n ops: PFrameDriverOps,\n ) {\n const concurrencyLimiter = new ConcurrencyLimitingExecutor(ops.pFrameConcurrency);\n this.frameConcurrencyLimiter = concurrencyLimiter;\n this.tableConcurrencyLimiter = new ConcurrencyLimitingExecutor(ops.pTableConcurrency);\n\n this.pTableCache = new PTableCache(this.logger, ops);\n\n this.pFrames = new (class extends RefCountResourcePool<InternalPFrameData, PFrameHolder> {\n constructor(\n private readonly blobDriver: DownloadDriver,\n private readonly logger: MiLogger,\n private readonly spillPath: string,\n ) {\n super();\n }\n\n public acquire(params: InternalPFrameData): PollResource<PFrameHolder> {\n return super.acquire(params);\n }\n\n public getByKey(key: PFrameHandle): PFrameHolder {\n const resource = super.tryGetByKey(key);\n if (!resource) throw new PFrameDriverError(`PFrame not found, handle = ${key}`);\n return resource;\n }\n\n protected createNewResource(params: InternalPFrameData): PFrameHolder {\n if (getDebugFlags().logPFrameRequests)\n logger.info(\n `PFrame creation (pFrameHandle = ${this.calculateParamsKey(params)}): ${JSON.stringify(params, bigintReplacer)}`,\n );\n return new PFrameHolder(this.blobDriver, this.logger, this.spillPath, params);\n }\n\n protected calculateParamsKey(params: InternalPFrameData): string {\n try {\n return stableKeyFromPFrameData(params);\n } catch (err: unknown) {\n if (isPFrameDriverError(err)) throw err;\n throw new PFrameDriverError(`PFrame handle calculation failed, request: ${JSON.stringify(params, bigintReplacer)}, error: ${ensureError(err)}`);\n }\n }\n })(this.blobDriver, this.logger, this.spillPath);\n\n this.pTables = new (class extends RefCountResourcePool<\n FullPTableDef,\n PTableHolder\n > {\n constructor(\n private readonly pFrames: RefCountResourcePool<InternalPFrameData, PFrameHolder>,\n ) {\n super();\n }\n\n public getByKey(key: PTableHandle): PTableHolder {\n const resource = super.tryGetByKey(key);\n if (!resource) throw new PFrameDriverError(`PTable not found, handle = ${key}`);\n return resource;\n }\n\n protected createNewResource(params: FullPTableDef): PTableHolder {\n if (getDebugFlags().logPFrameRequests) {\n logger.info(\n `PTable creation (pTableHandle = ${this.calculateParamsKey(params)}): ${JSON.stringify(params, bigintReplacer)}`,\n );\n }\n\n const handle = params.pFrameHandle;\n const { pFramePromise, disposeSignal } = this.pFrames.getByKey(handle);\n\n // 3. Sort\n if (params.def.sorting.length > 0) {\n const predecessor = this.acquire({\n ...params,\n def: {\n ...params.def,\n sorting: [],\n },\n });\n const { resource: { pTablePromise } } = predecessor;\n const sortedTable = pTablePromise.then((pTable) => pTable.sort(params.def.sorting));\n return new PTableHolder(handle, disposeSignal, sortedTable, predecessor);\n }\n\n // 2. Filter\n if (params.def.filters.length > 0) {\n const predecessor = this.acquire({\n ...params,\n def: {\n ...params.def,\n filters: [],\n },\n });\n const { resource: { pTablePromise } } = predecessor;\n const filteredTable = pTablePromise.then((pTable) => pTable.filter(params.def.filters));\n return new PTableHolder(handle, disposeSignal, filteredTable, predecessor);\n }\n\n // 1. Join\n const table = pFramePromise.then((pFrame) => pFrame.createTable({\n src: joinEntryToInternal(params.def.src),\n filters: params.def.partitionFilters,\n }));\n return new PTableHolder(handle, disposeSignal, table);\n }\n\n protected calculateParamsKey(params: FullPTableDef): string {\n try {\n return stableKeyFromFullPTableDef(params);\n } catch (err: unknown) {\n throw new PFrameDriverError(`PTable handle calculation failed, request: ${JSON.stringify(params)}, error: ${ensureError(err)}`);\n }\n }\n })(this.pFrames);\n }\n\n //\n // Internal / Config API Methods\n //\n\n public createPFrame(\n def: PFrameDef<PColumnDataUniversal>,\n ctx: ComputableCtx,\n ): PFrameHandle {\n const internalData: InternalPFrameData = def\n .filter((c) => valueTypes.find((t) => t === c.spec.valueType))\n .map((c) =>\n mapPObjectData(c, (d) =>\n isPlTreeNodeAccessor(d)\n ? parseDataInfoResource(d)\n : isDataInfo(d)\n ? d.type === 'ParquetPartitioned'\n ? mapDataInfo(d, (a) => traverseParquetPartitionedResource(a))\n : mapDataInfo(d, (a) => a.resourceInfo)\n : makeDataInfoFromPColumnValues(c.spec, d),\n ),\n );\n const res = this.pFrames.acquire(internalData);\n ctx.addOnDestroy(res.unref);\n return res.key as PFrameHandle;\n }\n\n public createPTable(\n rawDef: PTableDef<PColumn<PColumnDataUniversal>>,\n ctx: ComputableCtx,\n ): PTableHandle {\n const def = migratePTableFilters(rawDef);\n const pFrameHandle = this.createPFrame(extractAllColumns(def.src), ctx);\n const defIds = mapPTableDef(def, (c) => c.id);\n const res = this.pTables.acquire({ def: defIds, pFrameHandle });\n if (getDebugFlags().logPFrameRequests)\n this.logger.info(\n `Create PTable call (pFrameHandle = ${pFrameHandle}; pTableHandle = ${JSON.stringify(res)}): ${JSON.stringify(\n mapPTableDef(def, (c) => c.spec),\n bigintReplacer,\n )}`,\n );\n ctx.addOnDestroy(res.unref); // in addition to pframe unref added in createPFrame above\n return res.key as PTableHandle;\n }\n\n //\n // PFrame istance methods\n //\n\n public async findColumns(\n handle: PFrameHandle,\n request: FindColumnsRequest,\n ): Promise<FindColumnsResponse> {\n const iRequest: PFrameInternal.FindColumnsRequest = {\n ...request,\n compatibleWith:\n request.compatibleWith.length !== 0\n ? [{\n axesSpec: [\n ...new Map(request.compatibleWith.map(\n (item) => [canonicalize(item)!, item] as const,\n )).values(),\n ],\n qualifications: [],\n }]\n : [],\n };\n const { pFramePromise } = this.pFrames.getByKey(handle);\n const pFrame = await pFramePromise;\n const responce = await pFrame.findColumns(iRequest);\n return {\n hits: responce.hits\n .filter((h) => // only exactly matching columns\n h.mappingVariants.length === 0\n || h.mappingVariants.some((v) =>\n v.qualifications.forHit.length === 0\n && v.qualifications.forQueries.every((q) => q.length === 0)))\n .map((h) => h.hit),\n };\n }\n\n public async getColumnSpec(handle: PFrameHandle, columnId: PObjectId): Promise<PColumnSpec> {\n const { pFramePromise } = this.pFrames.getByKey(handle);\n const pFrame = await pFramePromise;\n return await pFrame.getColumnSpec(columnId);\n }\n\n public async listColumns(handle: PFrameHandle): Promise<PColumnIdAndSpec[]> {\n const { pFramePromise } = this.pFrames.getByKey(handle);\n const pFrame = await pFramePromise;\n return await pFrame.listColumns();\n }\n\n public async calculateTableData(\n handle: PFrameHandle,\n request: CalculateTableDataRequest<PObjectId>,\n range: TableRange | undefined,\n signal?: AbortSignal,\n ): Promise<CalculateTableDataResponse> {\n if (getDebugFlags().logPFrameRequests) {\n this.logger.info(\n `Call calculateTableData, handle = ${handle}, request = ${JSON.stringify(request, bigintReplacer)}`,\n );\n }\n\n const table = this.pTables.acquire({\n pFrameHandle: handle,\n def: migratePTableFilters(request),\n });\n const { resource: { pTablePromise, disposeSignal } } = table;\n const pTable = await pTablePromise;\n const combinedSignal = AbortSignal.any([signal, disposeSignal].filter((s) => !!s));\n\n return await this.frameConcurrencyLimiter.run(async () => {\n try {\n const spec = pTable.getSpec();\n const data = await pTable.getData([...spec.keys()], {\n range,\n signal: combinedSignal,\n });\n\n const size = await pTable.getFootprint({\n withPredecessors: true,\n signal: combinedSignal,\n });\n this.pTableCache.cache(table, size);\n\n return spec.map((spec, i) => ({\n spec: spec,\n data: data[i],\n }));\n } catch (err: unknown) {\n table.unref();\n throw err;\n }\n });\n }\n\n public async getUniqueValues(\n handle: PFrameHandle,\n request: UniqueValuesRequest,\n signal?: AbortSignal,\n ): Promise<UniqueValuesResponse> {\n if (getDebugFlags().logPFrameRequests) {\n this.logger.info(\n `Call getUniqueValues, handle = ${handle}, request = ${JSON.stringify(request, bigintReplacer)}`,\n );\n }\n\n const { pFramePromise, disposeSignal } = this.pFrames.getByKey(handle);\n const pFrame = await pFramePromise;\n const combinedSignal = AbortSignal.any([signal, disposeSignal].filter((s) => !!s));\n\n return await this.frameConcurrencyLimiter.run(async () => {\n return await pFrame.getUniqueValues({\n ...request,\n filters: migrateFilters(request.filters),\n }, {\n signal: combinedSignal,\n });\n });\n }\n\n //\n // PTable istance methods\n //\n\n public async getSpec(handle: PTableHandle): Promise<PTableColumnSpec[]> {\n const { pTablePromise } = this.pTables.getByKey(handle);\n const pTable = await pTablePromise;\n return pTable.getSpec();\n }\n\n public async getShape(handle: PTableHandle, signal?: AbortSignal): Promise<PTableShape> {\n const { pTablePromise, disposeSignal } = this.pTables.getByKey(handle);\n const pTable = await pTablePromise;\n const combinedSignal = AbortSignal.any([signal, disposeSignal].filter((s) => !!s));\n\n return await this.tableConcurrencyLimiter.run(async () => {\n return await pTable.getShape({\n signal: combinedSignal,\n });\n });\n }\n\n public async getData(\n handle: PTableHandle,\n columnIndices: number[],\n range: TableRange | undefined,\n signal?: AbortSignal,\n ): Promise<PTableVector[]> {\n const { pTablePromise, disposeSignal } = this.pTables.getByKey(handle);\n const pTable = await pTablePromise;\n const combinedSignal = AbortSignal.any([signal, disposeSignal].filter((s) => !!s));\n\n return await this.tableConcurrencyLimiter.run(async () => {\n return await pTable.getData(columnIndices, {\n range,\n signal: combinedSignal,\n });\n });\n }\n}\n\nfunction joinEntryToInternal(entry: JoinEntry<PObjectId>): PFrameInternal.JoinEntryV3 {\n switch (entry.type) {\n case 'column':\n return {\n type: 'column',\n columnId: entry.column,\n };\n case 'slicedColumn':\n return {\n type: 'slicedColumn',\n columnId: entry.column,\n newId: entry.newId,\n axisFilters: entry.axisFilters,\n };\n case 'inlineColumn':\n return {\n type: 'inlineColumn',\n newId: entry.column.id,\n spec: entry.column.spec,\n dataInfo: {\n type: 'Json',\n keyLength: entry.column.spec.axesSpec.length,\n data: entry.column.data.reduce((acc, row) => {\n acc[JSON.stringify(row.key)] = row.val;\n return acc;\n }, {} as Record<string, PColumnValue>),\n },\n };\n case 'inner':\n case 'full':\n return {\n type: entry.type,\n entries: entry.entries.map((col) => joinEntryToInternal(col)),\n };\n case 'outer':\n return {\n type: 'outer',\n primary: joinEntryToInternal(entry.primary),\n secondary: entry.secondary.map((col) => joinEntryToInternal(col)),\n };\n default:\n assertNever(entry);\n }\n}\n\nfunction stableKeyFromFullPTableDef(data: FullPTableDef): string {\n const hash = createHash('sha256');\n hash.update(canonicalize(data)!);\n return hash.digest().toString('hex');\n}\n\nfunction stableKeyFromPFrameData(data: PColumn<PFrameInternal.DataInfo<ResourceInfo>>[]): string {\n const orderedData = [...data].map((column) =>\n mapPObjectData(column, (r) => {\n let result: {\n type: string;\n keyLength: number;\n payload: {\n key: string;\n value: null | number | string | [string, string];\n }[];\n };\n const type = r.type;\n switch (type) {\n case 'Json':\n result = {\n type: r.type,\n keyLength: r.keyLength,\n payload: Object.entries(r.data).map(([part, value]) => ({\n key: part,\n value,\n })),\n };\n break;\n case 'JsonPartitioned':\n result = {\n type: r.type,\n keyLength: r.partitionKeyLength,\n payload: Object.entries(r.parts).map(([part, info]) => ({\n key: part,\n value: blobKey(info),\n })),\n };\n break;\n case 'BinaryPartitioned':\n result = {\n type: r.type,\n keyLength: r.partitionKeyLength,\n payload: Object.entries(r.parts).map(([part, info]) => ({\n key: part,\n value: [blobKey(info.index), blobKey(info.values)] as const,\n })),\n };\n break;\n case 'ParquetPartitioned':\n result = {\n type: r.type,\n keyLength: r.partitionKeyLength,\n payload: Object.entries(r.parts).map(([part, info]) => ({\n key: part,\n value: info.dataDigest || [\n blobKey(info.data),\n JSON.stringify({ axes: info.axes, column: info.column }),\n ] as const,\n })),\n };\n break;\n default:\n throw new PFrameDriverError(`unsupported resource type: ${JSON.stringify(type satisfies never)}`);\n }\n result.payload.sort((lhs, rhs) => lhs.key.localeCompare(rhs.key));\n return result;\n }),\n );\n orderedData.sort((lhs, rhs) => lhs.id.localeCompare(rhs.id));\n\n const hash = createHash('sha256');\n hash.update(canonicalize(orderedData)!);\n return hash.digest().toString('hex');\n}\n"],"names":["LRUCache","getDebugFlags","allBlobs","mapBlobs","PFrameFactory","PFrameDriverError","ensureError","isAbortError","fsp","path","emptyDir","ConcurrencyLimitingExecutor","RefCountResourcePool","isPFrameDriverError","mapPObjectData","isPlTreeNodeAccessor","parseDataInfoResource","isDataInfo","mapDataInfo","traverseParquetPartitionedResource","makeDataInfoFromPColumnValues","extractAllColumns","mapPTableDef","assertNever","createHash"],"mappings":"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"}
@@ -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;AAe9B,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AAc3D,KAAK,oBAAoB,GAAG,kBAAkB,GAAG,QAAQ,CAAC,kBAAkB,CAAC,GAAG,aAAa,CAAC;AA8P9F,MAAM,MAAM,eAAe,GAAG;IAE5B,iBAAiB,EAAE,MAAM,CAAC;IAE1B,iBAAiB,EAAE,MAAM,CAAC;IAE1B,mBAAmB,EAAE,MAAM,CAAC;IAI5B,mBAAmB,EAAE,MAAM,CAAC;CAC7B,CAAC;AAEF;;;GAGG;AACH,MAAM,WAAW,oBAAqB,SAAQ,eAAe;IAC3D;;;;;;OAMG;IACH,SAAS,IAAI,OAAO,CAAC,UAAU,CAAC,CAAC;IAEjC,0BAA0B;IAC1B,YAAY,CACV,GAAG,EAAE,SAAS,CAAC,oBAAoB,CAAC,EACpC,GAAG,EAAE,aAAa,GACjB,YAAY,CAAC;IAEhB,0BAA0B;IAC1B,YAAY,CACV,GAAG,EAAE,SAAS,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC,EAC7C,GAAG,EAAE,aAAa,GACjB,YAAY,CAAC;IAEhB,mFAAmF;IACnF,kBAAkB,CAChB,MAAM,EAAE,YAAY,EACpB,OAAO,EAAE,yBAAyB,CAAC,SAAS,CAAC,EAC7C,KAAK,EAAE,UAAU,GAAG,SAAS,EAC7B,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,0BAA0B,CAAC,CAAC;IAEvC,yFAAyF;IACzF,eAAe,CACb,MAAM,EAAE,YAAY,EACpB,OAAO,EAAE,mBAAmB,EAC5B,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,oBAAoB,CAAC,CAAC;IAEjC,0BAA0B;IAC1B,QAAQ,CACN,MAAM,EAAE,YAAY,EACpB,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,WAAW,CAAC,CAAC;IAExB;;;;;;;SAOK;IACL,OAAO,CACL,MAAM,EAAE,YAAY,EACpB,aAAa,EAAE,MAAM,EAAE,EACvB,KAAK,EAAE,UAAU,GAAG,SAAS,EAC7B,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;CAC5B;AAED,qBAAa,YAAa,YAAW,oBAAoB;IAuBrD,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,SAAS;IAxB5B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAyD;IACjF,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAoD;IAC5E,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAc;IAC1C,OAAO,CAAC,QAAQ,CAAC,uBAAuB,CAA8B;IACtE,OAAO,CAAC,QAAQ,CAAC,uBAAuB,CAA8B;IAEzD,SAAS,IAAI,OAAO,CAAC,UAAU,CAAC;WAIzB,IAAI,CACtB,UAAU,EAAE,cAAc,EAC1B,MAAM,EAAE,QAAQ,EAChB,SAAS,EAAE,MAAM,EACjB,GAAG,EAAE,eAAe,GACnB,OAAO,CAAC,YAAY,CAAC;IAMxB,OAAO;IA6HA,YAAY,CACjB,GAAG,EAAE,SAAS,CAAC,oBAAoB,CAAC,EACpC,GAAG,EAAE,aAAa,GACjB,YAAY;IAmBR,YAAY,CACjB,MAAM,EAAE,SAAS,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC,EAChD,GAAG,EAAE,aAAa,GACjB,YAAY;IAoBF,WAAW,CACtB,MAAM,EAAE,YAAY,EACpB,OAAO,EAAE,kBAAkB,GAC1B,OAAO,CAAC,mBAAmB,CAAC;IA6BlB,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,EAC7C,KAAK,EAAE,UAAU,GAAG,SAAS,EAC7B,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,0BAA0B,CAAC;IAwCzB,eAAe,CAC1B,MAAM,EAAE,YAAY,EACpB,OAAO,EAAE,mBAAmB,EAC5B,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,oBAAoB,CAAC;IAyBnB,OAAO,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC;IAM1D,QAAQ,CAAC,MAAM,EAAE,YAAY,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC;IAY1E,OAAO,CAClB,MAAM,EAAE,YAAY,EACpB,aAAa,EAAE,MAAM,EAAE,EACvB,KAAK,EAAE,UAAU,GAAG,SAAS,EAC7B,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,YAAY,EAAE,CAAC;CAY3B"}
1
+ {"version":3,"file":"driver.d.ts","sourceRoot":"","sources":["../../src/pool/driver.ts"],"names":[],"mappings":"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"}
@@ -5,7 +5,7 @@ import { parseDataInfoResource, makeDataInfoFromPColumnValues, traverseParquetPa
5
5
  import { createHash } from 'node:crypto';
6
6
  import { emptyDir, ConcurrencyLimitingExecutor, RefCountResourcePool, assertNever } from '@milaboratories/ts-helpers';
7
7
  import canonicalize from 'canonicalize';
8
- import { PFrame } from '@milaboratories/pframes-rs-node';
8
+ import { PFrameFactory } from '@milaboratories/pframes-rs-node';
9
9
  import * as fs from 'node:fs/promises';
10
10
  import * as path from 'node:path';
11
11
  import { getDebugFlags } from '../debug/index.js';
@@ -131,7 +131,7 @@ class PFrameHolder {
131
131
  })).map((item) => [canonicalize(item), item])).values(),
132
132
  ];
133
133
  try {
134
- const pFrame = new PFrame(this.spillPath, logFunc);
134
+ const pFrame = PFrameFactory.createPFrame({ spillPath: this.spillPath, logger: logFunc });
135
135
  pFrame.setDataSource(this);
136
136
  const promises = [];
137
137
  for (const column of distinctСolumns) {
@@ -181,6 +181,9 @@ class PFrameHolder {
181
181
  const path = this.blobDriver.getLocalPath((await computable.awaitStableValue(this.disposeSignal)).handle);
182
182
  return await fs.readFile(path);
183
183
  };
184
+ get parquetServer() {
185
+ return undefined;
186
+ }
184
187
  get disposeSignal() {
185
188
  return this.abortController.signal;
186
189
  }
@@ -229,7 +232,7 @@ class PFrameDriver {
229
232
  frameConcurrencyLimiter;
230
233
  tableConcurrencyLimiter;
231
234
  async pprofDump() {
232
- return await PFrame.pprofDump();
235
+ return await PFrameFactory.pprofDump();
233
236
  }
234
237
  static async init(blobDriver, logger, spillPath, ops) {
235
238
  const resolvedSpillPath = path.resolve(spillPath);
@@ -1 +1 @@
1
- {"version":3,"file":"driver.js","sources":["../../src/pool/driver.ts"],"sourcesContent":["import type { DownloadDriver } from '@milaboratories/pl-drivers';\nimport type { PFrameInternal } from '@milaboratories/pl-model-middle-layer';\nimport type { PlTreeNodeAccessor, ResourceInfo } from '@milaboratories/pl-tree';\nimport { isPlTreeNodeAccessor } from '@milaboratories/pl-tree';\nimport type { ComputableCtx, ComputableStableDefined } from '@milaboratories/computable';\nimport type {\n CalculateTableDataRequest,\n CalculateTableDataResponse,\n FindColumnsRequest,\n FindColumnsResponse,\n LocalBlobHandleAndSize,\n PColumnIdAndSpec,\n PColumnSpec,\n PFrameHandle,\n PObjectId,\n PTableColumnSpec,\n PTableHandle,\n PTableShape,\n PTableVector,\n TableRange,\n UniqueValuesRequest,\n UniqueValuesResponse,\n PFrameDriver as SdkPFrameDriver,\n PColumn,\n PFrameDef,\n JoinEntry,\n PTableDef,\n ValueType,\n PTableRecordSingleValueFilterV2,\n PTableRecordFilter,\n PColumnValues,\n DataInfo,\n PColumnValue,\n} from '@platforma-sdk/model';\nimport {\n mapPObjectData,\n mapPTableDef,\n extractAllColumns,\n mapDataInfo,\n isDataInfo,\n ensureError,\n PFrameDriverError,\n isAbortError,\n isPFrameDriverError,\n} from '@platforma-sdk/model';\nimport { LRUCache } from 'lru-cache';\nimport { allBlobs, makeDataInfoFromPColumnValues, mapBlobs, parseDataInfoResource, traverseParquetPartitionedResource } from './data';\nimport { createHash } from 'node:crypto';\nimport type { MiLogger } from '@milaboratories/ts-helpers';\nimport {\n assertNever,\n emptyDir,\n ConcurrencyLimitingExecutor,\n RefCountResourcePool,\n type PollResource,\n} from '@milaboratories/ts-helpers';\nimport canonicalize from 'canonicalize';\nimport { PFrame } from '@milaboratories/pframes-rs-node';\nimport * as fsp from 'node:fs/promises';\nimport * as path from 'node:path';\nimport { getDebugFlags } from '../debug';\n\ntype PColumnDataUniversal = PlTreeNodeAccessor | DataInfo<PlTreeNodeAccessor> | PColumnValues;\n\nfunction blobKey(res: ResourceInfo): string {\n return String(res.id);\n}\n\ntype InternalPFrameData = PFrameDef<PFrameInternal.DataInfo<ResourceInfo>>;\n\nconst valueTypes: ValueType[] = ['Int', 'Long', 'Float', 'Double', 'String', 'Bytes'] as const;\n\nfunction migrateFilters(filters: PTableRecordFilter[]): PTableRecordFilter[] {\n const filtersV1 = [];\n const filtersV2: PTableRecordSingleValueFilterV2[] = [];\n for (const filter of filters) {\n if ((filter.type as unknown) === 'bySingleColumn') {\n filtersV1.push(filter);\n filtersV2.push({\n ...filter,\n type: 'bySingleColumnV2',\n });\n } else {\n filtersV2.push(filter);\n }\n }\n if (filtersV1.length > 0) {\n const filtersV1Json = JSON.stringify(filtersV1);\n console.warn(\n `type overriten from 'bySingleColumn' to 'bySingleColumnV2' for filters: ${filtersV1Json}`,\n );\n }\n return filtersV2;\n}\n\nfunction migratePTableFilters<T>(\n def: Omit<PTableDef<T>, 'partitionFilters'> | PTableDef<T>,\n): PTableDef<T> {\n if (!('partitionFilters' in def)) {\n // For old blocks assume all axes filters to be partition filters\n return {\n ...def,\n partitionFilters: migrateFilters(def.filters.filter((f) => f.column.type === 'axis')),\n filters: migrateFilters(def.filters.filter((f) => f.column.type === 'column')),\n };\n }\n return {\n ...def,\n partitionFilters: migrateFilters(def.partitionFilters),\n filters: migrateFilters(def.filters),\n };\n}\n\nconst bigintReplacer = (_: string, v: unknown) => (typeof v === 'bigint' ? v.toString() : v);\n\nclass PTableCache {\n private readonly perFrame = new Map<PFrameHandle, LRUCache<PTableHandle, PollResource<PTableHolder>>>();\n private readonly global: LRUCache<PTableHandle, PollResource<PTableHolder>>;\n private readonly disposeListeners = new Map<PTableHandle, () => void>();\n\n constructor(\n private readonly logger: MiLogger,\n private readonly ops: PFrameDriverOps,\n ) {\n this.global = new LRUCache<PTableHandle, PollResource<PTableHolder>>({\n maxSize: this.ops.pFramesCacheMaxSize,\n dispose: (resource, key, reason) => {\n if (reason === 'evict') {\n this.perFrame.get(resource.resource.pFrame)?.delete(key);\n }\n\n if (this.perFrame.get(resource.resource.pFrame)?.size === 0) {\n this.perFrame.delete(resource.resource.pFrame);\n }\n\n const disposeListener = this.disposeListeners.get(key)!;\n this.disposeListeners.delete(key);\n resource.resource.disposeSignal.removeEventListener('abort', disposeListener);\n\n resource.unref();\n if (getDebugFlags().logPFrameRequests) {\n this.logger.info(`calculateTableData cache - removed PTable ${key}`);\n }\n },\n });\n }\n\n public cache(resource: PollResource<PTableHolder>, size: number): void {\n const key = resource.key as PTableHandle;\n if (getDebugFlags().logPFrameRequests) {\n this.logger.info(`calculateTableData cache - added PTable ${key} with size ${size}`);\n }\n\n this.global.set(key, resource, { size });\n\n let perFrame = this.perFrame.get(resource.resource.pFrame);\n if (!perFrame) {\n perFrame = new LRUCache<PTableHandle, PollResource<PTableHolder>>({\n max: this.ops.pFrameCacheMaxCount,\n dispose: (_resource, key, reason) => {\n if (reason === 'evict') {\n this.global.delete(key);\n }\n },\n });\n this.perFrame.set(resource.resource.pFrame, perFrame);\n }\n perFrame.set(key, resource);\n\n const disposeListener = () => {\n this.perFrame.get(resource.resource.pFrame)?.delete(key);\n this.global.delete(key);\n };\n this.disposeListeners.set(key, disposeListener);\n resource.resource.disposeSignal.addEventListener('abort', disposeListener);\n }\n}\n\nclass PFrameHolder implements PFrameInternal.PFrameDataSource, AsyncDisposable {\n public readonly pFramePromise: Promise<PFrameInternal.PFrameV9>;\n private readonly abortController = new AbortController();\n private readonly blobIdToResource = new Map<string, ResourceInfo>();\n private readonly blobHandleComputables = new Map<\n string,\n ComputableStableDefined<LocalBlobHandleAndSize>\n >();\n\n constructor(\n private readonly blobDriver: DownloadDriver,\n private readonly logger: MiLogger,\n private readonly spillPath: string,\n columns: InternalPFrameData,\n ) {\n const logFunc: PFrameInternal.Logger = (level, message) => this.logger[level](message);\n\n for (const column of columns) {\n for (const blob of allBlobs(column.data)) {\n this.blobIdToResource.set(blobKey(blob), blob);\n }\n }\n const distinctСolumns = [\n ...new Map(columns.map((column) => ({\n ...column,\n data: mapBlobs(column.data, blobKey),\n })).map(\n (item) => [canonicalize(item)!, item] as const,\n )).values(),\n ];\n\n try {\n const pFrame = new PFrame(this.spillPath, logFunc);\n pFrame.setDataSource(this);\n const promises: Promise<void>[] = [];\n for (const column of distinctСolumns) {\n pFrame.addColumnSpec(column.id, column.spec);\n promises.push(pFrame.setColumnData(column.id, column.data, { signal: this.disposeSignal }));\n }\n this.pFramePromise = Promise.all(promises)\n .then(() => pFrame)\n .catch((err) => {\n this.dispose();\n pFrame.dispose();\n throw new PFrameDriverError(\n `PFrame creation failed asynchronously, columns: ${JSON.stringify(distinctСolumns)}, error: ${ensureError(err)}`,\n );\n });\n } catch (err: unknown) {\n throw new PFrameDriverError(\n `PFrame creation failed synchronously, columns: ${JSON.stringify(distinctСolumns)}, error: ${ensureError(err)}`,\n );\n }\n }\n\n private getOrCreateComputableForBlob(blobId: string) {\n let computable = this.blobHandleComputables.get(blobId);\n if (computable !== undefined) return computable;\n\n const blobResource = this.blobIdToResource.get(blobId);\n if (blobResource === undefined) throw new PFrameDriverError(`Blob with id ${blobId} not found.`);\n\n // precalculation of value tree will trigger the download proecess right away\n computable = this.blobDriver.getDownloadedBlob(blobResource).withPreCalculatedValueTree();\n\n this.blobHandleComputables.set(blobId, computable);\n\n return computable;\n }\n\n public readonly preloadBlob = async (blobIds: string[]): Promise<void> => {\n const computables = blobIds.map((blobId) => this.getOrCreateComputableForBlob(blobId));\n for (const computable of computables) {\n try {\n await computable.awaitStableFullValue(this.disposeSignal);\n } catch (err: unknown) {\n if (isAbortError(err)) {\n break; // silence abort errors\n }\n throw err;\n }\n }\n };\n\n public readonly resolveBlobContent = async (blobId: string): Promise<Uint8Array> => {\n const computable = this.getOrCreateComputableForBlob(blobId);\n const path = this.blobDriver.getLocalPath((await computable.awaitStableValue(this.disposeSignal)).handle);\n return await fsp.readFile(path);\n };\n\n public get disposeSignal(): AbortSignal {\n return this.abortController.signal;\n }\n\n private dispose(): void {\n this.abortController.abort();\n for (const computable of this.blobHandleComputables.values()) computable.resetState();\n }\n\n async [Symbol.asyncDispose](): Promise<void> {\n this.dispose();\n await this.pFramePromise\n .then((pFrame) => pFrame.dispose())\n .catch(() => { /* mute error */ });\n }\n}\n\nclass PTableHolder implements AsyncDisposable {\n private readonly abortController = new AbortController();\n private readonly combinedDisposeSignal: AbortSignal;\n\n constructor(\n public readonly pFrame: PFrameHandle,\n pFrameDisposeSignal: AbortSignal,\n public readonly pTablePromise: Promise<PFrameInternal.PTableV6>,\n public readonly predecessor?: PollResource<PTableHolder>,\n ) {\n this.combinedDisposeSignal = AbortSignal.any([pFrameDisposeSignal, this.abortController.signal]);\n }\n\n public get disposeSignal(): AbortSignal {\n return this.combinedDisposeSignal;\n }\n\n async [Symbol.asyncDispose](): Promise<void> {\n this.abortController.abort();\n await this.pTablePromise\n .then((pTable) => pTable.dispose())\n .catch(() => { /* mute error */ });\n this.predecessor?.unref();\n }\n}\n\ntype FullPTableDef = {\n pFrameHandle: PFrameHandle;\n def: PTableDef<PObjectId>;\n};\n\nexport type PFrameDriverOps = {\n // Concurrency limits for `getUniqueValues` and `calculateTableData` requests\n pFrameConcurrency: number;\n // Concurrency limits for `getShape` and `getData` requests\n pTableConcurrency: number;\n // Maximum number of `calculateTableData` results cached for each PFrame\n pFrameCacheMaxCount: number;\n // Maximum size of `calculateTableData` results cached for PFrames overall.\n // The limit is soft, as the same table could be materialized with other requests and will not be deleted in such case.\n // Also each table has predeccessors, overlapping predecessors will be counted twice, so the effective limit is smaller.\n pFramesCacheMaxSize: number;\n};\n\n/**\n * Extends public and safe SDK's driver API with methods used internally in the middle\n * layer and in tests.\n */\nexport interface InternalPFrameDriver extends SdkPFrameDriver {\n /**\n * Dump active PFrames allocations in pprof format.\n * The result of this function should be saved as `profile.pb.gz`.\n * Use {@link https://pprof.me/} or {@link https://www.speedscope.app/}\n * to view the allocation flamechart.\n * @warning This method will always reject on Windows!\n */\n pprofDump(): Promise<Uint8Array>;\n\n /** Create a new PFrame */\n createPFrame(\n def: PFrameDef<PColumnDataUniversal>,\n ctx: ComputableCtx,\n ): PFrameHandle;\n\n /** Create a new PTable */\n createPTable(\n def: PTableDef<PColumn<PColumnDataUniversal>>,\n ctx: ComputableCtx,\n ): PTableHandle;\n\n /** Calculates data for the table and returns complete data representation of it */\n calculateTableData(\n handle: PFrameHandle,\n request: CalculateTableDataRequest<PObjectId>,\n range: TableRange | undefined,\n signal?: AbortSignal\n ): Promise<CalculateTableDataResponse>;\n\n /** Calculate set of unique values for a specific axis for the filtered set of records */\n getUniqueValues(\n handle: PFrameHandle,\n request: UniqueValuesRequest,\n signal?: AbortSignal\n ): Promise<UniqueValuesResponse>;\n\n /** Unified table shape */\n getShape(\n handle: PTableHandle,\n signal?: AbortSignal,\n ): Promise<PTableShape>;\n\n /**\n * Retrieve the data from the table. To retrieve only data required, it can be\n * sliced both horizontally ({@link columnIndices}) and vertically\n * ({@link range}).\n *\n * @param columnIndices unified indices of columns to be retrieved\n * @param range optionally limit the range of records to retrieve\n * */\n getData(\n handle: PTableHandle,\n columnIndices: number[],\n range: TableRange | undefined,\n signal?: AbortSignal,\n ): Promise<PTableVector[]>;\n}\n\nexport class PFrameDriver implements InternalPFrameDriver {\n private readonly pFrames: RefCountResourcePool<InternalPFrameData, PFrameHolder>;\n private readonly pTables: RefCountResourcePool<FullPTableDef, PTableHolder>;\n private readonly pTableCache: PTableCache;\n private readonly frameConcurrencyLimiter: ConcurrencyLimitingExecutor;\n private readonly tableConcurrencyLimiter: ConcurrencyLimitingExecutor;\n\n public async pprofDump(): Promise<Uint8Array> {\n return await PFrame.pprofDump();\n }\n\n public static async init(\n blobDriver: DownloadDriver,\n logger: MiLogger,\n spillPath: string,\n ops: PFrameDriverOps,\n ): Promise<PFrameDriver> {\n const resolvedSpillPath = path.resolve(spillPath);\n await emptyDir(resolvedSpillPath);\n return new PFrameDriver(blobDriver, logger, resolvedSpillPath, ops);\n }\n\n private constructor(\n private readonly blobDriver: DownloadDriver,\n private readonly logger: MiLogger,\n private readonly spillPath: string,\n ops: PFrameDriverOps,\n ) {\n const concurrencyLimiter = new ConcurrencyLimitingExecutor(ops.pFrameConcurrency);\n this.frameConcurrencyLimiter = concurrencyLimiter;\n this.tableConcurrencyLimiter = new ConcurrencyLimitingExecutor(ops.pTableConcurrency);\n\n this.pTableCache = new PTableCache(this.logger, ops);\n\n this.pFrames = new (class extends RefCountResourcePool<InternalPFrameData, PFrameHolder> {\n constructor(\n private readonly blobDriver: DownloadDriver,\n private readonly logger: MiLogger,\n private readonly spillPath: string,\n ) {\n super();\n }\n\n public acquire(params: InternalPFrameData): PollResource<PFrameHolder> {\n return super.acquire(params);\n }\n\n public getByKey(key: PFrameHandle): PFrameHolder {\n const resource = super.tryGetByKey(key);\n if (!resource) throw new PFrameDriverError(`PFrame not found, handle = ${key}`);\n return resource;\n }\n\n protected createNewResource(params: InternalPFrameData): PFrameHolder {\n if (getDebugFlags().logPFrameRequests)\n logger.info(\n `PFrame creation (pFrameHandle = ${this.calculateParamsKey(params)}): ${JSON.stringify(params, bigintReplacer)}`,\n );\n return new PFrameHolder(this.blobDriver, this.logger, this.spillPath, params);\n }\n\n protected calculateParamsKey(params: InternalPFrameData): string {\n try {\n return stableKeyFromPFrameData(params);\n } catch (err: unknown) {\n if (isPFrameDriverError(err)) throw err;\n throw new PFrameDriverError(`PFrame handle calculation failed, request: ${JSON.stringify(params, bigintReplacer)}, error: ${ensureError(err)}`);\n }\n }\n })(this.blobDriver, this.logger, this.spillPath);\n\n this.pTables = new (class extends RefCountResourcePool<\n FullPTableDef,\n PTableHolder\n > {\n constructor(\n private readonly pFrames: RefCountResourcePool<InternalPFrameData, PFrameHolder>,\n ) {\n super();\n }\n\n public getByKey(key: PTableHandle): PTableHolder {\n const resource = super.tryGetByKey(key);\n if (!resource) throw new PFrameDriverError(`PTable not found, handle = ${key}`);\n return resource;\n }\n\n protected createNewResource(params: FullPTableDef): PTableHolder {\n if (getDebugFlags().logPFrameRequests) {\n logger.info(\n `PTable creation (pTableHandle = ${this.calculateParamsKey(params)}): ${JSON.stringify(params, bigintReplacer)}`,\n );\n }\n\n const handle = params.pFrameHandle;\n const { pFramePromise, disposeSignal } = this.pFrames.getByKey(handle);\n\n // 3. Sort\n if (params.def.sorting.length > 0) {\n const predecessor = this.acquire({\n ...params,\n def: {\n ...params.def,\n sorting: [],\n },\n });\n const { resource: { pTablePromise } } = predecessor;\n const sortedTable = pTablePromise.then((pTable) => pTable.sort(params.def.sorting));\n return new PTableHolder(handle, disposeSignal, sortedTable, predecessor);\n }\n\n // 2. Filter\n if (params.def.filters.length > 0) {\n const predecessor = this.acquire({\n ...params,\n def: {\n ...params.def,\n filters: [],\n },\n });\n const { resource: { pTablePromise } } = predecessor;\n const filteredTable = pTablePromise.then((pTable) => pTable.filter(params.def.filters));\n return new PTableHolder(handle, disposeSignal, filteredTable, predecessor);\n }\n\n // 1. Join\n const table = pFramePromise.then((pFrame) => pFrame.createTable({\n src: joinEntryToInternal(params.def.src),\n filters: params.def.partitionFilters,\n }));\n return new PTableHolder(handle, disposeSignal, table);\n }\n\n protected calculateParamsKey(params: FullPTableDef): string {\n try {\n return stableKeyFromFullPTableDef(params);\n } catch (err: unknown) {\n throw new PFrameDriverError(`PTable handle calculation failed, request: ${JSON.stringify(params)}, error: ${ensureError(err)}`);\n }\n }\n })(this.pFrames);\n }\n\n //\n // Internal / Config API Methods\n //\n\n public createPFrame(\n def: PFrameDef<PColumnDataUniversal>,\n ctx: ComputableCtx,\n ): PFrameHandle {\n const internalData: InternalPFrameData = def\n .filter((c) => valueTypes.find((t) => t === c.spec.valueType))\n .map((c) =>\n mapPObjectData(c, (d) =>\n isPlTreeNodeAccessor(d)\n ? parseDataInfoResource(d)\n : isDataInfo(d)\n ? d.type === 'ParquetPartitioned'\n ? mapDataInfo(d, (a) => traverseParquetPartitionedResource(a))\n : mapDataInfo(d, (a) => a.resourceInfo)\n : makeDataInfoFromPColumnValues(c.spec, d),\n ),\n );\n const res = this.pFrames.acquire(internalData);\n ctx.addOnDestroy(res.unref);\n return res.key as PFrameHandle;\n }\n\n public createPTable(\n rawDef: PTableDef<PColumn<PColumnDataUniversal>>,\n ctx: ComputableCtx,\n ): PTableHandle {\n const def = migratePTableFilters(rawDef);\n const pFrameHandle = this.createPFrame(extractAllColumns(def.src), ctx);\n const defIds = mapPTableDef(def, (c) => c.id);\n const res = this.pTables.acquire({ def: defIds, pFrameHandle });\n if (getDebugFlags().logPFrameRequests)\n this.logger.info(\n `Create PTable call (pFrameHandle = ${pFrameHandle}; pTableHandle = ${JSON.stringify(res)}): ${JSON.stringify(\n mapPTableDef(def, (c) => c.spec),\n bigintReplacer,\n )}`,\n );\n ctx.addOnDestroy(res.unref); // in addition to pframe unref added in createPFrame above\n return res.key as PTableHandle;\n }\n\n //\n // PFrame istance methods\n //\n\n public async findColumns(\n handle: PFrameHandle,\n request: FindColumnsRequest,\n ): Promise<FindColumnsResponse> {\n const iRequest: PFrameInternal.FindColumnsRequest = {\n ...request,\n compatibleWith:\n request.compatibleWith.length !== 0\n ? [{\n axesSpec: [\n ...new Map(request.compatibleWith.map(\n (item) => [canonicalize(item)!, item] as const,\n )).values(),\n ],\n qualifications: [],\n }]\n : [],\n };\n const { pFramePromise } = this.pFrames.getByKey(handle);\n const pFrame = await pFramePromise;\n const responce = await pFrame.findColumns(iRequest);\n return {\n hits: responce.hits\n .filter((h) => // only exactly matching columns\n h.mappingVariants.length === 0\n || h.mappingVariants.some((v) =>\n v.qualifications.forHit.length === 0\n && v.qualifications.forQueries.every((q) => q.length === 0)))\n .map((h) => h.hit),\n };\n }\n\n public async getColumnSpec(handle: PFrameHandle, columnId: PObjectId): Promise<PColumnSpec> {\n const { pFramePromise } = this.pFrames.getByKey(handle);\n const pFrame = await pFramePromise;\n return await pFrame.getColumnSpec(columnId);\n }\n\n public async listColumns(handle: PFrameHandle): Promise<PColumnIdAndSpec[]> {\n const { pFramePromise } = this.pFrames.getByKey(handle);\n const pFrame = await pFramePromise;\n return await pFrame.listColumns();\n }\n\n public async calculateTableData(\n handle: PFrameHandle,\n request: CalculateTableDataRequest<PObjectId>,\n range: TableRange | undefined,\n signal?: AbortSignal,\n ): Promise<CalculateTableDataResponse> {\n if (getDebugFlags().logPFrameRequests) {\n this.logger.info(\n `Call calculateTableData, handle = ${handle}, request = ${JSON.stringify(request, bigintReplacer)}`,\n );\n }\n\n const table = this.pTables.acquire({\n pFrameHandle: handle,\n def: migratePTableFilters(request),\n });\n const { resource: { pTablePromise, disposeSignal } } = table;\n const pTable = await pTablePromise;\n const combinedSignal = AbortSignal.any([signal, disposeSignal].filter((s) => !!s));\n\n return await this.frameConcurrencyLimiter.run(async () => {\n try {\n const spec = pTable.getSpec();\n const data = await pTable.getData([...spec.keys()], {\n range,\n signal: combinedSignal,\n });\n\n const size = await pTable.getFootprint({\n withPredecessors: true,\n signal: combinedSignal,\n });\n this.pTableCache.cache(table, size);\n\n return spec.map((spec, i) => ({\n spec: spec,\n data: data[i],\n }));\n } catch (err: unknown) {\n table.unref();\n throw err;\n }\n });\n }\n\n public async getUniqueValues(\n handle: PFrameHandle,\n request: UniqueValuesRequest,\n signal?: AbortSignal,\n ): Promise<UniqueValuesResponse> {\n if (getDebugFlags().logPFrameRequests) {\n this.logger.info(\n `Call getUniqueValues, handle = ${handle}, request = ${JSON.stringify(request, bigintReplacer)}`,\n );\n }\n\n const { pFramePromise, disposeSignal } = this.pFrames.getByKey(handle);\n const pFrame = await pFramePromise;\n const combinedSignal = AbortSignal.any([signal, disposeSignal].filter((s) => !!s));\n\n return await this.frameConcurrencyLimiter.run(async () => {\n return await pFrame.getUniqueValues({\n ...request,\n filters: migrateFilters(request.filters),\n }, {\n signal: combinedSignal,\n });\n });\n }\n\n //\n // PTable istance methods\n //\n\n public async getSpec(handle: PTableHandle): Promise<PTableColumnSpec[]> {\n const { pTablePromise } = this.pTables.getByKey(handle);\n const pTable = await pTablePromise;\n return pTable.getSpec();\n }\n\n public async getShape(handle: PTableHandle, signal?: AbortSignal): Promise<PTableShape> {\n const { pTablePromise, disposeSignal } = this.pTables.getByKey(handle);\n const pTable = await pTablePromise;\n const combinedSignal = AbortSignal.any([signal, disposeSignal].filter((s) => !!s));\n\n return await this.tableConcurrencyLimiter.run(async () => {\n return await pTable.getShape({\n signal: combinedSignal,\n });\n });\n }\n\n public async getData(\n handle: PTableHandle,\n columnIndices: number[],\n range: TableRange | undefined,\n signal?: AbortSignal,\n ): Promise<PTableVector[]> {\n const { pTablePromise, disposeSignal } = this.pTables.getByKey(handle);\n const pTable = await pTablePromise;\n const combinedSignal = AbortSignal.any([signal, disposeSignal].filter((s) => !!s));\n\n return await this.tableConcurrencyLimiter.run(async () => {\n return await pTable.getData(columnIndices, {\n range,\n signal: combinedSignal,\n });\n });\n }\n}\n\nfunction joinEntryToInternal(entry: JoinEntry<PObjectId>): PFrameInternal.JoinEntryV3 {\n switch (entry.type) {\n case 'column':\n return {\n type: 'column',\n columnId: entry.column,\n };\n case 'slicedColumn':\n return {\n type: 'slicedColumn',\n columnId: entry.column,\n newId: entry.newId,\n axisFilters: entry.axisFilters,\n };\n case 'inlineColumn':\n return {\n type: 'inlineColumn',\n newId: entry.column.id,\n spec: entry.column.spec,\n dataInfo: {\n type: 'Json',\n keyLength: entry.column.spec.axesSpec.length,\n data: entry.column.data.reduce((acc, row) => {\n acc[JSON.stringify(row.key)] = row.val;\n return acc;\n }, {} as Record<string, PColumnValue>),\n },\n };\n case 'inner':\n case 'full':\n return {\n type: entry.type,\n entries: entry.entries.map((col) => joinEntryToInternal(col)),\n };\n case 'outer':\n return {\n type: 'outer',\n primary: joinEntryToInternal(entry.primary),\n secondary: entry.secondary.map((col) => joinEntryToInternal(col)),\n };\n default:\n assertNever(entry);\n }\n}\n\nfunction stableKeyFromFullPTableDef(data: FullPTableDef): string {\n const hash = createHash('sha256');\n hash.update(canonicalize(data)!);\n return hash.digest().toString('hex');\n}\n\nfunction stableKeyFromPFrameData(data: PColumn<PFrameInternal.DataInfo<ResourceInfo>>[]): string {\n const orderedData = [...data].map((column) =>\n mapPObjectData(column, (r) => {\n let result: {\n type: string;\n keyLength: number;\n payload: {\n key: string;\n value: null | number | string | [string, string];\n }[];\n };\n const type = r.type;\n switch (type) {\n case 'Json':\n result = {\n type: r.type,\n keyLength: r.keyLength,\n payload: Object.entries(r.data).map(([part, value]) => ({\n key: part,\n value,\n })),\n };\n break;\n case 'JsonPartitioned':\n result = {\n type: r.type,\n keyLength: r.partitionKeyLength,\n payload: Object.entries(r.parts).map(([part, info]) => ({\n key: part,\n value: blobKey(info),\n })),\n };\n break;\n case 'BinaryPartitioned':\n result = {\n type: r.type,\n keyLength: r.partitionKeyLength,\n payload: Object.entries(r.parts).map(([part, info]) => ({\n key: part,\n value: [blobKey(info.index), blobKey(info.values)] as const,\n })),\n };\n break;\n case 'ParquetPartitioned':\n result = {\n type: r.type,\n keyLength: r.partitionKeyLength,\n payload: Object.entries(r.parts).map(([part, info]) => ({\n key: part,\n value: info.dataDigest || [\n blobKey(info.data),\n JSON.stringify({ axes: info.axes, column: info.column }),\n ] as const,\n })),\n };\n break;\n default:\n throw new PFrameDriverError(`unsupported resource type: ${JSON.stringify(type satisfies never)}`);\n }\n result.payload.sort((lhs, rhs) => lhs.key.localeCompare(rhs.key));\n return result;\n }),\n );\n orderedData.sort((lhs, rhs) => lhs.id.localeCompare(rhs.id));\n\n const hash = createHash('sha256');\n hash.update(canonicalize(orderedData)!);\n return hash.digest().toString('hex');\n}\n"],"names":["fsp"],"mappings":"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"}
1
+ {"version":3,"file":"driver.js","sources":["../../src/pool/driver.ts"],"sourcesContent":["import type { DownloadDriver } from '@milaboratories/pl-drivers';\nimport type { PFrameInternal } from '@milaboratories/pl-model-middle-layer';\nimport type { PlTreeNodeAccessor, ResourceInfo } from '@milaboratories/pl-tree';\nimport { isPlTreeNodeAccessor } from '@milaboratories/pl-tree';\nimport type { ComputableCtx, ComputableStableDefined } from '@milaboratories/computable';\nimport type {\n CalculateTableDataRequest,\n CalculateTableDataResponse,\n FindColumnsRequest,\n FindColumnsResponse,\n LocalBlobHandleAndSize,\n PColumnIdAndSpec,\n PColumnSpec,\n PFrameHandle,\n PObjectId,\n PTableColumnSpec,\n PTableHandle,\n PTableShape,\n PTableVector,\n TableRange,\n UniqueValuesRequest,\n UniqueValuesResponse,\n PFrameDriver as SdkPFrameDriver,\n PColumn,\n PFrameDef,\n JoinEntry,\n PTableDef,\n ValueType,\n PTableRecordSingleValueFilterV2,\n PTableRecordFilter,\n PColumnValues,\n DataInfo,\n PColumnValue,\n} from '@platforma-sdk/model';\nimport {\n mapPObjectData,\n mapPTableDef,\n extractAllColumns,\n mapDataInfo,\n isDataInfo,\n ensureError,\n PFrameDriverError,\n isAbortError,\n isPFrameDriverError,\n} from '@platforma-sdk/model';\nimport { LRUCache } from 'lru-cache';\nimport { allBlobs, makeDataInfoFromPColumnValues, mapBlobs, parseDataInfoResource, traverseParquetPartitionedResource } from './data';\nimport { createHash } from 'node:crypto';\nimport type { MiLogger } from '@milaboratories/ts-helpers';\nimport {\n assertNever,\n emptyDir,\n ConcurrencyLimitingExecutor,\n RefCountResourcePool,\n type PollResource,\n} from '@milaboratories/ts-helpers';\nimport canonicalize from 'canonicalize';\nimport { PFrameFactory } from '@milaboratories/pframes-rs-node';\nimport * as fsp from 'node:fs/promises';\nimport * as path from 'node:path';\nimport { getDebugFlags } from '../debug';\n\ntype PColumnDataUniversal = PlTreeNodeAccessor | DataInfo<PlTreeNodeAccessor> | PColumnValues;\n\nfunction blobKey(res: ResourceInfo): string {\n return String(res.id);\n}\n\ntype InternalPFrameData = PFrameDef<PFrameInternal.DataInfo<ResourceInfo>>;\n\nconst valueTypes: ValueType[] = ['Int', 'Long', 'Float', 'Double', 'String', 'Bytes'] as const;\n\nfunction migrateFilters(filters: PTableRecordFilter[]): PTableRecordFilter[] {\n const filtersV1 = [];\n const filtersV2: PTableRecordSingleValueFilterV2[] = [];\n for (const filter of filters) {\n if ((filter.type as unknown) === 'bySingleColumn') {\n filtersV1.push(filter);\n filtersV2.push({\n ...filter,\n type: 'bySingleColumnV2',\n });\n } else {\n filtersV2.push(filter);\n }\n }\n if (filtersV1.length > 0) {\n const filtersV1Json = JSON.stringify(filtersV1);\n console.warn(\n `type overriten from 'bySingleColumn' to 'bySingleColumnV2' for filters: ${filtersV1Json}`,\n );\n }\n return filtersV2;\n}\n\nfunction migratePTableFilters<T>(\n def: Omit<PTableDef<T>, 'partitionFilters'> | PTableDef<T>,\n): PTableDef<T> {\n if (!('partitionFilters' in def)) {\n // For old blocks assume all axes filters to be partition filters\n return {\n ...def,\n partitionFilters: migrateFilters(def.filters.filter((f) => f.column.type === 'axis')),\n filters: migrateFilters(def.filters.filter((f) => f.column.type === 'column')),\n };\n }\n return {\n ...def,\n partitionFilters: migrateFilters(def.partitionFilters),\n filters: migrateFilters(def.filters),\n };\n}\n\nconst bigintReplacer = (_: string, v: unknown) => (typeof v === 'bigint' ? v.toString() : v);\n\nclass PTableCache {\n private readonly perFrame = new Map<PFrameHandle, LRUCache<PTableHandle, PollResource<PTableHolder>>>();\n private readonly global: LRUCache<PTableHandle, PollResource<PTableHolder>>;\n private readonly disposeListeners = new Map<PTableHandle, () => void>();\n\n constructor(\n private readonly logger: MiLogger,\n private readonly ops: PFrameDriverOps,\n ) {\n this.global = new LRUCache<PTableHandle, PollResource<PTableHolder>>({\n maxSize: this.ops.pFramesCacheMaxSize,\n dispose: (resource, key, reason) => {\n if (reason === 'evict') {\n this.perFrame.get(resource.resource.pFrame)?.delete(key);\n }\n\n if (this.perFrame.get(resource.resource.pFrame)?.size === 0) {\n this.perFrame.delete(resource.resource.pFrame);\n }\n\n const disposeListener = this.disposeListeners.get(key)!;\n this.disposeListeners.delete(key);\n resource.resource.disposeSignal.removeEventListener('abort', disposeListener);\n\n resource.unref();\n if (getDebugFlags().logPFrameRequests) {\n this.logger.info(`calculateTableData cache - removed PTable ${key}`);\n }\n },\n });\n }\n\n public cache(resource: PollResource<PTableHolder>, size: number): void {\n const key = resource.key as PTableHandle;\n if (getDebugFlags().logPFrameRequests) {\n this.logger.info(`calculateTableData cache - added PTable ${key} with size ${size}`);\n }\n\n this.global.set(key, resource, { size });\n\n let perFrame = this.perFrame.get(resource.resource.pFrame);\n if (!perFrame) {\n perFrame = new LRUCache<PTableHandle, PollResource<PTableHolder>>({\n max: this.ops.pFrameCacheMaxCount,\n dispose: (_resource, key, reason) => {\n if (reason === 'evict') {\n this.global.delete(key);\n }\n },\n });\n this.perFrame.set(resource.resource.pFrame, perFrame);\n }\n perFrame.set(key, resource);\n\n const disposeListener = () => {\n this.perFrame.get(resource.resource.pFrame)?.delete(key);\n this.global.delete(key);\n };\n this.disposeListeners.set(key, disposeListener);\n resource.resource.disposeSignal.addEventListener('abort', disposeListener);\n }\n}\n\nclass PFrameHolder implements PFrameInternal.PFrameDataSource, AsyncDisposable {\n public readonly pFramePromise: Promise<PFrameInternal.PFrameV10>;\n private readonly abortController = new AbortController();\n private readonly blobIdToResource = new Map<string, ResourceInfo>();\n private readonly blobHandleComputables = new Map<\n string,\n ComputableStableDefined<LocalBlobHandleAndSize>\n >();\n\n constructor(\n private readonly blobDriver: DownloadDriver,\n private readonly logger: MiLogger,\n private readonly spillPath: string,\n columns: InternalPFrameData,\n ) {\n const logFunc: PFrameInternal.Logger = (level, message) => this.logger[level](message);\n\n for (const column of columns) {\n for (const blob of allBlobs(column.data)) {\n this.blobIdToResource.set(blobKey(blob), blob);\n }\n }\n const distinctСolumns = [\n ...new Map(columns.map((column) => ({\n ...column,\n data: mapBlobs(column.data, blobKey),\n })).map(\n (item) => [canonicalize(item)!, item] as const,\n )).values(),\n ];\n\n try {\n const pFrame = PFrameFactory.createPFrame({ spillPath: this.spillPath, logger: logFunc });\n pFrame.setDataSource(this);\n const promises: Promise<void>[] = [];\n for (const column of distinctСolumns) {\n pFrame.addColumnSpec(column.id, column.spec);\n promises.push(pFrame.setColumnData(column.id, column.data, { signal: this.disposeSignal }));\n }\n this.pFramePromise = Promise.all(promises)\n .then(() => pFrame)\n .catch((err) => {\n this.dispose();\n pFrame.dispose();\n throw new PFrameDriverError(\n `PFrame creation failed asynchronously, columns: ${JSON.stringify(distinctСolumns)}, error: ${ensureError(err)}`,\n );\n });\n } catch (err: unknown) {\n throw new PFrameDriverError(\n `PFrame creation failed synchronously, columns: ${JSON.stringify(distinctСolumns)}, error: ${ensureError(err)}`,\n );\n }\n }\n\n private getOrCreateComputableForBlob(blobId: string) {\n let computable = this.blobHandleComputables.get(blobId);\n if (computable !== undefined) return computable;\n\n const blobResource = this.blobIdToResource.get(blobId);\n if (blobResource === undefined) throw new PFrameDriverError(`Blob with id ${blobId} not found.`);\n\n // precalculation of value tree will trigger the download proecess right away\n computable = this.blobDriver.getDownloadedBlob(blobResource).withPreCalculatedValueTree();\n\n this.blobHandleComputables.set(blobId, computable);\n\n return computable;\n }\n\n public readonly preloadBlob = async (blobIds: string[]): Promise<void> => {\n const computables = blobIds.map((blobId) => this.getOrCreateComputableForBlob(blobId));\n for (const computable of computables) {\n try {\n await computable.awaitStableFullValue(this.disposeSignal);\n } catch (err: unknown) {\n if (isAbortError(err)) {\n break; // silence abort errors\n }\n throw err;\n }\n }\n };\n\n public readonly resolveBlobContent = async (blobId: string): Promise<Uint8Array> => {\n const computable = this.getOrCreateComputableForBlob(blobId);\n const path = this.blobDriver.getLocalPath((await computable.awaitStableValue(this.disposeSignal)).handle);\n return await fsp.readFile(path);\n };\n\n public get parquetServer(): PFrameInternal.ParquetServerConfig | undefined {\n return undefined;\n }\n\n public get disposeSignal(): AbortSignal {\n return this.abortController.signal;\n }\n\n private dispose(): void {\n this.abortController.abort();\n for (const computable of this.blobHandleComputables.values()) computable.resetState();\n }\n\n async [Symbol.asyncDispose](): Promise<void> {\n this.dispose();\n await this.pFramePromise\n .then((pFrame) => pFrame.dispose())\n .catch(() => { /* mute error */ });\n }\n}\n\nclass PTableHolder implements AsyncDisposable {\n private readonly abortController = new AbortController();\n private readonly combinedDisposeSignal: AbortSignal;\n\n constructor(\n public readonly pFrame: PFrameHandle,\n pFrameDisposeSignal: AbortSignal,\n public readonly pTablePromise: Promise<PFrameInternal.PTableV7>,\n public readonly predecessor?: PollResource<PTableHolder>,\n ) {\n this.combinedDisposeSignal = AbortSignal.any([pFrameDisposeSignal, this.abortController.signal]);\n }\n\n public get disposeSignal(): AbortSignal {\n return this.combinedDisposeSignal;\n }\n\n async [Symbol.asyncDispose](): Promise<void> {\n this.abortController.abort();\n await this.pTablePromise\n .then((pTable) => pTable.dispose())\n .catch(() => { /* mute error */ });\n this.predecessor?.unref();\n }\n}\n\ntype FullPTableDef = {\n pFrameHandle: PFrameHandle;\n def: PTableDef<PObjectId>;\n};\n\nexport type PFrameDriverOps = {\n // Concurrency limits for `getUniqueValues` and `calculateTableData` requests\n pFrameConcurrency: number;\n // Concurrency limits for `getShape` and `getData` requests\n pTableConcurrency: number;\n // Maximum number of `calculateTableData` results cached for each PFrame\n pFrameCacheMaxCount: number;\n // Maximum size of `calculateTableData` results cached for PFrames overall.\n // The limit is soft, as the same table could be materialized with other requests and will not be deleted in such case.\n // Also each table has predeccessors, overlapping predecessors will be counted twice, so the effective limit is smaller.\n pFramesCacheMaxSize: number;\n};\n\n/**\n * Extends public and safe SDK's driver API with methods used internally in the middle\n * layer and in tests.\n */\nexport interface InternalPFrameDriver extends SdkPFrameDriver {\n /**\n * Dump active PFrames allocations in pprof format.\n * The result of this function should be saved as `profile.pb.gz`.\n * Use {@link https://pprof.me/} or {@link https://www.speedscope.app/}\n * to view the allocation flamechart.\n * @warning This method will always reject on Windows!\n */\n pprofDump(): Promise<Uint8Array>;\n\n /** Create a new PFrame */\n createPFrame(\n def: PFrameDef<PColumnDataUniversal>,\n ctx: ComputableCtx,\n ): PFrameHandle;\n\n /** Create a new PTable */\n createPTable(\n def: PTableDef<PColumn<PColumnDataUniversal>>,\n ctx: ComputableCtx,\n ): PTableHandle;\n\n /** Calculates data for the table and returns complete data representation of it */\n calculateTableData(\n handle: PFrameHandle,\n request: CalculateTableDataRequest<PObjectId>,\n range: TableRange | undefined,\n signal?: AbortSignal\n ): Promise<CalculateTableDataResponse>;\n\n /** Calculate set of unique values for a specific axis for the filtered set of records */\n getUniqueValues(\n handle: PFrameHandle,\n request: UniqueValuesRequest,\n signal?: AbortSignal\n ): Promise<UniqueValuesResponse>;\n\n /** Unified table shape */\n getShape(\n handle: PTableHandle,\n signal?: AbortSignal,\n ): Promise<PTableShape>;\n\n /**\n * Retrieve the data from the table. To retrieve only data required, it can be\n * sliced both horizontally ({@link columnIndices}) and vertically\n * ({@link range}).\n *\n * @param columnIndices unified indices of columns to be retrieved\n * @param range optionally limit the range of records to retrieve\n * */\n getData(\n handle: PTableHandle,\n columnIndices: number[],\n range: TableRange | undefined,\n signal?: AbortSignal,\n ): Promise<PTableVector[]>;\n}\n\nexport class PFrameDriver implements InternalPFrameDriver {\n private readonly pFrames: RefCountResourcePool<InternalPFrameData, PFrameHolder>;\n private readonly pTables: RefCountResourcePool<FullPTableDef, PTableHolder>;\n private readonly pTableCache: PTableCache;\n private readonly frameConcurrencyLimiter: ConcurrencyLimitingExecutor;\n private readonly tableConcurrencyLimiter: ConcurrencyLimitingExecutor;\n\n public async pprofDump(): Promise<Uint8Array> {\n return await PFrameFactory.pprofDump();\n }\n\n public static async init(\n blobDriver: DownloadDriver,\n logger: MiLogger,\n spillPath: string,\n ops: PFrameDriverOps,\n ): Promise<PFrameDriver> {\n const resolvedSpillPath = path.resolve(spillPath);\n await emptyDir(resolvedSpillPath);\n return new PFrameDriver(blobDriver, logger, resolvedSpillPath, ops);\n }\n\n private constructor(\n private readonly blobDriver: DownloadDriver,\n private readonly logger: MiLogger,\n private readonly spillPath: string,\n ops: PFrameDriverOps,\n ) {\n const concurrencyLimiter = new ConcurrencyLimitingExecutor(ops.pFrameConcurrency);\n this.frameConcurrencyLimiter = concurrencyLimiter;\n this.tableConcurrencyLimiter = new ConcurrencyLimitingExecutor(ops.pTableConcurrency);\n\n this.pTableCache = new PTableCache(this.logger, ops);\n\n this.pFrames = new (class extends RefCountResourcePool<InternalPFrameData, PFrameHolder> {\n constructor(\n private readonly blobDriver: DownloadDriver,\n private readonly logger: MiLogger,\n private readonly spillPath: string,\n ) {\n super();\n }\n\n public acquire(params: InternalPFrameData): PollResource<PFrameHolder> {\n return super.acquire(params);\n }\n\n public getByKey(key: PFrameHandle): PFrameHolder {\n const resource = super.tryGetByKey(key);\n if (!resource) throw new PFrameDriverError(`PFrame not found, handle = ${key}`);\n return resource;\n }\n\n protected createNewResource(params: InternalPFrameData): PFrameHolder {\n if (getDebugFlags().logPFrameRequests)\n logger.info(\n `PFrame creation (pFrameHandle = ${this.calculateParamsKey(params)}): ${JSON.stringify(params, bigintReplacer)}`,\n );\n return new PFrameHolder(this.blobDriver, this.logger, this.spillPath, params);\n }\n\n protected calculateParamsKey(params: InternalPFrameData): string {\n try {\n return stableKeyFromPFrameData(params);\n } catch (err: unknown) {\n if (isPFrameDriverError(err)) throw err;\n throw new PFrameDriverError(`PFrame handle calculation failed, request: ${JSON.stringify(params, bigintReplacer)}, error: ${ensureError(err)}`);\n }\n }\n })(this.blobDriver, this.logger, this.spillPath);\n\n this.pTables = new (class extends RefCountResourcePool<\n FullPTableDef,\n PTableHolder\n > {\n constructor(\n private readonly pFrames: RefCountResourcePool<InternalPFrameData, PFrameHolder>,\n ) {\n super();\n }\n\n public getByKey(key: PTableHandle): PTableHolder {\n const resource = super.tryGetByKey(key);\n if (!resource) throw new PFrameDriverError(`PTable not found, handle = ${key}`);\n return resource;\n }\n\n protected createNewResource(params: FullPTableDef): PTableHolder {\n if (getDebugFlags().logPFrameRequests) {\n logger.info(\n `PTable creation (pTableHandle = ${this.calculateParamsKey(params)}): ${JSON.stringify(params, bigintReplacer)}`,\n );\n }\n\n const handle = params.pFrameHandle;\n const { pFramePromise, disposeSignal } = this.pFrames.getByKey(handle);\n\n // 3. Sort\n if (params.def.sorting.length > 0) {\n const predecessor = this.acquire({\n ...params,\n def: {\n ...params.def,\n sorting: [],\n },\n });\n const { resource: { pTablePromise } } = predecessor;\n const sortedTable = pTablePromise.then((pTable) => pTable.sort(params.def.sorting));\n return new PTableHolder(handle, disposeSignal, sortedTable, predecessor);\n }\n\n // 2. Filter\n if (params.def.filters.length > 0) {\n const predecessor = this.acquire({\n ...params,\n def: {\n ...params.def,\n filters: [],\n },\n });\n const { resource: { pTablePromise } } = predecessor;\n const filteredTable = pTablePromise.then((pTable) => pTable.filter(params.def.filters));\n return new PTableHolder(handle, disposeSignal, filteredTable, predecessor);\n }\n\n // 1. Join\n const table = pFramePromise.then((pFrame) => pFrame.createTable({\n src: joinEntryToInternal(params.def.src),\n filters: params.def.partitionFilters,\n }));\n return new PTableHolder(handle, disposeSignal, table);\n }\n\n protected calculateParamsKey(params: FullPTableDef): string {\n try {\n return stableKeyFromFullPTableDef(params);\n } catch (err: unknown) {\n throw new PFrameDriverError(`PTable handle calculation failed, request: ${JSON.stringify(params)}, error: ${ensureError(err)}`);\n }\n }\n })(this.pFrames);\n }\n\n //\n // Internal / Config API Methods\n //\n\n public createPFrame(\n def: PFrameDef<PColumnDataUniversal>,\n ctx: ComputableCtx,\n ): PFrameHandle {\n const internalData: InternalPFrameData = def\n .filter((c) => valueTypes.find((t) => t === c.spec.valueType))\n .map((c) =>\n mapPObjectData(c, (d) =>\n isPlTreeNodeAccessor(d)\n ? parseDataInfoResource(d)\n : isDataInfo(d)\n ? d.type === 'ParquetPartitioned'\n ? mapDataInfo(d, (a) => traverseParquetPartitionedResource(a))\n : mapDataInfo(d, (a) => a.resourceInfo)\n : makeDataInfoFromPColumnValues(c.spec, d),\n ),\n );\n const res = this.pFrames.acquire(internalData);\n ctx.addOnDestroy(res.unref);\n return res.key as PFrameHandle;\n }\n\n public createPTable(\n rawDef: PTableDef<PColumn<PColumnDataUniversal>>,\n ctx: ComputableCtx,\n ): PTableHandle {\n const def = migratePTableFilters(rawDef);\n const pFrameHandle = this.createPFrame(extractAllColumns(def.src), ctx);\n const defIds = mapPTableDef(def, (c) => c.id);\n const res = this.pTables.acquire({ def: defIds, pFrameHandle });\n if (getDebugFlags().logPFrameRequests)\n this.logger.info(\n `Create PTable call (pFrameHandle = ${pFrameHandle}; pTableHandle = ${JSON.stringify(res)}): ${JSON.stringify(\n mapPTableDef(def, (c) => c.spec),\n bigintReplacer,\n )}`,\n );\n ctx.addOnDestroy(res.unref); // in addition to pframe unref added in createPFrame above\n return res.key as PTableHandle;\n }\n\n //\n // PFrame istance methods\n //\n\n public async findColumns(\n handle: PFrameHandle,\n request: FindColumnsRequest,\n ): Promise<FindColumnsResponse> {\n const iRequest: PFrameInternal.FindColumnsRequest = {\n ...request,\n compatibleWith:\n request.compatibleWith.length !== 0\n ? [{\n axesSpec: [\n ...new Map(request.compatibleWith.map(\n (item) => [canonicalize(item)!, item] as const,\n )).values(),\n ],\n qualifications: [],\n }]\n : [],\n };\n const { pFramePromise } = this.pFrames.getByKey(handle);\n const pFrame = await pFramePromise;\n const responce = await pFrame.findColumns(iRequest);\n return {\n hits: responce.hits\n .filter((h) => // only exactly matching columns\n h.mappingVariants.length === 0\n || h.mappingVariants.some((v) =>\n v.qualifications.forHit.length === 0\n && v.qualifications.forQueries.every((q) => q.length === 0)))\n .map((h) => h.hit),\n };\n }\n\n public async getColumnSpec(handle: PFrameHandle, columnId: PObjectId): Promise<PColumnSpec> {\n const { pFramePromise } = this.pFrames.getByKey(handle);\n const pFrame = await pFramePromise;\n return await pFrame.getColumnSpec(columnId);\n }\n\n public async listColumns(handle: PFrameHandle): Promise<PColumnIdAndSpec[]> {\n const { pFramePromise } = this.pFrames.getByKey(handle);\n const pFrame = await pFramePromise;\n return await pFrame.listColumns();\n }\n\n public async calculateTableData(\n handle: PFrameHandle,\n request: CalculateTableDataRequest<PObjectId>,\n range: TableRange | undefined,\n signal?: AbortSignal,\n ): Promise<CalculateTableDataResponse> {\n if (getDebugFlags().logPFrameRequests) {\n this.logger.info(\n `Call calculateTableData, handle = ${handle}, request = ${JSON.stringify(request, bigintReplacer)}`,\n );\n }\n\n const table = this.pTables.acquire({\n pFrameHandle: handle,\n def: migratePTableFilters(request),\n });\n const { resource: { pTablePromise, disposeSignal } } = table;\n const pTable = await pTablePromise;\n const combinedSignal = AbortSignal.any([signal, disposeSignal].filter((s) => !!s));\n\n return await this.frameConcurrencyLimiter.run(async () => {\n try {\n const spec = pTable.getSpec();\n const data = await pTable.getData([...spec.keys()], {\n range,\n signal: combinedSignal,\n });\n\n const size = await pTable.getFootprint({\n withPredecessors: true,\n signal: combinedSignal,\n });\n this.pTableCache.cache(table, size);\n\n return spec.map((spec, i) => ({\n spec: spec,\n data: data[i],\n }));\n } catch (err: unknown) {\n table.unref();\n throw err;\n }\n });\n }\n\n public async getUniqueValues(\n handle: PFrameHandle,\n request: UniqueValuesRequest,\n signal?: AbortSignal,\n ): Promise<UniqueValuesResponse> {\n if (getDebugFlags().logPFrameRequests) {\n this.logger.info(\n `Call getUniqueValues, handle = ${handle}, request = ${JSON.stringify(request, bigintReplacer)}`,\n );\n }\n\n const { pFramePromise, disposeSignal } = this.pFrames.getByKey(handle);\n const pFrame = await pFramePromise;\n const combinedSignal = AbortSignal.any([signal, disposeSignal].filter((s) => !!s));\n\n return await this.frameConcurrencyLimiter.run(async () => {\n return await pFrame.getUniqueValues({\n ...request,\n filters: migrateFilters(request.filters),\n }, {\n signal: combinedSignal,\n });\n });\n }\n\n //\n // PTable istance methods\n //\n\n public async getSpec(handle: PTableHandle): Promise<PTableColumnSpec[]> {\n const { pTablePromise } = this.pTables.getByKey(handle);\n const pTable = await pTablePromise;\n return pTable.getSpec();\n }\n\n public async getShape(handle: PTableHandle, signal?: AbortSignal): Promise<PTableShape> {\n const { pTablePromise, disposeSignal } = this.pTables.getByKey(handle);\n const pTable = await pTablePromise;\n const combinedSignal = AbortSignal.any([signal, disposeSignal].filter((s) => !!s));\n\n return await this.tableConcurrencyLimiter.run(async () => {\n return await pTable.getShape({\n signal: combinedSignal,\n });\n });\n }\n\n public async getData(\n handle: PTableHandle,\n columnIndices: number[],\n range: TableRange | undefined,\n signal?: AbortSignal,\n ): Promise<PTableVector[]> {\n const { pTablePromise, disposeSignal } = this.pTables.getByKey(handle);\n const pTable = await pTablePromise;\n const combinedSignal = AbortSignal.any([signal, disposeSignal].filter((s) => !!s));\n\n return await this.tableConcurrencyLimiter.run(async () => {\n return await pTable.getData(columnIndices, {\n range,\n signal: combinedSignal,\n });\n });\n }\n}\n\nfunction joinEntryToInternal(entry: JoinEntry<PObjectId>): PFrameInternal.JoinEntryV3 {\n switch (entry.type) {\n case 'column':\n return {\n type: 'column',\n columnId: entry.column,\n };\n case 'slicedColumn':\n return {\n type: 'slicedColumn',\n columnId: entry.column,\n newId: entry.newId,\n axisFilters: entry.axisFilters,\n };\n case 'inlineColumn':\n return {\n type: 'inlineColumn',\n newId: entry.column.id,\n spec: entry.column.spec,\n dataInfo: {\n type: 'Json',\n keyLength: entry.column.spec.axesSpec.length,\n data: entry.column.data.reduce((acc, row) => {\n acc[JSON.stringify(row.key)] = row.val;\n return acc;\n }, {} as Record<string, PColumnValue>),\n },\n };\n case 'inner':\n case 'full':\n return {\n type: entry.type,\n entries: entry.entries.map((col) => joinEntryToInternal(col)),\n };\n case 'outer':\n return {\n type: 'outer',\n primary: joinEntryToInternal(entry.primary),\n secondary: entry.secondary.map((col) => joinEntryToInternal(col)),\n };\n default:\n assertNever(entry);\n }\n}\n\nfunction stableKeyFromFullPTableDef(data: FullPTableDef): string {\n const hash = createHash('sha256');\n hash.update(canonicalize(data)!);\n return hash.digest().toString('hex');\n}\n\nfunction stableKeyFromPFrameData(data: PColumn<PFrameInternal.DataInfo<ResourceInfo>>[]): string {\n const orderedData = [...data].map((column) =>\n mapPObjectData(column, (r) => {\n let result: {\n type: string;\n keyLength: number;\n payload: {\n key: string;\n value: null | number | string | [string, string];\n }[];\n };\n const type = r.type;\n switch (type) {\n case 'Json':\n result = {\n type: r.type,\n keyLength: r.keyLength,\n payload: Object.entries(r.data).map(([part, value]) => ({\n key: part,\n value,\n })),\n };\n break;\n case 'JsonPartitioned':\n result = {\n type: r.type,\n keyLength: r.partitionKeyLength,\n payload: Object.entries(r.parts).map(([part, info]) => ({\n key: part,\n value: blobKey(info),\n })),\n };\n break;\n case 'BinaryPartitioned':\n result = {\n type: r.type,\n keyLength: r.partitionKeyLength,\n payload: Object.entries(r.parts).map(([part, info]) => ({\n key: part,\n value: [blobKey(info.index), blobKey(info.values)] as const,\n })),\n };\n break;\n case 'ParquetPartitioned':\n result = {\n type: r.type,\n keyLength: r.partitionKeyLength,\n payload: Object.entries(r.parts).map(([part, info]) => ({\n key: part,\n value: info.dataDigest || [\n blobKey(info.data),\n JSON.stringify({ axes: info.axes, column: info.column }),\n ] as const,\n })),\n };\n break;\n default:\n throw new PFrameDriverError(`unsupported resource type: ${JSON.stringify(type satisfies never)}`);\n }\n result.payload.sort((lhs, rhs) => lhs.key.localeCompare(rhs.key));\n return result;\n }),\n );\n orderedData.sort((lhs, rhs) => lhs.id.localeCompare(rhs.id));\n\n const hash = createHash('sha256');\n hash.update(canonicalize(orderedData)!);\n return hash.digest().toString('hex');\n}\n"],"names":["fsp"],"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.42.15",
3
+ "version": "1.42.17",
4
4
  "description": "Pl Middle Layer",
5
5
  "engines": {
6
6
  "node": ">=20.16.0"
@@ -16,7 +16,7 @@
16
16
  "keywords": [],
17
17
  "license": "UNLICENSED",
18
18
  "dependencies": {
19
- "@milaboratories/pframes-rs-node": "1.0.57",
19
+ "@milaboratories/pframes-rs-node": "1.0.66",
20
20
  "canonicalize": "~2.1.0",
21
21
  "denque": "^2.1.0",
22
22
  "lru-cache": "^11.1.0",
@@ -28,19 +28,19 @@
28
28
  "remeda": "^2.28.0",
29
29
  "@milaboratories/computable": "2.6.6",
30
30
  "@milaboratories/pl-http": "1.1.7",
31
+ "@platforma-sdk/block-tools": "2.5.88",
31
32
  "@milaboratories/resolve-helper": "1.1.1",
32
- "@platforma-sdk/block-tools": "2.5.86",
33
33
  "@milaboratories/pl-client": "2.11.12",
34
- "@milaboratories/pl-model-common": "1.19.13",
35
- "@milaboratories/pl-drivers": "1.10.6",
34
+ "@milaboratories/pl-drivers": "1.10.7",
35
+ "@milaboratories/pl-model-common": "1.19.14",
36
+ "@milaboratories/pl-model-middle-layer": "1.8.17",
36
37
  "@milaboratories/pl-tree": "1.7.8",
37
- "@milaboratories/pl-model-middle-layer": "1.8.15",
38
38
  "@milaboratories/pl-model-backend": "1.1.5",
39
- "@platforma-sdk/model": "1.42.35",
40
- "@platforma-sdk/workflow-tengo": "5.1.1",
39
+ "@platforma-sdk/model": "1.42.36",
41
40
  "@milaboratories/ts-helpers": "1.4.6",
42
- "@milaboratories/pl-config": "1.7.2",
43
41
  "@milaboratories/pl-errors": "1.1.19",
42
+ "@milaboratories/pl-config": "1.7.2",
43
+ "@platforma-sdk/workflow-tengo": "5.1.1",
44
44
  "@milaboratories/pl-deployments": "2.5.3"
45
45
  },
46
46
  "devDependencies": {
@@ -50,8 +50,8 @@
50
50
  "vitest": "^2.1.9",
51
51
  "@types/node": "~20.16.15",
52
52
  "@milaboratories/build-configs": "1.0.8",
53
- "@milaboratories/ts-builder": "1.0.5",
54
53
  "@milaboratories/eslint-config": "1.0.4",
54
+ "@milaboratories/ts-builder": "1.0.5",
55
55
  "@milaboratories/ts-configs": "1.0.6"
56
56
  },
57
57
  "scripts": {
@@ -55,7 +55,7 @@ import {
55
55
  type PollResource,
56
56
  } from '@milaboratories/ts-helpers';
57
57
  import canonicalize from 'canonicalize';
58
- import { PFrame } from '@milaboratories/pframes-rs-node';
58
+ import { PFrameFactory } from '@milaboratories/pframes-rs-node';
59
59
  import * as fsp from 'node:fs/promises';
60
60
  import * as path from 'node:path';
61
61
  import { getDebugFlags } from '../debug';
@@ -177,7 +177,7 @@ class PTableCache {
177
177
  }
178
178
 
179
179
  class PFrameHolder implements PFrameInternal.PFrameDataSource, AsyncDisposable {
180
- public readonly pFramePromise: Promise<PFrameInternal.PFrameV9>;
180
+ public readonly pFramePromise: Promise<PFrameInternal.PFrameV10>;
181
181
  private readonly abortController = new AbortController();
182
182
  private readonly blobIdToResource = new Map<string, ResourceInfo>();
183
183
  private readonly blobHandleComputables = new Map<
@@ -208,7 +208,7 @@ class PFrameHolder implements PFrameInternal.PFrameDataSource, AsyncDisposable {
208
208
  ];
209
209
 
210
210
  try {
211
- const pFrame = new PFrame(this.spillPath, logFunc);
211
+ const pFrame = PFrameFactory.createPFrame({ spillPath: this.spillPath, logger: logFunc });
212
212
  pFrame.setDataSource(this);
213
213
  const promises: Promise<void>[] = [];
214
214
  for (const column of distinctСolumns) {
@@ -266,6 +266,10 @@ class PFrameHolder implements PFrameInternal.PFrameDataSource, AsyncDisposable {
266
266
  return await fsp.readFile(path);
267
267
  };
268
268
 
269
+ public get parquetServer(): PFrameInternal.ParquetServerConfig | undefined {
270
+ return undefined;
271
+ }
272
+
269
273
  public get disposeSignal(): AbortSignal {
270
274
  return this.abortController.signal;
271
275
  }
@@ -290,7 +294,7 @@ class PTableHolder implements AsyncDisposable {
290
294
  constructor(
291
295
  public readonly pFrame: PFrameHandle,
292
296
  pFrameDisposeSignal: AbortSignal,
293
- public readonly pTablePromise: Promise<PFrameInternal.PTableV6>,
297
+ public readonly pTablePromise: Promise<PFrameInternal.PTableV7>,
294
298
  public readonly predecessor?: PollResource<PTableHolder>,
295
299
  ) {
296
300
  this.combinedDisposeSignal = AbortSignal.any([pFrameDisposeSignal, this.abortController.signal]);
@@ -398,7 +402,7 @@ export class PFrameDriver implements InternalPFrameDriver {
398
402
  private readonly tableConcurrencyLimiter: ConcurrencyLimitingExecutor;
399
403
 
400
404
  public async pprofDump(): Promise<Uint8Array> {
401
- return await PFrame.pprofDump();
405
+ return await PFrameFactory.pprofDump();
402
406
  }
403
407
 
404
408
  public static async init(