1. 05 Sep, 2008 1 commit
    • Guido Trotter's avatar
      Add locking.ALL_SET constant and use it · e310b019
      Guido Trotter authored
      Rather than specifying None in needed_locks every time, with a nice
      comment saying to read what we mean rather than what we write, and that
      None actually means All, in our magic world, we'll hide this secret
      under the ALL_SET constant in the locking module, which has value, you
      guessed it, None. After that we'll substitute all usage in cmdlib.
      Some comments and examples have been fixed as well.
      Reviewed-by: iustinp
  2. 04 Sep, 2008 7 commits
  3. 02 Sep, 2008 3 commits
  4. 01 Sep, 2008 4 commits
    • Alexander Schreiber's avatar
      merge r1539 from branches/ganeti/ganeti-1.2 · 34b6ab97
      Alexander Schreiber authored
      Display VNC console port in gnt-instance info.
      Reviewed-by: iustinp
    • Alexander Schreiber's avatar
      merge r1538 from branches/ganeti/ganeti-1.2 · 5bc84f33
      Alexander Schreiber authored
      Check HVM device type on instance modify as well.
      Reviewed-by: imsnah
    • Guido Trotter's avatar
      Check memory size before setting it · cfefe007
      Guido Trotter authored
      With this change when a user asks for a new memory size for an instance,
      the number is checked instead of just applied. The operation fails only
      if the instance would not be able to restart on its primary node, but
      generates warnings should it be impossible to failover the instance or
      should the computation be impossible due to nodes being unreachable.
      This is a forward-port from branches/ganeti-1.2
      Original-Reviewed-by: iustinp
      Reviewed-by: iustinp
    • Guido Trotter's avatar
      Pass the force param to SetInstanceParms · 4300c4b6
      Guido Trotter authored
      It was already allowed in gnt-instance modify, but ignored.
      It will be used to force skipping parameter checks.
      This is a forward-port from branches/ganeti-1.2
      Original-Reviewed-by: imsnah
      Reviewed-by: iustinp
  5. 29 Aug, 2008 2 commits
  6. 28 Aug, 2008 1 commit
    • 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
  7. 18 Aug, 2008 4 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
    • 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
    • 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
    • Michael Hanselmann's avatar
      LUVerifyCluster: Return boolean indication success · 34290825
      Michael Hanselmann authored
      Reviewed-by: schreiberal
  8. 06 Aug, 2008 1 commit
    • Michael Hanselmann's avatar
      Implement {Add,Readd,Remove}Node in GanetiContext · d8470559
      Michael Hanselmann authored
      By doing this we've a central place which coordinates what needs to be
      done when adding or removing nodes. Another patch will add calls into
      the job queue.
      Two log messages move to config.py.
      When removing a node, node_leave_cluster is now called after it has
      been removed from the configuration and job manager. That way we're
      sure not to access the node again after files have been removed.
      Reviewed-by: iustinp
  9. 30 Jul, 2008 11 commits
    • Iustin Pop's avatar
      Fix cluster destroy · 140aa4a8
      Iustin Pop authored
      With the recent startup/shutdown changes (and with the master daemon in
      place), the cluster destroy needs some fixing.
      This patch moves the finalization of the destroy out from cmdlib into
      bootstrap, so we can nicely shutdown the rapi and master daemons.
      Reviewed-by: ultrotter
    • Guido Trotter's avatar
      Parallelize LUFailoverInstance · c9e5c064
      Guido Trotter authored
      Reviewed-by: iustinp
    • Iustin Pop's avatar
      Fix pylint-detected issues · 38206f3c
      Iustin Pop authored
      This is mostly:
        - whitespace fix (space at EOL in some files, not all, broken
          indentation, etc)
        - variable names overriding others (one is a real bug in there)
        - too-long-lines
        - cleanup of most unused imports (not all)
      Reviewed-by: ultrotter
    • Guido Trotter's avatar
      Parallelize {Startup,Shutdown,Reboot}Instance · e873317a
      Guido Trotter authored
      Reviewed-by: iustinp
    • Guido Trotter's avatar
      Parallelize LUReinstallInstance · 4e0b4d2d
      Guido Trotter authored
      self.recalculate_locks[locking.LEVEL_NODE] could have any value and
      everything would work anyway. We'll use the string 'replace' by
      convention because in the future we might want an 'append' mode.
      Reviewed-by: iustinp
    • Guido Trotter's avatar
      LogicalUnit._LockInstancesNodes helper function · c4a2fee1
      Guido Trotter authored
      This function is used to lock instances' primary and secondary nodes
      after locking instances themselves.
      Reviewed-by: iustinp
    • Guido Trotter's avatar
      Make sharing locks possible · 3977a4c1
      Guido Trotter authored
      LUs can declare which locks they need by populating the
      self.needed_locks dictionary, but those locks are always acquired as
      exclusive. Make it possible to acquire shared locks as well, by
      declaring a particular level as shared in the self.share_locks
      dictionary. By default this dictionary is populated so that all locks
      are acquired exclusively.
      Reviewed-by: iustinp
    • Guido Trotter's avatar
      Add LogicalUnit.DeclareLocks · fb8dcb62
      Guido Trotter authored
      This additional LogicalUnit function is optional to implement, but lets
      you change your locking needs for one level just before locking it, but
      after the previous levels have been already locked. It is useful for
      example to calculate what nodes to lock after locking an instance.
      Reviewed-by: iustinp
    • Guido Trotter's avatar
      LURenameInstance, add/remove relevant locks · 74b5913f
      Guido Trotter authored
      LURenameInstance forgot to remove the old lock name and add the new one,
      making it impossible for parallel LUs to act on the instance (without a
      master daemon restart). This also fixes burning+rename with the
      parallelization of {Start,Stop}Instance.
      Reviewed-by: iustinp
    • Iustin Pop's avatar
      Rework master startup/shutdown/failover · b1b6ea87
      Iustin Pop authored
      This (big) patch reworks the master startup/shutdown and the fixes the
      master failover.
      What does the patch do?
      For master start/stop:
        - remove the old ganeti-master script and its associated man page
        - moves the ip start/stop directly into the backend.(Start|Stop)Master
        - adds start/stop of the master/rapi daemon into these functions,
          selectively based on the start/stop arguments
        - makes the master call via rpc StartMaster(start_daemons=False) to
          the local node so that the master IP is started
        - and finally changes the example init.d script to directly start and
          stop all three daemons, since they do the right thing (depending on
          master/not master role)
      For master failover:
        - moves the code from LUMasterFailover into bootstrap.MasterFailover,
          since we need to start/stop the master during this operation and
          thus it can't be executed from the master
        - removes the LUMasterFailover and its associated opcode
      Notes: ubuntu's /etc/lsb-base-logging.sh is dumb, so the messages 'not
      master' are not seen during startup on non-master nodes.
      Reviewed-by: ultrotter
    • Iustin Pop's avatar
      Add a new parameter to backend.(Start|Stop)Master · 1c65840b
      Iustin Pop authored
      This patch adds a new, unused for now, parameter to the start and stop
      master operations in backend. The idea behind it is that we need to be
      able to control whether the IP (de)activation is coupled with daemon
      The callers are also modified to pass this parameter (even if unused for
      Reviewed-by: ultrotter
  10. 25 Jul, 2008 1 commit
  11. 22 Jul, 2008 5 commits
    • Guido Trotter's avatar
      Convert SetInstanceParams to concurrency · 1a5c7281
      Guido Trotter authored
      Grab a lock for the instance we're working on, and update its params.
      Reviewed-by: iustinp
    • Guido Trotter's avatar
      Use Update in SetInstanceParams · ea94e1cd
      Guido Trotter authored
      When we set the instance params we're not adding a new instance, but
      just updating an existing one, so why using AddInstance?
      Reviewed-by: iustinp
    • Guido Trotter's avatar
      Convert LUConnectConsole to concurrency · 8659b73e
      Guido Trotter authored
      For ConnectConsole we just need to lock the instance we're connecting
      to. We make a few rpcs to its primary node, but node daemons can now
      handle multiple queries and nodes cannot be removed till they have
      instances on them anyway. Note that since we return the ssh command, and
      that's executed outside of the ganeti daemon, without any locks held,
      the instance can then be subject to operations while we're connected to
      it, but that was the previous behavior as well.
      Reviewed-by: iustinp
    • Guido Trotter's avatar
      Add _ExpandAndLockInstance auxiliary function. · 43905206
      Guido Trotter authored
      LUs that take an instance name as input and need to expand its name and
      lock it can use it to simplify their ExpandNames call. Possibly, and
      _ExpandAndLockNode will come as well.
      Reviewed-by: iustinp
    • Guido Trotter's avatar
      Convert two (simple) LUs to be concurrent · 642339cf
      Guido Trotter authored
      LUQueryClusterInfo and LUDumpClusterConfig can be made concurrent and
      don't need to acquire any locks. In fact they don't interact with the
      cluster at all, but just with its configuration, which is thread-safe by
      Reviewed-by: iustinp