mirror of
https://github.com/ceph/ceph-csi.git
synced 2025-06-13 02:33:34 +00:00
rebase: update go-ceph to v0.7.0
updating go-ceph to latest 0.7.0 release. Signed-off-by: Madhu Rajanna <madhupr007@gmail.com>
This commit is contained in:
committed by
mergify[bot]
parent
97acd47ae9
commit
eeec1213cb
21
vendor/github.com/ceph/go-ceph/rbd/diff_iterate.go
generated
vendored
21
vendor/github.com/ceph/go-ceph/rbd/diff_iterate.go
generated
vendored
@ -7,8 +7,15 @@ package rbd
|
||||
#include <stdlib.h>
|
||||
#include <rbd/librbd.h>
|
||||
|
||||
typedef int (*diff_iterate_callback_t)(uint64_t, size_t, int, void *);
|
||||
extern int diffIterateCallback(uint64_t, size_t, int, void *);
|
||||
extern int diffIterateCallback(uint64_t, size_t, int, uintptr_t);
|
||||
|
||||
// inline wrapper to cast uintptr_t to void*
|
||||
static inline int wrap_rbd_diff_iterate2(rbd_image_t image,
|
||||
const char *fromsnapname, uint64_t ofs, uint64_t len, uint8_t include_parent,
|
||||
uint8_t whole_object, uintptr_t arg) {
|
||||
return rbd_diff_iterate2(image, fromsnapname, ofs, len, include_parent,
|
||||
whole_object, (void*)diffIterateCallback, (void*)arg);
|
||||
};
|
||||
*/
|
||||
import "C"
|
||||
|
||||
@ -16,7 +23,6 @@ import (
|
||||
"unsafe"
|
||||
|
||||
"github.com/ceph/go-ceph/internal/callbacks"
|
||||
"github.com/ceph/go-ceph/internal/cutil"
|
||||
)
|
||||
|
||||
var diffIterateCallbacks = callbacks.New()
|
||||
@ -101,24 +107,23 @@ func (image *Image) DiffIterate(config DiffIterateConfig) error {
|
||||
cbIndex := diffIterateCallbacks.Add(config)
|
||||
defer diffIterateCallbacks.Remove(cbIndex)
|
||||
|
||||
ret := C.rbd_diff_iterate2(
|
||||
ret := C.wrap_rbd_diff_iterate2(
|
||||
image.image,
|
||||
cSnapName,
|
||||
C.uint64_t(config.Offset),
|
||||
C.uint64_t(config.Length),
|
||||
C.uint8_t(config.IncludeParent),
|
||||
C.uint8_t(config.WholeObject),
|
||||
C.diff_iterate_callback_t(C.diffIterateCallback),
|
||||
cutil.VoidPtr(cbIndex))
|
||||
C.uintptr_t(cbIndex))
|
||||
|
||||
return getError(ret)
|
||||
}
|
||||
|
||||
//export diffIterateCallback
|
||||
func diffIterateCallback(
|
||||
offset C.uint64_t, length C.size_t, exists C.int, index unsafe.Pointer) C.int {
|
||||
offset C.uint64_t, length C.size_t, exists C.int, index uintptr) C.int {
|
||||
|
||||
v := diffIterateCallbacks.Lookup(uintptr(index))
|
||||
v := diffIterateCallbacks.Lookup(index)
|
||||
config := v.(DiffIterateConfig)
|
||||
return C.int(config.Callback(
|
||||
uint64(offset), uint64(length), int(exists), config.Data))
|
||||
|
149
vendor/github.com/ceph/go-ceph/rbd/metadata.go
generated
vendored
Normal file
149
vendor/github.com/ceph/go-ceph/rbd/metadata.go
generated
vendored
Normal file
@ -0,0 +1,149 @@
|
||||
package rbd
|
||||
|
||||
// #cgo LDFLAGS: -lrbd
|
||||
// #include <stdlib.h>
|
||||
// #include <rbd/librbd.h>
|
||||
import "C"
|
||||
|
||||
import (
|
||||
"unsafe"
|
||||
|
||||
"github.com/ceph/go-ceph/internal/cutil"
|
||||
"github.com/ceph/go-ceph/internal/retry"
|
||||
)
|
||||
|
||||
// GetMetadata returns the metadata string associated with the given key.
|
||||
//
|
||||
// Implements:
|
||||
// int rbd_metadata_get(rbd_image_t image, const char *key, char *value, size_t *vallen)
|
||||
func (image *Image) GetMetadata(key string) (string, error) {
|
||||
if err := image.validate(imageIsOpen); err != nil {
|
||||
return "", err
|
||||
}
|
||||
|
||||
c_key := C.CString(key)
|
||||
defer C.free(unsafe.Pointer(c_key))
|
||||
|
||||
var (
|
||||
buf []byte
|
||||
err error
|
||||
)
|
||||
retry.WithSizes(4096, 262144, func(size int) retry.Hint {
|
||||
csize := C.size_t(size)
|
||||
buf = make([]byte, csize)
|
||||
// rbd_metadata_get is a bit quirky and *does not* update the size
|
||||
// value if the size passed in >= the needed size.
|
||||
ret := C.rbd_metadata_get(
|
||||
image.image, c_key, (*C.char)(unsafe.Pointer(&buf[0])), &csize)
|
||||
err = getError(ret)
|
||||
return retry.Size(int(csize)).If(err == errRange)
|
||||
})
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
return C.GoString((*C.char)(unsafe.Pointer(&buf[0]))), nil
|
||||
}
|
||||
|
||||
// SetMetadata updates the metadata string associated with the given key.
|
||||
//
|
||||
// Implements:
|
||||
// int rbd_metadata_set(rbd_image_t image, const char *key, const char *value)
|
||||
func (image *Image) SetMetadata(key string, value string) error {
|
||||
if err := image.validate(imageIsOpen); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
c_key := C.CString(key)
|
||||
c_value := C.CString(value)
|
||||
defer C.free(unsafe.Pointer(c_key))
|
||||
defer C.free(unsafe.Pointer(c_value))
|
||||
|
||||
ret := C.rbd_metadata_set(image.image, c_key, c_value)
|
||||
if ret < 0 {
|
||||
return rbdError(ret)
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// RemoveMetadata clears the metadata associated with the given key.
|
||||
//
|
||||
// Implements:
|
||||
// int rbd_metadata_remove(rbd_image_t image, const char *key)
|
||||
func (image *Image) RemoveMetadata(key string) error {
|
||||
if err := image.validate(imageIsOpen); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
c_key := C.CString(key)
|
||||
defer C.free(unsafe.Pointer(c_key))
|
||||
|
||||
ret := C.rbd_metadata_remove(image.image, c_key)
|
||||
if ret < 0 {
|
||||
return rbdError(ret)
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// ListMetadata returns a map containing all metadata assigned to the RBD image.
|
||||
//
|
||||
// Implements:
|
||||
// int rbd_metadata_list(rbd_image_t image, const char *start, uint64_t max,
|
||||
// char *keys, size_t *key_len, char *values, size_t *vals_len);
|
||||
func (image *Image) ListMetadata() (map[string]string, error) {
|
||||
if err := image.validate(imageIsOpen); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
var (
|
||||
err error
|
||||
keysbuf []byte
|
||||
keysSize C.size_t
|
||||
valsbuf []byte
|
||||
valsSize C.size_t
|
||||
)
|
||||
retry.WithSizes(4096, 262144, func(size int) retry.Hint {
|
||||
keysbuf = make([]byte, size)
|
||||
keysSize = C.size_t(size)
|
||||
valsbuf = make([]byte, size)
|
||||
valsSize = C.size_t(size)
|
||||
// the rbd_metadata_list function can use a start point and a limit.
|
||||
// we do not use it and prefer our retry helper and just allocating
|
||||
// buffers large enough to take all the keys and values
|
||||
ret := C.rbd_metadata_list(
|
||||
image.image,
|
||||
(*C.char)(unsafe.Pointer(&empty[0])), // always start at the beginning (no paging)
|
||||
0, // fetch all key-value pairs
|
||||
(*C.char)(unsafe.Pointer(&keysbuf[0])),
|
||||
&keysSize,
|
||||
(*C.char)(unsafe.Pointer(&valsbuf[0])),
|
||||
&valsSize)
|
||||
|
||||
err = getError(ret)
|
||||
nextSize := valsSize
|
||||
if keysSize > nextSize {
|
||||
nextSize = keysSize
|
||||
}
|
||||
return retry.Size(int(nextSize)).If(err == errRange)
|
||||
})
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
m := map[string]string{}
|
||||
keys := cutil.SplitBuffer(keysbuf[:keysSize])
|
||||
vals := cutil.SplitBuffer(valsbuf[:valsSize])
|
||||
if len(keys) != len(vals) {
|
||||
// this should not happen (famous last words)
|
||||
return nil, errRange
|
||||
}
|
||||
for i := range keys {
|
||||
m[keys[i]] = vals[i]
|
||||
}
|
||||
return m, nil
|
||||
}
|
||||
|
||||
// rather than allocate memory every time that ListMetadata is called,
|
||||
// define a static byte slice to stand in for the C "empty string"
|
||||
var empty = []byte{0}
|
104
vendor/github.com/ceph/go-ceph/rbd/rbd.go
generated
vendored
104
vendor/github.com/ceph/go-ceph/rbd/rbd.go
generated
vendored
@ -808,6 +808,36 @@ func (image *Image) WriteAt(data []byte, off int64) (n int, err error) {
|
||||
return ret, err
|
||||
}
|
||||
|
||||
// WriteSame repeats writing data from starting point ofs until n bytes have
|
||||
// been written.
|
||||
//
|
||||
// Implements:
|
||||
// ssize_t rbd_writesame(rbd_image_t image, uint64_t ofs, size_t len,
|
||||
// const char *buf, size_t data_len, int op_flags);
|
||||
func (image *Image) WriteSame(ofs, n uint64, data []byte, flags rados.OpFlags) (int64, error) {
|
||||
var err error
|
||||
|
||||
if err = image.validate(imageIsOpen); err != nil {
|
||||
return 0, err
|
||||
}
|
||||
|
||||
if len(data) == 0 {
|
||||
return 0, nil
|
||||
}
|
||||
|
||||
ret := C.rbd_writesame(image.image,
|
||||
C.uint64_t(ofs),
|
||||
C.uint64_t(n),
|
||||
(*C.char)(unsafe.Pointer(&data[0])),
|
||||
C.size_t(len(data)),
|
||||
C.int(flags))
|
||||
if ret < 0 {
|
||||
err = getError(C.int(ret))
|
||||
}
|
||||
|
||||
return int64(ret), err
|
||||
}
|
||||
|
||||
// Flush all cached writes to storage.
|
||||
//
|
||||
// Implements:
|
||||
@ -853,80 +883,6 @@ func (image *Image) GetSnapshotNames() (snaps []SnapInfo, err error) {
|
||||
return snaps[:len(snaps)-1], nil
|
||||
}
|
||||
|
||||
// GetMetadata returns the metadata string associated with the given key.
|
||||
//
|
||||
// Implements:
|
||||
// int rbd_metadata_get(rbd_image_t image, const char *key, char *value, size_t *vallen)
|
||||
func (image *Image) GetMetadata(key string) (string, error) {
|
||||
if err := image.validate(imageIsOpen); err != nil {
|
||||
return "", err
|
||||
}
|
||||
|
||||
c_key := C.CString(key)
|
||||
defer C.free(unsafe.Pointer(c_key))
|
||||
|
||||
var (
|
||||
buf []byte
|
||||
err error
|
||||
)
|
||||
retry.WithSizes(4096, 262144, func(size int) retry.Hint {
|
||||
csize := C.size_t(size)
|
||||
buf = make([]byte, csize)
|
||||
// rbd_metadata_get is a bit quirky and *does not* update the size
|
||||
// value if the size passed in >= the needed size.
|
||||
ret := C.rbd_metadata_get(
|
||||
image.image, c_key, (*C.char)(unsafe.Pointer(&buf[0])), &csize)
|
||||
err = getError(ret)
|
||||
return retry.Size(int(csize)).If(err == errRange)
|
||||
})
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
return C.GoString((*C.char)(unsafe.Pointer(&buf[0]))), nil
|
||||
}
|
||||
|
||||
// SetMetadata updates the metadata string associated with the given key.
|
||||
//
|
||||
// Implements:
|
||||
// int rbd_metadata_set(rbd_image_t image, const char *key, const char *value)
|
||||
func (image *Image) SetMetadata(key string, value string) error {
|
||||
if err := image.validate(imageIsOpen); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
c_key := C.CString(key)
|
||||
c_value := C.CString(value)
|
||||
defer C.free(unsafe.Pointer(c_key))
|
||||
defer C.free(unsafe.Pointer(c_value))
|
||||
|
||||
ret := C.rbd_metadata_set(image.image, c_key, c_value)
|
||||
if ret < 0 {
|
||||
return rbdError(ret)
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// RemoveMetadata clears the metadata associated with the given key.
|
||||
//
|
||||
// Implements:
|
||||
// int rbd_metadata_remove(rbd_image_t image, const char *key)
|
||||
func (image *Image) RemoveMetadata(key string) error {
|
||||
if err := image.validate(imageIsOpen); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
c_key := C.CString(key)
|
||||
defer C.free(unsafe.Pointer(c_key))
|
||||
|
||||
ret := C.rbd_metadata_remove(image.image, c_key)
|
||||
if ret < 0 {
|
||||
return rbdError(ret)
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// GetId returns the internal image ID string.
|
||||
//
|
||||
// Implements:
|
||||
|
21
vendor/github.com/ceph/go-ceph/rbd/watchers_mimic.go
generated
vendored
21
vendor/github.com/ceph/go-ceph/rbd/watchers_mimic.go
generated
vendored
@ -8,15 +8,19 @@ package rbd
|
||||
#cgo LDFLAGS: -lrbd
|
||||
#include <rbd/librbd.h>
|
||||
|
||||
extern void imageWatchCallback(void *);
|
||||
extern void imageWatchCallback(uintptr_t);
|
||||
|
||||
// inline wrapper to cast uintptr_t to void*
|
||||
static inline int wrap_rbd_update_watch(rbd_image_t image, uint64_t *handle,
|
||||
uintptr_t arg) {
|
||||
return rbd_update_watch(image, handle, (void*)imageWatchCallback, (void*)arg);
|
||||
};
|
||||
|
||||
*/
|
||||
import "C"
|
||||
|
||||
import (
|
||||
"unsafe"
|
||||
|
||||
"github.com/ceph/go-ceph/internal/callbacks"
|
||||
"github.com/ceph/go-ceph/internal/cutil"
|
||||
"github.com/ceph/go-ceph/internal/retry"
|
||||
)
|
||||
|
||||
@ -107,11 +111,10 @@ func (image *Image) UpdateWatch(cb WatchCallback, data interface{}) (*Watch, err
|
||||
cbIndex: watchCallbacks.Add(wcc),
|
||||
}
|
||||
|
||||
ret := C.rbd_update_watch(
|
||||
ret := C.wrap_rbd_update_watch(
|
||||
image.image,
|
||||
&w.handle,
|
||||
C.rbd_update_callback_t(C.imageWatchCallback),
|
||||
cutil.VoidPtr(w.cbIndex))
|
||||
C.uintptr_t(w.cbIndex))
|
||||
if ret != 0 {
|
||||
return nil, getError(ret)
|
||||
}
|
||||
@ -135,8 +138,8 @@ func (w *Watch) Unwatch() error {
|
||||
}
|
||||
|
||||
//export imageWatchCallback
|
||||
func imageWatchCallback(index unsafe.Pointer) {
|
||||
v := watchCallbacks.Lookup(uintptr(index))
|
||||
func imageWatchCallback(index uintptr) {
|
||||
v := watchCallbacks.Lookup(index)
|
||||
wcc := v.(watchCallbackCtx)
|
||||
wcc.callback(wcc.data)
|
||||
}
|
||||
|
Reference in New Issue
Block a user