hzxie / voj

A cross-platform online judge system based on Spring MVC framework and ActiveMQ.
https://verwandlung.org
GNU General Public License v3.0
569 stars 121 forks source link

由于未知原因无法获取到提交记录的问题 #22

Closed dmsdus closed 6 years ago

dmsdus commented 7 years ago
        int tryTimes = 0;
        Submission submission = null;
        do {
            Thread.sleep(1000);
            submission = submissionMapper.getSubmission(submissionId);
        } while ( submission == null && ++ tryTimes <= 3 );

        if ( submission == null ) {
            throw new IllgealSubmissionException(
                    String.format("Illegal submission #%s",
                            new Object[] { submissionId }));
        }

您好,评测机createNewTask中第一次获取提交记录失败后再尝试两次能获取到吗? 我在本地运行的时候再获取几次都不行,只能重新把消息传给web。数据库用的是Oracle。 因为很少发生submission为null的情况不太好测试..

zhblue commented 7 years ago

宿主或者网络故障的时候,重试几次都是一样,至少要延迟一段时间再试。

hzxie commented 7 years ago

我当时遇到的情况就是这样。 造成这个的原因可能是消息队列上的消息获取到的时候 数据库还没有写入完成? 然后一般第二次查询数据库的时候就可以解决。

你所提到的“只能重新把消息传给web”这是什么意思?再提交一次?

dmsdus commented 7 years ago

额,我这边第二三次查询还是不行.. 所以暂时先弄成了三次都查询不到的话再让web传到其他评测机试试。 但最近都没发生这种情况也不知道这样做有没效果..

hzxie commented 7 years ago

转到其他评测机的意思就是 重新丢一个消息到消息队列吗? 然后问题就可以解决了吗?So strange, isn't it?

dmsdus commented 7 years ago

是的就是三次都不行让web重新丢一个消息,但只是先这样处理而已,能不能解决还不知道 因为最近都没有发生过submission查询不到的情况..