• Julien Muchembled's avatar
    Maximize resiliency by taking into account the topology of storage nodes · 97af23cc
    Julien Muchembled authored
    This commit adds a contraint when tweaking the partition table with replicas,
    so that cells of each partition are assigned as far as possible from each
    other, e.g. not on the same machine even if each one has several disks, and
    in any case not on the same storage device.
    
    Currently, the topology path of each node is automatically calculated by the
    storage backend. Both MySQL and SQLite return a 2-tuple (host, st_dev).
    To be improved:
    - Add a storage option to override the path: the 'tweak' algorithm can already
      handle topology paths of any length, so something like (room, machine, disk)
      could be done easily.
    - Write OS-specific code to determine the real hardware behind st_dev
      (e.g. 2 different 'st_dev' values may actually refer to the same disk,
       because of layers like partitioning, device-mapper, loop, btrfs subvolumes,
       and so on).
    - Make 'neoctl' report in some way if the PT is optimal. Meanwhile,
      if it isn't, the master only logs a WARNING during tweak.
    97af23cc
replicator.py 20.2 KB