mirror of
https://github.com/whyour/qinglong.git
synced 2025-11-08 15:06:08 +08:00
Fix race condition causing scheduled tasks not to run
Added synchronization to ensure gRPC worker is ready before HTTP worker starts. This prevents the race condition where autosave_crontab() tries to register cron jobs before the gRPC server is ready to accept them. Co-authored-by: whyour <22700758+whyour@users.noreply.github.com>
This commit is contained in:
parent
d8ea840266
commit
15f4bcf363
24
back/app.ts
24
back/app.ts
|
|
@ -53,8 +53,28 @@ class Application {
|
||||||
}
|
}
|
||||||
|
|
||||||
private startMasterProcess() {
|
private startMasterProcess() {
|
||||||
this.forkWorker('http');
|
// Fork gRPC worker first and wait for it to be ready
|
||||||
this.forkWorker('grpc');
|
const grpcWorker = this.forkWorker('grpc');
|
||||||
|
|
||||||
|
// Wait for gRPC worker to signal it's ready before starting HTTP worker
|
||||||
|
const grpcReadyPromise = new Promise<void>((resolve) => {
|
||||||
|
const messageHandler = (msg: any) => {
|
||||||
|
if (msg === 'ready') {
|
||||||
|
grpcWorker.removeListener('message', messageHandler);
|
||||||
|
resolve();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
grpcWorker.on('message', messageHandler);
|
||||||
|
});
|
||||||
|
|
||||||
|
// Start HTTP worker after gRPC is ready
|
||||||
|
grpcReadyPromise.then(() => {
|
||||||
|
Logger.info('gRPC worker is ready, starting HTTP worker');
|
||||||
|
this.forkWorker('http');
|
||||||
|
}).catch((error) => {
|
||||||
|
Logger.error('Failed to wait for gRPC worker:', error);
|
||||||
|
process.exit(1);
|
||||||
|
});
|
||||||
|
|
||||||
cluster.on('exit', (worker, code, signal) => {
|
cluster.on('exit', (worker, code, signal) => {
|
||||||
const metadata = this.workerMetadataMap.get(worker.id);
|
const metadata = this.workerMetadataMap.get(worker.id);
|
||||||
|
|
|
||||||
23104
pnpm-lock.yaml
23104
pnpm-lock.yaml
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue
Block a user