Roller4任務調度管理器設計的bug

最近研究Roller的任務調度設計,自己也照貓和老虎寫了個任務實現類,總髮現我的任務總有問題:

如果設置爲30分鐘跑一次,總是不按照規則來。

 

跟蹤了代碼發現Roller登記租期的時候沒有提交事務,導致釋放租期的時候異常了,所以相關的鎖信息沒有更新,總是在初始化狀態。

 

後來加的事務提交的代碼發現鎖信息被更新了。於是對比了一下Roller5的代碼,發現Roller5是有提交事務的(下面是Roller5的代碼strategy.flush();
):

Query q = strategy.getNamedUpdate(
                    "TaskLock.updateClient&Timeacquired&Timeleased&LastRunByName&Timeacquired");
            q.setParameter(1, task.getClientId());
            q.setParameter(2, Integer.valueOf(task.getLeaseTime()));
            q.setParameter(3, new Timestamp(runTime.getTime()));
            q.setParameter(4, task.getName());
            q.setParameter(5, taskLock.getTimeAquired());
            q.setParameter(6, new Timestamp(leaseExpiration.getTime()));
            int result = q.executeUpdate();
            
              if(result == 1) {
                strategy.flush();
                return true;
            }

 

 

            Query q = strategy.getNamedUpdate(
                    "TaskLock.updateTimeLeasedByName&Client");
            q.setParameter(1, Integer.valueOf(0));
            q.setParameter(2, task.getName());
            q.setParameter(3, task.getClientId());
            int result = q.executeUpdate();
            
            if(result == 1) {
                strategy.flush();
                return true;
            }

 

可能還有很多問題沒有發現,以後再說!

 

其實想來這個是一個比較低級的錯誤,爲什麼作爲apache的開源項目,這樣的錯誤好像說不過去哦。難道這些項目的詳細設計和編碼是不同的人嗎?或許跟開發者用的數據庫有關吧?

發佈了35 篇原創文章 · 獲贊 2 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章