Files
cloudflare-domain-manager/apps/api/src/services/routing/binding-lock.ts
T
Denozordec 3f6f402872
quality / commitlint (push) Skipped
CD / update-wiki (push) Failing after 8s
quality / changes (push) Successful in 5s
quality / docker-check (push) Skipped
quality / web (push) Successful in 50s
quality / api (push) Successful in 41s
CD / quality (push) Successful in 1m40s
CD / publish (push) Successful in 1m33s
feat(health-checks): enhance health check functionality and add new routes
- Introduced origin health check routes and integrated them into the application.
- Updated health check configuration to include success recovery thresholds.
- Expanded error handling with new error codes for health check failures.
- Added new service routes for managing health checks, including creation and listing.
- Improved health check service logic to track consecutive successes and failures.

This commit enhances the health check capabilities, providing better monitoring and management of service health.
2026-08-19 12:26:12 +07:00

26 lines
598 B
TypeScript

const locks = new Map<number, Promise<void>>();
export async function withBindingLock<T>(
bindingId: number,
fn: () => Promise<T>,
): Promise<T> {
const previous = locks.get(bindingId) ?? Promise.resolve();
let release!: () => void;
const current = new Promise<void>((resolve) => {
release = resolve;
});
locks.set(
bindingId,
previous.then(() => current).catch(() => current),
);
await previous.catch(() => undefined);
try {
return await fn();
} finally {
release();
if (locks.get(bindingId) === current) {
locks.delete(bindingId);
}
}
}