]> git.proxmox.com Git - librados2-perl.git/blobdiff - RADOS.xs
bump version to 1.4.1
[librados2-perl.git] / RADOS.xs
index 9d3462a4612ac78be3e17aedbe499ffe6052dbcb..45f634c3f3bfc4c87aa7b98733f2b78965a9176c 100644 (file)
--- a/RADOS.xs
+++ b/RADOS.xs
 
 #include <rados/librados.h>
 
+#define DEBUG_RADOS 0
+
+#define DPRINTF(fmt, ...)\
+       do { if (DEBUG_RADOS) { printf("debug: " fmt, ## __VA_ARGS__); } } while (0)
+
 MODULE = PVE::RADOS            PACKAGE = PVE::RADOS
 
-rados_t pve_rados_create() 
-PROTOTYPE:
+rados_t
+pve_rados_create(user)
+SV *user
+PROTOTYPE: $
 CODE:
-{      
-    rados_t clu = NULL;         
-    int ret = rados_create(&clu, NULL);
-    
+{
+    char *u = NULL;
+    rados_t clu = NULL;
+
+    if (SvOK(user)) {
+       u = SvPV_nolen(user);
+    }
+
+    int ret = rados_create(&clu, u);
+
     if (ret == 0)
         RETVAL = clu;
     else {
-        warn("rados_create failed (ret=%d)\n", ret);
+        die("rados_create failed - %s\n", strerror(-ret));
         RETVAL = NULL;
     }
 }
 OUTPUT: RETVAL
 
-int pve_rados_connect(cluster) 
+void
+pve_rados_conf_set(cluster, key, value)
+rados_t cluster
+char *key
+char *value
+PROTOTYPE: $$$
+CODE:
+{
+    DPRINTF("pve_rados_conf_set %s = %s\n", key, value);
+
+    int res = rados_conf_set(cluster, key, value);
+    if (res < 0) {
+        die("rados_conf_set failed - %s\n", strerror(-res));
+    }
+}
+
+void
+pve_rados_conf_read_file(cluster, path)
+rados_t cluster
+SV *path
+PROTOTYPE: $$
+CODE:
+{
+    char *p = NULL;
+
+    if (SvOK(path)) {
+       p = SvPV_nolen(path);
+    }
+
+    DPRINTF("pve_rados_conf_read_file %s\n", p);
+
+    int res = rados_conf_read_file(cluster, p);
+    if (res < 0) {
+        die("rados_conf_read_file failed - %s\n", strerror(-res));
+    }
+}
+
+void
+pve_rados_connect(cluster)
 rados_t cluster
 PROTOTYPE: $
 CODE:
 {
-    rados_conf_read_file(cluster, NULL);
-    RETVAL = rados_connect(cluster);
-    if (RETVAL < 0) {
-        die("rados_connect failed - %s\n", strerror(-RETVAL));
+    DPRINTF("pve_rados_connect\n");
+
+    int res = rados_connect(cluster);
+    if (res < 0) {
+        die("rados_connect failed - %s\n", strerror(-res));
     }
 }
-OUTPUT: RETVAL
 
 void
-pve_rados_shutdown(cluster) 
+pve_rados_shutdown(cluster)
 rados_t cluster
 PROTOTYPE: $
 CODE:
 {
+    DPRINTF("pve_rados_shutdown");
     rados_shutdown(cluster);
 }
 
-SV *
-pve_rados_mon_command(cluster, cmds) 
+HV *
+pve_rados_mon_command(cluster, cmds)
 rados_t cluster
 AV *cmds
 PROTOTYPE: $$
@@ -69,46 +120,56 @@ CODE:
             die("too many arguments");
         }
         cmd[cmdlen] = SvPV_nolen(arg);
+        DPRINTF("pve_rados_mon_command%zd %s\n", cmdlen, cmd[cmdlen]);
         cmdlen++;
-    } 
+    }
 
-    int ret = rados_mon_command(cluster, cmd, cmdlen,
-                                NULL, 0,
-                                &outbuf, &outbuflen,
-                                &outs, &outslen);
+    int ret = rados_mon_command(
+        cluster,
+        cmd,
+        cmdlen,
+        NULL,
+        0,
+        &outbuf,
+        &outbuflen,
+        &outs,
+        &outslen
+    );
 
-    if (ret < 0) {
-        die("mon_command failed - %s\n", outs);
-        rados_buffer_free(outs);
-    }
-    printf("TEST %d %d %d\n", ret, outbuflen, outslen);
+    HV * rh = (HV *)sv_2mortal((SV *)newHV());
 
-    RETVAL = newSVpv(outbuf, outbuflen);
+    (void)hv_store(rh, "return_code", 11, newSViv(ret), 0);
+    (void)hv_store(rh, "status_message", 14, newSVpv(outs, outslen), 0);
+    (void)hv_store(rh, "data", 4, newSVpv(outbuf, outbuflen), 0);
+    RETVAL = rh;
 
     rados_buffer_free(outbuf);
+    rados_buffer_free(outs);
 }
 OUTPUT: RETVAL
 
-HV * 
-pve_rados_cluster_stat(cluster) 
+HV *
+pve_rados_cluster_stat(cluster)
 rados_t cluster
 PROTOTYPE: $
 CODE:
 {
     struct rados_cluster_stat_t result;
+
+    DPRINTF("pve_rados_cluster_stat");
+
     int ret = rados_cluster_stat(cluster, &result);
-  
+
     if(ret != 0) {
         warn("rados_cluster_stat failed (ret=%d)\n", ret);
         XSRETURN_UNDEF;
     }
     HV * rh = (HV *)sv_2mortal((SV *)newHV());
 
-    hv_store(rh, "kb", 2, newSViv(result.kb), 0);
-    hv_store(rh, "kb_used", 7, newSViv(result.kb_used), 0);
-    hv_store(rh, "kb_avail", 8, newSViv(result.kb_avail), 0);
-    hv_store(rh, "num_objects", 11, newSViv(result.num_objects), 0);
+    (void)hv_store(rh, "kb", 2, newSViv(result.kb), 0);
+    (void)hv_store(rh, "kb_used", 7, newSViv(result.kb_used), 0);
+    (void)hv_store(rh, "kb_avail", 8, newSViv(result.kb_avail), 0);
+    (void)hv_store(rh, "num_objects", 11, newSViv(result.num_objects), 0);
 
     RETVAL = rh;
 }