mirror of https://github.com/ceph/go-ceph
implement the MonCommand function
This commit is contained in:
parent
ed459df64f
commit
a06dd37546
|
@ -259,3 +259,44 @@ func (c *Conn) DeletePool(name string) error {
|
||||||
return RadosError(ret)
|
return RadosError(ret)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// MonCommand sends a command to one of the monitors
|
||||||
|
func (c *Conn) MonCommand(args []string) (buffer, info string, err error) {
|
||||||
|
argv := make([]*C.char, len(commands))
|
||||||
|
for i, arg := range args {
|
||||||
|
argv[i] = C.CString(arg)
|
||||||
|
defer C.free(unsafe.Pointer(argv[i]))
|
||||||
|
}
|
||||||
|
|
||||||
|
var (
|
||||||
|
outs, outbuf *C.char
|
||||||
|
outslen, outbuflen C.size_t
|
||||||
|
)
|
||||||
|
inbuf := C.CString("")
|
||||||
|
defer C.free(unsafe.Pointer(inbuf))
|
||||||
|
|
||||||
|
ret := C.rados_mon_command(c.cluster,
|
||||||
|
&argv[0], C.size_t(len(commands)),
|
||||||
|
inbuf, // inbuf
|
||||||
|
C.size_t(0), // length inbuf
|
||||||
|
&outbuf, // actual data
|
||||||
|
&outbuflen, // len data
|
||||||
|
&outs, // report largenumber
|
||||||
|
&outslen)
|
||||||
|
|
||||||
|
if outbuflen > 0 {
|
||||||
|
buffer = C.GoStringN(outbuf, C.int(outbuflen))
|
||||||
|
// C.rados_buffer_free(outbuf)
|
||||||
|
C.free(unsafe.Pointer(outbuf))
|
||||||
|
}
|
||||||
|
if outslen > 0 {
|
||||||
|
info = C.GoStringN(outs, C.int(outslen))
|
||||||
|
//C.rados_buffer_free(outs)
|
||||||
|
C.free(unsafe.Pointer(outs))
|
||||||
|
}
|
||||||
|
if ret != 0 {
|
||||||
|
err = RadosError(int(ret))
|
||||||
|
return // info might contain hints as to why the error happened
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue