supervisor很簡單, 主要管兩件事,
當assignment發生變化時, 從nimbus同步topology的代碼到本地
當assignment發生變化時, check workers狀态, 保證被配置設定的work的狀态都是valid
兩個需求,
1. 當assignment發生變化時觸發
2. 因為比較耗時, 背景執行
建立兩個event-manager, 分别用于背景執行mk-synchronize-supervisor和sync-processes
mk-synchronize-supervisor, 比較特别的是内部用了一個有名字的匿名函數this來封裝這個函數體
剛開始看到非常詫異, 其實目的是為了可以在sync-callback中将這個函數add到event-manager裡面去
即每次被調用, 都需要再一次把sync-callback注冊到zk, 以保證下次可以被繼續觸發
sync-processes用于管理workers, 比如處理不正常的worker或dead worker, 并建立新的workers
首先從本地讀出workers的hb, 來判斷work狀況, shutdown所有狀态非valid的workers
并為被assignment, 而worker狀态非valid的slot, 建立新的worker
1. read-allocated-workers
2. wait-for-workers-launch
對reassign-executors中的每個new_work_id調用launch-worker
最終調用wait-for-workers-launch, 等待worder被成功launch
邏輯也比較簡單, check hb, 如果沒有就不停的sleep, 至到逾時, 列印failed to start