From 0c95620fa0c3e5367287cd1528eb54d96757b092 Mon Sep 17 00:00:00 2001 From: undefined Date: Sat, 31 Jul 2021 03:28:10 +0800 Subject: [PATCH] vjudge: disable destoryOnError --- packages/hydrooj/package.json | 2 +- packages/hydrooj/src/model/task.ts | 36 ++++++++++++++---------------- packages/vjudge/package.json | 2 +- packages/vjudge/src/model.ts | 2 +- 4 files changed, 20 insertions(+), 22 deletions(-) diff --git a/packages/hydrooj/package.json b/packages/hydrooj/package.json index 4f3cfdb32..a47dc66ac 100644 --- a/packages/hydrooj/package.json +++ b/packages/hydrooj/package.json @@ -1,6 +1,6 @@ { "name": "hydrooj", - "version": "2.30.2", + "version": "2.30.3", "bin": "bin/hydrooj.js", "main": "src/loader", "module": "src/loader", diff --git a/packages/hydrooj/src/model/task.ts b/packages/hydrooj/src/model/task.ts index 5fb69da47..95330ebd0 100644 --- a/packages/hydrooj/src/model/task.ts +++ b/packages/hydrooj/src/model/task.ts @@ -26,35 +26,33 @@ async function getFirst(query: FilterQuery) { class Consumer { consuming: boolean; running?: any; - timeout: NodeJS.Timeout; constructor(public filter: any, public func: Function, public destoryOnError = true) { this.consuming = true; - this.get = this.get.bind(this); - this.get(); - this.destory = this.destory.bind(this); + this.consume(); bus.on('app/exit', this.destory); } - async get() { - if (this.running || !this.consuming) return; - try { - const res = await getFirst(this.filter); - if (res) { - this.running = res; - await this.func(res); - this.running = null; + async consume() { + while (this.consuming) { + try { + // eslint-disable-next-line no-await-in-loop + const res = await getFirst(this.filter); + if (res) { + this.running = res; + // eslint-disable-next-line no-await-in-loop + await this.func(res); + this.running = null; + } + } catch (err) { + logger.error(err); + if (this.destoryOnError) this.destory(); } - } catch (e) { - logger.error(e); - if (this.destoryOnError) this.destory(); } - this.timeout = setTimeout(this.get, 100); } async destory() { this.consuming = false; - clearTimeout(this.timeout); } } @@ -123,8 +121,8 @@ class TaskModel { return [0, now]; } - static async consume(query: any, cb: Function) { - return new Consumer(query, cb); + static async consume(query: any, cb: Function, destoryOnError = true) { + return new Consumer(query, cb, destoryOnError); } static Consumer = Consumer; diff --git a/packages/vjudge/package.json b/packages/vjudge/package.json index 50a3c8721..713a69d49 100644 --- a/packages/vjudge/package.json +++ b/packages/vjudge/package.json @@ -1,6 +1,6 @@ { "name": "@hydrooj/vjudge", - "version": "1.2.0", + "version": "1.2.1", "description": "Submit problems to remote oj", "main": "package.json", "repository": "https://github.com/hydro-dev/Hydro.git", diff --git a/packages/vjudge/src/model.ts b/packages/vjudge/src/model.ts index f14deea35..f8bc2a7b7 100644 --- a/packages/vjudge/src/model.ts +++ b/packages/vjudge/src/model.ts @@ -79,7 +79,7 @@ class Service { const res = await this.login(); if (!res) return; setInterval(() => this.login(), 1 * 3600 * 1000); - TaskModel.consume({ type: 'remotejudge', subType: this.account.type }, this.judge.bind(this)); + TaskModel.consume({ type: 'remotejudge', subType: this.account.type }, this.judge.bind(this), false); const ddocs = await DomainModel.getMulti({ mount: this.account.type }).toArray(); for (const ddoc of ddocs) { if (!ddoc.syncDone) await this.sync(ddoc._id, false);