Use generic locks

This commit is contained in:
Andras Schmelczer 2025-03-28 22:15:48 +00:00
parent a015737581
commit 6508ea34db
No known key found for this signature in database
GPG key ID: FC8F2C3D3D1A718C

View file

@ -1,7 +1,7 @@
import type { RelativePath } from "../persistence/database"; import type { RelativePath } from "../persistence/database";
import type { FileSystemOperations } from "./filesystem-operations"; import type { FileSystemOperations } from "./filesystem-operations";
import type { Logger } from "../tracing/logger"; import type { Logger } from "../tracing/logger";
import { DocumentLocks } from "./document-locks"; import { Locks } from "../utils/locks";
import { FileNotFoundError } from "./file-not-found-error"; import { FileNotFoundError } from "./file-not-found-error";
/** /**
@ -10,13 +10,13 @@ import { FileNotFoundError } from "./file-not-found-error";
* single request in-flight for any one file through the use of locks. * single request in-flight for any one file through the use of locks.
*/ */
export class SafeFileSystemOperations implements FileSystemOperations { export class SafeFileSystemOperations implements FileSystemOperations {
private readonly locks: DocumentLocks; private readonly locks: Locks<RelativePath>;
public constructor( public constructor(
private readonly fs: FileSystemOperations, private readonly fs: FileSystemOperations,
private readonly logger: Logger private readonly logger: Logger
) { ) {
this.locks = new DocumentLocks(logger); this.locks = new Locks(logger);
} }
public async listAllFiles(): Promise<RelativePath[]> { public async listAllFiles(): Promise<RelativePath[]> {
@ -117,7 +117,7 @@ export class SafeFileSystemOperations implements FileSystemOperations {
: [pathOrPaths]; : [pathOrPaths];
await Promise.all( await Promise.all(
paths.map(async (path) => this.locks.waitForDocumentLock(path)) paths.map(async (path) => this.locks.waitForLock(path))
); );
try { try {
@ -125,7 +125,7 @@ export class SafeFileSystemOperations implements FileSystemOperations {
} finally { } finally {
await Promise.all( await Promise.all(
paths.map((path) => { paths.map((path) => {
this.locks.unlockDocument(path); this.locks.unlock(path);
}) })
); );
} }