Orphan / Safety Jobs
Read MCM FAQ: What is Safety Controller in MCM
These are jobs that periodically run by pushing dummy keys onto their respective work-queues. The worker then picks up and dispatches to the reconcile functions.
worker.Run(c.machineSafetyOrphanVMsQueue, "ClusterMachineSafetyOrphanVMs",
worker.DefaultMaxRetries,
true, c.reconcileClusterMachineSafetyOrphanVMs, stopCh, &waitGroup)
worker.Run(c.machineSafetyAPIServerQueue, "ClusterMachineAPIServer",
worker.DefaultMaxRetries, true, c.reconcileClusterMachineSafetyAPIServer,
stopCh, &waitGroup)
reconcileClusterMachineSafetyOrphanVMs
This techinically isn't a reconcilation loop. It is effectively just a job.
%%{init: {'themeVariables': { 'fontSize': '10px'}, "flowchart": {"useMaxWidth": false }}}%%
flowchart TD
Begin((" "))
-->RescheduleJob["
// Schedule Rerun
defer c.machineSafetyOrphanVMsQueue.AddAfter('', c.safetyOptions.MachineSafetyOrphanVMsPeriod.Duration)
"]-->
GetMC["Get Machine Classes and iterate"]
-->forEach["
asdf
"]
-->ListDriverMachines["
listMachineResp := driver.ListMachines(...)
"]
ListDriverMachines-->MachinesExist{
#listMachineResp.MachineList > 0 ?
}
MachinesExist-->|yes| SyncCache["cache.WaitForCacheSync(stopCh, machineInformer.Informer().HasSynced)"]
SyncCache-->IterMachine["Iterate machineID,machineName in listMachineResp.MachineList"]
-->GetMachine["machine, err := Get Machine from Lister"]
-->ChkErr{Check err}
ChkErr-->|err NotFound|DelMachine
ChkErr-->|err nil|ChkMachineId
ChkMachineId{
machine.Spec.ProviderID == machineID
OR
machinePhase is empty or CrashLoopBackoff ?}
ChkMachineId-->|yes|IterMachine
ChkMachineId-->|no|DelMachine["
driver.DeleteMachine(ctx, &driver.DeleteMachineRequest{
Machine: machine, secretData...})
"]
DelMachine--iterDone-->ScheduleRerun
MachinesExist-->|no| ReturnLongRetry["retryPeriod := machineutils.LongRetry"]
-->ScheduleRerun["
c.machineSafetyOrphanVMsQueue.AddAfter('', time.Duration(retryPeriod))
"]