Skip to content

Commit 729bbdf

Browse files
authored
fix: tus locker release (#571)
1 parent 689d255 commit 729bbdf

File tree

2 files changed

+11
-5
lines changed

2 files changed

+11
-5
lines changed

src/internal/monitoring/otel.ts

+6
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ import { TenantConnection } from '@internal/database'
3333
import { S3Store } from '@tus/s3-store'
3434
import { Upload } from '@aws-sdk/lib-storage'
3535
import { StreamSplitter } from '@tus/server'
36+
import { PgLock } from '@storage/protocols/tus'
3637

3738
const tracingEnabled = process.env.TRACING_ENABLED === 'true'
3839
const headersEnv = process.env.OTEL_EXPORTER_OTLP_TRACES_HEADERS || ''
@@ -259,6 +260,11 @@ const sdk = new NodeSDK({
259260
},
260261
},
261262
}),
263+
new ClassInstrumentation({
264+
targetClass: PgLock,
265+
enabled: true,
266+
methodsToInstrument: ['lock', 'unlock', 'acquireLock'],
267+
}),
262268
new ClassInstrumentation({
263269
targetClass: S3Client,
264270
enabled: true,

src/storage/protocols/tus/postgres-locker.ts

+5-5
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
import { Lock, Locker, RequestRelease } from '@tus/server'
2-
import { clearTimeout } from 'timers'
3-
import EventEmitter from 'events'
4-
import { Database, DBError } from '../../database'
2+
import { clearTimeout } from 'node:timers'
3+
import EventEmitter from 'node:events'
4+
import { Database } from '../../database'
55
import { PubSubAdapter } from '@internal/pubsub'
66
import { UploadId } from './upload-id'
7-
import { ERRORS } from '@internal/errors'
7+
import { ErrorCode, ERRORS, StorageBackendError } from '@internal/errors'
88

99
const REQUEST_LOCK_RELEASE_MESSAGE = 'REQUEST_LOCK_RELEASE'
1010

@@ -94,7 +94,7 @@ export class PgLock implements Lock {
9494
await db.mustLockObject(uploadId.bucket, uploadId.objectName, uploadId.version)
9595
return true
9696
} catch (e) {
97-
if (e instanceof DBError && e.message === 'resource_locked') {
97+
if (e instanceof StorageBackendError && e.code === ErrorCode.ResourceLocked) {
9898
await this.notifier.release(id)
9999
await new Promise((resolve) => {
100100
setTimeout(resolve, 500)

0 commit comments

Comments
 (0)