rm $V1 $V2
cleanup
}
+test_rmobj() {
+ p=`uuidgen`
+ ceph osd pool create $p 1
+ ceph osd pool set-quota $p max_objects 1
+ V1=`mktemp fooattrXXXXXXX`
+ rados put $OBJ $V1 -p $p
+ while ! ceph osd dump | grep 'full max_objects'
+ do
+ sleep 2
+ done
+ rados -p $p rm $OBJ --force-full
+ rados rmpool $p $p --yes-i-really-really-mean-it
+ rm $V1
+}
test_xattr
test_omap
+test_rmobj
echo "SUCCESS!"
exit 0
size_t len);
int read(const std::string& oid, bufferlist& bl, size_t len, uint64_t off);
int remove(const std::string& oid);
+ int remove(const std::string& oid, int flags);
int trunc(const std::string& oid, uint64_t size);
int mapext(const std::string& o, uint64_t off, size_t len, std::map<uint64_t,uint64_t>& m);
int sparse_read(const std::string& o, std::map<uint64_t,uint64_t>& m, bufferlist& bl, size_t len, uint64_t off);
return operate(oid, &op, NULL);
}
+int librados::IoCtxImpl::remove(const object_t& oid, int flags)
+{
+ ::ObjectOperation op;
+ prepare_assert_ops(&op);
+ op.remove();
+ return operate(oid, &op, NULL, flags);
+}
+
int librados::IoCtxImpl::trunc(const object_t& oid, uint64_t size)
{
::ObjectOperation op;
int sparse_read(const object_t& oid, std::map<uint64_t,uint64_t>& m,
bufferlist& bl, size_t len, uint64_t off);
int remove(const object_t& oid);
+ int remove(const object_t& oid, int flags);
int stat(const object_t& oid, uint64_t *psize, time_t *pmtime);
int trunc(const object_t& oid, uint64_t size);
return io_ctx_impl->remove(obj);
}
+int librados::IoCtx::remove(const std::string& oid, int flags)
+{
+ object_t obj(oid);
+ return io_ctx_impl->remove(obj, flags);
+}
+
int librados::IoCtx::trunc(const std::string& oid, uint64_t size)
{
object_t obj(oid);
" put <obj-name> [infile] write object\n"
" truncate <obj-name> length truncate object\n"
" create <obj-name> create object\n"
-" rm <obj-name> ... remove object(s)\n"
+" rm <obj-name> ...[--force-full] [force no matter full or not]remove object(s)\n"
" cp <obj-name> [target-obj] copy object\n"
" clonedata <src-obj> <dst-obj> clone object data\n"
" listxattr <obj-name>\n"
std::string run_name;
std::string prefix;
-
+ bool forcefull = false;
Formatter *formatter = NULL;
bool pretty_format = false;
const char *output = NULL;
if (i != opts.end()) {
run_name = i->second;
}
+
+ i = opts.find("force-full");
+ if (i != opts.end()) {
+ forcefull = true;
+ }
i = opts.find("prefix");
if (i != opts.end()) {
prefix = i->second;
if (use_striper) {
ret = striper.remove(oid);
} else {
- ret = io_ctx.remove(oid);
+ if (forcefull) {
+ ret = io_ctx.remove(oid, CEPH_OSD_FLAG_FULL_FORCE);
+ } else {
+ ret = io_ctx.remove(oid);
+ }
}
if (ret < 0) {
string name = (nspace.size() ? nspace + "/" : "" ) + oid;
exit(0);
} else if (ceph_argparse_flag(args, i, "-f", "--force", (char*)NULL)) {
opts["force"] = "true";
+ } else if (ceph_argparse_flag(args, i, "--force-full", (char*)NULL)) {
+ opts["force-full"] = "true";
} else if (ceph_argparse_flag(args, i, "-d", "--delete-after", (char*)NULL)) {
opts["delete-after"] = "true";
} else if (ceph_argparse_flag(args, i, "-C", "--create", "--create-pool",