imbajin commented on PR #336:
URL:
https://github.com/apache/incubator-hugegraph-computer/pull/336#issuecomment-3393058130
[38;5;245m# Code Review: Priority/Elder/Depends Based Scheduling[39m
[38;5;245m## Summary[39m
[38;5;15mThis[39m[38;5;15m [39m[38;5;15mPR[39m[38;5;15m
[39m[38;5;15mintroduces[39m[38;5;15m [39m[38;5;15ma[39m[38;5;15m
[39m[38;5;15mcomprehensive[39m[38;5;15m
[39m[38;5;15mscheduler[39m[38;5;15m [39m[38;5;15mredesign[39m[38;5;15m
[39m[38;5;81mwith[39m[38;5;15m
[39m[38;5;15mpriority[39m[38;5;204m-[39m[38;5;15mbased[39m[38;5;15m
[39m[38;5;15mscheduling[39m[38;5;15m,[39m[38;5;15m
[39m[38;5;15mtask[39m[38;5;15m
[39m[38;5;15mdependencies[39m[38;5;15m,[39m[38;5;15m
[39m[38;5;81mand[39m[38;5;15m [39m[38;5;15mcron[39m[38;5;15m
[39m[38;5;15msupport[39m[38;5;15m.[39m[38;5;15m
[39m[38;5;15mThe[39m[38;5;15m [39m[38;5;15marchitecture[39m[38;5;15m
[39m[38;5;81mis[39m[38;5;15m
[39m[38;5;15mwell[39m[38;5;204m-[39m[38;5;15mdesigned[39m[38;5;15m,[39m[38;5;15m
[39m[38;5;15mbut[39m[38;5;15m [39m[38;5;15mthere[39m[38;5;15m
[39m[38;5;15mare[39m[38;5;15m [39m[38;5;204m**[39m[38;5;15mcritical[39m
[38;5;15m [39m[38;5;15mconcurrency[39m[38;5;15m
[39m[38;5;15missues[39m[38;5;204m**[39m[38;5;15m
[39m[38;5;15mthat[39m[38;5;15m [39m[38;5;15mmust[39m[38;5;15m
[39m[38;5;15mbe[39m[38;5;15m [39m[38;5;15maddressed[39m[38;5;15m
[39m[38;5;81mbefore[39m[38;5;15m [39m[38;5;15mmerging[39m[38;5;15m.[39m
[38;5;204m**[39m[38;5;15mVerdict[39m[38;5;204m:[39m[38;5;15m
[39m[38;5;15mREQUEST[39m[38;5;15m
[39m[38;5;15mCHANGES[39m[38;5;204m**[39m[38;5;15m [39m[38;5;15m⚠️[39m
[38;5;204m---[39m
[38;5;245m## Architecture Changes[39m
[38;5;245m### Major Refactoring ✅[39m
[38;5;15mThe[39m[38;5;15m [39m[38;5;15mPR[39m[38;5;15m
[39m[38;5;15mcompletely[39m[38;5;15m
[39m[38;5;15mredesigns[39m[38;5;15m [39m[38;5;15mthe[39m[38;5;15m
[39m[38;5;15mscheduler[39m[38;5;15m [39m[38;5;81mfrom[39m[38;5;15m
[39m[38;5;15ma[39m[38;5;15m [39m[38;5;81msimple[39m[38;5;15m
[39m[38;5;15mqueue[39m[38;5;204m-[39m[38;5;15mbased[39m[38;5;15m
[39m[38;5;81msystem[39m[38;5;15m [39m[38;5;81mto[39m[38;5;15m
[39m[38;5;15ma[39m[38;5;15m [39m[38;5;15msophisticated[39m[38;5;15m
[39m[38;5;15mmulti[39m[38;5;204m-[39m[38;5;81mcomponent[39m[38;5;15m
[39m[38;5;15marchitecture[39m[38;5;204m:[39m
[38;5;204m**[39m[38;5;81mOld[39m[38;5;15m
[39m[38;5;15mArchitecture[39m[38;5;204m:**[39m
[38;5;204m-[39m[38;5;15m [39m[38;5;81mSimple[39m[38;5;15m
[39m[38;5;15m`[39m[38;5;15mSpaceQueue[39m[38;5;15m`[39m[38;5;15m
[39m[38;5;15m([39m[38;5;15mFIFO[39m[38;5;15m)[39m
[38;5;204m-[39m[38;5;15m [39m[38;5;15mBasic[39m[38;5;15m
[39m[38;5;15m`[39m[38;5;15mBroker[39m[38;5;15m`[39m[38;5;15m
[39m[38;5;81mfor[39m[38;5;15m [39m[38;5;15mworker[39m[38;5;15m
[39m[38;5;15massignment[39m
[38;5;204m-[39m[38;5;15m
[39m[38;5;15mSingle[39m[38;5;204m-[39m[38;5;15mthreaded[39m[38;5;15m
[39m[38;5;15mdispatch[39m[38;5;15m [39m[38;5;81mloop[39m
[38;5;204m**[39m[38;5;81mNew[39m[38;5;15m
[39m[38;5;15mArchitecture[39m[38;5;204m:**[39m
[38;5;204m-[39m[38;5;15m
[39m[38;5;15m`[39m[38;5;15mSchedulerResourceManager[39m[38;5;15m`[39m[38;5;15m
[39m[38;5;204m-[39m[38;5;15m [39m[38;5;15mWorker[39m[38;5;15m
[39m[38;5;15mpool[39m[38;5;15m [39m[38;5;15mmanagement[39m
[38;5;204m-[39m[38;5;15m
[39m[38;5;15m`[39m[38;5;15mSchedulerTaskManager[39m[38;5;15m`[39m[38;5;15m
[39m[38;5;204m-[39m[38;5;15m [39m[38;5;15mTask[39m[38;5;15m
[39m[38;5;15mlifecycle[39m[38;5;15m,[39m[38;5;15m
[39m[38;5;15mdependencies[39m[38;5;15m,[39m[38;5;15m
[39m[38;5;15mpriorities[39m
[38;5;204m-[39m[38;5;15m
[39m[38;5;15m`[39m[38;5;15mSchedulerAlgorithmManager[39m[38;5;15m`[39m[38;5;15m
[39m[38;5;204m-[39m[38;5;15m [39m[38;5;15mScheduling[39m[38;5;15m
[39m[38;5;81malgorithm[39m[38;5;15m [39m[38;5;15mlogic[39m
[38;5;204m-[39m[38;5;15m
[39m[38;5;15m`[39m[38;5;15mSchedulerCronManager[39m[38;5;15m`[39m[38;5;15m
[39m[38;5;204m-[39m[38;5;15m [39m[38;5;15mRecurring[39m[38;5;15m
[39m[38;5;15mtask[39m[38;5;15m [39m[38;5;15msupport[39m
[38;5;204m-[39m[38;5;15m
[39m[38;5;81mEvent[39m[38;5;204m-[39m[38;5;15mdriven[39m[38;5;15m
[39m[38;5;15mscheduling[39m[38;5;15m [39m[38;5;81mwith[39m[38;5;15m
[39m[38;5;15mticker[39m[38;5;204m-[39m[38;5;15mbased[39m[38;5;15m
[39m[38;5;15mdispatch[39m
[38;5;245m### New Features:[39m
[38;5;141m1.[39m[38;5;15m [39m[38;5;15m✅[39m[38;5;15m
[39m[38;5;15mPriority[39m[38;5;204m-[39m[38;5;15mbased[39m[38;5;15m
[39m[38;5;15mscheduling[39m[38;5;15m [39m[38;5;81mwith[39m[38;5;15m
[39m[38;5;81minteger[39m[38;5;15m [39m[38;5;15mpriorities[39m
[38;5;141m2.[39m[38;5;15m [39m[38;5;15m✅[39m[38;5;15m
[39m[38;5;15mTask[39m[38;5;15m [39m[38;5;15mdependency[39m[38;5;15m
[39m[38;5;15mmanagement[39m[38;5;15m
[39m[38;5;15m([39m[38;5;15m`[39m[38;5;15mpreorders[39m[38;5;15m`[39m[38;5;15m)[39m
[38;5;141m3.[39m[38;5;15m [39m[38;5;15m✅[39m[38;5;15m
[39m[38;5;15mCron[39m[38;5;15m [39m[38;5;15mexpressions[39m[38;5;15m
[39m[38;5;81mfor[39m[38;5;15m [39m[38;5;15mrecurring[39m[38;5;15m
[39m[38;5;15mtasks[39m
[38;5;141m4.[39m[38;5;15m [39m[38;5;15m✅[39m[38;5;15m
[39m[38;5;15mExclusive[39m[38;5;204m/[39m[38;5;81mconcurrent[39m[38;5;15m
[39m[38;5;15mexecution[39m[38;5;15m [39m[38;5;15mmodes[39m
[38;5;141m5.[39m[38;5;15m [39m[38;5;15m✅[39m[38;5;15m
[39m[38;5;15mConfigurable[39m[38;5;15m [39m[38;5;15msoft[39m[38;5;15m
[39m[38;5;15mscheduling[39m
[38;5;204m---[39m
[38;5;245m## Critical Issues 🚨[39m
[38;5;245m### 1. TOCTTOU Race Condition (scheduler_bl.go:421-423)[39m
[38;5;204m**[39m[38;5;15mSeverity[39m[38;5;204m:[39m[38;5;15m
[39m[38;5;15mCRITICAL[39m[38;5;204m**[39m
[38;5;15m`[39m[38;5;15m``[39m[38;5;15mgo[39m
[38;5;15m// TODO: Is here need a lock? TOCTTOU[39m
[38;5;15mif taskInfo.State != structure.TaskStateWaiting {[39m
[38;5;15m logrus.Errorf("task state is not in 'Waiting' state, taskID:
%v", taskInfo)[39m
[38;5;15m return[39m
[38;5;15m}[39m
[38;5;15m``[39m[38;5;15m`[39m
[38;5;15mThe[39m[38;5;15m [39m[38;5;15mTODO[39m[38;5;15m
[39m[38;5;15mcorrectly[39m[38;5;15m
[39m[38;5;15midentifies[39m[38;5;15m [39m[38;5;15ma[39m[38;5;15m
[39m[38;5;81mTime[39m[38;5;204m-[39m[38;5;81mOf[39m[38;5;204m-[39m[38;5;81mCheck[39m[38;5;204m-[39m[38;5;81mTime[39m[38;5;204m-[39m[38;5;81mOf[39m[38;5;204m-[39m[38;5;81mUse[39m[38;5;15m
[39m[38;5;15mvulnerability[39m[38;5;15m.[39m[38;5;15m
[39m[38;5;15mState[39m[38;5;15m [39m[38;5;81mcheck[39m[38;5;15m
[39m[38;5;81mand[39m[38;5;15m [39m[38;5;15moperations[39m[38;5;15m
[39m[38;5;15mare[39m[38;5;15m [39m[38;5;81mnot[39m[38;5;15m
[39m[38;5;15matomic[39m[38;5;15m.[39m
[38;5;204m**[39m[38;5;15mFix[39m[38;5;204m:**[39m
[38;5;15m`[39m[38;5;15m``[39m[38;5;15mgo[39m
[38;5;15mdefer taskInfo.Unlock(taskInfo.Lock())[39m
[38;5;15mif taskInfo.State != structure.TaskStateWaiting {[39m
[38;5;15m // ...[39m
[38;5;15m}[39m
[38;5;15m``[39m[38;5;15m`[39m
[38;5;245m### 2. Resource Leak: Channel Not Closed (scheduler_bl.go:62)[39m
[38;5;204m**[39m[38;5;15mSeverity[39m[38;5;204m:[39m[38;5;15m
[39m[38;5;15mHIGH[39m[38;5;204m**[39m
[38;5;15mThe[39m[38;5;15m
[39m[38;5;15m`[39m[38;5;15mstartChan[39m[38;5;15m`[39m[38;5;15m
[39m[38;5;81mis[39m[38;5;15m [39m[38;5;81mnever[39m[38;5;15m
[39m[38;5;15mclosed[39m[38;5;15m,[39m[38;5;15m
[39m[38;5;15mcausing[39m[38;5;15m [39m[38;5;15mpotential[39m[38;5;15m
[39m[38;5;15mgoroutine[39m[38;5;15m [39m[38;5;15mleaks[39m[38;5;15m
[39m[38;5;15mduring[39m[38;5;15m
[39m[38;5;81mshutdown[39m[38;5;15m.[39m
[38;5;204m**[39m[38;5;15mFix[39m[38;5;204m:**[39m[38;5;15m
[39m[38;5;81mAdd[39m[38;5;15m [39m[38;5;15mcleanup[39m[38;5;204m:[39m
[38;5;15m`[39m[38;5;15m``[39m[38;5;15mgo[39m
[38;5;15mfunc (s *ScheduleBl) Shutdown() {[39m
[38;5;15m close(s.startChan)[39m
[38;5;15m}[39m
[38;5;15m``[39m[38;5;15m`[39m
[38;5;245m### 3. Dependency State Validation Missing
(scheduler_bl.go:234-244)[39m
[38;5;204m**[39m[38;5;15mSeverity[39m[38;5;204m:[39m[38;5;15m
[39m[38;5;15mHIGH[39m[38;5;204m**[39m
[38;5;81mNo[39m[38;5;15m [39m[38;5;81mcheck[39m[38;5;15m
[39m[38;5;81mif[39m[38;5;15m [39m[38;5;15mdependency[39m[38;5;15m
[39m[38;5;15mtasks[39m[38;5;15m [39m[38;5;15mare[39m[38;5;15m
[39m[38;5;15mcompleted[39m[38;5;15m.[39m[38;5;15m
[39m[38;5;15mTasks[39m[38;5;15m [39m[38;5;15mcould[39m[38;5;15m
[39m[38;5;15mdepend[39m[38;5;15m [39m[38;5;81mon[39m[38;5;15m
[39m[38;5;15mfailed[39m[38;5;204m/[39m[38;5;15mcanceled[39m[38;5;15m
[39m[38;5;15mtasks[39m[38;5;15m.[39m
[38;5;204m**[39m[38;5;15mFix[39m[38;5;204m:**[39m
[38;5;15m`[39m[38;5;15m``[39m[38;5;15mgo[39m
[38;5;15mif depTask.State != structure.TaskStateComplete {[39m
[38;5;15m return false, fmt.Errorf("dependency task %d is not complete
(state: %s)", depTaskID, depTask.State)[39m
[38;5;15m}[39m
[38;5;15m``[39m[38;5;15m`[39m
[38;5;245m### 4. Potential Deadlock Pattern (scheduler_bl.go:97-99)[39m
[38;5;204m**[39m[38;5;15mSeverity[39m[38;5;204m:[39m[38;5;15m
[39m[38;5;15mHIGH[39m[38;5;204m**[39m
[38;5;15mMultiple[39m[38;5;15m [39m[38;5;15mfunctions[39m[38;5;15m
[39m[38;5;15macquire[39m[38;5;15m [39m[38;5;81mlocks[39m[38;5;15m
[39m[38;5;81mthen[39m[38;5;15m [39m[38;5;81mcall[39m[38;5;15m
[39m[38;5;15m`[39m[38;5;15mTryScheduleNextTasks[39m[38;5;15m`[39m[38;5;15m,[39m[38;5;15m
[39m[38;5;15mwhich[39m[38;5;15m
[39m[38;5;15mconditionally[39m[38;5;15m
[39m[38;5;81mlocks[39m[38;5;15m.[39m[38;5;15m
[39m[38;5;15mThis[39m[38;5;15m [39m[38;5;15mpattern[39m[38;5;15m
[39m[38;5;81mis[39m[38;5;15m
[39m[38;5;15mdeadlock[39m[38;5;204m-[39m[38;5;15mprone[39m[38;5;15m.[39m
[38;5;204m**[39m[38;5;15mFix[39m[38;5;204m:**[39m[38;5;15m
[39m[38;5;81mUse[39m[38;5;15m [39m[38;5;81mconsistent[39m[38;5;15m
[39m[38;5;15mlocking[39m[38;5;15m
[39m[38;5;15mstrategy[39m[38;5;15m,[39m[38;5;15m
[39m[38;5;15mconsider[39m[38;5;15m
[39m[38;5;15m`[39m[38;5;15msync.RWMutex[39m[38;5;15m`[39m[38;5;15m
[39m[38;5;81mfor[39m[38;5;15m
[39m[38;5;81mread[39m[38;5;204m-[39m[38;5;15mheavy[39m[38;5;15m
[39m[38;5;15moperations[39m[38;5;15m.[39m
[38;5;204m---[39m
[38;5;245m## High Priority Issues ⚠️[39m
[38;5;245m### 5. Nil Pointer Risk (task_bl.go:87-92)[39m
[38;5;81mIf[39m[38;5;15m
[39m[38;5;15m`[39m[38;5;15mScheduler.cronManager[39m[38;5;15m`[39m[38;5;15m
[39m[38;5;81mis[39m[38;5;15m [39m[38;5;15mnil[39m[38;5;15m
[39m[38;5;15m([39m[38;5;15minitialization[39m[38;5;15m
[39m[38;5;81morder[39m[38;5;15m
[39m[38;5;15missue[39m[38;5;15m)[39m[38;5;15m,[39m[38;5;15m
[39m[38;5;15mthis[39m[38;5;15m [39m[38;5;15mwill[39m[38;5;15m
[39m[38;5;15mpanic[39m[38;5;204m:[39m
[38;5;15m`[39m[38;5;15m``[39m[38;5;15mgo[39m
[38;5;15mif err := Scheduler.cronManager.CheckCronExpression(cronExpr); err
!= nil {[39m
[38;5;15m``[39m[38;5;15m`[39m
[38;5;81mAdd[39m[38;5;15m [39m[38;5;15mnil[39m[38;5;15m
[39m[38;5;15mchecks[39m[38;5;15m.[39m
[38;5;245m### 6. API Breaking Change (scheduler_bl.go:502)[39m
[38;5;15m`[39m[38;5;15mCloseCurrent[39m[38;5;15m`[39m[38;5;15m
[39m[38;5;15msignature[39m[38;5;15m [39m[38;5;81mchanged[39m[38;5;15m
[39m[38;5;81mfrom[39m[38;5;15m [39m[38;5;15m`[39m[38;5;15m(taskId
int32)[39m[38;5;15m`[39m[38;5;15m [39m[38;5;81mto[39m[38;5;15m
[39m[38;5;15m`[39m[38;5;15m(taskId int32, removeWorkerName
...string)[39m[38;5;15m`[39m[38;5;15m.[39m[38;5;15m
[39m[38;5;15mDocument[39m[38;5;15m [39m[38;5;15mthis[39m[38;5;15m
[39m[38;5;15mbreaking[39m[38;5;15m [39m[38;5;81mchange[39m[38;5;15m
[39m[38;5;81mand[39m[38;5;15m [39m[38;5;15mverify[39m[38;5;15m
[39m[38;5;81mall[39m[38;5;15m [39m[38;5;81mcall[39m[38;5;15m
[39m[38;5;15msites[39m[38;5;15m [39m[38;5;15mare[39m[38;5;15m
[39m[38;5;15mupdated[39m[38;5;15m.[39m
[38;5;245m### 7. Commented Out Critical Code (scheduler_bl.go:229)[39m
[38;5;15m`[39m[38;5;15m``[39m[38;5;15mgo[39m
[38;5;15m//defer s.Unlock(s.Lock())[39m
[38;5;15m``[39m[38;5;15m`[39m
[38;5;15mCritical[39m[38;5;15m [39m[38;5;15mlocking[39m[38;5;15m
[39m[38;5;81mcode[39m[38;5;15m [39m[38;5;15mcommented[39m[38;5;15m
[39m[38;5;81mwithout[39m[38;5;15m [39m[38;5;15mexplanation[39m[38;5;15m
[39m[38;5;204m-[39m[38;5;15m [39m[38;5;15mthis[39m[38;5;15m
[39m[38;5;81mis[39m[38;5;15m [39m[38;5;15mdangerous[39m[38;5;15m.[39m
[38;5;245m### 8. Incomplete Implementation (scheduler_bl.go:159)[39m
[38;5;15m`[39m[38;5;15m``[39m[38;5;15mgo[39m
[38;5;15m// TODO: NEED TO JUDGE IF THE TASK CAN CONCURRENTLY RUNNING[39m
[38;5;15m// NOT only by user setting, but also by scheduler setting[39m
[38;5;15m``[39m[38;5;15m`[39m
[38;5;15mImportant[39m[38;5;15m [39m[38;5;81mconcurrent[39m[38;5;15m
[39m[38;5;15mexecution[39m[38;5;15m [39m[38;5;15mlogic[39m[38;5;15m
[39m[38;5;15mdeferred[39m[38;5;15m.[39m
[38;5;204m---[39m
[38;5;245m## Medium Priority Issues[39m
[38;5;245m### 9. Missing Input Validation (task_bl.go:71-79)[39m
[38;5;81mNo[39m[38;5;15m [39m[38;5;15mupper[39m[38;5;15m
[39m[38;5;15mbound[39m[38;5;15m [39m[38;5;81mon[39m[38;5;15m
[39m[38;5;15mpriority[39m[38;5;15m
[39m[38;5;81mvalues[39m[38;5;15m.[39m[38;5;15m
[39m[38;5;15mLarge[39m[38;5;15m [39m[38;5;15mpriorities[39m[38;5;15m
[39m[38;5;15mcould[39m[38;5;15m [39m[38;5;15mcause[39m[38;5;15m
[39m[38;5;15munexpected[39m[38;5;15m
[39m[38;5;15mbehavior[39m[38;5;15m.[39m
[38;5;245m### 10. Silent Error Handling (scheduler_bl.go:441-443)[39m
[38;5;15m`[39m[38;5;15m``[39m[38;5;15mgo[39m
[38;5;15mif err := s.taskManager.AddTaskStartSequence(taskInfo.ID); err !=
nil {[39m
[38;5;15m logrus.Errorf("failed to add task '%d' to start sequence: %v",
taskInfo.ID, err)[39m
[38;5;15m}[39m
[38;5;15m``[39m[38;5;15m`[39m
[38;5;81mErrors[39m[38;5;15m [39m[38;5;15mlogged[39m[38;5;15m
[39m[38;5;15mbut[39m[38;5;15m [39m[38;5;81mnot[39m[38;5;15m
[39m[38;5;15mhandled[39m[38;5;15m.[39m
[38;5;204m---[39m
[38;5;245m## CI/CD Status[39m
[38;5;245m### Failed Checks ❌[39m
[38;5;141m1.[39m[38;5;15m
[39m[38;5;204m**[39m[38;5;81mcheck[39m[38;5;204m-[39m[38;5;15mlicense[39m[38;5;204m-[39m[38;5;15mheader[39m[38;5;204m**[39m[38;5;15m
[39m[38;5;204m-[39m[38;5;15m [39m[38;5;15mMissing[39m[38;5;15m
[39m[38;5;15mApache[39m[38;5;15m [39m[38;5;15mlicense[39m[38;5;15m
[39m[38;5;15mheaders[39m[38;5;15m [39m[38;5;81min[39m[38;5;15m
[39m[38;5;81mnew[39m[38;5;15m [39m[38;5;15mfiles[39m
[38;5;141m2.[39m[38;5;15m
[39m[38;5;204m**[39m[38;5;15mdependency[39m[38;5;204m-[39m[38;5;15mreview[39m[38;5;204m**[39m[38;5;15m
[39m[38;5;204m-[39m[38;5;15m [39m[38;5;81mNew[39m[38;5;15m
[39m[38;5;15mdependencies[39m[38;5;15m [39m[38;5;15mneed[39m[38;5;15m
[39m[38;5;15mreview[39m
[38;5;245m### Passed Checks ✅[39m
[38;5;204m-[39m[38;5;15m [39m[38;5;15mCodeQL[39m[38;5;15m
[39m[38;5;15m([39m[38;5;15mGo[39m[38;5;15m
[39m[38;5;204m&[39m[38;5;15m [39m[38;5;15mJava[39m[38;5;15m)[39m
[38;5;204m-[39m[38;5;15m [39m[38;5;15mDependency[39m[38;5;15m
[39m[38;5;15mlicense[39m[38;5;15m [39m[38;5;81mcheck[39m
[38;5;245m### Test Coverage ⚠️[39m
[38;5;204m-[39m[38;5;15m [39m[38;5;15mPR[39m[38;5;15m
[39m[38;5;15mmentions[39m[38;5;15m [39m[38;5;15mtests[39m[38;5;15m
[39m[38;5;81min[39m[38;5;15m
[39m[38;5;15m`[39m[38;5;15m/test[39m[38;5;15m`[39m[38;5;15m
[39m[38;5;15mfolder[39m[38;5;15m [39m[38;5;15mbut[39m[38;5;15m
[39m[38;5;81mnot[39m[38;5;15m [39m[38;5;81mvisible[39m[38;5;15m
[39m[38;5;81min[39m[38;5;15m [39m[38;5;15mdiff[39m
[38;5;204m-[39m[38;5;15m [39m[38;5;15mNeed[39m[38;5;15m
[39m[38;5;15munit[39m[38;5;15m [39m[38;5;15mtests[39m[38;5;15m
[39m[38;5;81mfor[39m[38;5;204m:[39m
[38;5;15m [39m[38;5;204m-[39m[38;5;15m
[39m[38;5;15mPriority[39m[38;5;15m [39m[38;5;15mscheduling[39m[38;5;15m
[39m[38;5;81malgorithm[39m
[38;5;15m [39m[38;5;204m-[39m[38;5;15m
[39m[38;5;15mDependency[39m[38;5;15m [39m[38;5;15mresolution[39m
[38;5;15m [39m[38;5;204m-[39m[38;5;15m
[39m[38;5;15mCron[39m[38;5;15m [39m[38;5;15mtask[39m[38;5;15m
[39m[38;5;15mscheduling[39m
[38;5;15m [39m[38;5;204m-[39m[38;5;15m
[39m[38;5;81mConcurrent[39m[38;5;15m [39m[38;5;15mexecution[39m
[38;5;204m---[39m
[38;5;245m## Recommendations[39m
[38;5;245m### Must Fix Before Merge:[39m
[38;5;141m1.[39m[38;5;15m [39m[38;5;15mFix[39m[38;5;15m
[39m[38;5;15mTOCTTOU[39m[38;5;15m [39m[38;5;15mrace[39m[38;5;15m
[39m[38;5;81mcondition[39m[38;5;15m [39m[38;5;81mwith[39m[38;5;15m
[39m[38;5;15matomic[39m[38;5;15m [39m[38;5;15mstate[39m[38;5;15m
[39m[38;5;15mchecking[39m
[38;5;141m2.[39m[38;5;15m [39m[38;5;81mAdd[39m[38;5;15m
[39m[38;5;81mresource[39m[38;5;15m [39m[38;5;15mcleanup[39m[38;5;15m
[39m[38;5;15m([39m[38;5;81mclose[39m[38;5;15m
[39m[38;5;15mchannels[39m[38;5;15m [39m[38;5;81mon[39m[38;5;15m
[39m[38;5;81mshutdown[39m[38;5;15m)[39m
[38;5;141m3.[39m[38;5;15m [39m[38;5;15mValidate[39m[38;5;15m
[39m[38;5;15mdependency[39m[38;5;15m [39m[38;5;15mtask[39m[38;5;15m
[39m[38;5;15mstates[39m
[38;5;141m4.[39m[38;5;15m [39m[38;5;15mFix[39m[38;5;15m
[39m[38;5;15mfailing[39m[38;5;15m [39m[38;5;15mCI[39m[38;5;15m
[39m[38;5;15mchecks[39m[38;5;15m
[39m[38;5;15m([39m[38;5;15mlicense[39m[38;5;15m
[39m[38;5;15mheaders[39m[38;5;15m,[39m[38;5;15m
[39m[38;5;15mdependency[39m[38;5;15m
[39m[38;5;15mreview[39m[38;5;15m)[39m
[38;5;141m5.[39m[38;5;15m [39m[38;5;15mReview[39m[38;5;15m
[39m[38;5;81mand[39m[38;5;15m [39m[38;5;15mfix[39m[38;5;15m
[39m[38;5;81mall[39m[38;5;15m [39m[38;5;15mlocking[39m[38;5;15m
[39m[38;5;15mpatterns[39m
[38;5;141m6.[39m[38;5;15m [39m[38;5;81mAdd[39m[38;5;15m
[39m[38;5;15mnil[39m[38;5;15m [39m[38;5;15mpointer[39m[38;5;15m
[39m[38;5;15mchecks[39m[38;5;15m [39m[38;5;81mfor[39m[38;5;15m
[39m[38;5;15mmanagers[39m
[38;5;245m### Should Fix:[39m
[38;5;141m7.[39m[38;5;15m [39m[38;5;15mComplete[39m[38;5;15m
[39m[38;5;15mTODO[39m[38;5;15m
[39m[38;5;15mimplementations[39m[38;5;15m
[39m[38;5;15m([39m[38;5;81mconcurrent[39m[38;5;15m
[39m[38;5;15mexecution[39m[38;5;15m
[39m[38;5;15mlogic[39m[38;5;15m)[39m
[38;5;141m8.[39m[38;5;15m [39m[38;5;15mDocument[39m[38;5;15m
[39m[38;5;15mAPI[39m[38;5;15m [39m[38;5;15mbreaking[39m[38;5;15m
[39m[38;5;15mchanges[39m
[38;5;141m9.[39m[38;5;15m [39m[38;5;81mAdd[39m[38;5;15m
[39m[38;5;15mcomprehensive[39m[38;5;15m [39m[38;5;15mtest[39m[38;5;15m
[39m[38;5;15mcoverage[39m
[38;5;141m10.[39m[38;5;15m [39m[38;5;81mAdd[39m[38;5;15m
[39m[38;5;15minput[39m[38;5;15m [39m[38;5;81mvalidation[39m[38;5;15m
[39m[38;5;15m([39m[38;5;15mpriority[39m[38;5;15m
[39m[38;5;15mbounds[39m[38;5;15m)[39m
[38;5;141m11.[39m[38;5;15m [39m[38;5;81mRemove[39m[38;5;15m
[39m[38;5;15mcommented[39m[38;5;15m [39m[38;5;81mcode[39m[38;5;15m
[39m[38;5;81mwith[39m[38;5;15m [39m[38;5;15mexplanation[39m
[38;5;245m### Documentation Needed:[39m
[38;5;141m12.[39m[38;5;15m [39m[38;5;15mMigration[39m[38;5;15m
[39m[38;5;15mguide[39m[38;5;15m [39m[38;5;81mfor[39m[38;5;15m
[39m[38;5;15mscheduler[39m[38;5;15m [39m[38;5;15mAPI[39m[38;5;15m
[39m[38;5;15mchanges[39m
[38;5;141m13.[39m[38;5;15m [39m[38;5;15mConfiguration[39m[38;5;15m
[39m[38;5;15mdocumentation[39m[38;5;15m
[39m[38;5;15m([39m[38;5;15m`[39m[38;5;15mstart_chan_size[39m[38;5;15m`[39m[38;5;15m,[39m[38;5;15m
[39m[38;5;15m`[39m[38;5;15mticker_interval[39m[38;5;15m`[39m[38;5;15m,[39m[38;5;15m
[39m[38;5;15m`[39m[38;5;15msoft_schedule[39m[38;5;15m`[39m[38;5;15m)[39m
[38;5;141m14.[39m[38;5;15m [39m[38;5;15mCron[39m[38;5;15m
[39m[38;5;15mexpression[39m[38;5;15m [39m[38;5;81mformat[39m[38;5;15m
[39m[38;5;15mspecification[39m
[38;5;204m---[39m
[38;5;245m## Positive Aspects 👍[39m
[38;5;141m1.[39m[38;5;15m [39m[38;5;15m✅[39m[38;5;15m
[39m[38;5;15mWell[39m[38;5;204m-[39m[38;5;15marchitected[39m[38;5;15m
[39m[38;5;81mcomponent[39m[38;5;15m [39m[38;5;15mseparation[39m
[38;5;141m2.[39m[38;5;15m [39m[38;5;15m✅[39m[38;5;15m
[39m[38;5;15mGood[39m[38;5;15m [39m[38;5;15mconfiguration[39m[38;5;15m
[39m[38;5;15mexternalization[39m
[38;5;141m3.[39m[38;5;15m [39m[38;5;15m✅[39m[38;5;15m
[39m[38;5;15mComprehensive[39m[38;5;15m
[39m[38;5;15mfeature[39m[38;5;15m [39m[38;5;81mset[39m
[38;5;141m4.[39m[38;5;15m [39m[38;5;15m✅[39m[38;5;15m
[39m[38;5;15mImproved[39m[38;5;15m
[39m[38;5;15mobservability[39m[38;5;15m [39m[38;5;81mwith[39m[38;5;15m
[39m[38;5;15mdetailed[39m[38;5;15m [39m[38;5;15mlogging[39m
[38;5;141m5.[39m[38;5;15m [39m[38;5;15m✅[39m[38;5;15m
[39m[38;5;15mAdded[39m[38;5;15m [39m[38;5;15mDocker[39m[38;5;15m
[39m[38;5;15msupport[39m[38;5;15m [39m[38;5;15mdocumentation[39m
[38;5;204m---[39m
[38;5;245m## Risk Assessment[39m
[38;5;204m**[39m[38;5;15mRisk[39m[38;5;15m
[39m[38;5;81mLevel[39m[38;5;204m:**[39m[38;5;15m
[39m[38;5;81mMEDIUM[39m[38;5;204m-[39m[38;5;15mHIGH[39m[38;5;15m
[39m[38;5;15mdue[39m[38;5;15m [39m[38;5;81mto[39m[38;5;15m
[39m[38;5;15mconcurrency[39m[38;5;15m [39m[38;5;15missues[39m[38;5;15m
[39m[38;5;81min[39m[38;5;15m [39m[38;5;15mcore[39m[38;5;15m
[39m[38;5;15mscheduling[39m[38;5;15m [39m[38;5;15mlogic[39m
[38;5;204m**[39m[38;5;15mEstimated[39m[38;5;15m
[39m[38;5;81mTime[39m[38;5;15m [39m[38;5;81mto[39m[38;5;15m
[39m[38;5;15mFix[39m[38;5;204m:**[39m[38;5;15m
[39m[38;5;141m2[39m[38;5;204m-[39m[38;5;141m3[39m[38;5;15m
[39m[38;5;15mdays[39m[38;5;15m [39m[38;5;81mfor[39m[38;5;15m
[39m[38;5;15mcritical[39m[38;5;15m
[39m[38;5;15mfixes[39m[38;5;15m,[39m[38;5;15m
[39m[38;5;141m1[39m[38;5;15m [39m[38;5;81mweek[39m[38;5;15m
[39m[38;5;81mfor[39m[38;5;15m [39m[38;5;15mcomprehensive[39m[38;5;15m
[39m[38;5;15mimprovements[39m
[38;5;15mThe[39m[38;5;15m [39m[38;5;15marchitecture[39m[38;5;15m
[39m[38;5;81mand[39m[38;5;15m [39m[38;5;15mfeatures[39m[38;5;15m
[39m[38;5;15mare[39m[38;5;15m
[39m[38;5;15mexcellent[39m[38;5;15m,[39m[38;5;15m
[39m[38;5;15mbut[39m[38;5;15m [39m[38;5;15mthe[39m[38;5;15m
[39m[38;5;15mcritical[39m[38;5;15m
[39m[38;5;15mconcurrency[39m[38;5;15m [39m[38;5;15missues[39m[38;5;15m
[39m[38;5;15mmust[39m[38;5;15m [39m[38;5;15mbe[39m[38;5;15m
[39m[38;5;15mresolved[39m[38;5;15m [39m[38;5;81mbefore[39m[38;5;15m
[39m[38;5;15mthis[39m[38;5;15m [39m[38;5;15mcan[39m[38;5;15m
[39m[38;5;15mbe[39m[38;5;15m [39m[38;5;15msafely[39m[38;5;15m
[39m[38;5;15mmerged[39m[38;5;15m [39m[38;5;81mto[39m[38;5;15m
[39m[38;5;15mproduction[39m[38;5;15m.[39m
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]