mirror of
https://github.com/ceph/go-ceph
synced 2025-04-01 22:48:22 +00:00
ioctx: RmXattr added
Signed-off-by: Abhishek Lekshmanan <abhishek.lekshmanan@gmail.com>
This commit is contained in:
parent
1f2352fecd
commit
68bbcb2f80
@ -268,3 +268,22 @@ func (ioctx *IOContext) ListXattrs(oid string) (map[string][]byte, error) {
|
|||||||
m[C.GoString(c_name)] = C.GoBytes(unsafe.Pointer(c_val), (C.int)(c_len))
|
m[C.GoString(c_name)] = C.GoBytes(unsafe.Pointer(c_val), (C.int)(c_len))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Remove an xattr with key `name` from object `oid`
|
||||||
|
func (ioctx *IOContext) RmXattr(oid string, name string) error {
|
||||||
|
c_oid := C.CString(oid)
|
||||||
|
c_name := C.CString(name)
|
||||||
|
defer C.free(unsafe.Pointer(c_oid))
|
||||||
|
defer C.free(unsafe.Pointer(c_name))
|
||||||
|
|
||||||
|
ret := C.rados_rmxattr(
|
||||||
|
ioctx.ioctx,
|
||||||
|
c_oid,
|
||||||
|
c_name)
|
||||||
|
|
||||||
|
if ret == 0 {
|
||||||
|
return nil
|
||||||
|
} else {
|
||||||
|
return RadosError(int(ret))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -506,3 +506,54 @@ func TestListXattrs(t *testing.T) {
|
|||||||
|
|
||||||
pool.Destroy()
|
pool.Destroy()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestRmXattr(t *testing.T) {
|
||||||
|
conn, _ := rados.NewConn()
|
||||||
|
conn.ReadDefaultConfigFile()
|
||||||
|
conn.Connect()
|
||||||
|
|
||||||
|
pool_name := GetUUID()
|
||||||
|
err := conn.MakePool(pool_name)
|
||||||
|
assert.NoError(t, err)
|
||||||
|
|
||||||
|
pool, err := conn.OpenIOContext(pool_name)
|
||||||
|
assert.NoError(t, err)
|
||||||
|
|
||||||
|
bytes_in := []byte("input data")
|
||||||
|
err = pool.Write("obj", bytes_in, 0)
|
||||||
|
assert.NoError(t, err)
|
||||||
|
|
||||||
|
key := "key1"
|
||||||
|
val := []byte("val1")
|
||||||
|
err = pool.SetXattr("obj", key, val)
|
||||||
|
assert.NoError(t, err)
|
||||||
|
|
||||||
|
key = "key2"
|
||||||
|
val = []byte("val2")
|
||||||
|
err = pool.SetXattr("obj", key, val)
|
||||||
|
assert.NoError(t, err)
|
||||||
|
|
||||||
|
xattr_list := make(map[string][]byte)
|
||||||
|
xattr_list, err = pool.ListXattrs("obj")
|
||||||
|
assert.NoError(t, err)
|
||||||
|
assert.Equal(t, len(xattr_list), 2)
|
||||||
|
|
||||||
|
pool.RmXattr("obj", "key2")
|
||||||
|
xattr_list, err = pool.ListXattrs("obj")
|
||||||
|
assert.NoError(t, err)
|
||||||
|
assert.Equal(t, len(xattr_list), 1)
|
||||||
|
|
||||||
|
found := false
|
||||||
|
for key, _ = range xattr_list {
|
||||||
|
if key == "key2" {
|
||||||
|
found = true
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
if found {
|
||||||
|
t.Error("Deleted pool still exists")
|
||||||
|
}
|
||||||
|
|
||||||
|
pool.Destroy()
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user