The branch, master has been updated
       via  35f6c3f3d4a ctdb/docs: Include ceph rados namespace support in man 
page
       via  d8c52995f68 ctdb/ceph: Add optional namespace support for mutex 
helper
      from  9242f1e0ddb gitlab-ci: Update image to Fedora 40

https://git.samba.org/?p=samba.git;a=shortlog;h=master


- Log -----------------------------------------------------------------
commit 35f6c3f3d4a5521e6576fcc0dd7dd3bbcea041b2
Author: Günther Deschner <g...@samba.org>
Date:   Fri Jun 7 14:40:07 2024 +0530

    ctdb/docs: Include ceph rados namespace support in man page
    
    Document the new optional argument to specify the namespace to be
    associated with RADOS objects in a pool.
    
    Pair-Programmed-With: Anoop C S <anoo...@samba.org>
    Signed-off-by: Günther Deschner <g...@samba.org>
    Reviewed-by: Günther Deschner <g...@samba.org>
    Reviewed-by: David Disseldorp <dd...@samba.org>
    
    Autobuild-User(master): Anoop C S <anoo...@samba.org>
    Autobuild-Date(master): Fri Jun 14 07:42:25 UTC 2024 on atb-devel-224

commit d8c52995f68fe088dd2174562faee69ed1c95edd
Author: Günther Deschner <g...@samba.org>
Date:   Fri Jun 7 14:39:37 2024 +0530

    ctdb/ceph: Add optional namespace support for mutex helper
    
    RADOS objects within a pool can be associated to a namespace for
    logical separation. librados already provides an API to configure
    such a namespace with respect to a context. Make use of it as an
    optional argument to the helper binary.
    
    Pair-Programmed-With: Anoop C S <anoo...@samba.org>
    Signed-off-by: Günther Deschner <g...@samba.org>
    Reviewed-by: Günther Deschner <g...@samba.org>
    Reviewed-by: David Disseldorp <dd...@samba.org>

-----------------------------------------------------------------------

Summary of changes:
 ctdb/doc/ctdb_mutex_ceph_rados_helper.7.xml    |  4 ++-
 ctdb/utils/ceph/ctdb_mutex_ceph_rados_helper.c | 50 +++++++++++++++++++++-----
 2 files changed, 45 insertions(+), 9 deletions(-)


Changeset truncated at 500 lines:

diff --git a/ctdb/doc/ctdb_mutex_ceph_rados_helper.7.xml 
b/ctdb/doc/ctdb_mutex_ceph_rados_helper.7.xml
index f558f873d9a..93d79cea5dc 100644
--- a/ctdb/doc/ctdb_mutex_ceph_rados_helper.7.xml
+++ b/ctdb/doc/ctdb_mutex_ceph_rados_helper.7.xml
@@ -29,12 +29,14 @@
       <manvolnum>5</manvolnum></citerefentry>:
     </para>
     <screen format="linespecific">
-cluster lock = !ctdb_mutex_ceph_rados_helper [Cluster] [User] [Pool] [Object]
+cluster lock = !ctdb_mutex_ceph_rados_helper [Cluster] [User] [Pool] [Object] 
[Timeout] [-n Namespace]
 
 Cluster: Ceph cluster name (e.g. ceph)
 User: Ceph cluster user name (e.g. client.admin)
 Pool: Ceph RADOS pool name
 Object: Ceph RADOS object name
+Timeout: Ceph RADOS lock duration in seconds (optional)
+Namespace: Ceph RADOS pool namespace (optional)
     </screen>
     <para>
       The Ceph cluster <parameter>Cluster</parameter> must be up and running,
diff --git a/ctdb/utils/ceph/ctdb_mutex_ceph_rados_helper.c 
b/ctdb/utils/ceph/ctdb_mutex_ceph_rados_helper.c
index 7d868a38b23..46566c97a83 100644
--- a/ctdb/utils/ceph/ctdb_mutex_ceph_rados_helper.c
+++ b/ctdb/utils/ceph/ctdb_mutex_ceph_rados_helper.c
@@ -42,9 +42,18 @@
 
 static char *progname = NULL;
 
