mirror of
https://github.com/ceph/go-ceph
synced 2024-12-19 21:02:12 +00:00
6072f41bd6
Signed-off-by: John Mulligan <jmulligan@redhat.com> Signed-off-by: Sven Anderson <sven@redhat.com>
49 lines
1.1 KiB
Go
49 lines
1.1 KiB
Go
// +build luminous mimic
|
|
// +build !nautilus
|
|
//
|
|
// Ceph Nautilus includes rbd_list2() and marked rbd_list() deprecated.
|
|
|
|
package rbd
|
|
|
|
// #cgo LDFLAGS: -lrbd
|
|
// #include <rados/librados.h>
|
|
// #include <rbd/librbd.h>
|
|
// #include <errno.h>
|
|
import "C"
|
|
|
|
import (
|
|
"bytes"
|
|
"unsafe"
|
|
|
|
"github.com/ceph/go-ceph/internal/retry"
|
|
"github.com/ceph/go-ceph/rados"
|
|
)
|
|
|
|
// GetImageNames returns the list of current RBD images.
|
|
func GetImageNames(ioctx *rados.IOContext) (names []string, err error) {
|
|
var (
|
|
buf []byte
|
|
csize C.size_t
|
|
)
|
|
// from 4KiB to 32KiB
|
|
retry.WithSizes(4096, 1<<15, func(size int) retry.Hint {
|
|
csize = C.size_t(size)
|
|
buf = make([]byte, csize)
|
|
ret := C.rbd_list(cephIoctx(ioctx),
|
|
(*C.char)(unsafe.Pointer(&buf[0])), &csize)
|
|
err = getErrorIfNegative(ret)
|
|
return retry.Size(int(csize)).If(err == errRange)
|
|
})
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
tmp := bytes.Split(buf[:csize-1], []byte{0})
|
|
for _, s := range tmp {
|
|
if len(s) > 0 {
|
|
name := C.GoString((*C.char)(unsafe.Pointer(&s[0])))
|
|
names = append(names, name)
|
|
}
|
|
}
|
|
return names, nil
|
|
}
|