hcengineering/platform · critical · PlatformError
Low level storage is not available
Error message
Low level storage is not available
What it means
wrapPipeline builds a backup-aware pipeline client and needs pipeline.context.lowLevelStorage to construct BackupClientOps. If the pipeline context was created without low-level storage, a PlatformError with 'Low level storage is not available' is thrown.
Source
Thrown at foundations/server/packages/core/src/utils.ts:288
wsIds: WorkspaceIds,
doBroadcast: boolean = false
): Client & BackupClient {
const contextData = new SessionDataImpl(
systemAccount,
'pipeline',
true,
{ targets: {}, txes: [], queue: [], sessions: {} },
wsIds,
true,
undefined,
undefined,
pipeline.context.modelDb,
new Map(),
'transactor'
)
ctx.contextData = contextData
if (pipeline.context.lowLevelStorage === undefined) {
throw new PlatformError(unknownError('Low level storage is not available'))
}
const backupOps = new BackupClientOps(pipeline.context.lowLevelStorage)
return {
findAll: async (_class, query, options) => {
const result = await pipeline.findAll(ctx, _class, query, options)
return toFindResult(
result.map((v) => {
return pipeline.context.hierarchy.updateLookupMixin(_class, v, options)
}),
result.total
)
},
findOne: async (_class, query, options) => {
const result = await pipeline.findAll(ctx, _class, query, { ...options, limit: 1 })
return toFindResult(
result.map((v) => {
return pipeline.context.hierarchy.updateLookupMixin(_class, v, options)View on GitHub (pinned to 63e28dc964)
Solutions
- Configure the low-level storage (blob/datalake) provider for the pipeline context
- Point the tooling at a full workspace node that has storage attached
- Verify service env vars/endpoints for storage are set before startup
Example fix
// before
const ctx = { modelDb, workspace: ..., } // no lowLevelStorage
// after
const ctx = { modelDb, lowLevelStorage: createLowLevelStorage(conf), workspace: ... } Defensive patterns
Strategy: validation
Validate before calling
if (pipeline.context.lowLevelStorage === undefined) {
throw new Error('pipeline has no low-level storage; attach a storage provider before backup/upgrade')
} Type guard
function hasLowLevelStorage(ctx: unknown): ctx is { lowLevelStorage: object } {
return typeof ctx === 'object' && ctx !== null && 'lowLevelStorage' in ctx && (ctx as any).lowLevelStorage !== undefined
} Try / catch
try {
const client = pipelineClient(pipeline, ctx)
} catch (err) {
if (err instanceof PlatformError && err.message.includes('Low level storage is not available')) {
// route to a node with storage or configure storage provider
} else throw err
} Prevention
- Wire the blob/datalake storage provider in every pipeline context that supports backup
- Run backup/upgrade tooling only against full workspace nodes
- Add a startup assertion that lowLevelStorage is present where required
When it happens
Trigger: Calling client/pipelineClient/upgradeWorkspace against a pipeline whose context has no lowLevelStorage — e.g. a transactor-only setup without a storage (datalake/blob) provider wired in.
Common situations: Deployment missing the storage service configuration; running backup/upgrade tooling against a node that does not own storage; misconfigured service bindings so lowLevelStorage was never assigned.
Related errors
- No AdapterManager
- Storage adapter should be specified
- Low level storage should be specified
- ReadonlyError
- Invalid storage config:${st}
AI-assisted analysis of hcengineering/platform@63e28dc964 (2026-08-29).
Data as JSON: /api/errors/9b1850e6acf8f262.
Report an issue: GitHub.