+static void usage(void)
+{
+       fprintf(stderr, "Usage: %s <Ceph Cluster> <Ceph user> "
+                       "<RADOS pool> <RADOS object> "
+                       "[lock duration secs] [-n RADOS namespace]\n",
+                       progname);
+}
+
 static int ctdb_mutex_rados_ctx_create(const char *ceph_cluster_name,
                                       const char *ceph_auth_name,
                                       const char *pool_name,
+                                      const char *namespace,
                                       rados_t *_ceph_cluster,
                                       rados_ioctx_t *_ioctx)
 {
@@ -87,6 +96,10 @@ static int ctdb_mutex_rados_ctx_create(const char 
*ceph_cluster_name,
                return ret;
        }
 
+       if (namespace != NULL) {
+               rados_ioctx_set_namespace(ioctx, namespace);
+       }
+
        *_ceph_cluster = ceph_cluster;
        *_ioctx = ioctx;
 
@@ -145,6 +158,7 @@ struct ctdb_mutex_rados_state {
        const char *ceph_cluster_name;
        const char *ceph_auth_name;
        const char *pool_name;
+       const char *namespace;
        const char *object;
        uint64_t lock_duration_s;
        int ppid;
@@ -295,15 +309,13 @@ static int ctdb_mutex_rados_mgr_reg(rados_t ceph_cluster)
 int main(int argc, char *argv[])
 {
        int ret;
+       int opt;
        struct ctdb_mutex_rados_state *cmr_state;
 
        progname = argv[0];
 
-       if ((argc != 5) && (argc != 6)) {
-               fprintf(stderr, "Usage: %s <Ceph Cluster> <Ceph user> "
-                               "<RADOS pool> <RADOS object> "
-                               "[lock duration secs]\n",
-                       progname);
+       if (argc < 5) {
+               usage();
                ret = -EINVAL;
                goto err_out;
        }
@@ -325,15 +337,36 @@ int main(int argc, char *argv[])
        cmr_state->ceph_auth_name = argv[2];
        cmr_state->pool_name = argv[3];
        cmr_state->object = argv[4];
-       if (argc == 6) {
+
+       optind = 5;
+       while ((opt = getopt(argc, argv, "n:")) != -1) {
+               switch(opt) {
+               case 'n':
+                       cmr_state->namespace = optarg;
+                       break;
+               default:
+                       usage();
+                       ret = -EINVAL;
+                       goto err_ctx_cleanup;
+               }
+       }
+
+       if (argv[optind] != NULL) {
                /* optional lock duration provided */
                char *endptr = NULL;
-               cmr_state->lock_duration_s = strtoull(argv[5], &endptr, 0);
-               if ((endptr == argv[5]) || (*endptr != '\0')) {
+               cmr_state->lock_duration_s = strtoull(argv[optind], &endptr, 0);
+               if ((endptr == argv[optind]) || (*endptr != '\0')) {
                        fprintf(stdout, CTDB_MUTEX_STATUS_ERROR);
                        ret = -EINVAL;
                        goto err_ctx_cleanup;
                }
+               if (argv[++optind] != NULL) {
+                       /* incorrect count or format for optional arguments */
+                       usage();
+                       ret = -EINVAL;
+                       goto err_ctx_cleanup;
+               }
+
        } else {
                cmr_state->lock_duration_s
                        = CTDB_MUTEX_CEPH_LOCK_DURATION_SECS_DEFAULT;
@@ -398,6 +431,7 @@ int main(int argc, char *argv[])
        ret = ctdb_mutex_rados_ctx_create(cmr_state->ceph_cluster_name,
                                          cmr_state->ceph_auth_name,
                                          cmr_state->pool_name,
+                                         cmr_state->namespace,
                                          &cmr_state->ceph_cluster,
                                          &cmr_state->ioctx);
        if (ret < 0) {


-- 
Samba Shared Repository

Reply via email to