package Ġcom . github . ker ub istan . ker ub . planner . steps . storage . block . duplicate Ċ Ċ import Ġcom . github . ker ub istan . ker ub . data . dynamic . Virtual Storage Device Dynamic Dao Ċ import Ġcom . github . ker ub istan . ker ub . host . Host Command Executor Ċ import Ġcom . github . ker ub istan . ker ub . planner . execution . Abstract Step Executor Ċ import Ġcom . github . ker ub istan . ker ub . utils . j unix . ssh . open ssh . Open Ssh Ċ Ċ abstract Ġclass ĠAbstract Block Duplicate Executor < T Ġ: ĠAbstract Block Duplicate <* >> Ġ: ĠAbstract Step Executor < T , ĠUnit >() Ġ{ ĊĊ ĉ abstract Ġval Ġhost Command Executor : ĠHost Command Executor Ċ ĉ abstract Ġval Ġvirtual Storage Dynamic Dao : ĠVirtual Storage Device Dynamic Dao ĊĊ ĉ override Ġfun Ġperform ( step : ĠT ) Ġ{ Ċĉ ĉ allocate ( step ) Ċĉ ĉ host Command Executor . execute ( step . source Host ) Ġ{ Ċĉĉ ĉ Open Ssh . copy Block Device ( Ċĉĉĉĉ ĉ session Ġ= Ġit , Ċĉĉĉĉ ĉ source Device Ġ= Ġstep . source . getPath ( step . virtual Storage Device . id ), Ċĉĉĉĉ ĉ target Address Ġ= Ġstep . target Host . address , Ċĉĉĉĉ ĉ target Device Ġ= Ġstep . target . getPath ( step . virtual Storage Device . id ) Ċĉĉ ĉ ) Ċĉ ĉ } Ċ ĉ } ĊĊ ĉ abstract Ġfun Ġallocate ( step : ĠT ) ĊĊ ĉ override Ġfun Ġupdate ( step : ĠT , Ġupdates : ĠUnit ) Ġ{ Ċĉ ĉ virtual Storage Dynamic Dao . update ( step . virtual Storage Device . id ) Ġ{ Ċĉĉ ĉ it . copy ( Ċĉĉĉĉ ĉ alloc ations Ġ= Ġit . alloc ations Ġ+ Ġstep . target Ċĉĉ ĉ ) Ċĉ ĉ } Ċ ĉ } Ċ Ċ }