diff --git a/rados/conn.go b/rados/conn.go index 898a3f7..7fb557a 100644 --- a/rados/conn.go +++ b/rados/conn.go @@ -261,11 +261,10 @@ func (c *Conn) DeletePool(name string) error { } // 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])) +func (c *Conn) MonCommand(args []byte) (buffer, info string, err error) { + argv := make([]*C.char, len(args)) + for i, _ := range args { + argv[i] = (*C.char)(unsafe.Pointer(&args[i])) } var ( @@ -276,7 +275,7 @@ func (c *Conn) MonCommand(args []string) (buffer, info string, err error) { defer C.free(unsafe.Pointer(inbuf)) ret := C.rados_mon_command(c.cluster, - &argv[0], C.size_t(len(commands)), + &argv[0], C.size_t(len(args)), inbuf, // inbuf C.size_t(0), // length inbuf &outbuf, // actual data diff --git a/rados/rados_test.go b/rados/rados_test.go index 82b05f0..fe6e49e 100644 --- a/rados/rados_test.go +++ b/rados/rados_test.go @@ -12,6 +12,7 @@ import "time" import "net" import "fmt" import "sort" +import "encoding/json" func GetUUID() string { out, _ := exec.Command("uuidgen").Output() @@ -375,6 +376,23 @@ func TestGetPoolName(t *testing.T) { conn.Shutdown() } +func TestMonCommand(t *testing.T) { + conn, _ := rados.NewConn() + conn.ReadDefaultConfigFile() + conn.Connect() + + command, err := json.Marshal(map[string]string{"prefix": "df", "format": "json"}) + buf, info, err := conn.MonCommand(command) + assert.NoError(t, err) + + var message map[string]interface{} + err = json.Unmarshal([]byte(buf), &message) + assert.NoError(t, err) + + fmt.Println("Use ", info) + os.Stdout.Write([]byte(buf)) +} + func TestObjectIterator(t *testing.T) { conn, _ := rados.NewConn() conn.ReadDefaultConfigFile()