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 {
OUTPUT: RETVAL
void
-pve_rados_conf_set(cluster, key, value)
+pve_rados_conf_set(cluster, key, value)
rados_t cluster
char *key
char *value
DPRINTF("pve_rados_conf_set %s = %s\n", key, value);
int res = rados_conf_set(cluster, key, value);
- if (res < 0) {
+ if (res < 0) {
die("rados_conf_set failed - %s\n", strerror(-res));
}
}
void
-pve_rados_connect(cluster)
+pve_rados_conf_read_file(cluster, path)
rados_t cluster
-PROTOTYPE: $
+SV *path
+PROTOTYPE: $$
CODE:
{
- DPRINTF("pve_rados_connect\n");
+ char *p = NULL;
- int res = rados_conf_read_file(cluster, 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));
}
-
- res = rados_connect(cluster);
+}
+
+void
+pve_rados_connect(cluster)
+rados_t cluster
+PROTOTYPE: $
+CODE:
+{
+ DPRINTF("pve_rados_connect\n");
+
+ int res = rados_connect(cluster);
if (res < 0) {
die("rados_connect failed - %s\n", strerror(-res));
}
}
void
-pve_rados_shutdown(cluster)
+pve_rados_shutdown(cluster)
rados_t cluster
PROTOTYPE: $
CODE:
rados_shutdown(cluster);
}
-SV *
-pve_rados_mon_command(cluster, cmds)
+HV *
+pve_rados_mon_command(cluster, cmds)
rados_t cluster
AV *cmds
PROTOTYPE: $$
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);
-
- if (ret < 0) {
- char msg[4096];
- snprintf(msg, sizeof(msg), "mon_command failed - %s\n", outs);
- rados_buffer_free(outs);
- die(msg);
}
-
- RETVAL = newSVpv(outbuf, outbuflen);
+
+ int ret = rados_mon_command(
+ cluster,
+ cmd,
+ cmdlen,
+ NULL,
+ 0,
+ &outbuf,
+ &outbuflen,
+ &outs,
+ &outslen
+ );
+
+ HV * rh = (HV *)sv_2mortal((SV *)newHV());
+
+ (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:
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;