mirror of https://github.com/ceph/go-ceph
rados: add GetNamespace implementing rados_ioctx_get_namespace
Signed-off-by: John Mulligan <jmulligan@redhat.com>
This commit is contained in:
parent
bd77bccc68
commit
b756c84956
|
@ -0,0 +1,43 @@
|
||||||
|
// +build !luminous,!mimic
|
||||||
|
|
||||||
|
package rados
|
||||||
|
|
||||||
|
// #cgo LDFLAGS: -lrados
|
||||||
|
// #include <rados/librados.h>
|
||||||
|
//
|
||||||
|
import "C"
|
||||||
|
|
||||||
|
import (
|
||||||
|
"unsafe"
|
||||||
|
|
||||||
|
"github.com/ceph/go-ceph/internal/retry"
|
||||||
|
)
|
||||||
|
|
||||||
|
// GetNamespace gets the namespace used for objects within this IO context.
|
||||||
|
//
|
||||||
|
// Implements:
|
||||||
|
// int rados_ioctx_get_namespace(rados_ioctx_t io, char *buf,
|
||||||
|
// unsigned maxlen);
|
||||||
|
func (ioctx *IOContext) GetNamespace() (string, error) {
|
||||||
|
if err := ioctx.validate(); err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
var (
|
||||||
|
err error
|
||||||
|
buf []byte
|
||||||
|
ret C.int
|
||||||
|
)
|
||||||
|
retry.WithSizes(128, 8192, func(size int) retry.Hint {
|
||||||
|
buf = make([]byte, size)
|
||||||
|
ret = C.rados_ioctx_get_namespace(
|
||||||
|
ioctx.ioctx,
|
||||||
|
(*C.char)(unsafe.Pointer(&buf[0])),
|
||||||
|
C.unsigned(len(buf)))
|
||||||
|
err = getErrorIfNegative(ret)
|
||||||
|
return retry.DoubleSize.If(err == errRange)
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
return string(buf[:ret]), nil
|
||||||
|
}
|
|
@ -0,0 +1,34 @@
|
||||||
|
// +build !luminous,!mimic
|
||||||
|
|
||||||
|
package rados
|
||||||
|
|
||||||
|
import (
|
||||||
|
"testing"
|
||||||
|
|
||||||
|
"github.com/stretchr/testify/assert"
|
||||||
|
)
|
||||||
|
|
||||||
|
func (suite *RadosTestSuite) TestSetGetNamespace() {
|
||||||
|
suite.SetupConnection()
|
||||||
|
|
||||||
|
suite.T().Run("validNS", func(t *testing.T) {
|
||||||
|
suite.ioctx.SetNamespace("space1")
|
||||||
|
ns, err := suite.ioctx.GetNamespace()
|
||||||
|
assert.NoError(t, err)
|
||||||
|
assert.Equal(t, "space1", ns)
|
||||||
|
})
|
||||||
|
|
||||||
|
suite.T().Run("allNamespaces", func(t *testing.T) {
|
||||||
|
suite.ioctx.SetNamespace(AllNamespaces)
|
||||||
|
ns, err := suite.ioctx.GetNamespace()
|
||||||
|
assert.NoError(suite.T(), err)
|
||||||
|
assert.Equal(suite.T(), AllNamespaces, ns)
|
||||||
|
})
|
||||||
|
|
||||||
|
suite.T().Run("invalidIoctx", func(t *testing.T) {
|
||||||
|
i := &IOContext{}
|
||||||
|
ns, err := i.GetNamespace()
|
||||||
|
assert.Error(suite.T(), err)
|
||||||
|
assert.Equal(suite.T(), "", ns)
|
||||||
|
})
|
||||||
|
}
|
Loading…
Reference in New Issue