]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
libcephfs_proxy: make configurable settings available everywhere
authorXavi Hernandez <xhernandez@gmail.com>
Tue, 13 Jan 2026 11:05:20 +0000 (12:05 +0100)
committerXavi Hernandez <xhernandez@gmail.com>
Tue, 10 Feb 2026 07:20:27 +0000 (08:20 +0100)
Signed-off-by: Xavi Hernandez <xhernandez@gmail.com>
src/libcephfs_proxy/libcephfsd.c
src/libcephfs_proxy/proxy.h
src/libcephfs_proxy/proxy_link.c
src/libcephfs_proxy/proxy_link.h
src/libcephfs_proxy/proxy_mount.c
src/libcephfs_proxy/proxy_mount.h

index b920856cb8852cc4673ec3b5b31ac4f6559b0494..bbb5700d21fffd30f400f8ea48e818cc3e1d7a90 100644 (file)
@@ -23,6 +23,7 @@
 typedef struct _proxy_server {
        proxy_link_t link;
        proxy_manager_t *manager;
+       proxy_settings_t *settings;
 } proxy_server_t;
 
 typedef struct _proxy_client {
@@ -30,6 +31,7 @@ typedef struct _proxy_client {
        proxy_link_negotiate_t neg;
        proxy_async_t async;
        proxy_link_t *link;
+       proxy_settings_t *settings;
        proxy_random_t random;
        void *buffer;
        uint32_t buffer_size;
@@ -39,7 +41,7 @@ typedef struct _proxy_client {
 typedef struct _proxy {
        proxy_manager_t manager;
        proxy_log_handler_t log_handler;
-       const char *socket_path;
+       proxy_settings_t settings;
 } proxy_t;
 
 typedef int32_t (*proxy_handler_t)(proxy_client_t *, proxy_req_t *,
@@ -184,7 +186,7 @@ static int32_t libcephfsd_create(proxy_client_t *client, proxy_req_t *req,
 
        id = CEPH_STR_GET(req->create, id, data);
 
-       err = proxy_mount_create(&mount, id);
+       err = proxy_mount_create(&mount, client->settings, id);
        TRACE("ceph_create(%p, '%s') -> %d", mount, id, err);
 
        if (err >= 0) {
@@ -2168,7 +2170,8 @@ static void destroy_connection(proxy_worker_t *worker)
        proxy_free(client);
 }
 
-static int32_t accept_connection(proxy_link_t *link, int32_t sd)
+static int32_t accept_connection(proxy_link_t *link, proxy_settings_t *settings,
+                                int32_t sd)
 {
        proxy_server_t *server;
        proxy_client_t *client;
@@ -2182,6 +2185,8 @@ static int32_t accept_connection(proxy_link_t *link, int32_t sd)
                goto failed_close;
        }
 
+       client->settings = settings;
+
        client->buffer_size = 65536;
        client->buffer = proxy_malloc(client->buffer_size);
        if (client->buffer == NULL) {
@@ -2232,8 +2237,9 @@ static int32_t server_start(proxy_manager_t *manager)
        proxy = container_of(manager, proxy_t, manager);
 
        server.manager = manager;
+       server.settings = &proxy->settings;
 
-       return proxy_link_server(&server.link, proxy->socket_path,
+       return proxy_link_server(&server.link, &proxy->settings,
                                 accept_connection, check_stop);
 }
 
@@ -2306,16 +2312,16 @@ int32_t main(int32_t argc, char *argv[])
 
        proxy_log_register(&proxy.log_handler, log_print);
 
-       proxy.socket_path = PROXY_SOCKET;
+       proxy.settings.socket_path = PROXY_SOCKET;
 
        env = getenv(PROXY_SOCKET_ENV);
        if (env != NULL) {
-               proxy.socket_path = env;
+               proxy.settings.socket_path = env;
        }
 
        while ((val = getopt_long(argc, argv, ":s:", main_opts, NULL)) >= 0) {
                if (val == 's') {
-                       proxy.socket_path = optarg;
+                       proxy.settings.socket_path = optarg;
                } else if (val == ':') {
                        proxy_log(LOG_ERR, ENODATA,
                                  "Argument missing for '%s'\n", optopt);
index 6cbfe2a98b9c6b6faad185427eb377f6a14768a3..f5a409625f2233d868b95013c9471832ee50a1b4 100644 (file)
@@ -45,6 +45,9 @@ enum {
 struct _list;
 typedef struct _list list_t;
 
+struct _proxy_settings;
+typedef struct _proxy_settings proxy_settings_t;
+
 struct _proxy_buffer_ops;
 typedef struct _proxy_buffer_ops proxy_buffer_ops_t;
 
@@ -83,7 +86,8 @@ typedef void (*proxy_worker_destroy_t)(proxy_worker_t *);
 
 typedef int32_t (*proxy_manager_start_t)(proxy_manager_t *);
 
-typedef int32_t (*proxy_link_start_t)(proxy_link_t *, int32_t);
+typedef int32_t (*proxy_link_start_t)(proxy_link_t *, proxy_settings_t *,
+                                     int32_t);
 typedef bool (*proxy_link_stop_t)(proxy_link_t *);
 
 struct _list {
@@ -91,4 +95,8 @@ struct _list {
        list_t *prev;
 };
 
+struct _proxy_settings {
+       const char *socket_path;
+};
+
 #endif
index be7c987df2cb07e523ad34e991fb98e0bbc35e79..7582822268ed095aed88a1c8762e40effc57ba65 100644 (file)
@@ -678,16 +678,19 @@ void proxy_link_close(proxy_link_t *link)
        link->sd = -1;
 }
 
-int32_t proxy_link_server(proxy_link_t *link, const char *path,
+int32_t proxy_link_server(proxy_link_t *link, proxy_settings_t *settings,
                          proxy_link_start_t start, proxy_link_stop_t stop)
 {
        struct sockaddr_un addr;
+       const char *path;
        socklen_t len;
        int32_t cd, err;
 
        link->stop = stop;
        link->sd = -1;
 
+       path = settings->socket_path;
+
        err = proxy_link_prepare(&addr, path);
        if (err < 0) {
                return err;
@@ -720,7 +723,7 @@ int32_t proxy_link_server(proxy_link_t *link, const char *path,
                                          "Failed to accept a connection");
                        }
                } else {
-                       start(link, cd);
+                       start(link, settings, cd);
                }
        }
 
index 2dd851c7f1577e38a9776896bb2949b7434c452d..ee2fffe6a2d1b303f2bc2c21eb46ab45b6047fe7 100644 (file)
@@ -120,7 +120,7 @@ int32_t proxy_link_client(proxy_link_t *link, const char *path,
 
 void proxy_link_close(proxy_link_t *link);
 
-int32_t proxy_link_server(proxy_link_t *link, const char *path,
+int32_t proxy_link_server(proxy_link_t *link, proxy_settings_t *settings,
                          proxy_link_start_t start, proxy_link_stop_t stop);
 
 int32_t proxy_link_send(int32_t sd, struct iovec *iov, int32_t count);
index 1943736e7f121184eb784b12400c2efb1c2e4936..a29d2a1fdda7b1ed5ce75060de4cc841724f9e02 100644 (file)
@@ -770,7 +770,7 @@ static void proxy_instance_destroy(proxy_instance_t *instance)
 
 /* Create a new Ceph client instance with the provided id */
 static int32_t proxy_instance_create(proxy_instance_t **pinstance,
-                                    const char *id)
+                                    proxy_settings_t *settings, const char *id)
 {
        struct ceph_mount_info *cmount;
        proxy_instance_t *instance;
@@ -783,6 +783,7 @@ static int32_t proxy_instance_create(proxy_instance_t **pinstance,
 
        list_init(&instance->siblings);
        list_init(&instance->changes);
+       instance->settings = settings;
        instance->cmount = NULL;
        instance->inited = false;
        instance->mounted = false;
@@ -1099,7 +1100,8 @@ static int32_t proxy_instance_unmount(proxy_instance_t **pinstance)
        return 0;
 }
 
-int32_t proxy_mount_create(proxy_mount_t **pmount, const char *id)
+int32_t proxy_mount_create(proxy_mount_t **pmount, proxy_settings_t *settings,
+                          const char *id)
 {
        proxy_mount_t *mount;
        int32_t err;
@@ -1110,7 +1112,7 @@ int32_t proxy_mount_create(proxy_mount_t **pmount, const char *id)
        }
        mount->root = NULL;
 
-       err = proxy_instance_create(&mount->instance, id);
+       err = proxy_instance_create(&mount->instance, settings, id);
        if (err < 0) {
                proxy_free(mount);
                return err;
index 14bd58fabb2a3cb2432673c0bf2e101bcd58da9c..c217673e71040876782f746c2b2221f17d3d612f 100644 (file)
@@ -12,6 +12,7 @@ typedef struct _proxy_instance {
        list_t list;
        list_t siblings;
        list_t changes;
+       proxy_settings_t *settings;
        struct ceph_mount_info *cmount;
        struct Inode *root;
        bool inited;
@@ -36,7 +37,8 @@ static inline struct ceph_mount_info *proxy_cmount(proxy_mount_t *mount)
 
 int32_t proxy_inode_ref(proxy_mount_t *mount, uint64_t inode);
 
-int32_t proxy_mount_create(proxy_mount_t **pmount, const char *id);
+int32_t proxy_mount_create(proxy_mount_t **pmount, proxy_settings_t *settings,
+                          const char *id);
 
 int32_t proxy_mount_config(proxy_mount_t *mount, const char *config);