source4/cluster and source4/ntvfs: convert to dbwrap, add ntdb option.
[obnox/samba/samba-obnox.git] / source4 / cluster / cluster.c
index 0bd4649376ed2aaab903001a3b19036e101e0370..11c4194d9a34dc193fe6c3087099059648ff69cf 100644 (file)
@@ -7,7 +7,7 @@
    
    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
+   the Free Software Foundation; either version 3 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
    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.
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
 
 #include "includes.h"
 #include "cluster/cluster.h"
 #include "cluster/cluster_private.h"
+#include "librpc/gen_ndr/misc.h"
+#include "librpc/gen_ndr/server_id.h"
 
 static struct cluster_ops *ops;
 
@@ -33,11 +34,11 @@ void cluster_set_ops(struct cluster_ops *new_ops)
 }
 
 /*
-  not a nice abstraction :(
+  an ugly way of getting at the backend handle (eg. ctdb context) via the cluster API
 */
-void *cluster_private(void)
+void *cluster_backend_handle(void)
 {
-       return ops->private;
+       return ops->backend_handle(ops);
 }
 
 /* by default use the local ops */
@@ -46,23 +47,40 @@ static void cluster_init(void)
        if (ops == NULL) cluster_local_init();
 }
 
-
+/*
+  create a server_id for the local node
+*/
+struct server_id cluster_id(uint64_t pid, uint32_t task_id)
+{
+       cluster_init();
+       return ops->cluster_id(ops, pid, task_id);
+}
 
 /*
-  server a server_id for the local node
+  open a temporary tdb in a cluster friendly manner
 */
-struct server_id cluster_id(uint32_t id)
+struct db_context *cluster_db_tmp_open(TALLOC_CTX *mem_ctx, struct loadparm_context *lp_ctx, const char *dbbase, int flags)
 {
        cluster_init();
-       return ops->cluster_id(ops, id);
+       return ops->cluster_db_tmp_open(ops, mem_ctx, lp_ctx, dbbase, flags);
 }
 
 
 /*
-  return a server_id as a string
+  register a callback function for a messaging endpoint
+*/
+NTSTATUS cluster_message_init(struct imessaging_context *msg, struct server_id server,
+                             cluster_message_fn_t handler)
+{
+       cluster_init();
+       return ops->message_init(ops, msg, server, handler);
+}
+
+/*
+  send a message to another node in the cluster
 */
-const char *cluster_id_string(TALLOC_CTX *mem_ctx, struct server_id id)
+NTSTATUS cluster_message_send(struct server_id server, DATA_BLOB *data)
 {
        cluster_init();
-       return ops->cluster_id_string(ops, mem_ctx, id);
+       return ops->message_send(ops, server, data);
 }