From 9d8c44af173c5266ea6c5eaf7772a21f8d3fb523 Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Fri, 19 Jan 2007 03:53:37 +0000 Subject: r20887: allow the registration of multiple cluster backends this is in preparation for ctdb (This used to be commit 489f022175a1022bcca8053116362825daae5e40) --- source4/cluster/cluster.c | 35 +++++++++++++++++++++++++++++------ source4/cluster/cluster.h | 1 + source4/cluster/cluster_private.h | 36 ++++++++++++++++++++++++++++++++++++ 3 files changed, 66 insertions(+), 6 deletions(-) create mode 100644 source4/cluster/cluster_private.h (limited to 'source4/cluster') diff --git a/source4/cluster/cluster.c b/source4/cluster/cluster.c index fef5bce0d1..0bd4649376 100644 --- a/source4/cluster/cluster.c +++ b/source4/cluster/cluster.c @@ -22,16 +22,39 @@ #include "includes.h" #include "cluster/cluster.h" +#include "cluster/cluster_private.h" + +static struct cluster_ops *ops; + +/* set cluster operations */ +void cluster_set_ops(struct cluster_ops *new_ops) +{ + ops = new_ops; +} + +/* + not a nice abstraction :( +*/ +void *cluster_private(void) +{ + return ops->private; +} + +/* by default use the local ops */ +static void cluster_init(void) +{ + if (ops == NULL) cluster_local_init(); +} + + /* server a server_id for the local node */ struct server_id cluster_id(uint32_t id) { - struct server_id server_id; - ZERO_STRUCT(server_id); - server_id.id = id; - return server_id; + cluster_init(); + return ops->cluster_id(ops, id); } @@ -40,6 +63,6 @@ struct server_id cluster_id(uint32_t id) */ const char *cluster_id_string(TALLOC_CTX *mem_ctx, struct server_id id) { - return talloc_asprintf(mem_ctx, "%u.%u", id.node, id.id); + cluster_init(); + return ops->cluster_id_string(ops, mem_ctx, id); } - diff --git a/source4/cluster/cluster.h b/source4/cluster/cluster.h index 3c7f83960e..54dfec6259 100644 --- a/source4/cluster/cluster.h +++ b/source4/cluster/cluster.h @@ -31,5 +31,6 @@ /* prototypes */ struct server_id cluster_id(uint32_t id); const char *cluster_id_string(TALLOC_CTX *mem_ctx, struct server_id id); +void *cluster_private(void); #endif diff --git a/source4/cluster/cluster_private.h b/source4/cluster/cluster_private.h new file mode 100644 index 0000000000..e5df10060f --- /dev/null +++ b/source4/cluster/cluster_private.h @@ -0,0 +1,36 @@ +/* + Unix SMB/CIFS implementation. + + private structures for clustering + + Copyright (C) Andrew Tridgell 2006 + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +*/ + +#ifndef _CLUSTER_PRIVATE_H_ +#define _CLUSTER_PRIVATE_H_ + +struct cluster_ops { + struct server_id (*cluster_id)(struct cluster_ops *ops, uint32_t id); + const char *(*cluster_id_string)(struct cluster_ops *ops, + TALLOC_CTX *, struct server_id ); + void *private; /* backend state */ +}; + +void cluster_set_ops(struct cluster_ops *new_ops); +void cluster_local_init(void); + +#endif -- cgit