1. 06 Nov, 2007 4 commits
    • Iustin Pop's avatar
      Allow DRBD8 operation without backing storage · fc1dc9d7
      Iustin Pop authored
      This patch adds the following functionality:
        - DRBD8 devices can assemble without local storage (done by allowing
          None in the list of children, and making DRBD8 to ignore all
          children if any is None)
        - DRBD8 devices can attach (i.e. identify a device) which is not
          connected to backing storage but to the correct network ports; this
          is a rare case in normal operation (it's what would happen if one
          manually detaches the local disk, and the backing LV still exists)
      
      Reviewed-by: imsnah
      fc1dc9d7
    • Iustin Pop's avatar
      Make DRBD8 disks show 'degraded' status if diskless · 583e3f6f
      Iustin Pop authored
      This patch enables the bdev.DRBD8 class report a degraded status if the
      local disk is missing. This allows `gnt-instance info` to report the
      actual situation in this case.
      
      Note that DRBD7 should also behave like this, however the diskless case
      is less often met there and we also don't want to change behaviour.
      
      The patch also fixes some docstrings for the GetSyncStatus methods.
      
      Reviewed-by: imsnah
      583e3f6f
    • Iustin Pop's avatar
      Change the way remove children is called in bdev · e739bd57
      Iustin Pop authored
      For some cases, we don't have to have access to the children of a device
      in order to remove them (e.g. md over lvs, or drbd over lvs). In order
      to ease the removal process, skip over finding the child if it provides
      a static dev path.
      
      This is needed in order to support removal of children when the
      underlying storage has gone away.
      
      Reviewed-by: imsnah
      e739bd57
    • Iustin Pop's avatar
      Add a support function to objects.Disk · 222f2dd5
      Iustin Pop authored
      This patch adds a function returning the device path if it is computable
      from the disk object (and we don't need to instantiate a bdev object on
      the target node in order to compute this). Only LVs support this.
      
      Reviewed-by: imsnah
      222f2dd5
  2. 05 Nov, 2007 13 commits
    • Iustin Pop's avatar
      Small cleanup for error formatting · e2e521d0
      Iustin Pop authored
      Reviewed-by: ultrotter
      e2e521d0
    • Iustin Pop's avatar
      Handle missing init script at cluster init · c7b46d59
      Iustin Pop authored
      This patch adds a check in the prereq of LUInitCluster for the existence
      of the init script.  This allows a clean abort instead of a stack dump.
      
      Based on a report by admin@steibei.net
      
      Reviewed-by: ultrotter
      c7b46d59
    • Iustin Pop's avatar
      Fix a unhandled error case in device creation · cf5a8306
      Iustin Pop authored
      The block device creation process is the following:
        - device create
        - device assembly (on primary or depending on dev_type, on secondary
          too)
        - set sync speed
        - return
      
      The problem is that device assembly after creation was not checked for
      errors, and as this is a very unusual case, we did not have problems
      with it (or we didn't detect them). The recent DevCacheManager however
      tripped on this case (because the dev_path of the device is None if the
      assembly fails) and the creation aborted with an unclear error message.
      
      The patch adds a check for the assembly success and aborts the creation
      of the device in this case - the error is quite clear in the instance
      add, for example. The patch also changes DevCacheManager to log the
      cases when dev_path is None but not raise an error (keeping consistent
      with the goal that the cache manager should be transparent to the code).
      
      For the record, this error case was detected with a mismatch between
      drbd kernel module and utilities.
      
      Reviewed-by: imsnah
      cf5a8306
    • Iustin Pop's avatar
      Miscellaneous style fixes · 65fe4693
      Iustin Pop authored
      This patch fixes some minor pylint warnings (unused variables, wrong
      indentation, etc.) and a real bug in the recovery for drbd8 rename
      procedure.
      
      Reviewed-by: imsnah
      65fe4693
    • Michael Hanselmann's avatar
      Test tag functionality. · d74c2ca1
      Michael Hanselmann authored
      Reviewed-by: schreiberal
      d74c2ca1
    • Michael Hanselmann's avatar
      Merge three small cluster tests into one. · 62843684
      Michael Hanselmann authored
      Reviewed-by: schreiberal
      62843684
    • Michael Hanselmann's avatar
      Rename utils.GetUUID to utils.NewUUID. · 24818e8f
      Michael Hanselmann authored
      Reviewed-by: schreiberal
      24818e8f
    • Guido Trotter's avatar
      Bump protocol version up · 8ee53a06
      Guido Trotter authored
      The OS cleanup patches change the wire protocol. Increment the protocol number
      by one.
      
      Reviewed-By: iustinp
      
      8ee53a06
    • Guido Trotter's avatar
      Convert os_get to use OS rather than InvalidOS · dfa96ded
      Guido Trotter authored
      In order to do this for simplicity we leave the OSFromDisk function as-is and
      we convert the eventual exception to an OS object in ganeti-noded. The
      unmangling gets simplified and so does the code for checking whether the OS is
      valid.
      
      Reviewed-By: iustinp
      
      dfa96ded
    • Guido Trotter's avatar
      Simplify diagnose mangling/unmangling functions · 4e679f11
      Guido Trotter authored
      The functions in ganeti-noded and rpc.py still deal with the fact that an
      InvalidOS error could be returned by DiagnoseOS. As this is not the case
      anymore simplify their code for the current behavior.
      
      Reviewed-By: iustinp
      
      4e679f11
    • Guido Trotter's avatar
      Make DiagnoseOS use the modified OS objects · 8fa42c7c
      Guido Trotter authored
      Modify backend.py so that DiagnoseOS only returns OS objects rather than
      InvalidOS errors, and make sure gnt-os understands the new objects. Also delete
      the deprecated helper functions from gnt-os.
      
      Reviewed-By: iustinp
      
      8fa42c7c
    • Guido Trotter's avatar
      Create OS from an InvalidOS error · d2c807e4
      Guido Trotter authored
      Add a new FromInvalidOS static function to objects.OS that makes it easy to
      create an object representing a broken OS starting from the relevant exception.
      
      Reviewed-By: iustinp
      
      d2c807e4
    • Guido Trotter's avatar
      Make the OS object able to represent broken OSes · 37482e7b
      Guido Trotter authored
      Till now the OS object just represents a correct OS instance.  Change it so it
      can represent a broken one too, by adding a "status" field: if this field is
      different from the OS_VALID_STATUS constant the object is considered to be an
      invalid OS, the "status" field to be a debugging message, and its boolean
      status is set to false.
      
      Reviewed-By: iustinp
      37482e7b
  3. 04 Nov, 2007 3 commits
  4. 03 Nov, 2007 1 commit
    • Iustin Pop's avatar
      Implement tag searching · 73415719
      Iustin Pop authored
      This patch adds a search command for locating tags on all objects of the
      cluster using a regex pattern.
      
      Reviewed-by: aat
      73415719
  5. 02 Nov, 2007 5 commits
    • Michael Hanselmann's avatar
      Test “gnt-cluster command”. · 830da270
      Michael Hanselmann authored
      Also check whether file contents are correct for both “gnt-cluster command” and
      “gnt-cluster copyfile”.
      
      Reviewed-by: iustinp
      
      830da270
    • Iustin Pop's avatar
      Implement device to instance mapping cache · 3f78eef2
      Iustin Pop authored
      Currently, troubleshooting DRBD problems involves a manual process of going
      backwards from the DRBD device to the instance that owns it.
      
      This patch adds a weak (i.e. not guaranteed to be correct or up-to-date)
      cache of device to instance. The cache should be, in normal operation,
      having correct information as the only time when devices change paths
      are when they are started/stopped, and the code in backend.py adds cache
      updates to exactly these operations.
      
      The only drawback of this implementation is that we don't fully update
      the cache on renames of devices (we clean the old entries but we don't
      add new ones). Since the rename changes the path only for LVs (and not
      drbd and md), this is less of a problem as the target of this code is
      debugging DRBD and MD issues.
      
      The patch writes files named bdev_drbd<N> (or bdev_md<N>,
      bdev_xenvg_...) in /var/run/ganeti (more exactly, LOCALSTATEDIR/ganeti).
      The files start with 'bdev_' and continue with the path of the device
      under /dev/ (this prefix stripped), and contain the following values,
      space separated:
        - instance name
        - primary or secondary (depending on how the device is on the primary
          or secondary node)
        - instance visible name: sda or sdb or not_visible, the latter case
          when the device is not the top-level device (i.e. remote_raid1
          templates will have sd[ab] for the md, but not_visible for drbd and
          logical volumes)
      
      The cache is designed to not raise any errors, if there is an I/O error
      it will only be logged in the node daemon log file. This is in order to
      reduce the possible impact of the cache on the block device activation
      and shutdown code.
      
      Reviewed-by: imsnah
      3f78eef2
    • Iustin Pop's avatar
      Improve burnin with regard to drbd8 · 79f87a76
      Iustin Pop authored
      Allow burnin to use the new drbd8 template (for which case one needs to
      disable replacement of disks, burnin does yet support that with drbd8).
      
      The patch also changes do-replace[12] to no-replace[12] as that is what
      they actually do.
      
      Reviewed-by: imsnah
      79f87a76
    • Iustin Pop's avatar
      Update the dev_path on LVs on rename · be345db0
      Iustin Pop authored
      When renaming a logical volume, we should change the dev_path (and other
      internal variables) in order to be consistent.
      
      Reviewed-by: imsnah
      be345db0
    • Iustin Pop's avatar
      Revision 302 is broken, this fixes it · 25a915d0
      Iustin Pop authored
      I forgot a pair of parentheses in that revision which break the common
      case. This patch adds them.
      
      Reviewed-by: ultrotter
      25a915d0
  6. 01 Nov, 2007 10 commits
    • Iustin Pop's avatar
      Fix printing of unconfigured DRBD devices · 073ca59e
      Iustin Pop authored
      If the device is unconfigured (not yet did SetDiskID for it ever), it
      might have a physical_id of None. This patch fixes that case.
      
      Reviewed-by: ultrotter
      073ca59e
    • Guido Trotter's avatar
      Remove two trailing whitespaces · d06565e0
      Guido Trotter authored
      Ok, I've been battling with those for a while but it seems
      in the end I forgot to get rid of them! :( Doing it explicitely now.
      
      Reviewed-By: iustinp
      d06565e0
    • Guido Trotter's avatar
      Move blank lines inside function messages · 2527691a
      Guido Trotter authored
      This patch changes whitespace only. It fixes all the functions in script/gnt-os
      by putting a white line at the end of all the function descriptions and
      removing it from just before the code.
      
      Reviewed-By: iustinp
      2527691a
    • Guido Trotter's avatar
      Add empty line after each diagnose OS-Node set · dd96409a
      Guido Trotter authored
      Reviewed-By: imsnah
      dd96409a
    • Guido Trotter's avatar
      Modify the displayed format for gnt-os diagnose · 107b0ccb
      Guido Trotter authored
      Get rid of the tabulated form and create a simplier indented structure.
      Now a valid OS looks something like:
      
      OS: foo [global status: partial valid]
        Node: gsdtest4.euw.corp.google.com, status: valid (path: /usr/local/lib/ganeti/os/foo)
        Node: gsdtest5.euw.corp.google.com, status: valid (path: /usr/local/lib/ganeti/os/foo)
          [hidden] path: /usr/local/lib/ganeti/os2/foo, status: 'ganeti_api_version' file not found (ENOENT)
        Node: gsdtest3.euw.corp.google.com, status: 'ganeti_api_version' file not found (ENOENT) (path: /usr/local/lib/ganeti/os/foo)
      
      Reviewed-By: imsnah
      107b0ccb
    • Guido Trotter's avatar
      Change the way to compute the first os status message · 48f85f75
      Guido Trotter authored
      Use both _DiagnoseOSStatus and  _DiagnoseOSPath to calculate the message
      associated with the first entry found on a node for an OS. Also call the rename
      the relevant variables to _msg rather than just _status to reflect that they
      contain a bit more than just the bare status message.
      
      Reviewed-By: imsnah
      
      48f85f75
    • Guido Trotter's avatar
      Separate OS status and path · 5efc50fc
      Guido Trotter authored
      Make _DiagnoseOSStatus only return a status message for the OS diagnose object
      and create a new _DiagnoseOSPath function to get the path out. This will let us
      be more flexible in the messages we display to the user.
      
      Reviewed-By: imsnah
      5efc50fc
    • Iustin Pop's avatar
      Whitespace fixes · 5d0fe286
      Iustin Pop authored
      Reviewed-by: ultrotter
      5d0fe286
    • Michael Hanselmann's avatar
      Cleanup colouring functions. · dfe11bad
      Michael Hanselmann authored
      Make the code somewhat smaller. Disable disk failure test for master for now.
      
      Reviewed-by: schreiberal
      
      dfe11bad
    • Michael Hanselmann's avatar
      Cleanup QA scripts. · b1ffe1eb
      Michael Hanselmann authored
      - Split main() function into several small ones.
      - Current work on disk failure tests. This is not yet finished.
      - Fix small typo in qa_node.py.
      
      Reviewed-by: schreiberal
      
      b1ffe1eb
  7. 31 Oct, 2007 4 commits