From: Matt Benjamin Date: Thu, 5 Nov 2015 15:15:41 +0000 (-0500) Subject: librgw: rgw_mkdir and rgw_create return addresses X-Git-Tag: v10.1.0~382^2~164 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=74e4c5ab38f3bb8e7496bc2de6ae2a952beb99a4;p=ceph.git librgw: rgw_mkdir and rgw_create return addresses Signed-off-by: Matt Benjamin --- diff --git a/src/include/rados/rgw_file.h b/src/include/rados/rgw_file.h index 4234c2ae061b..7cfa5ec518dc 100644 --- a/src/include/rados/rgw_file.h +++ b/src/include/rados/rgw_file.h @@ -121,7 +121,7 @@ int rgw_statfs(struct rgw_fs *rgw_fs, int rgw_create(struct rgw_fs *rgw_fs, struct rgw_file_handle *parent_fh, const char *name, mode_t mode, struct stat *st, - struct rgw_file_handle *fh); + struct rgw_file_handle **fh); /* create a new directory @@ -129,7 +129,7 @@ int rgw_create(struct rgw_fs *rgw_fs, int rgw_mkdir(struct rgw_fs *rgw_fs, struct rgw_file_handle *parent_fh, const char *name, mode_t mode, struct stat *st, - struct rgw_file_handle *fh); + struct rgw_file_handle **fh); /* rename object diff --git a/src/rgw/rgw_file.cc b/src/rgw/rgw_file.cc index 36107e2cbbab..1d0c15fcada5 100644 --- a/src/rgw/rgw_file.cc +++ b/src/rgw/rgw_file.cc @@ -91,9 +91,9 @@ int rgw_statfs(struct rgw_fs *rgw_fs, int rgw_create(struct rgw_fs *rgw_fs, struct rgw_file_handle *parent_fh, const char *name, mode_t mode, struct stat *st, - struct rgw_file_handle *handle) + struct rgw_file_handle **fh) { - return 0; + return EINVAL; } /* @@ -102,7 +102,7 @@ int rgw_create(struct rgw_fs *rgw_fs, int rgw_mkdir(struct rgw_fs *rgw_fs, struct rgw_file_handle *parent_fh, const char *name, mode_t mode, struct stat *st, - struct rgw_file_handle *handle) + struct rgw_file_handle **fh) { int rc; @@ -129,6 +129,12 @@ int rgw_mkdir(struct rgw_fs *rgw_fs, RGWCreateBucketRequest req(cct, fs->get_user(), uri); rc = librgw.get_fe()->execute_req(&req); + /* XXX: atomicity */ + RGWFileHandle* rgw_fh = fs->lookup_fh(parent, name); + + struct rgw_file_handle *rfh = rgw_fh->get_fh(); + *fh = rfh; + return rc; } diff --git a/src/test/librgw_file_cd.cc b/src/test/librgw_file_cd.cc index 417ecb4bf761..31ce06c726c9 100644 --- a/src/test/librgw_file_cd.cc +++ b/src/test/librgw_file_cd.cc @@ -62,7 +62,7 @@ TEST(LibRGW, MOUNT) { TEST(LibRGW, CREATE_BUCKET) { if (do_create) { struct stat st; - struct rgw_file_handle fh; + struct rgw_file_handle *fh; int ret = rgw_mkdir(fs, fs->root_fh, bucket_name.c_str(), 755, &st, &fh); ASSERT_EQ(ret, 0); } @@ -79,7 +79,7 @@ TEST(LibRGW, CREATE_BUCKET_MULTI) { if (do_multi) { int ret; struct stat st; - struct rgw_file_handle fh; + struct rgw_file_handle *fh; for (int ix = 0; ix < multi_cnt; ++ix) { string bn = bucket_name; bn += to_string(ix);