/* read/write objects */
int rados_write(rados_pool_t pool, struct ceph_object *oid, off_t off, const char *buf, size_t len);
int rados_read(rados_pool_t pool, struct ceph_object *oid, off_t off, char *buf, size_t len);
+int rados_remove(rados_pool_t pool, struct ceph_object *oid);
int rados_exec(rados_pool_t pool, struct ceph_object *o, const char *cls, const char *method,
const char *in_buf, size_t in_len, char *buf, size_t out_len);
int write(rados_pool_t pool, object_t& oid, off_t off, bufferlist& bl, size_t len);
int read(rados_pool_t pool, object_t& oid, off_t off, bufferlist& bl, size_t len);
+ int remove(rados_pool_t pool, object_t& oid);
int exec(rados_pool_t pool, object_t& oid, const char *cls, const char *method,
bufferlist& inbl, size_t in_len, bufferlist& outbl, size_t out_len);
int write(int pool, object_t& oid, off_t off, bufferlist& bl, size_t len);
int read(int pool, object_t& oid, off_t off, bufferlist& bl, size_t len);
+ int remove(int pool, object_t& oid);
int exec(int pool, object_t& oid, const char *cls, const char *method, bufferlist& inbl, size_t in_len, bufferlist& outbl, size_t out_len);
};
bool done;
int r;
Context *onack = new C_SafeCond(&lock, &cond, &done, &r);
-#if 0
- bl.append(&buf[off], len);
-#endif
ceph_object_layout layout = objecter->osdmap->make_object_layout(oid, pool);
dout(0) << "going to write" << dendl;
return len;
}
+int RadosClient::remove(int pool, object_t& oid)
+{
+ SnapContext snapc;
+ utime_t ut = g_clock.now();
+
+ Mutex lock("RadosClient::remove");
+ Cond cond;
+ bool done;
+ int r;
+ Context *onack = new C_SafeCond(&lock, &cond, &done, &r);
+ ceph_object_layout layout = objecter->osdmap->make_object_layout(oid, pool);
+
+ dout(0) << "going to write" << dendl;
+
+ lock.Lock();
+ objecter->remove(oid, layout,
+ snapc, ut, 0,
+ onack, NULL);
+ while (!done)
+ cond.Wait(lock);
+ lock.Unlock();
+
+ return r;
+}
+
int RadosClient::exec(int pool, object_t& oid, const char *cls, const char *method, bufferlist& inbl, size_t in_len, bufferlist& outbl, size_t out_len)
{
SnapContext snapc;
return client->write(pool, oid, off, bl, len);
}
+int Rados::remove(rados_pool_t pool, object_t& oid)
+{
+ if (!client)
+ return -EINVAL;
+
+ return client->remove(pool, oid);
+}
+
int Rados::read(rados_pool_t pool, object_t& oid, off_t off, bufferlist& bl, size_t len)
{
if (!client)
return radosp->write(pool, oid, off, bl, len);
}
+extern "C" int rados_remove(rados_pool_t pool, ceph_object *o)
+{
+ object_t oid(*o);
+ return radosp->remove(pool, oid);
+}
+
extern "C" int rados_read(rados_pool_t pool, ceph_object *o, off_t off, char *buf, size_t len)
{
int ret;
rados_pool_t pool;
int r = rados.open_pool("data", &pool);
- printf("open pool result = %d, pool = %d\n", r, pool);
+ cout << "open pool result = " << r << " pool = " << pool << std::endl;
rados.write(pool, oid, 0, bl, bl.length());
rados.exec(pool, oid, "test", "foo", bl, bl.length(), bl2, 1024);
- printf("exec result=%s\n", bl2.c_str());
+ cout << "exec result=" << bl2.c_str() << std::endl;
int size = rados.read(pool, oid, 0, bl2, 128);
- rados.close_pool(pool);
-
cout << "read result=" << bl2.c_str() << std::endl;
cout << "size=" << size << std::endl;
+ r = rados.remove(pool, oid);
+ cout << "remove result=" << r << std::endl;
+ rados.close_pool(pool);
+
return 0;
}