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
- 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.
26 lines
598 B
TypeScript
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);
|
|
}
|
|
}
|
|
}
|