mirror of
https://github.com/QingdaoU/OnlineJudge.git
synced 2025-11-04 14:49:58 +08:00
修复 JudgeServer task_number 并发更新的问题
This commit is contained in:
parent
f1f2202731
commit
eab80024a8
@ -146,7 +146,7 @@ class JudgeServerHeartbeatAPI(CSRFExemptAPIView):
|
|||||||
server.service_url = data["service_url"]
|
server.service_url = data["service_url"]
|
||||||
server.ip = request.ip
|
server.ip = request.ip
|
||||||
server.last_heartbeat = timezone.now()
|
server.last_heartbeat = timezone.now()
|
||||||
server.save()
|
server.save(update_fields=["judger_version", "cpu_core", "memory_usage", "service_url", "ip", "last_heartbeat"])
|
||||||
except JudgeServer.DoesNotExist:
|
except JudgeServer.DoesNotExist:
|
||||||
JudgeServer.objects.create(hostname=data["hostname"],
|
JudgeServer.objects.create(hostname=data["hostname"],
|
||||||
judger_version=data["judger_version"],
|
judger_version=data["judger_version"],
|
||||||
@ -157,8 +157,8 @@ class JudgeServerHeartbeatAPI(CSRFExemptAPIView):
|
|||||||
service_url=data["service_url"],
|
service_url=data["service_url"],
|
||||||
last_heartbeat=timezone.now(),
|
last_heartbeat=timezone.now(),
|
||||||
)
|
)
|
||||||
# 新server上线 处理队列中的,防止没有新的提交而导致一直waiting
|
# 新server上线 处理队列中的,防止没有新的提交而导致一直waiting
|
||||||
process_pending_task()
|
process_pending_task()
|
||||||
|
|
||||||
return self.success()
|
return self.success()
|
||||||
|
|
||||||
|
|||||||
@ -1,5 +1,13 @@
|
|||||||
{
|
{
|
||||||
"update": [
|
"update": [
|
||||||
|
{
|
||||||
|
"version": "2019-04-03",
|
||||||
|
"level": "Important",
|
||||||
|
"title": "2019-04-03",
|
||||||
|
"details": [
|
||||||
|
"Fix bugs in judge server scheduler"
|
||||||
|
]
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"version": "2019-03-25",
|
"version": "2019-03-25",
|
||||||
"level": "Recommend",
|
"level": "Recommend",
|
||||||
|
|||||||
@ -25,8 +25,10 @@ def process_pending_task():
|
|||||||
if cache.llen(CacheKey.waiting_queue):
|
if cache.llen(CacheKey.waiting_queue):
|
||||||
# 防止循环引入
|
# 防止循环引入
|
||||||
from judge.tasks import judge_task
|
from judge.tasks import judge_task
|
||||||
data = json.loads(cache.rpop(CacheKey.waiting_queue).decode("utf-8"))
|
tmp_data = cache.rpop(CacheKey.waiting_queue)
|
||||||
judge_task.send(**data)
|
if tmp_data:
|
||||||
|
data = json.loads(tmp_data.decode("utf-8"))
|
||||||
|
judge_task.send(**data)
|
||||||
|
|
||||||
|
|
||||||
class ChooseJudgeServer:
|
class ChooseJudgeServer:
|
||||||
@ -40,7 +42,7 @@ class ChooseJudgeServer:
|
|||||||
for server in servers:
|
for server in servers:
|
||||||
if server.task_number <= server.cpu_core * 2:
|
if server.task_number <= server.cpu_core * 2:
|
||||||
server.task_number = F("task_number") + 1
|
server.task_number = F("task_number") + 1
|
||||||
server.save()
|
server.save(update_fields=["task_number"])
|
||||||
self.server = server
|
self.server = server
|
||||||
return server
|
return server
|
||||||
return None
|
return None
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user