IF YOU WOULD LIKE TO GET AN ACCOUNT, please write an
email to Administrator. User accounts are meant only to access repo
and report issues and/or generate pull requests.
This is a purpose-specific Git hosting for
BaseALT
projects. Thank you for your understanding!
Только зарегистрированные пользователи имеют доступ к сервису!
Для получения аккаунта, обратитесь к администратору.
These provide a thin layer around writing and reading files in /proc.
They can be easily replaced by stubs for unit testing.
Signed-off-by: Martin Schwenke <martin@meltin.net>
(This used to be ctdb commit 637f9d8af517b73c72ed8f3cc2a2661f11eb2126)
These haven't been used for a long time.
Signed-off-by: Martin Schwenke <martin@meltin.net>
(This used to be ctdb commit f5fd361cadb3ea18d29e2d7215a7853718e48d00)
* $CTDB_ETCDIR defaults to /etc but can be changed for testing. All
hard-coded instances of /etc have been changed to $CTDB_ETCDIR.
This includes references to /etc/init.d and /etc/sysconfig.
* service() and nice_service() functions now call new function
_service(). This makes it easier to override these functions (say,
in rc.local) for testing and call most of the existing functionality
using _service().
Signed-off-by: Martin Schwenke <martin@meltin.net>
(This used to be ctdb commit f43c9a7604b779bb6257ddb2bf3cbe266d496a63)
This will be needed when eventscripts that use it are called
externally.
Signed-off-by: Martin Schwenke <martin@meltin.net>
(This used to be ctdb commit ebd53b66b0cc66d9d04830781886234167fc2164)
We're seeing the cluster become healthy after a restart and then
revert to being unhealthy. It looks like there's a race and the
cluster shouldn't have been healthy, given that we seem to see that
the monitor cycle hasn't yet been run.
This collects some state debug info from all nodes after the cluster
becomes healthy. This is printed if the cluster is then unexpectedly
unhealthy a short time later.
Signed-off-by: Martin Schwenke <martin@meltin.net>
(This used to be ctdb commit c2efb5897e4258df649149f9904d7ac47322e1b4)
This depends on the format of onnode output and also depends on
simple/00_ctdb_onnode.sh having been run.
Signed-off-by: Martin Schwenke <martin@meltin.net>
(This used to be ctdb commit 93b53b186df55942bf4d9e90cae329f47889af72)
Easier to implement automatic checking.
Signed-off-by: Martin Schwenke <martin@meltin.net>
(This used to be ctdb commit 18db530880849b59445d7aa508bf218bdd77ea1c)
The manual replacement of loadconfig() had bit rotted and no longer
worked.
Signed-off-by: Martin Schwenke <martin@meltin.net>
(This used to be ctdb commit bf23e7166385d305c6860b37c120f70a9aa33aa5)
We're seeing some weirdness with CTDB controls timing out. We're
wondering if time is jumping forward, so this creates a time log on
each node that we can examine later if tests fail weirdly.
Signed-off-by: Martin Schwenke <martin@meltin.net>
(This used to be ctdb commit 5d82d89ee99f10bead101aebda645a80435ba246)
This sets up a more useful convention and avoids future .gitignore
problems.
Resolved conflict while cherry-picking this:
Don't take the eventscripts files for this branch. We'll put them
elsewhere.
Signed-off-by: Martin Schwenke <martin@meltin.net>
(This used to be ctdb commit a9879e37d4e3bb714ef6c0c4144c6949daec0b53)
If filenames should be printed in descriptions in the summary then the
descriptions should include the filename. A better option is to
include something more human-readable that makes the test just as
easily identifiable.
Signed-off-by: Martin Schwenke <martin@meltin.net>
(This used to be ctdb commit 0efdbd61bdc2343e5459959b300bccc9986b1d78)
This makes global changes easier.
Signed-off-by: Martin Schwenke <martin@meltin.net>
(This used to be ctdb commit 3af086398fecb5f7c501190f9620b9c7b201f0ca)
Add some simple tests for the onnode command. These use fake ssh and
ctdb commands that are added to $PATH. The infrastructure used is
quite flexible and would allow more complex tests to be written.
As-is, these tests expose some bugs in the an older version of onnode
that is included so it can be used to validate some of the tests.
Signed-off-by: Martin Schwenke <martin@meltin.net>
(This used to be ctdb commit f7f9d0943474cb2de7832d7ca95210ea9e9c772b)
Putting PASSED/FAILED on the left makes it easier to scan the results
and simplifies the code. Also put starts around the word "*FAILED*"
to make it more obvious.
Also add a -q option to throw away test output and only display the
summary (if -s is also specified).
Signed-off-by: Martin Schwenke <martin@meltin.net>
(This used to be ctdb commit c44b632b010b7d57007f3c8f294271c7e0217e0d)
This causes summary lines (when used with -s) to be pretty printed and
include the test description. This is the 4th line of the test output
- that is, immediately after the header.
Signed-off-by: Martin Schwenke <martin@meltin.net>
(This used to be ctdb commit 0e5cc2a58b0d38e10a2ef9e81dc887c20f3fbdcb)
This makes it 2, since this error corresponds loosely to ENOENT.
Signed-off-by: Martin Schwenke <martin@meltin.net>
(This used to be ctdb commit 1bf289abdd3067a40e9a67091aba78222d13eddf)
If the last IP address on an interfaces is removed then that
interfaces should no longer be checked by 10.interfaces. However,
"ctdb ifaces" still lists such interfaces so they are currently
checked.
The problem really needs to be addressed in ctdbd but a neat quick
eventscript fix will be minimally invasive...
This changes the code to use "ctdb -Y ip -v" instead of "ctdb -Y
ifaces". The former includes details of all public addresses and
associated interfaces, so when an address is removed there is no
output for it. This avoids orphaned interfaces from being listed.
The logic is also slightly improved so that $IFACES includes just a
(non-uniquified) list of interfaces, allowing an existing loop to be
removed.
Signed-off-by: Martin Schwenke <martin@meltin.net>
(This used to be ctdb commit 49b2d1bd9554461ed8edbfc21e777c0eca9e1443)
This makes IPv4 addresses comparable with IPv6 but reduces the overall
effectiveness of the algorithm. The alternative would be to treat
these addresses separately while trying to keep all the IPs in overall
balance... which is basically the problem that LCP2 solves. :-)
Signed-off-by: Martin Schwenke <martin@meltin.net>
(This used to be ctdb commit 3a7624f9d468b99714a7b6a45313f9e7f66011ed)
This time in the stats summary.
Signed-off-by: Martin Schwenke <martin@meltin.net>
(This used to be ctdb commit aabb2507dacc63ae026e6c99704a2fb79950e82c)
When there are IP groups, do not terminate when the overall cluster
goes out of balance.
Also make explicit that grat_ip_moves is an integer not a boolean, so
only terminate if it is greater than 0.
Signed-off-by: Martin Schwenke <martin@meltin.net>
(This used to be ctdb commit 0899f14b1483682d73d1ee2d2419db54ffeadc4b)
It had out-of-date information and a typo.
Signed-off-by: Martin Schwenke <martin@meltin.net>
(This used to be ctdb commit 5d0d2b8b528414c859da0e6fd5959321db33608b)
This is likely to cause many more state changes for nodes. In this
mode the odds of a failover are applied to determine whether a state
change occurs for each node. If no state change occurs then the
process is repeated.
Signed-off-by: Martin Schwenke <martin@meltin.net>
(This used to be ctdb commit b7c42bff9457ec8294b04245af8e3b6010707d1a)
Print the LCP imbalance metric after the list of IPs.
To make this more sensible, but most of the printing logic into the
Node class.
Signed-off-by: Martin Schwenke <martin@meltin.net>
(This used to be ctdb commit 2e680e6b421d72cf2d217d3c3c1564da0bb19633)
The public addresses passed to the node constructer can be nested 2
levels. Each sub-list is an IP group for which separate balance
analysis is done. However, the public address list is flattened and
the actual IP assignment algorithm doesn't know about IP groups.
This allows extra statistics to be printed and an extra termination
condition to be added for unbalanced IP groups.
Most code from calculate_imbalance() is factored out to a a new
function imbalance_for_ips(), which calculates imbalance for the given
IPs. calculate_imbalance() now returns the overall imbalance and a
list containing imbalances for each IP group. To support this
node_ip_coverage() now takes an optional list of IPs to check coverage
within.
This also adds extra output to show statistics for the LCP2 imbalance
metric.
Signed-off-by: Martin Schwenke <martin@meltin.net>
(This used to be ctdb commit 701395087156b2a5c7be1564897b796df35b69ec)
An imbalance exceeding the hard limit, as specified by -H (and
defaulting to 1), now causes termination when -x is specified.
Imbalances exceeding the soft limit, as specified by -S (and
defaulting to 1), are counted and printed in the statistics summary.
A side-effect is that imbalances less than 2 are no longer rounded
down to 0, since we want to see them in the stats.
Signed-off-by: Martin Schwenke <martin@meltin.net>
(This used to be ctdb commit b5e9a4c50eedb8cc786c52af06352788ca25f51e)
Add -L/--lcp2 option and implement LCP2 algorithm as an alternative to
the basic non-deterministic algorithm.
Existing examples will break if used with LCP2 since it needs real IP
addresses.
Signed-off-by: Martin Schwenke <martin@meltin.net>
(This used to be ctdb commit 22b14e1a887f0479cc75ed9027af5cc24797f217)
The hacks were attempts at improving the deterministic IPs algorithm
but they didn't work.
Signed-off-by: Martin Schwenke <martin@meltin.net>
(This used to be ctdb commit 6034de0e24438e012f9f1d2065531b1ce467ac52)
-v can now be provided more than once to increase verbosity.
Signed-off-by: Martin Schwenke <martin@meltin.net>
(This used to be ctdb commit ce4fb56c9972a854bd139429b6f4a26e8d5c3956)
Move struct ctdb_public_ip_list to ctdb_private.h and put some
definitions for some functions from ctdb_takeover.c there. This
allows those functions to be called from unit tests.
Add ctdb_takeover_tests.c and the Makefile support to build it.
Signed-off-by: Martin Schwenke <martin@meltin.net>
(This used to be ctdb commit 9d34be0233edf3bc022345c0494c4b2a4d7f8480)
The current non-deterministic IP allocation algorithm balances IPs
across the whole cluster. It does not consider different
interfaces/VLANs/subnets, so these different groups of IPs aren't
generally well balanced.
This adds the LCP2 algorithm for IP allocation and allows it to be
enabled by setting the "LCP2PublicIPs" tunable to 1.
The LCP2 algorithm calculates the imbalance of a node by totalling the
squares of the distances between each IP on the node. The IP distance
is defined as the length longest common prefix (LCP) of bits that is
found when comparing 2 IPs. The imbalance of a cluster is the maximum
imbalance for any node. At each step the algorithm selects an
allocation to the IP/node combination that results in the choosing the
allocation that best reduces the imbalance of the cluster.
The implementation splits out the IP allocation part of
ctdb_takeover_run() into new function ctdb_takeover_run_core(), and
then extracts out the basic IP assignment code into new functions
basic_allocate_unassigned() and basic_failback(). 3 new functions
lcp2_init(), lcp2_allocate_unassigned() and lcp2_failback() implement
the LCP2 algorithm, and are hooked into ctdb_takeover_run_core().
Signed-off-by: Martin Schwenke <martin@meltin.net>
(This used to be ctdb commit 61fc7fbd0235469df22deb6581c6bd47e30bc0be)
Dont talloc_free(vnn) immediately but postphone it until later when
the eventscript callback has completed.
CQ S1026664
(This used to be ctdb commit 0a99e8742a261b1d3a2c8830f5c19ea6c2c47cad)
ctdb_event_script_callback() takes a mem_ctx arg which it doesn't use, but
the implication is pretty clear, that when that mem_ctx is freed, the callback
shouldn't happen. Indeed, Ronnie reproduced a case where that callback
refers to freed memory, in the ip reallocation code under stress.
So attach the callback to the mem_ctx they give us, and remove it from the
script state structure when that's freed. It's a bit weird, but it works.
CQ: S1026179
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
(This used to be ctdb commit 6fcd867cc835ef1ffc1c50964f135c346503d40c)