Oleksiy Mishchenko [Mon, 21 Apr 2008 10:20:56 +0000 (10:20 +0000)]
Move RAPI constants to ganeti.constants
Reviewed-by: iustinp
Oleksiy Mishchenko [Thu, 17 Apr 2008 08:08:24 +0000 (08:08 +0000)]
Switch RAPI to default ganeti logging and Daemonize it with ganeti.utils
Reviewed-by: insmah
Iustin Pop [Wed, 16 Apr 2008 13:17:30 +0000 (13:17 +0000)]
IAllocator part 3: LUCreateInstance changes
This (final) patch allows the instance's nodes to be selected
automatically based on the passed allocator algorithm.
The patch changes the pnode opcode parameter from required to optional,
now either the pnode or the iallocator must be passed.
A possible improvement could be to organize all the _IAllocator
functions into a separate class, but that can come later and the current
version is functionally ok.
Reviewed-by: ultrotter
Iustin Pop [Wed, 16 Apr 2008 13:17:01 +0000 (13:17 +0000)]
Reorder checks in instance create
This patch reorders the checks in the instance create prereq so that all
checks and normalisations that are not node-dependent are done before
the node dependent checks.
This is done so that, after the instance-related opcode parameters are
checked and fixed, we can run the allocator and compute the primary (and
any secondary) nodes, and only then proceed with node-related checks.
Reviewed-by: ultrotter
Iustin Pop [Wed, 16 Apr 2008 13:16:40 +0000 (13:16 +0000)]
Implement 'out' direction on allocator tests
This patch adds the paths for searching for instance allocators and
makes the LUTestAllocator code run the allocator and return the results
if the direction specified is 'out'. 'out' means that the opcode will
return the result of the allocator run, instead of the allocator input
file ('in').
The patch unifies all names to refer to 'iallocator' instead of plain
allocator.
The patch also adds an example allocator that can be used for testing
this new functionality.
Reviewed-by: ultrotter
Guido Trotter [Tue, 15 Apr 2008 16:11:35 +0000 (16:11 +0000)]
Bugfix: wrong identifier in CheckPrereq message
Reviewed-by: iustinp
Iustin Pop [Tue, 15 Apr 2008 12:30:09 +0000 (12:30 +0000)]
Move the disk size computation to its own function
This is currently hard-coded for the two drive case and will need to be
reworked for multi-disk support.
The patch is needed to support passing the total required size to the
iallocator interface.
Reviewed-by: ultrotter
Iustin Pop [Mon, 14 Apr 2008 11:54:43 +0000 (11:54 +0000)]
Fix a typo in rapi.RESTHTTPServer
Reviewed-by: amishchenko
Oleksiy Mishchenko [Fri, 11 Apr 2008 21:26:02 +0000 (21:26 +0000)]
Fix pylint errors for RAPI
Reviewed-by: imsnah
Oleksiy Mishchenko [Fri, 11 Apr 2008 16:18:06 +0000 (16:18 +0000)]
Fix pylint errors for RAPI
Iustin Pop [Fri, 11 Apr 2008 14:22:11 +0000 (14:22 +0000)]
Install the rapi files at make install time
Reviewed-by: imsnah
Oleksiy Mishchenko [Fri, 11 Apr 2008 13:40:03 +0000 (13:40 +0000)]
Import first version of Ganeti Remote API
Reviewed-by: iustinp
Guido Trotter [Thu, 10 Apr 2008 16:48:26 +0000 (16:48 +0000)]
Verify: make skipping checks possible
Add a general way to skip some checks at cluster-verify time and make the N+1
memory redundancy check optional.
Reviewed-by: iustinp
Guido Trotter [Thu, 10 Apr 2008 16:48:06 +0000 (16:48 +0000)]
Verify: add N+1 Memory redundancy verification
For every node we check that we can host all the instances it's currently
secondary for belonging to the same primary. This ensures that if a node fails
all its instances can fit on their secondary node. The code only works when
failover is forced to go to the secondary node, and cannot go to an arbitrary
node in the cluster, which is the case in Ganeti 1.2.
Reviewed-by: iustinp
Iustin Pop [Thu, 10 Apr 2008 14:59:54 +0000 (14:59 +0000)]
Allow utils.Daemonize() to not close some fds
This patch implements an optional parameter to utils.Daemonize() which
allows that function to not close some file descriptors.
This will allow the master daemon to open the listening socket before
fork - in order to be able to notify errors and return a meaningful exit
code, and then when we fork we don't close that fd.
Reviewed-by: imsnah
Iustin Pop [Thu, 10 Apr 2008 14:58:46 +0000 (14:58 +0000)]
Move the daemonize function to utils.py
Currently, in ganeti-noded we have the createDaemon function. Since
we'll need the same in other daemons, we move this function to utils.py
With the move, a few changes were also done:
- change the name to Daemonize()
- add a parameter, logfile, as different daemons will want to log to
different files
- remove the try.. except.. around the fork calls, since they were
only re-raising the OS exception with less data; unless we want to
actually handle fork error (not just re-raising), these try blocks
are not useful
- change the return style at the end of the function
Reviewed-by: imsnah
Iustin Pop [Thu, 10 Apr 2008 13:36:43 +0000 (13:36 +0000)]
Move the OS search code into an abstract function
Based on the previous OS search code changes, we can now move the OS
search code into a generic look-for-file function in utils.py. This
means that the allocator code can use the same function.
Reviewed-by: ultrotter
Iustin Pop [Thu, 10 Apr 2008 13:36:21 +0000 (13:36 +0000)]
Change backend._OSSearch return values
Currently, the function backend._OSSearch() returns the (first) base dir
in which this OS can be found. Thereafter the full actual path to the OS
dir is built in the backend.OSFromDisk() function.
This patch changes this so that _OSSearch() always returns the full path
to the OS directory, and OSFromDisk uses that as returned (it will only
build it if it gets a base dir in the first place).
This patch is needed before we can abstract the _OSSearch into a generic
'look for file object' functionality that can be used for allocator
plugins search too.
Reviewed-by: ultrotter
Iustin Pop [Thu, 10 Apr 2008 12:58:00 +0000 (12:58 +0000)]
Fix example scripts build dependencies
Currently, the example scripts (the init.d and the cron script) do not
depend on the Makefile, so if configure is rerun with different
parameters these scripts are not rebuild.
The patch adds Makefile as a dependency so changes to installation paths
or other parameters trigger the rebuild.
Reviewed-by: imsnah
Guido Trotter [Thu, 10 Apr 2008 12:33:49 +0000 (12:33 +0000)]
Verify: save instance config
Save the instance config after we queried it in an instance_cfg dict. This can
be used later by any function that wants it, without reloading it from the
configuration module. It will be used for N+1 memory resilience checking.
Reviewed-by: iustinp
Guido Trotter [Thu, 10 Apr 2008 12:33:33 +0000 (12:33 +0000)]
Verify: add more instance information to node_info
The sisnt-by-pnode field contains all secondary instances of a node, grouped by
their primary node. This information allows us to see quickly if when a node
dies some of its instances cannot be started on their secondary node.
Reviewed-by: iustinp
Guido Trotter [Thu, 10 Apr 2008 12:33:18 +0000 (12:33 +0000)]
Verify: add instance information to node_info
With this patch node_info is changed to store information about which primary
and secondary instances are configured on a node. This information is useful to
check memory and disk allocation. A list of non-redundant instances is also
collected at this stage.
Reviewed-by: iustinp
Guido Trotter [Thu, 10 Apr 2008 12:33:05 +0000 (12:33 +0000)]
Verify: Add and populate node_info dict
During information gathering we collect information from call_node_info, and
then when we cycle trough the nodes add it into a node_info dict containing a
node's free memory and disk. This will be useful later to verify that the
cluster is N+1 redundant. The disk space is saved as well because it can be
useful for checks about disk space redundancy.
Reviewed-by: iustinp
Guido Trotter [Thu, 10 Apr 2008 10:07:58 +0000 (10:07 +0000)]
Verify: remove useless check in _VerifyInstance
The list of instances passed to _VerifyInstance is the one coming from
self.cfg.GetInstanceList(). So there's no point, inside that function, in
checking whether the current instance is a member of that list. Moreover
orphaned instance verification is already done in a separate step.
Reviewed-by: imsnah
Guido Trotter [Thu, 10 Apr 2008 10:07:44 +0000 (10:07 +0000)]
Verify: instance verification cleanup
The instance configuration is grabbed both in the _VerifyInstance function and
in the loop that calls it. Clean this up by passing the configuration as a
parameter.
Reviewed-by: imsnah
Guido Trotter [Thu, 10 Apr 2008 10:07:25 +0000 (10:07 +0000)]
Verify: fix crash when a node is down
Currently if ganeti-noded doesn't respond on a node gnt-cluster verify will die
when verifying primary instances for that node. Fix this by just emitting an
error message if no information about running instances is returned from the
node.
Reviewed-by: iustinp
Guido Trotter [Thu, 10 Apr 2008 10:06:57 +0000 (10:06 +0000)]
Verify: fix ERROR message indentation
All ERROR messages in cluster verify are indented by four spaces, this one is
indented by two. Fixing this skew.
Reviewed-by: imsnah, iustinp
Guido Trotter [Thu, 10 Apr 2008 10:06:40 +0000 (10:06 +0000)]
Fix spelling mistake in constants.py
Of course instance creation don't have any modem, and the comment was just
talking about modes. Sorry to everybody expecting whistles.
Reviewed-by: imsnah
Iustin Pop [Wed, 9 Apr 2008 13:01:34 +0000 (13:01 +0000)]
Allocator framework, 1st part: allocator input generation
In preparation for the introduction of automatic instance allocator,
this patch adds an allocator simulation opcode, that based on the input
parameters, will return either the input message to the allocator
(implemented) or the result of the allocator run (not yet implemented).
This allows algorithm tests against simulated allocations and the
current cluster state.
The patch adds the following:
- a function that generates the generic cluster information for the
allocator
- a function that generates the 'new instance' information
- a function that generates the 'replace_secondary' information
These three functions will be used by the allocator framework later to
generate the actual information for the external algorithms. Currently
we just return the json-serialized text.
Reviewed-by: imsnah
Iustin Pop [Wed, 9 Apr 2008 13:01:14 +0000 (13:01 +0000)]
Add a gnt-debug tool
This patch adds a script which submits a job consisting of the
OpTestDelay opcode. This can be helpful for debugging and can be
extended to execute other 'debug'-like tasks.
Reviewed-by: imsnah
Guido Trotter [Wed, 2 Apr 2008 18:31:37 +0000 (18:31 +0000)]
Improve disk consistency error message again
This new version includes all the possible failure options.
Reviewed-by: iustinp
Guido Trotter [Wed, 2 Apr 2008 18:01:54 +0000 (18:01 +0000)]
Fix misleading error message when checking disks
_CheckDiskConsistency outputs "Can't get any data from node NODE" when no drbd
is found on the target node. This causes a misleading error message to be
output for example on failover (when the primary node is down, or the instance
is not running), stating that no data could be got from the secondary node,
which scares the user and misleads him. Changing this to "Disk degraded or not
found on node %s" still reports that something is missing, but on the other
hand doesn't make the user think the node is down, or has no data at all...
Reviewed-by: imsnah
Guido Trotter [Wed, 2 Apr 2008 18:00:27 +0000 (18:00 +0000)]
Handle better failing over non-running instances
Right now if you try to failover an instance which is not marked as up the
operation will fail unless you pass the --ignore-consistency flag because the
disks won't be considered to be consistent. Allow them to be if we know the
instance shouldn't be up.
Reviewed-by: imsnah
Guido Trotter [Wed, 2 Apr 2008 18:00:13 +0000 (18:00 +0000)]
Improve export and fix export-on-norun bug
Currently gnt-backup export chains the ShutdownInstance and StartupInstance
opcodes to itself. This works but (a) it's suboptimal, because there's no need
to deactivate the instance's disks as we are about to restart it anyway, and
(b) doesn't take care of instances which are already down (and should be). This
patch takes care of this by just calling the shutdown rpc function instead of
the whole opcode, and just starting up the instance if it's configured as up in
the first place.
Reviewed-by: imsnah
Guido Trotter [Wed, 2 Apr 2008 17:00:33 +0000 (17:00 +0000)]
failover: only start instance if we should
gnt-instance failover on an instance marked as down will mistakenly bring it
up. The watcher will then shut it down again, but it's a lot better (and safer)
not to start it at all.
Reviewed-by: imsnah
Iustin Pop [Wed, 2 Apr 2008 09:08:27 +0000 (09:08 +0000)]
Update the lock autocleanup log message
Reviewed-by: ultrotter
Iustin Pop [Tue, 1 Apr 2008 16:02:22 +0000 (16:02 +0000)]
Add autocleanup of stale locks
This patch adds autocleanup of stale locks. This can be disabled by
passing --lock-noautoclean to the commands.
The autocleanup mechanism will only try to do five cleanups before
raising an exception, to protect against runaway processes or similar
conditions.
Reviewed-by: schreiberal
Guido Trotter [Tue, 1 Apr 2008 13:08:20 +0000 (13:08 +0000)]
Fix gnt-instance failover help message
The message used to misleadingly say that failover just works with remote_raid1
instances, while of course it works for drbd as well. Thanks to Jesus Climent
who spotted the bug.
Reviewed-by: imsnah
Iustin Pop [Mon, 31 Mar 2008 14:45:54 +0000 (14:45 +0000)]
Change the 'gnt-cluster command' execution order
This patch makes the command execute last on the master (if the master
is selected). The order for the other nodes is unchanged.
The patch also updates the man page with some explanations and an
example.
Reviewed-by: imsnah
Iustin Pop [Mon, 31 Mar 2008 13:13:49 +0000 (13:13 +0000)]
Change the gnt-backup export help text
Reviewed-by: ultrotter
Iustin Pop [Sun, 30 Mar 2008 14:55:45 +0000 (14:55 +0000)]
Change the order of config updates in some LUs
In the start and stop instance LUs, the configuration update is done
right at the end. This means that if, for example, the instance shutdown
succeeds, but the drive deactivation fails, the next run of the watcher
will start the instance again, as it's still marked in running mode.
This patch changes these two LUs so that first the update the
configuration to the desired state, and only then we proceed to update
the config. This ensures that the state saved is the desired state.
Because the config might be updated even though the LU failed, this
patch also modifies the mcpu.Processor.ExecOpCode method to run the
RunConfigUpdate hook in a finally: phase while the lu.Exec is done in
its try phase. This ensures that config update hooks (tries to) run at
all times when the config is updated.
Reviewed-by: schreiberal
Iustin Pop [Thu, 27 Mar 2008 15:52:58 +0000 (15:52 +0000)]
Fix a bug in interactive confirmation of instances
This oneliner fixes a bug in listing more than twenty instances for
multiple operations (shutdown, startup, etc.).
Reviewed-by: imsnah
Iustin Pop [Wed, 19 Mar 2008 10:20:00 +0000 (10:20 +0000)]
Fix gnt-instance replace-disks online help
The "quick" online help just reported the option to change secondary node. Add
the ones to just replace the disk locally on-primary or on-secondary. It is of
course impossible to espress in one line everything needed to use this command,
but at least now the most common options are spelled out immediately.
Author: ultrotter
Reviewed-by: iustinp, imsnah
Iustin Pop [Wed, 19 Mar 2008 10:14:41 +0000 (10:14 +0000)]
Make ganeti-noded create BDEV_CACHE_DIR automatically
Currently in order to deal with tmpfs /var/run, we create the
BDEV_CACHE_DIR in the init script. However, that does not cover all the
cases, and it's not a proper place to deal with it: for example, dealing
with not initialized clusters and the master node is more complicated.
Therefore, this patch does:
- make ganeti-noded create the directory automatically
- make ganeti-noded error out if it can't create it or it's already
there but not a directory
- remove the creation from the init.d script
Reviewed-by: ultrotter
Guido Trotter [Tue, 11 Mar 2008 10:33:48 +0000 (10:33 +0000)]
Specify better gnt-instance(8) replace-disks
The -s option when changing secondary node on a drbd template is implied, and
thus optional. Specify this in the manpage.
Reviewed-by: iustinp
Iustin Pop [Mon, 10 Mar 2008 16:29:32 +0000 (16:29 +0000)]
Disable cluster init with a reachable IP
Make the cluster init fail if the IP to which the cluster name resolved
is already reachable by the master node. This is not a foolproof
solution, but it allows a cheap method of detecting simple mistakes.
It will also disallow using the master node name as cluster name (which
is something good).
The only drawbacks that I see are:
- you are not allowed to do this, which might come in handy in cluster
upgrades; but since we support rename, this is mitigated
- cluster init takes longer now (+the timeout value, set to 5
seconds), but since this is a one-off operation, it should be ok
Reviewed-by: ultrotter
Iustin Pop [Mon, 10 Mar 2008 16:29:10 +0000 (16:29 +0000)]
Modify utils.TcpPing to make source address optional
This patch modifies TcpPing and its callers to make the source address
selection optional. Usually, the kernel will know better what
source address to use, just in some cases we want to enforce a given
source address so it makes sense to make this optional.
Reviewed-by: ultrotter
Iustin Pop [Fri, 29 Feb 2008 16:14:43 +0000 (16:14 +0000)]
Fix master role stop on cluster destroy
Currently the cluster destroy doesn't remove the master role, which
means that the IP address of the cluster remains assigned to the master
node.
This patch fixes this and also a docstring in backend.StopMaster().
Reviewed-by: imsnah
Iustin Pop [Fri, 29 Feb 2008 15:34:20 +0000 (15:34 +0000)]
Implement QA tests for gnt-cluster rename
Reviewed-by: imsnah
Iustin Pop [Fri, 29 Feb 2008 12:32:23 +0000 (12:32 +0000)]
Fix cluster rename operation
This one-liner fixes the cluster rename operation. As a side note, we
should have a QA test for this too.
Reviewed-by: imsnah
Guido Trotter [Thu, 28 Feb 2008 11:36:25 +0000 (11:36 +0000)]
Replace version number in install.sgml during build time
Reviewed-by: iustinp
Guido Trotter [Thu, 28 Feb 2008 11:36:11 +0000 (11:36 +0000)]
Small comment fix.
Guido Trotter [Thu, 28 Feb 2008 11:35:57 +0000 (11:35 +0000)]
Fixes small spell mistakes and comments
Guido Trotter [Thu, 28 Feb 2008 11:35:36 +0000 (11:35 +0000)]
This patch replaces some hardcoded strings with their corresponding constant in `_GenerateDiskTemplate()`.
Reviewed-by: iustinp
Guido Trotter [Thu, 28 Feb 2008 11:35:11 +0000 (11:35 +0000)]
Use constants.ETC_HOSTS instead of string for /etc/hosts
Reviewed-by: iustinp
Guido Trotter [Thu, 28 Feb 2008 11:34:49 +0000 (11:34 +0000)]
Fix the gnt-cluster init man page
Some options were missing in the gnt-cluster init man page. This patch adds
them, removes an empty line, and clarifies a bit more some requirements.
Reviewed-by: schreiberal
Guido Trotter [Thu, 28 Feb 2008 11:34:36 +0000 (11:34 +0000)]
Don't allow renaming to an existing instance
Even if the target instance is down or we are not checking for IP conflicts
changing an instance name to a new one which is already in the cluster is
doomed to fail, because in a lot of places (among which figures the mind of
most users/admins) instance names are assumed to be unique.
Reviewed-by: imsnah
Guido Trotter [Thu, 28 Feb 2008 11:34:17 +0000 (11:34 +0000)]
Clarify online help for xc-instance reinstall.
Reviewed-by: imsnah
Guido Trotter [Sat, 23 Feb 2008 10:51:58 +0000 (10:51 +0000)]
Improve ganeti example cron file
The cron file in ganeti's example directory is now static, and executes
ganeti-watcher in /usr/local/sbin no matter where it's really installed. With
this patch we generate it at build time substituting the right value of
@SBINDIR@ from ganeti.cron.in. We also make sure ganeti-watcher exists and is
executable before running it.
This is targeted at 1.2 as well.
Reviewed-by: iustinp
Guido Trotter [Wed, 20 Feb 2008 11:18:51 +0000 (11:18 +0000)]
Add another 1.1->1.2 compatibility alias
gnt-instance replace-disks used to be called replace_disks.
Reviewed-by: iustinp
Iustin Pop [Mon, 18 Feb 2008 11:29:32 +0000 (11:29 +0000)]
Some more corrections on gnt-node help output
Reviewed-by: schreiberal
Iustin Pop [Mon, 18 Feb 2008 11:28:55 +0000 (11:28 +0000)]
Update online help and manpage to include drbd disk type.
Author: schreiberal
Reviewed-by: imsnah
Iustin Pop [Mon, 18 Feb 2008 11:28:36 +0000 (11:28 +0000)]
Add docdir to the tools/Makefile.am
Note: The other alternative would be to move the readme to the 'doc'
top-level dir, however I like it better to have the readme here.
Reviewed-by: ultrotter
Guido Trotter [Sat, 16 Feb 2008 13:09:24 +0000 (13:09 +0000)]
Fix gnt-instance info i1 i2 ...
Due to an indentation error only the last instance queried got returned by
LUQueryInstanceData. Moving the append() call inside the for cycle to fix this
issue.
This is a one-liner targeted at 1.2.3
Reviewed-by: iustinp
Michael Hanselmann [Fri, 15 Feb 2008 15:13:11 +0000 (15:13 +0000)]
Code style fixes for drbd8-upgrade tool
Reviewed-by: ultrotter
Iustin Pop [Fri, 15 Feb 2008 15:06:06 +0000 (15:06 +0000)]
Include the DRBD upgrade tool in the dist archive
This patch adds the DRBD upgrade tool in the archive and in the
installed tools dir, and its associated README in the doc_DATA target.
Reviewed-by: ultrotter
Iustin Pop [Fri, 15 Feb 2008 12:31:03 +0000 (12:31 +0000)]
Update version numbers for the 1.2.3 release
Note: we don't update for now the install.sgml file with the new version
number, as there are no other changes. We'll update the web site to
indicate that the current install.html document is valid for 1.2.3 too.
Reviewed-by: imsnah,ultrotter
Iustin Pop [Fri, 15 Feb 2008 09:53:41 +0000 (09:53 +0000)]
Further fixes for the 'export MAC in hooks' change
QA suite which tests gnt-instance modify has uncovered another issue related to
mac export.
Reviewed-by: imsnah
Iustin Pop [Thu, 14 Feb 2008 15:51:34 +0000 (15:51 +0000)]
Alter the device activation code
This tiny patch fixes the breakage that the previous patch about
activation did by removing the Close() call after activation.
The initial reason for that call was that if the device is already
active and open, but we need it closed, we close it automatically.
This however conflicts with the 2-step open in the case the instance is
already open.
It makes sense to remove the call since in the current Ganeti setup,
just doing Close() is not enough to change the device from (e.g.)
primary to secondary, as some devices (e.g. md) might need Shutdown not
Close.
It also gets rid of a Close() in the CreateBlockDevice function, due to
the same reasoning (although in Create the child should not have a
different status anyway).
Reviewed-by: imsnah
Iustin Pop [Thu, 14 Feb 2008 15:51:16 +0000 (15:51 +0000)]
Two small improvements to burnin
This tiny patch fixes the verbose option to actually work, and also when
creating instances it logs the secondary node too (even if this doesn't
apply for plain templates, it doesn't create an error).
Reviewed-by: imsnah
Iustin Pop [Thu, 14 Feb 2008 15:47:56 +0000 (15:47 +0000)]
Modify the default output of gnt-instance list
This patch adds a new field available for selection in gnt-instance list
names "status" which represents the combined value of "admin_state" and
"oper_state". Since this is much easier to parse (e.g. gnt-instance list
|grep ERROR), we also modify the default field list to use this instead
of the admin/oper state fields.
Reviewed-by: imsnah
Guido Trotter [Tue, 12 Feb 2008 17:07:17 +0000 (17:07 +0000)]
Parse double protocol version in drbd8.2
DRBD 8.2 uses a double integer field ad protocol version, rather than a single
one. This patch fixes the ganeti parsing code, allowing both the old and the
new version type. In order to do so the internal _GetVersion function is
changed to return a dict, rather than a list, and the second protocol field is
added, only if present, as proto2.
This is a fix for issue 24.
Reviewed-by: iustinp
Iustin Pop [Sun, 10 Feb 2008 12:11:12 +0000 (12:11 +0000)]
Fix a wrong OP_ID added in r261
Reviewed-by: ultrotter
Iustin Pop [Tue, 5 Feb 2008 14:19:05 +0000 (14:19 +0000)]
Add a test opcode that sleeps for a given duration
This can be used for testing purposes.
Reviewed-by: ultrotter,imsnah
Iustin Pop [Tue, 5 Feb 2008 13:31:58 +0000 (13:31 +0000)]
Reduce the chance of DRBD errors with stale primaries
This patch is a first step in reducing the chance of causing DRBD
activation failures when the primary node has not-perfect data.
This issue is more seen with DRBD8, which has an 'outdate' state (in
which it can get more often). But it can (and before this patch, usually
will) happen with both 7 and 8 in the case the primary has data to sync.
The error comes from the fact that, before this patch, we activate the
primary DRBD device and immediately (i.e. as soon as we can run another
shell command) we try to make it primary. This might fail - since the
primary knows it has some data to catch up to - but we ignored this
error condition. The failure was visible later, in either md failing to
activate over a read-only storage or by instance failing to start.
The patch has two parts: one affecting bdev.py, which changes failures
in BlockDev.Open() from returning False to raising
errors.BlockDeviceError; noone (except a generic method inside bdev.py)
checked this return value and we logged it but the master didn't know
about it; now all classes raise errors from Open if they have a failure.
The other part, affecting cmdlib.py, changes the activation sequence
from:
- activate on primary node as primary and secondary as secondary, in
whatever order a function returns the nodes
to the following:
- activate all drives as secondaries, on both the primary and the
secondary nodes of the instance
- after that, on the primary node, re-activate the device stack as
primary
This is in order to give the chance to DRBD to connect and make the
handshake. As noted in the comments, this just increases the chances of
a handshake/connect, not fixing entirely the problem. However, it is a
good first step and it passes all tests of starting with stale (either
full or partial) primaries, with both drbd 7 and 8, and also passes a
burnin.
Note that the patch might make the device activation a little bit
slower, but it is a reasonable trade-off.
Reviewed-by: imsnah
Iustin Pop [Mon, 4 Feb 2008 14:34:33 +0000 (14:34 +0000)]
Fix some indendation issues
Reviewed-by: imsnah
Iustin Pop [Mon, 4 Feb 2008 14:27:02 +0000 (14:27 +0000)]
Fix incomplete mac address export to hooks
This patch completes the change introduced in r566 (trunk) and r568
(branch-1.2).
Reviewed-by: imsnah
Iustin Pop [Mon, 4 Feb 2008 09:50:26 +0000 (09:50 +0000)]
Add an initial version of the drbd8 upgrade tool
Reviewed-by: imsnah
Guido Trotter [Thu, 31 Jan 2008 13:28:07 +0000 (13:28 +0000)]
Give mac information to instance hooks
Currently just the bridge and ip address are passed. Add an environment
variable for the mac address.
Reviewed-by: iustinp
Guido Trotter [Thu, 31 Jan 2008 13:27:53 +0000 (13:27 +0000)]
Make the mouse more usable in VNC for HVM.
Reviewed-by: imsnah
Guido Trotter [Wed, 30 Jan 2008 11:17:50 +0000 (11:17 +0000)]
Export bridge information too
gnt-backup export used to export the ip and mac of each nic, but not which
bridge it was connected to. Adding this information.
Reviewed-by: iustinp
Guido Trotter [Wed, 30 Jan 2008 11:17:38 +0000 (11:17 +0000)]
Fix online help for gnt-backup import
The help string missed drbd as a disk template option. Adding it.
Reviewed-by: iustinp
Guido Trotter [Wed, 30 Jan 2008 11:17:27 +0000 (11:17 +0000)]
tiny typo fix
Reviewed-by: iustinp
Iustin Pop [Tue, 29 Jan 2008 16:38:08 +0000 (16:38 +0000)]
Bump version numbers for the 1.2.2 release
Reviewed-by: ultrotter
Iustin Pop [Mon, 28 Jan 2008 14:45:23 +0000 (14:45 +0000)]
Improve the documentation of query output fields
The gnt-node and gnt-instance list commands have a customizable list of
output fields, but the list is not up to date (in the man page) and not
easily understandable from the ‘--help’ output.
This patch updates the man pages and adds the available fields and
default fields in the ‘--help’ output, as part of the description.
Example:
Usage
=====
gnt-node list
Lists the nodes in the cluster. The available fields are (see the man page for
details): name, pinst_cnt, pinst_list, sinst_cnt, sinst_list, pip, sip,
dtotal, dfree, mtotal, mnode, mfree, bootid. The default field list is (in
order): name, dtotal, dfree, mtotal, mnode, mfree, pinst_cnt, sinst_cnt.
Reviewed-by: imsnah,ultrotter
Iustin Pop [Mon, 28 Jan 2008 14:45:02 +0000 (14:45 +0000)]
Add QA tests for gnt-instance modify
This patch adds QA tests for most of the possible parameters in the
instance modify operation (exception being the MAC), and modifies the
sample QA file to run this test.
It also tests the no-modification test, but that is a weak one: we only
test that the exit code is one, not that the command gave a proper
response ("... please give at least one parameter") as opposed to a
traceback.
Reviewed-by: imsnah
Iustin Pop [Mon, 28 Jan 2008 14:44:46 +0000 (14:44 +0000)]
Add option for the number of VCPUs in instance listing
Reviewed-by: ultrotter
Iustin Pop [Mon, 28 Jan 2008 14:44:31 +0000 (14:44 +0000)]
Change the install directory for the tools
Currently, the tools are installed under $prefix/share/ganeti. This
prevents installing other things in a nice way under share/ganeti (like
arch-independent OS definitions), therefore we want the tools to live
under share/ganeti/tools.
A second change is that since these are programs, they would better live
under libdir than datadir - we might have to change them later to
binaries in which case 'share' is definitely not the way to go.
This patch therefore changes the install directory for the tools to
$prefix/lib/ganeti/tools.
Reviewed-by: imsnah
Iustin Pop [Mon, 28 Jan 2008 14:44:19 +0000 (14:44 +0000)]
Fix VG listing broken by r510
LVM code sometimes adds an extra separator at the end of the field list.
Make the code strip it if exists.
Reviewed-by: imsnah
Iustin Pop [Mon, 28 Jan 2008 14:44:06 +0000 (14:44 +0000)]
Make backend._GetVGInfo check the validity of 'vgs'
Currently, the function backend._GetVGInfo only checks for errors via
the exit code of the 'vgs' command. However, there are other ways of
failure so we need to also check for valid output before parsing.
Furthermore, the checks on the exit code were reported via a 'raise
LVMError', however this exception is not handled anywhere and so the
remote caller will not get reasonable data.
This patch does two main things:
- change the calling protocol for this function to not raise an error,
and instead return the same type of argument always (dict) with the
requested keys but values changed into None; this allows in the
parent rpc call node_info to have valid memory information but
"error" value for disk space, if there's an error with disks
- check the validity of the output so that in case we fail to parse
it, we don't abort with a backtrace in the node daemon but instead
return the default result value (containing errors), and log these
cases in the node daemon log file
We also bump the protocol version to 11.
Reviewed-by: ultrotter
Iustin Pop [Mon, 28 Jan 2008 14:42:28 +0000 (14:42 +0000)]
Fix checking of node free disk in CreateInstance
This patch does two things:
- checks that the result values from call_node_info are valid integer
values and aborts otherwise
- skips disk space computation for the DT_DISKLESS case
The most important point of the patch is the verification of results
from the rpc call, as it prepares for a patch that allows failures to be
better reported from the remote node.
Reviewed-by: ultrotter
Iustin Pop [Mon, 28 Jan 2008 14:42:12 +0000 (14:42 +0000)]
Abstract node memory checking into a separate function
The checking of a node's free memory (via rpc.call_node_info) is done in
both start instance an failover. This patch abstracts this call,
together with the appropriate error handling, into a separate function
called _CheckNodeFreeMemory.
The patch also has some related changes:
- the check is done in prereq and not in exec for start instance
- the redundant check in exec for failover has been removed
Reviewed-by: ultrotter
Iustin Pop [Mon, 28 Jan 2008 14:42:00 +0000 (14:42 +0000)]
Change a hardcoded path into its proper constant
The function backend.UploadFile still uses "/etc/hosts" directly instead
of the existing constant; this patch fixes this.
Reviewed-by: ultrotter
Iustin Pop [Mon, 28 Jan 2008 14:41:47 +0000 (14:41 +0000)]
Allow use of 'diskless' disk template in burnin
Even if this doesn't have any practical use for actually creating
instances, it can be used for very fast burnin and testing just the
add/start/stop/remove functionality.
This has also revealed a bug in export/import related to diskless
instances, so it's educational value is proved.
Reviewed-by: ultrotter
Iustin Pop [Mon, 28 Jan 2008 14:41:35 +0000 (14:41 +0000)]
Fix run directory for the fake hypervisor
Currently the fake hypervisor has hardcoded ‘/var/run’ as a base
directory for its store. This patch adds a constant RUN_DIR that is used
for both the fake hypervisor and for BDEV_CACHE_DIR.
Reviewed-by: ultrotter
Iustin Pop [Mon, 28 Jan 2008 14:41:20 +0000 (14:41 +0000)]
Fix the init.d script
The script (which is geared towards Debian) is actually not fully
compliant, as lintian generates a warning on it - the S runlevel is not
a valid one in the "Stop" stanza. This patch removes "S" from the stop
list.
Reviewed-by: imsnah
Guido Trotter [Mon, 28 Jan 2008 13:41:21 +0000 (13:41 +0000)]
Fix a typo in a devel/upload comment
Files are uploaded to $prefix/sbin, not $prefix/bin
Reviewed-by: iustinp
Guido Trotter [Mon, 28 Jan 2008 13:41:09 +0000 (13:41 +0000)]
Add tool to ease testing of unsubmitted patches
The upload tool can be used to submit the current code to an arbitrary list of
nodes. This helps developers in easily testing their changes before submitting
them.
Reviewed-by: iustinp
Guido Trotter [Mon, 28 Jan 2008 13:40:57 +0000 (13:40 +0000)]
Add a missing parenthesis
It was wrongly deleted when converting
if a in dict.keys():
to
if a in dict:
Reviewed-by: imsnah
Guido Trotter [Mon, 28 Jan 2008 13:40:42 +0000 (13:40 +0000)]
Add a few aliases for startup/shutdown
These aliases are widely used to think of these operations and save some typing
too. Even though there is some thought to make start/stop the default operation
name I don't think this should happen for 1.2, for now adding it as an alias is
fine.
Reviewed-by: iustinp