1. 29 Aug, 2008 2 commits
    • Iustin Pop's avatar
      Make WaitForJobChanges deal with long jobs · 5c735209
      Iustin Pop authored
      This patch alters the WaitForJobChanges luxi-RPC call to have a
      configurable timeout, so that the call behaves nicely with long jobs
      that have no update.
      
      We do this by adding a timeout parameter in the RPC call, and returning
      a special constant when the timeout is reached without an update. The
      luxi client will repeatedly call the WaitForJobChanges until it gets a
      real change. The timeout is hardcoded as half the RWTO value.
      
      The patch also removes an unused variable (new_state) from the
      WaitForJobChanges method.
      
      Reviewed-by: imsnah,ultrotter
      5c735209
    • Alexander Schreiber's avatar
      merge r997 from branches/ganeti/ganeti-1.2 · 3fc175f0
      Alexander Schreiber authored
      Fix gnt-instance modify for HVM parameters
      
      This patch makes gnt-instance modify work again for the advanced
      HVM parameters after it was broken by other changes.
      
      
      Reviewed-by: ultrotter
      
      3fc175f0
  2. 28 Aug, 2008 2 commits
    • Michael Hanselmann's avatar
      Fix error message when masterd is not listening · 082c5adb
      Michael Hanselmann authored
      Reported by Iustin.
      
      Reviewed-by: iustinp
      082c5adb
    • Guido Trotter's avatar
      Fix issue when acquiring empty lock sets · 6683bba2
      Guido Trotter authored
      By design if an empty list of locks is acquired from a set, no locks are
      acquired, and thus release() cannot be called on the set. On the other
      hand if None is passed instead of the list, the whole set is acquired,
      and must later be released. When acquiring whole empty sets, a release
      must happen too, because the set-lock is acquired.
      
      Since we used to overwrite the required locks (needed_locks) with the
      acquired ones, we weren't able to distinguish the two cases (empty list
      of locks required, and all locks required, but an empty list returned
      because the set is empty). Valid solutions include:
        (1) forbidding the acquire of empty lists of locks
        (2) skipping the acquire/release on empty lists of locks
        (3) separating the to-acquire and the acquired list
      
      This patch implements the third approach, and thus LUs will find
      acquired locks in the acquired_locks dict, rather than in needed_locks.
      The LUs which used this feature before have been updated. This makes it
      easier because it doesn't force LUs to do more checks on corner cases,
      which are easily forgettable (1) and allows more flexibility if we want
      LUs to release (part-of) the locks (which is still a possibly scary
      operation, but anyway). This easily combines with (2) should we choose
      to implement it.
      
      Reviewed-by: imsnah
      6683bba2
  3. 27 Aug, 2008 5 commits
    • Michael Hanselmann's avatar
      jqueue: Replace normal cache dict with weakref dict · 5685c1a5
      Michael Hanselmann authored
      A job should only exist once in memory. After the cache is cleaned,
      there can still be references to a job somewhere else. If there
      are multiple instances, one can get updated while a function is
      waiting for changes on another instance. By using
      weakref.WeakValueDictionary, which automatically removes instances as
      soon as there are no strong references to it anymore, we can solve
      this problem.
      
      Reviewed-by: iustinp
      5685c1a5
    • Michael Hanselmann's avatar
      jqueue: Keep timestamp of opcode start and end · 70552c46
      Michael Hanselmann authored
      Reviewed-by: ultrotter
      70552c46
    • Michael Hanselmann's avatar
      jqueue: Reset run_op_idx after job is done · 65548ed5
      Michael Hanselmann authored
      It can be confusing otherwise.
      
      Reviewed-by: ultrotter
      65548ed5
    • Iustin Pop's avatar
      Fix a small typo in a constant · 6abe9194
      Iustin Pop authored
      Seems noone ran a burnin lately :)
      
      Reviwed-by: amischenko,ultrotter
      6abe9194
    • Michael Hanselmann's avatar
      Make sure that client programs get all messages · 6c5a7090
      Michael Hanselmann authored
      This is a large patch, but I can't figure out how to split it without
      breaking stuff. The old way of getting messages by always getting the
      last one didn't bring all messages to the client if they were added
      too fast, thereby making commands like “gnt-cluster verify” less than
      useful. These changes now introduce some sort a serial number per
      log entry to keep track what message a client already received. They
      also remove the log lock per opcode to make reading log entries thread
      safe.
      
      Reviewed-by: ultrotter
      6c5a7090
  4. 26 Aug, 2008 1 commit
    • Michael Hanselmann's avatar
      Add simple lock debug output · e67bd559
      Michael Hanselmann authored
      Currently it can only be enabled by modifying utils.py, but we can
      add a command line parameter later if needed.
      
      Reviewed-by: schreiberal
      e67bd559
  5. 18 Aug, 2008 7 commits
    • Guido Trotter's avatar
      Parallelize LUQueryNodes · 35705d8f
      Guido Trotter authored
      As for LUQueryInstances the first version just acquires a shared lock on all
      nodes. In the future further optimizations are possible, as outlined by
      comments in the code.
      
      Reviewed-by: imsnah
      35705d8f
    • Guido Trotter's avatar
      Parallelize LUQueryInstances · 7eb9d8f7
      Guido Trotter authored
      This first version acquires a shared lock on all requested instances and
      their nodes. In the future it can be improved by acquiring less locks if
      no dynamic fields have been asked, and/or by locking just primary nodes.
      
      Reviewed-by: imsnah
      7eb9d8f7
    • Guido Trotter's avatar
      LockSet: allow lists with duplicate values · 34ca3914
      Guido Trotter authored
      If a list with a duplicate value is passed to a lockset what the code
      now does is to try to acquire the lock twice, generating a
      double-acquire exception in the SharedLock code. This is definitely an
      issue. In order to solve it we can either forbit double values in a list
      or just delete the duplicates. In this patch we go for the latter
      solution, removing any duplicate values when creating the acquire_list.
      
      Reviewed-by: imsnah
      34ca3914
    • Guido Trotter's avatar
      Processor: lock all levels even if one is missing · 8a2941c4
      Guido Trotter authored
      If a locking level wasn't specified locking used to stop. This means
      that if one, for example, didn't specify anything at the LEVEL_INSTANCE
      level, no locks at the LEVEL_NODE level were acquired either. With this
      patch we force _LockAndExecLU to be called for all existing levels, and
      break the recursion if the level doesn't exist in locking.LEVELS.
      
      Reviewed-by: imsnah
      8a2941c4
    • Guido Trotter's avatar
      LURebootInstance: move arg check in ExpandNames · 0fcc5db3
      Guido Trotter authored
      The check for the reboot type can be done without any locks held, so
      we'll move it to ExpandNames. Plus, we note in a FIXME that if the
      reboot type is not full, we can probably just lock the primary node, and
      leave the secondary unlocked.
      
      Reviewed-by: imsnah
      0fcc5db3
    • Michael Hanselmann's avatar
      LUVerifyCluster: Return boolean indication success · 34290825
      Michael Hanselmann authored
      Reviewed-by: schreiberal
      34290825
    • Michael Hanselmann's avatar
      Use Linux-specific way to name master socket · 9894ece7
      Michael Hanselmann authored
      By using this Linux-specific way we don't have to care about removing the
      socket file when quitting or starting (after an unclean shutdown). For a
      more detailed description, see the comment in the patch.
      
      Reviewed-by: schreiberal
      9894ece7
  6. 15 Aug, 2008 4 commits
  7. 14 Aug, 2008 2 commits
    • Guido Trotter's avatar
      Pass hypervisor type to the OS scripts · 4f0afaf5
      Guido Trotter authored
      It's handy to make the os scripts know which hypervisor the instance is
      going to run under. In order not to change the os API we pass this
      information in the environment, where the os scripts can access it if
      they're hypervisor-aware.
      
      Reviewed-by: imsnah
      4f0afaf5
    • Guido Trotter's avatar
      RunCmd: add optional environment overriding · 2557ff82
      Guido Trotter authored
      If the user passes an env dict to RunCmd we'll override the environment
      passed to the to-be-executed command with the values in the dict. This
      allows us to pass arbitrary environment values to commands we run.
      
      Reviewed-by: imsnah 
      2557ff82
  8. 13 Aug, 2008 7 commits
    • Guido Trotter's avatar
      KVM Hypervisor Cleanup · d47d3d38
      Guido Trotter authored
      - Remove a few experiemental code lines left as comments
      - Rework first disks' boot=on addition, which was calculated twice
      - Remove an empty line
      - Remove reference to hvm_pae which doesn't apply to kvm
      
      Reviewed-by: imsnah
      d47d3d38
    • Guido Trotter's avatar
      Add KVM hypervisor code · eb58f9b1
      Guido Trotter authored
      ht_kvm.py contains the code for ganeti to work under kvm.
      This patch also modifies Makefile.am to ship that file, and
      lib/hypervisor/__init__.py to import it, and add kvm to the
      hypervisors map.
      
      Reviewed-by: imsnah
      eb58f9b1
    • Guido Trotter's avatar
      constants: add HT_KVM · 550e49b9
      Guido Trotter authored
      Add a new hypervisor type, HT_KVM, to constants, and register it in the
      HYPER_TYPES set.
      
      Reviewed-by: imsnah
      550e49b9
    • Guido Trotter's avatar
      Add --with-kvm-path configure option · 7e2c5b9e
      Guido Trotter authored
      This allows to configure a different path to the kvm binary. By default
      /usr/bin/kvm is used, which is the one found in debian and ubuntu.
      
      Reviewed-by: imsnah
      7e2c5b9e
    • Guido Trotter's avatar
      FakeHypervisor: fix a function signature · a5f723a2
      Guido Trotter authored
      StartInstance takes 'block_devices', not 'force' as its third argument.
      Even if this is not used in the fake hypervisor it's better to have the
      correct argument name to avoid confusion.
      
      Reviewed-by: imsnah
      a5f723a2
    • Guido Trotter's avatar
      Convert RunCmd to an epydoc docstring · e326d4e5
      Guido Trotter authored
      Reviewed-by: imsnah
      e326d4e5
    • Michael Hanselmann's avatar
      Fix adding pristine nodes · 51144e33
      Michael Hanselmann authored
      If a node hasn't been part of the cluster before being added it'll not
      have the cluster's SSH key. This patch makes sure to accept those by
      not aliasing the machine name to the cluster name.
      
      Reviewed-by: ultrotter
      51144e33
  9. 12 Aug, 2008 1 commit
  10. 11 Aug, 2008 4 commits
  11. 08 Aug, 2008 5 commits