> +-- | Check if move is allowed in terms of avoid disk moves factor
> +isMoveAllowed :: IMove  -- ^ Move to check
> +              -> Double -- ^ Avoid disk moves factor (see algDiskMovesFactor)
> +              -> Table  -- ^ The original table
> +              -> Table  -- ^ The final table
> +              -> Bool   -- ^ Is move allowd or not
> +isMoveAllowed Failover _ _ _ = True -- No disk moves in this case.
> +isMoveAllowed _ factor (Table _ _ a_cv _) (Table _ _ b_cv _) =
> +  a_cv > b_cv * factor
> +-- Disk move is allowed it results in score that is factor times lower.
> +

There are a couple of problems with this approach

- the specification talks about the gain, not the absolut value of the cluster
  scores.

- you're basically modifying the comparison function that is folded to find
  the minimum. This means, your comparing disk moves to whatever has been
  the best move before
  - in this arbitrary search order,
  - be it another disk move or not.
  This is not what is specified either.

- Failover is not the only non-disk move. Think about shared/external storage
  and failover-to-any.


-- 
Klaus Aehlig
Google Germany GmbH, Dienerstr. 12, 80331 Muenchen
Registergericht und -nummer: Hamburg, HRB 86891
Sitz der Gesellschaft: Hamburg
Geschaeftsfuehrer: Graham Law, Christine Elizabeth Flores

Reply via email to