[dm-devel] [PATCH 1 of 1] Updated cluster log patch
Alasdair G Kergon
agk at redhat.com
Tue Apr 7 00:52:54 UTC 2009
On Thu, Apr 02, 2009 at 09:40:35AM -0500, Jon Brassow wrote:
> There is a kernel component (provided in this patch) and a
> user space component. The kernel component implements the
> logging interface and passes all requests to userspace via
> 'connector' (a netlink wrapper). The userspace daemon is
> built upon OpenAIS for cluster communication and is fault
> tolerant.
> +config DM_LOG_CLUSTERED
> + tristate "Mirror cluster logging (EXPERIMENTAL)"
> + depends on DM_MIRROR && EXPERIMENTAL
> + select CONNECTOR
How does that interact with dependencies that CONNECTOR itself has?
Does it always behave correctly and sensibly?
Would another 'depends on' be better?
> + Cluster logging allows device-mapper mirroring to be
> + cluster-aware. Mirror devices can be used by multiple
> + machines at the same time. Note: this will not make
> + your applications cluster-aware.
Can we explain the jargon a bit more, particularly the first sentence?
And the second sentence is missing qualification.
Look at the style of other entries.
What about dependencies etc.?
> +dm-log-clustered-objs := dm-log-cluster.o dm-log-cluster-transfer.o
I've fixed that up to work with the latest kernels.
> ===================================================================
> --- linux-2.6.orig/include/linux/connector.h
> +++ linux-2.6/include/linux/connector.h
> @@ -39,8 +39,10 @@
> #define CN_IDX_V86D 0x4
> #define CN_VAL_V86D_UVESAFB 0x1
> #define CN_IDX_BB 0x5 /* BlackBoard, from the TSP GPL sampling framework */
> +#define CN_IDX_DM 0x6 /* Device Mapper */
> +#define CN_VAL_DM_CLUSTER_LOG 0x1
>
> -#define CN_NETLINK_USERS 6
> +#define CN_NETLINK_USERS 7
Has this been copied to the maintainer of that file and acked?
Please cc that maintainer on future posts unless the maintainer says it's
OK not to.
> +++ linux-2.6/include/linux/dm-log-cluster.h
> + * This file is released under the LGPL.
Is this header meant for userspace use too?
If so, the Kbuild file is missing from this patch.
> +#define DM_CLOG_IS_REMOTE_RECOVERING 17
> +#define REQUEST_TYPES { \
> + "DM_CLOG_IS_REMOTE_RECOVERING" \
> +}
I think there should be some sort of versioning in this file to make
it easier to modify that list in future.
> +struct clog_tfr {
> + uint64_t private[2];
What for? Comment missing.
> + char uuid[DM_UUID_LEN]; /* Ties a request to a specific mirror log */
> +
> + int error; /* Used by server to inform of errors */
If this struct is meant to be passed between userspace and kernel
it would be a good idea to use unambiguous alignment: add some
padding after the char[] and only used fields with a universally-defined width
so avoid 'int'.
(And presumably userspace deals with endianness issues?)
> +static struct cn_msg *prealloced_cn_msg;
> +static struct clog_tfr *prealloced_clog_tfr;
> +static struct cb_id cn_clog_id = { CN_IDX_DM, CN_VAL_DM_CLUSTER_LOG };
> +static DEFINE_MUTEX(_lock);
> +struct receiving_pkg {
> +static DEFINE_SPINLOCK(receiving_list_lock);
> +static struct list_head receiving_list;
We're trying to use dm_<some_module_identifier> prefixes on more variables and
structs now.
> + while (1) {
> + set_current_state(TASK_INTERRUPTIBLE);
> + schedule_timeout(2*HZ);
> + DMWARN("Attempting to contact cluster log server...");
while(1) loops always ring alarm bells...
Were other approaches ruled out?
Frequency of attempts?
Too many log messages? (We do have *_LIMIT).
> +*Others have also suggested 'multi-log',
Which is what?
> +this is the logging method used if logging disk in the "disk" method dies.
Unconditionally? (I've forgotton.)
> +These types operate in the same way as their single machine counterparts,
> +but they are cluster-aware. This is done by forwarding most logging
'cluster-aware' means what???
> +located in include/linux/dm-log-cluster.h. 'Connector' is used as the
> +interface for kernel/userspace interaction. In userspace, the daemons
Definition of interface?
Perhaps more comments in the .h file?
Or more details here, or reference other documentation?
> +use openAIS/corosync in order to communicate with guaranteed ordering
> +and delivery.
Nope. Kernel documentation ends at the kernel/userspace interface.
Then this can refer to one specific userspace implementation - available
from where? - that happens to use openAIS/corosync for its communication.
But if openAIS/corosysnc is a *requirement* of the kernel/userspace interface
then I think the interface is wrong and this shouldn't go in yet...
That interface should be independent of any specific userspace implementation.
Alasdair
--
agk at redhat.com
More information about the dm-devel
mailing list