修复 JudgeServer task_number 并发更新的问题

This commit is contained in:
virusdefender 2019-04-03 12:07:59 +08:00
parent f1f2202731
commit eab80024a8
3 changed files with 16 additions and 6 deletions

View File

@ -146,7 +146,7 @@ class JudgeServerHeartbeatAPI(CSRFExemptAPIView):
server.service_url = data["service_url"]
server.ip = request.ip
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:
JudgeServer.objects.create(hostname=data["hostname"],
judger_version=data["judger_version"],
@ -157,8 +157,8 @@ class JudgeServerHeartbeatAPI(CSRFExemptAPIView):
service_url=data["service_url"],
last_heartbeat=timezone.now(),
)
# 新server上线 处理队列中的防止没有新的提交而导致一直waiting
process_pending_task()
# 新server上线 处理队列中的防止没有新的提交而导致一直waiting
process_pending_task()
return self.success()

View File

@ -1,5 +1,13 @@
{
"update": [
{
"version": "2019-04-03",
"level": "Important",
"title": "2019-04-03",
"details": [
"Fix bugs in judge server scheduler"
]
},
{
"version": "2019-03-25",
"level": "Recommend",

View File

@ -25,8 +25,10 @@ def process_pending_task():
if cache.llen(CacheKey.waiting_queue):
# 防止循环引入
from judge.tasks import judge_task
data = json.loads(cache.rpop(CacheKey.waiting_queue).decode("utf-8"))
judge_task.send(**data)
tmp_data = cache.rpop(CacheKey.waiting_queue)
if tmp_data:
data = json.loads(tmp_data.decode("utf-8"))
judge_task.send(**data)
class ChooseJudgeServer:
@ -40,7 +42,7 @@ class ChooseJudgeServer:
for server in servers:
if server.task_number <= server.cpu_core * 2:
server.task_number = F("task_number") + 1
server.save()
server.save(update_fields=["task_number"])
self.server = server
return server
return None