]> git.proxmox.com Git - librados2-perl.git/blob - RADOS.xs
code cleanups
[librados2-perl.git] / RADOS.xs
1 #include "EXTERN.h"
2 #include "perl.h"
3 #include "XSUB.h"
4
5 #include "ppport.h"
6
7 #include <rados/librados.h>
8
9 MODULE = PVE::RADOS PACKAGE = PVE::RADOS
10
11 rados_t
12 pve_rados_create()
13 PROTOTYPE:
14 CODE:
15 {
16 rados_t clu = NULL;
17 int ret = rados_create(&clu, NULL);
18
19 if (ret == 0)
20 RETVAL = clu;
21 else {
22 warn("rados_create failed (ret=%d)\n", ret);
23 RETVAL = NULL;
24 }
25 }
26 OUTPUT: RETVAL
27
28 void
29 pve_rados_conf_set(cluster, key, value)
30 rados_t cluster
31 char *key
32 char *value
33 PROTOTYPE: $$$
34 CODE:
35 {
36 int res = rados_conf_set(cluster, key, value);
37 if (res < 0) {
38 die("rados_conf_set failed - %s\n", strerror(-res));
39 }
40 }
41
42
43
44 void
45 pve_rados_connect(cluster)
46 rados_t cluster
47 PROTOTYPE: $
48 CODE:
49 {
50 rados_conf_read_file(cluster, NULL);
51
52 int res = rados_connect(cluster);
53 if (res < 0) {
54 die("rados_connect failed - %s\n", strerror(-res));
55 }
56 }
57
58 void
59 pve_rados_shutdown(cluster)
60 rados_t cluster
61 PROTOTYPE: $
62 CODE:
63 {
64 rados_shutdown(cluster);
65 }
66
67 SV *
68 pve_rados_mon_command(cluster, cmds)
69 rados_t cluster
70 AV *cmds
71 PROTOTYPE: $$
72 CODE:
73 {
74 const char *cmd[64];
75 size_t cmdlen = 0;
76
77 char *outbuf =NULL;
78 size_t outbuflen = 0;
79 char *outs = NULL;
80 size_t outslen = 0;
81
82 SV *arg;
83
84 while ((arg = av_pop(cmds)) && (arg != &PL_sv_undef)) {
85 if (cmdlen >= 63) {
86 die("too many arguments");
87 }
88 cmd[cmdlen] = SvPV_nolen(arg);
89 cmdlen++;
90 }
91
92 int ret = rados_mon_command(cluster, cmd, cmdlen,
93 NULL, 0,
94 &outbuf, &outbuflen,
95 &outs, &outslen);
96
97 if (ret < 0) {
98 die("mon_command failed - %s\n", outs);
99 rados_buffer_free(outs);
100 }
101
102 RETVAL = newSVpv(outbuf, outbuflen);
103
104 rados_buffer_free(outbuf);
105 }
106 OUTPUT: RETVAL
107
108 HV *
109 pve_rados_cluster_stat(cluster)
110 rados_t cluster
111 PROTOTYPE: $
112 CODE:
113 {
114 struct rados_cluster_stat_t result;
115 int ret = rados_cluster_stat(cluster, &result);
116
117 if(ret != 0) {
118 warn("rados_cluster_stat failed (ret=%d)\n", ret);
119 XSRETURN_UNDEF;
120 }
121 HV * rh = (HV *)sv_2mortal((SV *)newHV());
122 SV **t;
123
124 t = hv_store(rh, "kb", 2, newSViv(result.kb), 0);
125 t = hv_store(rh, "kb_used", 7, newSViv(result.kb_used), 0);
126 t = hv_store(rh, "kb_avail", 8, newSViv(result.kb_avail), 0);
127 t = hv_store(rh, "num_objects", 11, newSViv(result.num_objects), 0);
128
129 RETVAL = rh;
130 }
131 OUTPUT: RETVAL