Iustin Pop [Mon, 1 Jun 2009 13:48:44 +0000 (15:48 +0200)]
Rework the tryAlloc/tryReloc functions
Currently tryAlloc/tryReloc do not return the new instance, as this is
not needed for IAllocator alloc/reloc requests. However, for computing
the space, the new instance is useful, so we modify these functions to
return this information too.
The patch also improves hspace to have (with default parameters) a
parseable output.
Iustin Pop [Mon, 1 Jun 2009 13:48:18 +0000 (15:48 +0200)]
Add an utility function for triples
Iustin Pop [Mon, 1 Jun 2009 11:59:02 +0000 (13:59 +0200)]
Initial add of the hspace tool
This is a tool that checks how many instances (of same size, specified
by command line arguments) can be added to a cluster while remaining N+1
compliant.
Iustin Pop [Mon, 1 Jun 2009 11:44:53 +0000 (13:44 +0200)]
Small doc change
And an alignment issue.
Iustin Pop [Mon, 1 Jun 2009 10:25:46 +0000 (12:25 +0200)]
Ensure consistent naming of the tools
This patch makes sure that all references to the name of the software is
ganeti-htools, not simply htools.
Iustin Pop [Mon, 1 Jun 2009 10:16:21 +0000 (12:16 +0200)]
Small documentation update
Iustin Pop [Mon, 1 Jun 2009 09:55:48 +0000 (11:55 +0200)]
Add copyright/license information
This doc-patch adds copyright and license information to (hopefully) all
needed files.
Iustin Pop [Mon, 1 Jun 2009 09:24:27 +0000 (11:24 +0200)]
tests: move the test declaration in QC.hs
This patch moves the test declaration into QC.hs, so that test.hs has to
be modified only when we add a new test category.
Iustin Pop [Sun, 31 May 2009 20:28:12 +0000 (22:28 +0200)]
Small whitespace change
Iustin Pop [Sun, 31 May 2009 20:22:53 +0000 (22:22 +0200)]
Move some alloc functions from hail into Cluster
These are generic enough to be used from multiple places, they belong
better in Cluster.hs than in the hail source.
Iustin Pop [Fri, 29 May 2009 18:02:19 +0000 (20:02 +0200)]
Move the RqType and Request types to Loader.hs
These two will be more generic than now, and belong somewhere else -
Loader.hs is a generic module for data loading, thus we move them there.
Iustin Pop [Fri, 29 May 2009 17:53:04 +0000 (19:53 +0200)]
Cleanup an old function
Also replace a type with its synonim.
Iustin Pop [Fri, 29 May 2009 17:25:34 +0000 (19:25 +0200)]
Lots of documentation updates
This patch does only doc build changes, doc changes and function move
around (for more logical documentation). It should have no impact at all
on the code.
Iustin Pop [Fri, 29 May 2009 08:42:01 +0000 (09:42 +0100)]
Change the check rule in Makefile
Since ghc won't trigger recompilation due to the -fhpc flag, it's not
useful to rm && make test, as this will only relink the binary.
Therefore we simplify this rule.
Iustin Pop [Wed, 27 May 2009 22:36:40 +0000 (23:36 +0100)]
A simple test for Container.addTwo
Iustin Pop [Wed, 27 May 2009 22:10:14 +0000 (23:10 +0100)]
Add some very trivial Instance tests
This is more of an exercise in QuickCheck than strong testing.
Iustin Pop [Wed, 27 May 2009 21:50:22 +0000 (22:50 +0100)]
Finish removal of unused params from PeerMap
This completes the removal started earlier byt removeing the need to
pass the number of nodes to Node.buildPeers, which is now unused.
Iustin Pop [Wed, 27 May 2009 21:22:38 +0000 (22:22 +0100)]
Add test infrastructure and initial tests
This patch adds a QuickCheck-based test infrastructure and initial tests
based on it. The PeerMap module has a 100% coverage ☺
Side-note: one has to read the source of QuickCheck to see how to use it
(especially the Batch submodule), the docs are not enough…
Iustin Pop [Wed, 27 May 2009 20:50:02 +0000 (21:50 +0100)]
Some cleanup of the PeerMap module
This patch removes some unused functions and does some cleanup of the
remaining ones.
Iustin Pop [Wed, 27 May 2009 20:09:47 +0000 (21:09 +0100)]
Remove unused parameters from PeerMap creation
We remove some unused arguments (added way back for compatibility with
Arrays, which we didn't use in the end). This makes the code clearer
(and doesn't need the Ndx type to be an instance of Num).
Iustin Pop [Wed, 27 May 2009 20:01:20 +0000 (21:01 +0100)]
Remove an unused type synonim
Iustin Pop [Wed, 27 May 2009 19:53:51 +0000 (20:53 +0100)]
Add a separate function for looking up instances
Currently we (wrongly) use lookupNode to lookup instances, just because
the name assoc list has the same type. This patch adds a separate
function for it.
Iustin Pop [Wed, 27 May 2009 19:25:09 +0000 (20:25 +0100)]
Add type synonyms for the node/instance indices
This is a first step towards full datatype renaming. That requires more
changes, so at first we only want to document clearly what is a node
index, what is an instance index, and what is a plain Int.
Iustin Pop [Tue, 26 May 2009 23:17:36 +0000 (00:17 +0100)]
Change the module import hierarchy
This patch makes the Types module a base module, and Node/Instance ones
import it, from the previous (opposite) situation. This will allow in
the future to use newtypes for the index and name types.
Iustin Pop [Tue, 26 May 2009 09:56:53 +0000 (10:56 +0100)]
Update NEWS file for the second attempt at 0.1.1
Iustin Pop [Tue, 26 May 2009 09:54:09 +0000 (10:54 +0100)]
Add a maintainer-clean makefile rule
This splits the current “clean” rule into proper clean (cleaning of
build artifacts) and maintainer-clean (cleaning of distributed files).
This should make it better for Debian packaging.
Iustin Pop [Tue, 26 May 2009 09:28:25 +0000 (10:28 +0100)]
Port offline node fixes from Rapi to IAllocator
The IAllocator source was copied from Rapi before the offline node fixes
were made. This changes such that offline nodes are accepted correctly.
Iustin Pop [Mon, 25 May 2009 20:47:51 +0000 (21:47 +0100)]
Update NEWS file for the 0.1.1 release
Also replace tabs in an older entry with spaces.
Iustin Pop [Mon, 25 May 2009 20:35:54 +0000 (21:35 +0100)]
Fix loading of plain instances via iallocator
Currently iallocator is broken when reading single-node instances (and
with an ugly error message). This patch fixes this case, by marking them
with secondary node “noSecondary” like the rest of the code.
Iustin Pop [Mon, 25 May 2009 19:54:15 +0000 (20:54 +0100)]
hail: don't relocate to current primary node
This patch fixes the relocate-to-primary-node problem, and doesn't mark
the excluded nodes as offline anymore (we don't use them anyway, so
let's not use a different/fake cluster state).
Iustin Pop [Mon, 25 May 2009 19:22:56 +0000 (20:22 +0100)]
Fix some haddock issues
Slash is a reserved char. Slash is a reserved char. Slash is a…
Iustin Pop [Mon, 25 May 2009 19:11:52 +0000 (20:11 +0100)]
Update README for hail
Iustin Pop [Mon, 25 May 2009 19:04:03 +0000 (20:04 +0100)]
Add man page and .gitignore entry for hail
Iustin Pop [Mon, 25 May 2009 18:50:54 +0000 (19:50 +0100)]
hail: do not allocate on offline/drained nodes
This patch implements filtering out of the offline/drained nodes and
fixes a bug in IAllocator.hs parsing (similar to an older bug in Rapi.hs
from where the code was copied).
Iustin Pop [Mon, 25 May 2009 18:35:03 +0000 (19:35 +0100)]
hail: cleanup unused options
Iustin Pop [Mon, 25 May 2009 18:31:03 +0000 (19:31 +0100)]
hail: Implement non-mirrored instance allocation
This patch implements non-mirrored instance allocation, by allocating as
secondary node “noSecondary”.
Iustin Pop [Mon, 25 May 2009 17:45:46 +0000 (18:45 +0100)]
hail: unify the post-processing of results
Both allocate and relocate compute new node lists, whose score must be
ranked and the best option chosen. This means we can convert the code to
a generic function.
Iustin Pop [Sun, 24 May 2009 23:09:55 +0000 (00:09 +0100)]
Implement hail allocate (for 2-node requests)
This patch implements allocate for two node requests. One node requests
can be done as soon as we have a valid allocateOn function for single
nodes.
Iustin Pop [Sun, 24 May 2009 22:48:07 +0000 (23:48 +0100)]
Working implementation if relocate
This patch completes the implementation of hail relocate. It maps all
valid destination nodes through a ReplaceSecondary IMove, filters out
the failed relocations, computes the resulting scores and picks the
lowest one.
Iustin Pop [Sun, 24 May 2009 22:07:08 +0000 (23:07 +0100)]
Start implementing the hail functionality
This patch implements a very stupid (and broken) version of hail
‘allocate’.
Iustin Pop [Sat, 23 May 2009 23:43:38 +0000 (00:43 +0100)]
Remove ktn/kti from first half of loader
This patch removes the ktn/kti lists from most parts of the first half
of the loading sequence. Some remain as the [(String, Int)] is the
nicest way to lookup names and get indices back.
Iustin Pop [Sat, 23 May 2009 23:36:36 +0000 (00:36 +0100)]
Remove the ktn/kti from second half of loading
This removes the return of ktn/kti from Loader.mergeData and associated
functions.
Iustin Pop [Sat, 23 May 2009 23:29:52 +0000 (00:29 +0100)]
Remove most uses of ktn/kti
This patch removes all uses of ktn/kti from the past-loader stages.
Iustin Pop [Sat, 23 May 2009 23:23:15 +0000 (00:23 +0100)]
Remove a function in hail
This is not yet used.
Iustin Pop [Sat, 23 May 2009 23:11:19 +0000 (00:11 +0100)]
Add some utility functions for kt deprecation
These will be used to remove even more uses of ktn/kti in non-critical
paths.
Iustin Pop [Sat, 23 May 2009 22:50:37 +0000 (23:50 +0100)]
Remove some extraneous uses of ktn/kti
Since we have Node/Instance.name, we can now simplify a few constructs.
Iustin Pop [Sat, 23 May 2009 22:47:56 +0000 (23:47 +0100)]
Strip the suffix from the names in the objects
This strips the suffix from the objects themselves, not only from the
ktn/kti vars.
Iustin Pop [Sat, 23 May 2009 22:33:21 +0000 (23:33 +0100)]
Make IAlloc.loadData return maps
This patch makes the format of IAlloc.loadData be similar the same as
Loader.mergeData.
Iustin Pop [Sat, 23 May 2009 22:32:52 +0000 (23:32 +0100)]
Some small layout changes
Iustin Pop [Sat, 23 May 2009 22:22:01 +0000 (23:22 +0100)]
Move common loading sequence in CLI
This patch moves the common loading sequence to CLI, such that hbal/hn1
and possible future scripts that take the input from same sources can
use it.
Iustin Pop [Sat, 23 May 2009 22:06:45 +0000 (23:06 +0100)]
Move checkData from Cluster to Loader
This moves the remaining loading function to Loader (together with its
associated support functions).
Iustin Pop [Sat, 23 May 2009 00:34:54 +0000 (01:34 +0100)]
Introduce a class for CLI options
This patch generalizes a little the CLI handling by not passing in a
special function for help and such, but instead requiring that the
options object supports some common functionality.
Iustin Pop [Sat, 23 May 2009 00:24:06 +0000 (01:24 +0100)]
Add a small class for Nodes and Instances
Since both nodes and instances support some common functionality (names
and indices), we add a class so that we can access these attributes in a
generic way.
Iustin Pop [Fri, 22 May 2009 23:34:51 +0000 (00:34 +0100)]
Add back names to nodes/instances
In order to simplify the data structures, we add back the name on the
node and instance objects. We still keep the index for, well, indexing,
but we will use the name directly from the object, in order to get rid
of the ktn/kti arguments which are passed around everywhere.
Iustin Pop [Fri, 22 May 2009 23:18:50 +0000 (00:18 +0100)]
More code reorganizations
This new big patch does a couple of more cleanups in the loading of data
chapter:
- introduce a Types module that holds most types (except the base
Node/Instance/etc.) so that multiple other modules can use these
(instead of only Cluster and its users)
- bring IAlloc.hs in line with the recent changes of providing data
types and not strings
- removal of obsolete Utils.hs json-related functions
Iustin Pop [Fri, 22 May 2009 17:03:53 +0000 (18:03 +0100)]
Rework the loader model
This big patch changes the loader model from “string data as common
format” to actual object structures as common format.
The text loading function move from Cluster.hs to a new Text.hs module,
some common functions are moved to a new Loader.hs module, and the
return values from both Rapi.hs and Text.hs are uniformized.
Iustin Pop [Thu, 21 May 2009 22:13:45 +0000 (23:13 +0100)]
Initial work on hail
This makes hail compile and get a request parsed via IAlloc, but nothing
more.
Iustin Pop [Thu, 21 May 2009 00:54:27 +0000 (01:54 +0100)]
Experimental support for non-redundant instances
This patch adds experimental support to hbal for non-redundant instances
(i.e. instances with only one node). They are currently handled as
non-moveable, and as such the algorithm simply ignores them.
Supports needs to be added when reading from RAPI via hscan, and
probably in other corner cases.
Iustin Pop [Thu, 21 May 2009 00:30:49 +0000 (01:30 +0100)]
Small doc addition
Iustin Pop [Thu, 21 May 2009 00:26:51 +0000 (01:26 +0100)]
Introduce nice errors on invalid input fields
This patch switches from plain read to a wrapper over readsPrec that
returns better error messages than the buildin 'Prelude: no parse'.
Iustin Pop [Thu, 21 May 2009 00:10:56 +0000 (01:10 +0100)]
Split node/instance parsing into functions
This allows easy checking for valid format of the input data (row-wise).
Iustin Pop [Wed, 20 May 2009 23:37:03 +0000 (00:37 +0100)]
Add initial validation checks in Cluster.loadData
This patch converts loadTabular and loadData to a monadic form, thus
allowing meaningful error messages from the node/instance load routines.
Iustin Pop [Wed, 20 May 2009 23:11:48 +0000 (00:11 +0100)]
Small syntax improvement
D'oh, one can extract from a wrapped variable, not only from functions.
Iustin Pop [Wed, 20 May 2009 23:07:24 +0000 (00:07 +0100)]
Convert Cluster.loadData to Result return
This patch changes Cluster.loadData to return a Result, instead of
directly the values; this will allow us to return meaningful error
values (e.g. when an instances lives on unknown node) rather than simply
abort. Currently the result is always an Ok, the actual signalling of
errors will come later.
Its callers are changed to accommodate for the new return type and to
display errors as needed.
Iustin Pop [Wed, 20 May 2009 22:31:10 +0000 (23:31 +0100)]
Allow hscan to save data for fully-spec'd URLs
In case we pass a fully-specified URL to hscan, currently it will use as
is and that means the directory in which we want to save the status
files changes from what we mean. This patch changes hscan to replace all
slashes in the cluster name with underscores when generating the output
filenames.
Iustin Pop [Wed, 20 May 2009 22:02:45 +0000 (23:02 +0100)]
Allow overriding the RAPI port/scheme
This patch adds a very dumb way to override the port and scheme for
RAPI: if the master string doesn't contain a colon, we consider it a
simple hostname specification, and thus prepend ‘https://’ and append
‘:5080’, (the default RAPI port); otherwise, we consider it a fully
specified URL, and don't do any mangling to it.
This allows to use saved RAPI responses in testing, with the “file://”
scheme, or to use another port or non https mode with an actual RAPI
instance.
Iustin Pop [Wed, 20 May 2009 21:55:52 +0000 (22:55 +0100)]
Remove some 1.2 specific code
Now that we dropped 1.2 compatibility, we can removed the special casing
for RAPI differences.
Iustin Pop [Wed, 20 May 2009 21:23:31 +0000 (22:23 +0100)]
Generalize some Result function into monad ones
We don't really needed, but is more clean like this.
Iustin Pop [Wed, 20 May 2009 21:13:02 +0000 (22:13 +0100)]
Switch from hand-written monads to a real one
This big patch converts from our home-grown monad-like constructs
(the Either stuff) to a real, Either-like-but-another-name monad.
We introduce a “Result a” monad, and this allows dropping many of the
extra constructs. Hopefully the code is also more clear.
Many of the functions could now be written in a generic-monad style,
instead of Result specifically, but that will come in future patches.
IAlloc.hs also has some unrelated patches.
Iustin Pop [Tue, 19 May 2009 19:53:01 +0000 (20:53 +0100)]
Small changes to the IAlloc module
Adding a small request type data structure.
Iustin Pop [Tue, 19 May 2009 22:04:53 +0000 (23:04 +0100)]
Update NEWS file for the 0.1.0 release
Iustin Pop [Tue, 19 May 2009 21:58:02 +0000 (22:58 +0100)]
Don't consider offline nodes as N+1 failed
This is just a cosmetic (I hope) change; the nodes shouldn't be used
anyway, and we only correct the display message.
Iustin Pop [Tue, 19 May 2009 21:50:12 +0000 (22:50 +0100)]
Drop RAPI v1 compatiblity
Since we only support Ganeti 2.0, we drop the 1.2 compatibility.
Iustin Pop [Tue, 19 May 2009 21:45:31 +0000 (22:45 +0100)]
Add support for 'offline' nodes
This patch drops compatiblity with Ganeti 1.2 and adds support for
offline nodes in the cluster. When reading from RAPI, the drained nodes
are considered offline so that we don't allocate on them too.
Iustin Pop [Mon, 18 May 2009 22:19:26 +0000 (23:19 +0100)]
Update the IAlloc module
We know have a working parseData function that returns the node and
instance data. This uncovered bad support for non-drbd instances ☹
Iustin Pop [Mon, 18 May 2009 08:24:24 +0000 (10:24 +0200)]
Move the JSON utilities to Utils.hs
This patch moves the generic/reusable JSON functions to Utils.hs, so
that they're shared between RAPI/IAlloc.
Iustin Pop [Mon, 18 May 2009 06:46:12 +0000 (08:46 +0200)]
Add a copy of Rapi.HS as IAlloc.hs
This will be used in two ways:
- format the response to Ganeti (easy, implemented)
- parse the input data and build the node/instance lists (hard :)
Iustin Pop [Mon, 18 May 2009 06:18:21 +0000 (08:18 +0200)]
Remove the apidoc dir on clean
Iustin Pop [Sun, 26 Apr 2009 14:15:33 +0000 (16:15 +0200)]
hbal: add a --quiet option
This option is the opposite of the --verbose option, and it allows
decreasing the verbosity level from the default of one to zero (which
currently doesn't show the warning messages for missing disk/memory).
Iustin Pop [Sat, 25 Apr 2009 15:38:22 +0000 (17:38 +0200)]
hbal: Simplify the oneline formatting
This patch moves the oneline format into a separate function for easier
usage.
Iustin Pop [Sat, 25 Apr 2009 15:32:46 +0000 (17:32 +0200)]
hbal: Early exit when we don't have any instances
For clusters with no instances, there is no point in computing either
the score or in running the algorithm. In this case, we exit prematurely
and when running in one-line mode we show dummy information.
Iustin Pop [Sat, 25 Apr 2009 15:27:27 +0000 (17:27 +0200)]
hbal: Add a new min-score option
This new parameter causes the algorithm to finish (or even not start at
all) if we reach/have a score better than it.
Iustin Pop [Sat, 25 Apr 2009 14:31:25 +0000 (16:31 +0200)]
hbal: Change hardcoded tests to monadic composition
In some case we manually do “if isNothing … then Nothing else …”, which
can be very easily replaced with a monadic construct in the Maybe monad.
Iustin Pop [Tue, 21 Apr 2009 07:05:52 +0000 (09:05 +0200)]
Fix the makefile dist rule
It was missing a dependency on the Version.hs file, so right after “make
clean”, a “make dist” used to fail.
Iustin Pop [Tue, 21 Apr 2009 06:50:04 +0000 (08:50 +0200)]
Update NEWS file for the 0.0.8 release
Iustin Pop [Mon, 20 Apr 2009 12:12:13 +0000 (14:12 +0200)]
Increase allowed missing memory to 512MB
Since Xen seems to “steal” some amounts of memory (depending on total
node memory), we increase the maximum allowed missing memory to 512MB,
based on gathered data from multiple machines.
Iustin Pop [Mon, 20 Apr 2009 11:13:17 +0000 (13:13 +0200)]
Update man pages with the env variables
This patch documents the environment variables in the man pages of hbal
and hn1.
Iustin Pop [Mon, 20 Apr 2009 11:07:09 +0000 (13:07 +0200)]
Add reading the file names from env vars
This patch adds support for selecting the instance/node file names via
two environment variables (HTOOLS_NODES, HTOOLS_INSTANCES).
Unfortunately we still have lots of duplicated code, since the options
are not unified.
Iustin Pop [Mon, 20 Apr 2009 11:00:10 +0000 (13:00 +0200)]
Implement error checks for extra arguments
Neither hbal nor hn1 take any arguments beside the options, so if any
are passed is most likely an unintended error. This patch aborts in such
cases.
Iustin Pop [Mon, 20 Apr 2009 10:00:51 +0000 (12:00 +0200)]
Fix the makefile clean rule
Use the $HPROGS variable instead of hardcoding the program names.
Iustin Pop [Mon, 20 Apr 2009 10:00:29 +0000 (12:00 +0200)]
Add a gitignore file
Iustin Pop [Sat, 18 Apr 2009 22:17:05 +0000 (00:17 +0200)]
Implement writing the command list to a script
This patch adds support in hbal for writing the command list to a shell
script, with error checking and allowing for early exit.
Iustin Pop [Thu, 16 Apr 2009 09:02:48 +0000 (11:02 +0200)]
hbal: Abort for invalid offline node names
Since it's easy to pass a wrong node name as offline, we should abort
instead of silently ignoring it.
Iustin Pop [Mon, 23 Mar 2009 07:26:08 +0000 (08:26 +0100)]
Updated new in preparation for the 0.0.7 release
Iustin Pop [Mon, 23 Mar 2009 07:12:40 +0000 (08:12 +0100)]
More documentation updates
This removes most of the content of the README file (obsoleted by new
algorithm and man pages), modifies the Makefile to include the built
documentation in the source archive (so that haddock/hscolour are not
needed) and updates the haddock-prologue with current information.
Iustin Pop [Mon, 23 Mar 2009 06:40:49 +0000 (07:40 +0100)]
More man page updates
This moves some data from README to the man pages and has other general
improvements.
Iustin Pop [Sun, 22 Mar 2009 22:32:50 +0000 (23:32 +0100)]
Add checks for missing disk space
This small patch adds disk space checks to the Cluster.checkData
function, and simplifies a little the warning messages.
Iustin Pop [Sun, 22 Mar 2009 22:30:42 +0000 (23:30 +0100)]
Include DRBD overhead in sda/sdb size
For Ganeti 1.2 which doesn't have the ‘disk_usage’ instance query field,
we need to manually include the DRBD overhead (per disk). This patch
modifies the RAPI collection to do this, but loading from disk does not
as it's unknown if the query came from hscan or RAPI 1.2 or RAPI 2.0...
Iustin Pop [Sun, 22 Mar 2009 22:12:16 +0000 (23:12 +0100)]
Documentation updates
This patch adds a man page for hscan and updates the README and other
man pages with the latest changes.
Iustin Pop [Sun, 22 Mar 2009 21:33:55 +0000 (22:33 +0100)]
Update all needed node fields on f_mem change
This fixes the setFmem function which didn't compute other related
fields after free memory change. Ideally, this should be abstracted so
that add/remove Pri and similar functions could reuse it instead of
duplicating code.