From: Jason Dillaman Date: Thu, 16 Jun 2016 18:05:16 +0000 (-0400) Subject: Merge pull request #9151 from fullerdj/wip-djf-15706 X-Git-Tag: v11.0.0~146 X-Git-Url: http://git.apps.os.sepia.ceph.com/?a=commitdiff_plain;h=6034019cdf78cef3ea79847990ac0bce799e168b;p=ceph-ci.git Merge pull request #9151 from fullerdj/wip-djf-15706 rbd: add methods to set and get snapshot limits Reviewed-by: Jason Dillaman --- 6034019cdf78cef3ea79847990ac0bce799e168b diff --cc src/librbd/internal.h index bd676be5fd0,74f4b98dca9..d115bfd489e --- a/src/librbd/internal.h +++ b/src/librbd/internal.h @@@ -135,9 -125,11 +135,11 @@@ namespace librbd int is_exclusive_lock_owner(ImageCtx *ictx, bool *is_owner); int remove(librados::IoCtx& io_ctx, const char *imgname, - ProgressContext& prog_ctx); + ProgressContext& prog_ctx, bool force=false); int snap_list(ImageCtx *ictx, std::vector& snaps); int snap_exists(ImageCtx *ictx, const char *snap_name, bool *exists); + int snap_get_limit(ImageCtx *ictx, uint64_t *limit); + int snap_set_limit(ImageCtx *ictx, uint64_t limit); int snap_is_protected(ImageCtx *ictx, const char *snap_name, bool *is_protected); int copy(ImageCtx *ictx, IoCtx& dest_md_ctx, const char *destname, diff --cc src/librbd/journal/Replay.cc index c57202a0ba3,4bc714ce9fe..8576e2ab3c2 --- a/src/librbd/journal/Replay.cc +++ b/src/librbd/journal/Replay.cc @@@ -86,15 -86,11 +86,19 @@@ struct ExecuteOp : public Context on_op_complete); } + void execute(const journal::SnapLimitEvent &_) { + image_ctx.operations->execute_snap_set_limit(event.limit, on_op_complete); + } + virtual void finish(int r) override { + CephContext *cct = image_ctx.cct; + if (r < 0) { + lderr(cct) << "ExecuteOp: " << __func__ << ": r=" << r << dendl; + on_op_complete->complete(r); + return; + } + + ldout(cct, 20) << "ExecuteOp: " << __func__ << dendl; RWLock::RLocker owner_locker(image_ctx.owner_lock); execute(event); } diff --cc src/pybind/rbd/rbd.pyx index 5b63c41d881,ba8910ebfa6..52727bf39e4 --- a/src/pybind/rbd/rbd.pyx +++ b/src/pybind/rbd/rbd.pyx @@@ -38,9 -33,11 +38,12 @@@ cdef extern from "Python.h" char* PyBytes_AsString(PyObject *string) except NULL int _PyBytes_Resize(PyObject **string, Py_ssize_t newsize) except -1 -ctypedef int (*librbd_progress_fn_t)(uint64_t offset, uint64_t total, void* ptr) +cdef extern from "time.h": + ctypedef long int time_t + cdef extern from "limits.h": + cdef uint64_t INT64_MAX + cdef extern from "rbd/librbd.h" nogil: enum: _RBD_FEATURE_LAYERING "RBD_FEATURE_LAYERING" diff --cc src/test/pybind/test_rbd.py index e4ffaab9c80,bc34b08406c..d91d3d9f376 --- a/src/test/pybind/test_rbd.py +++ b/src/test/pybind/test_rbd.py @@@ -13,12 -12,9 +13,12 @@@ from rados import (Rados LIBRADOS_OP_FLAG_FADVISE_RANDOM) from rbd import (RBD, Image, ImageNotFound, InvalidArgument, ImageExists, ImageBusy, ImageHasSnapshots, ReadOnlyImage, - FunctionNotSupported, ArgumentOutOfRange, + FunctionNotSupported, ArgumentOutOfRange, DiskQuotaExceeded, RBD_FEATURE_LAYERING, RBD_FEATURE_STRIPINGV2, - RBD_FEATURE_EXCLUSIVE_LOCK) + RBD_FEATURE_EXCLUSIVE_LOCK, RBD_FEATURE_JOURNALING, + RBD_MIRROR_MODE_DISABLED, RBD_MIRROR_MODE_IMAGE, + RBD_MIRROR_MODE_POOL, RBD_MIRROR_IMAGE_ENABLED, + RBD_MIRROR_IMAGE_DISABLED, MIRROR_IMAGE_STATUS_STATE_UNKNOWN) rados = None ioctx = None