From 529ef2d5668655799ff207e8ed3d75fc23bc0ef5 Mon Sep 17 00:00:00 2001 From: Colin Patrick McCabe Date: Thu, 21 Apr 2011 11:43:42 -0700 Subject: [PATCH] libceph: avoid DIR*, combine connect and mount Signed-off-by: Colin McCabe --- src/client/Client.cc | 66 +++---- src/client/Client.h | 148 ++++++++-------- src/client/SyntheticClient.cc | 6 +- src/client/fuse_ll.cc | 4 +- src/client/libceph.h | 127 +++++++------- src/client/testceph.cc | 18 +- src/libceph.cc | 321 +++++++++++++++++----------------- 7 files changed, 336 insertions(+), 354 deletions(-) diff --git a/src/client/Client.cc b/src/client/Client.cc index 97f4ba6b5e49f..bbc63cb9cb3d6 100644 --- a/src/client/Client.cc +++ b/src/client/Client.cc @@ -784,7 +784,7 @@ Inode* Client::insert_trace(MetaRequest *request, utime_t from, int mds) Inode *in = add_update_inode(&ist, from, mds); Dentry *dn = insert_dentry_inode(dir, dname, &dlease, in, from, mds, false); - dn->offset = DirResult::make_fpos(request->readdir_frag, i + request->readdir_offset); + dn->offset = ceph_dir_result_t::make_fpos(request->readdir_frag, i + request->readdir_offset); // remove any extra names while (pd != dir->dentry_map.end() && pd->first <= dname) { @@ -3912,7 +3912,7 @@ int Client::utime(const char *relpath, struct utimbuf *buf) } -int Client::opendir(const char *relpath, DIR **dirpp) +int Client::opendir(const char *relpath, ceph_dir_result_t **dirpp) { Mutex::Locker lock(client_lock); tout << "opendir" << std::endl; @@ -3922,14 +3922,14 @@ int Client::opendir(const char *relpath, DIR **dirpp) int r = path_walk(path, &in); if (r < 0) return r; - r = _opendir(in, (DirResult**)dirpp); + r = _opendir(in, dirpp); tout << (unsigned long)*dirpp << std::endl; return r; } -int Client::_opendir(Inode *in, DirResult **dirpp, int uid, int gid) +int Client::_opendir(Inode *in, ceph_dir_result_t **dirpp, int uid, int gid) { - *dirpp = new DirResult(in); + *dirpp = new ceph_dir_result_t(in); if (!in->is_dir()) return -ENOTDIR; (*dirpp)->set_frag(in->dirfragtree[0]); @@ -3941,18 +3941,18 @@ int Client::_opendir(Inode *in, DirResult **dirpp, int uid, int gid) } -int Client::closedir(DIR *dir) +int Client::closedir(ceph_dir_result_t *dir) { Mutex::Locker lock(client_lock); tout << "closedir" << std::endl; tout << (unsigned long)dir << std::endl; dout(3) << "closedir(" << dir << ") = 0" << dendl; - _closedir((DirResult*)dir); + _closedir(dir); return 0; } -void Client::_closedir(DirResult *dirp) +void Client::_closedir(ceph_dir_result_t *dirp) { dout(10) << "_closedir(" << dirp << ")" << dendl; if (dirp->inode) { @@ -3964,28 +3964,28 @@ void Client::_closedir(DirResult *dirp) delete dirp; } -void Client::rewinddir(DIR *dirp) +void Client::rewinddir(ceph_dir_result_t *dirp) { dout(3) << "rewinddir(" << dirp << ")" << dendl; - DirResult *d = (DirResult*)dirp; + ceph_dir_result_t *d = (ceph_dir_result_t*)dirp; d->reset(); } -loff_t Client::telldir(DIR *dirp) +loff_t Client::telldir(ceph_dir_result_t *dirp) { - DirResult *d = (DirResult*)dirp; + ceph_dir_result_t *d = (ceph_dir_result_t*)dirp; dout(3) << "telldir(" << dirp << ") = " << d->offset << dendl; return d->offset; } -void Client::seekdir(DIR *dirp, loff_t offset) +void Client::seekdir(ceph_dir_result_t *dirp, loff_t offset) { dout(3) << "seekdir(" << dirp << ", " << offset << ")" << dendl; - DirResult *d = (DirResult*)dirp; + ceph_dir_result_t *d = (ceph_dir_result_t*)dirp; if (offset == 0 || - DirResult::fpos_frag(offset) != d->frag() || - DirResult::fpos_off(offset) < d->fragpos()) { + ceph_dir_result_t::fpos_frag(offset) != d->frag() || + ceph_dir_result_t::fpos_off(offset) < d->fragpos()) { d->reset(); } @@ -4023,7 +4023,7 @@ void Client::fill_dirent(struct dirent *de, const char *name, int type, uint64_t #endif } -void Client::_readdir_next_frag(DirResult *dirp) +void Client::_readdir_next_frag(ceph_dir_result_t *dirp) { frag_t fg = dirp->frag(); @@ -4037,7 +4037,7 @@ void Client::_readdir_next_frag(DirResult *dirp) } } -void Client::_readdir_rechoose_frag(DirResult *dirp) +void Client::_readdir_rechoose_frag(ceph_dir_result_t *dirp) { assert(dirp->inode); frag_t cur = dirp->frag(); @@ -4048,7 +4048,7 @@ void Client::_readdir_rechoose_frag(DirResult *dirp) } } -void Client::_readdir_drop_dirp_buffer(DirResult *dirp) +void Client::_readdir_drop_dirp_buffer(ceph_dir_result_t *dirp) { dout(10) << "_readdir_drop_dirp_buffer " << dirp << dendl; if (dirp->buffer) { @@ -4059,7 +4059,7 @@ void Client::_readdir_drop_dirp_buffer(DirResult *dirp) } } -int Client::_readdir_get_frag(DirResult *dirp) +int Client::_readdir_get_frag(ceph_dir_result_t *dirp) { // get the current frag. frag_t fg = dirp->frag(); @@ -4098,7 +4098,7 @@ int Client::_readdir_get_frag(DirResult *dirp) } if (res == 0) { - // stuff dir contents to cache, DirResult + // stuff dir contents to cache, ceph_dir_result_t assert(diri); _readdir_drop_dirp_buffer(dirp); @@ -4130,7 +4130,7 @@ int Client::_readdir_get_frag(DirResult *dirp) return res; } -int Client::_readdir_cache_cb(DirResult *dirp, add_dirent_cb_t cb, void *p) +int Client::_readdir_cache_cb(ceph_dir_result_t *dirp, add_dirent_cb_t cb, void *p) { dout(10) << "_readdir_cache_cb " << dirp << " on " << dirp->inode->ino << " at_cache_name " << dirp->at_cache_name << " offset " << hex << dirp->offset << dec @@ -4170,7 +4170,7 @@ int Client::_readdir_cache_cb(DirResult *dirp, add_dirent_cb_t cb, void *p) uint64_t next_off = dn->offset + 1; pd++; if (pd == dir->dentry_map.end()) - next_off = DirResult::END; + next_off = ceph_dir_result_t::END; int r = cb(p, &de, &st, stmask, next_off); // _next_ offset dout(15) << " de " << de.d_name << " off " << hex << dn->offset << dec @@ -4191,9 +4191,9 @@ int Client::_readdir_cache_cb(DirResult *dirp, add_dirent_cb_t cb, void *p) return 1; } -int Client::readdir_r_cb(DIR *d, add_dirent_cb_t cb, void *p) +int Client::readdir_r_cb(ceph_dir_result_t *d, add_dirent_cb_t cb, void *p) { - DirResult *dirp = (DirResult*)d; + ceph_dir_result_t *dirp = (ceph_dir_result_t*)d; dout(10) << "readdir_r_cb " << *dirp->inode << " offset " << hex << dirp->offset << dec << " frag " << dirp->frag() << " fragpos " << hex << dirp->fragpos() << dec @@ -4279,7 +4279,7 @@ int Client::readdir_r_cb(DIR *d, add_dirent_cb_t cb, void *p) << " frag " << fg << dendl; while (off >= dirp->this_offset && off - dirp->this_offset < dirp->buffer->size()) { - uint64_t pos = DirResult::make_fpos(fg, off); + uint64_t pos = ceph_dir_result_t::make_fpos(fg, off); pair& ent = (*dirp->buffer)[off - dirp->this_offset]; int stmask = fill_stat(ent.second, &st); @@ -4328,7 +4328,7 @@ int Client::readdir_r_cb(DIR *d, add_dirent_cb_t cb, void *p) -int Client::readdir_r(DIR *d, struct dirent *de) +int Client::readdir_r(ceph_dir_result_t *d, struct dirent *de) { return readdirplus_r(d, de, 0, 0); } @@ -4363,7 +4363,7 @@ static int _readdir_single_dirent_cb(void *p, struct dirent *de, struct stat *st return 0; } -int Client::readdirplus_r(DIR *d, struct dirent *de, struct stat *st, int *stmask) +int Client::readdirplus_r(ceph_dir_result_t *d, struct dirent *de, struct stat *st, int *stmask) { single_readdir sr; sr.de = de; @@ -4410,7 +4410,7 @@ static int _readdir_getdent_cb(void *p, struct dirent *de, struct stat *st, int return 0; } -int Client::_getdents(DIR *dir, char *buf, int buflen, bool fullent) +int Client::_getdents(ceph_dir_result_t *dir, char *buf, int buflen, bool fullent) { getdents_result gr; gr.buf = buf; @@ -4453,7 +4453,7 @@ int Client::getdir(const char *relpath, list& contents) tout << relpath << std::endl; } - DIR *d; + ceph_dir_result_t *d; int r = opendir(relpath, &d); if (r < 0) return r; @@ -6253,9 +6253,9 @@ int Client::ll_opendir(vinodeno_t vino, void **dirpp, int uid, int gid) int r = 0; if (vino.snapid == CEPH_SNAPDIR) { - *dirpp = new DirResult(diri); + *dirpp = new ceph_dir_result_t(diri); } else { - r = _opendir(diri, (DirResult**)dirpp); + r = _opendir(diri, (ceph_dir_result_t**)dirpp); } tout << (unsigned long)*dirpp << std::endl; @@ -6270,7 +6270,7 @@ void Client::ll_releasedir(void *dirp) dout(3) << "ll_releasedir " << dirp << dendl; tout << "ll_releasedir" << std::endl; tout << (unsigned long)dirp << std::endl; - _closedir((DirResult*)dirp); + _closedir((ceph_dir_result_t*)dirp); } int Client::ll_open(vinodeno_t vino, int flags, Fh **fhp, int uid, int gid) diff --git a/src/client/Client.h b/src/client/Client.h index f1fde59d6a04c..f479f2e5fce59 100644 --- a/src/client/Client.h +++ b/src/client/Client.h @@ -692,73 +692,73 @@ struct Fh { // ======================================================== // client interface -class Client : public Dispatcher { - public: - - struct DirResult { - static const int SHIFT = 28; - static const int64_t MASK = (1 << SHIFT) - 1; - static const loff_t END = 1ULL << (SHIFT + 32); +struct ceph_dir_result_t { + static const int SHIFT = 28; + static const int64_t MASK = (1 << SHIFT) - 1; + static const loff_t END = 1ULL << (SHIFT + 32); - static uint64_t make_fpos(unsigned frag, unsigned off) { - return ((uint64_t)frag << SHIFT) | (uint64_t)off; - } - static unsigned fpos_frag(uint64_t p) { - return p >> SHIFT; - } - static unsigned fpos_off(uint64_t p) { - return p & MASK; - } + static uint64_t make_fpos(unsigned frag, unsigned off) { + return ((uint64_t)frag << SHIFT) | (uint64_t)off; + } + static unsigned fpos_frag(uint64_t p) { + return p >> SHIFT; + } + static unsigned fpos_off(uint64_t p) { + return p & MASK; + } - Inode *inode; + Inode *inode; - int64_t offset; // high bits: frag_t, low bits: an offset + int64_t offset; // high bits: frag_t, low bits: an offset - uint64_t this_offset; // offset of last chunk, adjusted for . and .. - uint64_t next_offset; // offset of next chunk (last_name's + 1) - string last_name; // last entry in previous chunk + uint64_t this_offset; // offset of last chunk, adjusted for . and .. + uint64_t next_offset; // offset of next chunk (last_name's + 1) + string last_name; // last entry in previous chunk - uint64_t release_count; + uint64_t release_count; - frag_t buffer_frag; - vector > *buffer; + frag_t buffer_frag; + vector > *buffer; - string at_cache_name; // last entry we successfully returned + string at_cache_name; // last entry we successfully returned - DirResult(Inode *in) : inode(in), offset(0), next_offset(2), - release_count(0), - buffer(0) { - inode->get(); - } + ceph_dir_result_t(Inode *in) : inode(in), offset(0), next_offset(2), + release_count(0), + buffer(0) { + inode->get(); + } - frag_t frag() { return frag_t(offset >> SHIFT); } - unsigned fragpos() { return offset & MASK; } + frag_t frag() { return frag_t(offset >> SHIFT); } + unsigned fragpos() { return offset & MASK; } - void next_frag() { - frag_t fg = offset >> SHIFT; - if (fg.is_rightmost()) - set_end(); - else - set_frag(fg.next()); - } - void set_frag(frag_t f) { - offset = (uint64_t)f << SHIFT; - assert(sizeof(offset) == 8); - } - void set_end() { offset = END; } - bool at_end() { return (offset == END); } - - void reset() { - last_name.clear(); - next_offset = 2; - this_offset = 0; - offset = 0; - delete buffer; - buffer = 0; - } - }; + void next_frag() { + frag_t fg = offset >> SHIFT; + if (fg.is_rightmost()) + set_end(); + else + set_frag(fg.next()); + } + void set_frag(frag_t f) { + offset = (uint64_t)f << SHIFT; + assert(sizeof(offset) == 8); + } + void set_end() { offset = END; } + bool at_end() { return (offset == END); } + + void reset() { + last_name.clear(); + next_offset = 2; + this_offset = 0; + offset = 0; + delete buffer; + buffer = 0; + } +}; +class Client : public Dispatcher { + public: + // **** WARNING: be sure to update the struct in libceph.h too! **** struct stat_precise { ino_t st_ino; @@ -1171,14 +1171,14 @@ private: // some readdir helpers typedef int (*add_dirent_cb_t)(void *p, struct dirent *de, struct stat *st, int stmask, off_t off); - int _opendir(Inode *in, DirResult **dirpp, int uid=-1, int gid=-1); - void _readdir_drop_dirp_buffer(DirResult *dirp); - bool _readdir_have_frag(DirResult *dirp); - void _readdir_next_frag(DirResult *dirp); - void _readdir_rechoose_frag(DirResult *dirp); - int _readdir_get_frag(DirResult *dirp); - int _readdir_cache_cb(DirResult *dirp, add_dirent_cb_t cb, void *p); - void _closedir(DirResult *dirp); + int _opendir(Inode *in, ceph_dir_result_t **dirpp, int uid=-1, int gid=-1); + void _readdir_drop_dirp_buffer(ceph_dir_result_t *dirp); + bool _readdir_have_frag(ceph_dir_result_t *dirp); + void _readdir_next_frag(ceph_dir_result_t *dirp); + void _readdir_rechoose_frag(ceph_dir_result_t *dirp); + int _readdir_get_frag(ceph_dir_result_t *dirp); + int _readdir_cache_cb(ceph_dir_result_t *dirp, add_dirent_cb_t cb, void *p); + void _closedir(ceph_dir_result_t *dirp); // other helpers void _ll_get(Inode *in); @@ -1233,27 +1233,27 @@ public: void getcwd(std::string& cwd); // namespace ops - int opendir(const char *name, DIR **dirpp); - int closedir(DIR *dirp); + int opendir(const char *name, ceph_dir_result_t **dirpp); + int closedir(ceph_dir_result_t *dirp); - int readdir_r_cb(DIR *dirp, add_dirent_cb_t cb, void *p); + int readdir_r_cb(ceph_dir_result_t *dirp, add_dirent_cb_t cb, void *p); - int readdir_r(DIR *dirp, struct dirent *de); - int readdirplus_r(DIR *dirp, struct dirent *de, struct stat *st, int *stmask); + int readdir_r(ceph_dir_result_t *dirp, struct dirent *de); + int readdirplus_r(ceph_dir_result_t *dirp, struct dirent *de, struct stat *st, int *stmask); int getdir(const char *relpath, list& names); // get the whole dir at once. - int _getdents(DIR *dirp, char *buf, int buflen, bool ful); // get a bunch of dentries at once - int getdents(DIR *dirp, char *buf, int buflen) { + int _getdents(ceph_dir_result_t *dirp, char *buf, int buflen, bool ful); // get a bunch of dentries at once + int getdents(ceph_dir_result_t *dirp, char *buf, int buflen) { return _getdents(dirp, buf, buflen, true); } - int getdnames(DIR *dirp, char *buf, int buflen) { + int getdnames(ceph_dir_result_t *dirp, char *buf, int buflen) { return _getdents(dirp, buf, buflen, false); } - void rewinddir(DIR *dirp); - loff_t telldir(DIR *dirp); - void seekdir(DIR *dirp, loff_t offset); + void rewinddir(ceph_dir_result_t *dirp); + loff_t telldir(ceph_dir_result_t *dirp); + void seekdir(ceph_dir_result_t *dirp, loff_t offset); int link(const char *existing, const char *newname); int unlink(const char *path); diff --git a/src/client/SyntheticClient.cc b/src/client/SyntheticClient.cc index d4a60c86a2ea9..40280857c9c7b 100644 --- a/src/client/SyntheticClient.cc +++ b/src/client/SyntheticClient.cc @@ -1009,7 +1009,7 @@ int SyntheticClient::play_trace(Trace& t, string& prefix, bool metadata_only) utime_t start = g_clock.now(); hash_map open_files; - hash_map open_dirs; + hash_map open_dirs; hash_map ll_files; hash_map ll_dirs; @@ -1139,7 +1139,7 @@ int SyntheticClient::play_trace(Trace& t, string& prefix, bool metadata_only) } else if (strcmp(op, "opendir") == 0) { const char *a = t.get_string(buf, p); int64_t b = t.get_int(); - DIR *dirp; + ceph_dir_result_t *dirp; client->opendir(a, &dirp); if (dirp) open_dirs[b] = dirp; } else if (strcmp(op, "closedir") == 0) { @@ -1478,7 +1478,7 @@ int SyntheticClient::play_trace(Trace& t, string& prefix, bool metadata_only) dout(1) << "leftover close " << fi->second << dendl; if (fi->second > 0) client->close(fi->second); } - for (hash_map::iterator fi = open_dirs.begin(); + for (hash_map::iterator fi = open_dirs.begin(); fi != open_dirs.end(); fi++) { dout(1) << "leftover closedir " << fi->second << dendl; diff --git a/src/client/fuse_ll.cc b/src/client/fuse_ll.cc index 0844d9708492b..7ce1c45d1195c 100644 --- a/src/client/fuse_ll.cc +++ b/src/client/fuse_ll.cc @@ -376,7 +376,7 @@ static void ceph_ll_readdir(fuse_req_t req, fuse_ino_t ino, size_t size, { (void) fi; - DIR *dirp = (DIR*)fi->fh; + ceph_dir_result_t *dirp = (ceph_dir_result_t*)fi->fh; client->seekdir(dirp, off); struct readdir_context rc; @@ -398,7 +398,7 @@ static void ceph_ll_readdir(fuse_req_t req, fuse_ino_t ino, size_t size, static void ceph_ll_releasedir(fuse_req_t req, fuse_ino_t ino, struct fuse_file_info *fi) { - DIR *dirp = (DIR*)fi->fh; + ceph_dir_result_t *dirp = (ceph_dir_result_t*)fi->fh; client->ll_releasedir(dirp); fuse_reply_err(req, 0); } diff --git a/src/client/libceph.h b/src/client/libceph.h index 6059e8729a79c..07ef4a5628ffa 100644 --- a/src/client/libceph.h +++ b/src/client/libceph.h @@ -17,7 +17,6 @@ #include #include -#include struct stat_precise { ino_t st_ino; @@ -42,116 +41,114 @@ struct stat_precise { extern "C" { #endif -struct ceph_cluster_t; +struct ceph_mount_t; +struct ceph_dir_result_t; const char *ceph_version(int *major, int *minor, int *patch); /* initialization */ -int ceph_create(ceph_cluster_t **cluster, const char * const id); +int ceph_create(ceph_mount_t **cmount, const char * const id); /* initialization with an existing configuration */ -int ceph_create_with_config(ceph_cluster_t **cluster, struct md_config_t *conf); +int ceph_create_with_config(ceph_mount_t **cmount, struct md_config_t *conf); -/* Connect to the cluster */ -int ceph_connect(ceph_cluster_t *cluster); +/* Activate the mount */ +int ceph_mount(ceph_mount_t *cmount, const char *root); -/* Destroy the cluster instance */ -void ceph_shutdown(ceph_cluster_t *cluster); +/* Destroy the ceph mount instance */ +void ceph_shutdown(ceph_mount_t *cmount); /* Config * * Functions for manipulating the Ceph configuration at runtime. */ -int ceph_conf_read_file(ceph_cluster_t *cluster, const char *path); +int ceph_conf_read_file(ceph_mount_t *cmount, const char *path); -void ceph_conf_parse_argv(ceph_cluster_t *cluster, int argc, const char **argv); +void ceph_conf_parse_argv(ceph_mount_t *cmount, int argc, const char **argv); /* Sets a configuration value from a string. * Returns 0 on success, error code otherwise. */ -int ceph_conf_set(ceph_cluster_t *cluster, const char *option, const char *value); +int ceph_conf_set(ceph_mount_t *cmount, const char *option, const char *value); /* Returns a configuration value as a string. * If len is positive, that is the maximum number of bytes we'll write into the * buffer. If len == -1, we'll call malloc() and set *buf. * Returns 0 on success, error code otherwise. Returns ENAMETOOLONG if the * buffer is too short. */ -int ceph_conf_get(ceph_cluster_t *cluster, const char *option, char *buf, size_t len); +int ceph_conf_get(ceph_mount_t *cmount, const char *option, char *buf, size_t len); -int ceph_mount(ceph_cluster_t *cluster, const char *root); -void ceph_umount(ceph_cluster_t *cluster); - -int ceph_statfs(ceph_cluster_t *cluster, const char *path, struct statvfs *stbuf); -int ceph_get_local_osd(ceph_cluster_t *cluster); +int ceph_statfs(ceph_mount_t *cmount, const char *path, struct statvfs *stbuf); +int ceph_get_local_osd(ceph_mount_t *cmount); /* Get the current working directory. * * The pointer you get back from this function will continue to be valid until * the *next* call you make to ceph_getcwd, at which point it will be invalidated. */ -const char* ceph_getcwd(ceph_cluster_t *cluster); +const char* ceph_getcwd(ceph_mount_t *cmount); -int ceph_chdir(ceph_cluster_t *cluster, const char *s); +int ceph_chdir(ceph_mount_t *cmount, const char *s); -int ceph_opendir(ceph_cluster_t *cluster, const char *name, DIR **dirpp); -int ceph_closedir(ceph_cluster_t *cluster, DIR *dirp); -int ceph_readdir_r(ceph_cluster_t *cluster, DIR *dirp, struct dirent *de); -int ceph_readdirplus_r(ceph_cluster_t *cluster, DIR *dirp, struct dirent *de, +int ceph_opendir(ceph_mount_t *cmount, const char *name, ceph_dir_result_t **dirpp); +int ceph_closedir(ceph_mount_t *cmount, ceph_dir_result_t *dirp); +int ceph_readdir_r(ceph_mount_t *cmount, ceph_dir_result_t *dirp, struct dirent *de); +int ceph_readdirplus_r(ceph_mount_t *cmount, ceph_dir_result_t *dirp, struct dirent *de, struct stat *st, int *stmask); -int ceph_getdents(ceph_cluster_t *cluster, DIR *dirp, char *name, int buflen); -int ceph_getdnames(ceph_cluster_t *cluster, DIR *dirp, char *name, int buflen); -void ceph_rewinddir(ceph_cluster_t *cluster, DIR *dirp); -loff_t ceph_telldir(ceph_cluster_t *cluster, DIR *dirp); -void ceph_seekdir(ceph_cluster_t *cluster, DIR *dirp, loff_t offset); +int ceph_getdents(ceph_mount_t *cmount, ceph_dir_result_t *dirp, char *name, int buflen); +int ceph_getdnames(ceph_mount_t *cmount, ceph_dir_result_t *dirp, char *name, int buflen); +void ceph_rewinddir(ceph_mount_t *cmount, ceph_dir_result_t *dirp); +loff_t ceph_telldir(ceph_mount_t *cmount, ceph_dir_result_t *dirp); +void ceph_seekdir(ceph_mount_t *cmount, ceph_dir_result_t *dirp, loff_t offset); -int ceph_link(ceph_cluster_t *cluster, const char *existing, const char *newname); -int ceph_unlink(ceph_cluster_t *cluster, const char *path); -int ceph_rename(ceph_cluster_t *cluster, const char *from, const char *to); +int ceph_link(ceph_mount_t *cmount, const char *existing, const char *newname); +int ceph_unlink(ceph_mount_t *cmount, const char *path); +int ceph_rename(ceph_mount_t *cmount, const char *from, const char *to); // dirs -int ceph_mkdir(ceph_cluster_t *cluster, const char *path, mode_t mode); -int ceph_mkdirs(ceph_cluster_t *cluster, const char *path, mode_t mode); -int ceph_rmdir(ceph_cluster_t *cluster, const char *path); +int ceph_mkdir(ceph_mount_t *cmount, const char *path, mode_t mode); +int ceph_mkdirs(ceph_mount_t *cmount, const char *path, mode_t mode); +int ceph_rmdir(ceph_mount_t *cmount, const char *path); // symlinks -int ceph_readlink(ceph_cluster_t *cluster, const char *path, char *buf, loff_t size); -int ceph_symlink(ceph_cluster_t *cluster, const char *existing, const char *newname); +int ceph_readlink(ceph_mount_t *cmount, const char *path, char *buf, loff_t size); +int ceph_symlink(ceph_mount_t *cmount, const char *existing, const char *newname); // inode stuff -int ceph_lstat(ceph_cluster_t *cluster, const char *path, struct stat *stbuf); -int ceph_lstat_precise(ceph_cluster_t *cluster, const char *path, struct stat_precise *stbuf); +int ceph_lstat(ceph_mount_t *cmount, const char *path, struct stat *stbuf); +int ceph_lstat_precise(ceph_mount_t *cmount, const char *path, struct stat_precise *stbuf); -int ceph_setattr(ceph_cluster_t *cluster, const char *relpath, struct stat *attr, int mask); -int ceph_setattr_precise (ceph_cluster_t *cluster, const char *relpath, +int ceph_setattr(ceph_mount_t *cmount, const char *relpath, struct stat *attr, int mask); +int ceph_setattr_precise (ceph_mount_t *cmount, const char *relpath, struct stat_precise *stbuf, int mask); -int ceph_chmod(ceph_cluster_t *cluster, const char *path, mode_t mode); -int ceph_chown(ceph_cluster_t *cluster, const char *path, uid_t uid, gid_t gid); -int ceph_utime(ceph_cluster_t *cluster, const char *path, struct utimbuf *buf); -int ceph_truncate(ceph_cluster_t *cluster, const char *path, loff_t size); +int ceph_chmod(ceph_mount_t *cmount, const char *path, mode_t mode); +int ceph_chown(ceph_mount_t *cmount, const char *path, uid_t uid, gid_t gid); +int ceph_utime(ceph_mount_t *cmount, const char *path, struct utimbuf *buf); +int ceph_truncate(ceph_mount_t *cmount, const char *path, loff_t size); // file ops -int ceph_mknod(ceph_cluster_t *cluster, const char *path, mode_t mode, dev_t rdev); -int ceph_open(ceph_cluster_t *cluster, const char *path, int flags, mode_t mode); -int ceph_close(ceph_cluster_t *cluster, int fd); -loff_t ceph_lseek(ceph_cluster_t *cluster, int fd, loff_t offset, int whence); -int ceph_read(ceph_cluster_t *cluster, int fd, char *buf, loff_t size, loff_t offset); -int ceph_write(ceph_cluster_t *cluster, int fd, const char *buf, loff_t size, +int ceph_mknod(ceph_mount_t *cmount, const char *path, mode_t mode, dev_t rdev); +int ceph_open(ceph_mount_t *cmount, const char *path, int flags, mode_t mode); +int ceph_close(ceph_mount_t *cmount, int fd); +loff_t ceph_lseek(ceph_mount_t *cmount, int fd, loff_t offset, int whence); +int ceph_read(ceph_mount_t *cmount, int fd, char *buf, loff_t size, loff_t offset); +int ceph_write(ceph_mount_t *cmount, int fd, const char *buf, loff_t size, loff_t offset); -int ceph_ftruncate(ceph_cluster_t *cluster, int fd, loff_t size); -int ceph_fsync(ceph_cluster_t *cluster, int fd, int syncdataonly); -int ceph_fstat(ceph_cluster_t *cluster, int fd, struct stat *stbuf); - -int ceph_sync_fs(ceph_cluster_t *cluster); -int ceph_get_file_stripe_unit(ceph_cluster_t *cluster, int fh); -int ceph_get_file_replication(ceph_cluster_t *cluster, const char *path); -int ceph_get_default_preferred_pg(ceph_cluster_t *cluster, int fd); -int ceph_get_file_stripe_address(ceph_cluster_t *cluster, int fd, +int ceph_ftruncate(ceph_mount_t *cmount, int fd, loff_t size); +int ceph_fsync(ceph_mount_t *cmount, int fd, int syncdataonly); +int ceph_fstat(ceph_mount_t *cmount, int fd, struct stat *stbuf); + +int ceph_sync_fs(ceph_mount_t *cmount); +int ceph_get_file_stripe_unit(ceph_mount_t *cmount, int fh); +int ceph_get_file_replication(ceph_mount_t *cmount, const char *path); +int ceph_get_default_preferred_pg(ceph_mount_t *cmount, int fd); +int ceph_get_file_stripe_address(ceph_mount_t *cmount, int fd, loff_t offset, char *buf, int buflen); -int ceph_set_default_file_stripe_unit(ceph_cluster_t *cluster, int stripe); -int ceph_set_default_file_stripe_count(ceph_cluster_t *cluster, int count); -int ceph_set_default_object_size(ceph_cluster_t *cluster, int size); -int ceph_set_default_file_replication(ceph_cluster_t *cluster, int replication); -int ceph_set_default_preferred_pg(ceph_cluster_t *cluster, int pg); -int ceph_localize_reads(ceph_cluster_t *cluster, int val); +int ceph_set_default_file_stripe_unit(ceph_mount_t *cmount, int stripe); +int ceph_set_default_file_stripe_count(ceph_mount_t *cmount, int count); +int ceph_set_default_object_size(ceph_mount_t *cmount, int size); +int ceph_set_default_file_replication(ceph_mount_t *cmount, int replication); +int ceph_set_default_preferred_pg(ceph_mount_t *cmount, int pg); +int ceph_localize_reads(ceph_mount_t *cmount, int val); #ifdef __cplusplus } diff --git a/src/client/testceph.cc b/src/client/testceph.cc index 2ab40ca223fab..93148369fec36 100644 --- a/src/client/testceph.cc +++ b/src/client/testceph.cc @@ -20,17 +20,17 @@ using std::cerr; int main(int argc, const char **argv) { - ceph_cluster_t *cluster; - int ret = ceph_create(&cluster, NULL); + ceph_mount_t *cmount; + int ret = ceph_create(&cmount, NULL); if (ret) { cerr << "ceph_create failed with error: " << ret << std::endl; return 1; } - ceph_conf_parse_argv(cluster, argc, argv); + ceph_conf_parse_argv(cmount, argc, argv); char buf[128]; - ret = ceph_conf_get(cluster, "log file", buf, sizeof(buf)); + ret = ceph_conf_get(cmount, "log file", buf, sizeof(buf)); if (ret) { cerr << "ceph_conf_get(\"log file\") failed with error " << ret << std::endl; } @@ -38,20 +38,14 @@ int main(int argc, const char **argv) cout << "log_file = \"" << buf << "\"" << std::endl; } - ret = ceph_connect(cluster); - if (ret) { - cerr << "ceph_connect failed with error: " << ret << std::endl; - return 1; - } - - ret = ceph_mount(cluster, NULL); + ret = ceph_mount(cmount, NULL); if (ret) { cerr << "ceph_mount error: " << ret << std::endl; return 1; } cout << "Successfully mounted Ceph!" << std::endl; - ceph_shutdown(cluster); + ceph_shutdown(cmount); return 0; } diff --git a/src/libceph.cc b/src/libceph.cc index 32a3a7c4106ec..d024c00d25fce 100644 --- a/src/libceph.cc +++ b/src/libceph.cc @@ -32,10 +32,10 @@ static Mutex libceph_init_mutex("libceph_init_mutex"); static bool libceph_initialized = false; // FIXME! remove this static int nonce_seed = 0; -class ceph_cluster_t +class ceph_mount_t { public: - ceph_cluster_t(uint64_t msgr_nonce_, md_config_t *conf) + ceph_mount_t(uint64_t msgr_nonce_, md_config_t *conf) : msgr_nonce(msgr_nonce_), mounted(false), client(NULL), @@ -45,14 +45,19 @@ public: { } - ~ceph_cluster_t() + ~ceph_mount_t() { try { - disconnect(); + shutdown(); + // uncomment once conf is de-globalized +// if (conf) { +// free(conf); +// conf = NULL; +// } } catch (const std::exception& e) { // we shouldn't get here, but if we do, we want to know about it. - derr << "ceph_cluster_t::~ceph_cluster_t: caught exception: " + derr << "ceph_mount_t::~ceph_mount_t: caught exception: " << e.what() << dendl; } catch (...) { @@ -60,30 +65,50 @@ public: } } - int connect() + int mount(const std::string &mount_root) { + if (mounted) + return -EDOM; + //monmap monclient = new MonClient(); if (monclient->build_initial_monmap() < 0) { - delete monclient; - monclient = NULL; + shutdown(); return -1000; } //network connection messenger = new SimpleMessenger(); - messenger->register_entity(entity_name_t::CLIENT()); + if (messenger->register_entity(entity_name_t::CLIENT())) { + shutdown(); + return -1001; + } //at last the client client = new Client(messenger, monclient); + if (!client) { + shutdown(); + return -1002; + } - messenger->start(false, msgr_nonce); // do not daemonize + if (messenger->start(false, msgr_nonce) != 0) { + shutdown(); + return -1003; + } client->init(); + + int ret = client->mount(mount_root); + if (ret) { + shutdown(); + return ret; + } + + mounted = true; return 0; } - void disconnect() + void shutdown() { if (mounted) { client->unmount(); @@ -102,11 +127,6 @@ public: delete monclient; monclient = NULL; } - // uncomment once conf is de-globalized -// if (conf) { -// free(conf); -// conf = NULL; -// } } int conf_read_file(const char *path) @@ -150,25 +170,6 @@ public: return conf->get_val(option, &tmp, len); } - int mount(const std::string &mount_root) - { - if (mounted) - return -EINVAL; - int ret = client->mount(mount_root); - if (ret) - return ret; - mounted = true; - return 0; - } - - void umount() - { - if (!mounted) - return; - client->unmount(); - mounted = false; - } - Client *get_client() { return client; @@ -205,16 +206,16 @@ extern "C" const char *ceph_version(int *pmajor, int *pminor, int *ppatch) return VERSION; } -static int ceph_create_with_config_impl(ceph_cluster_t **cluster, md_config_t *conf) +static int ceph_create_with_config_impl(ceph_mount_t **cmount, md_config_t *conf) { // should hold libceph_init_mutex here libceph_initialized = true; uint64_t nonce = (uint64_t)++nonce_seed * 1000000ull + (uint64_t)getpid(); - *cluster = new ceph_cluster_t(nonce, conf); + *cmount = new ceph_mount_t(nonce, conf); return 0; } -extern "C" int ceph_create(ceph_cluster_t **cluster, const char * const id) +extern "C" int ceph_create(ceph_mount_t **cmount, const char * const id) { int ret; libceph_init_mutex.Lock(); @@ -230,345 +231,335 @@ extern "C" int ceph_create(ceph_cluster_t **cluster, const char * const id) conf->parse_env(); // environment variables override conf->apply_changes(); } - ret = ceph_create_with_config_impl(cluster, conf); + ret = ceph_create_with_config_impl(cmount, conf); libceph_init_mutex.Unlock(); return ret; } -extern "C" int ceph_create_with_config(ceph_cluster_t **cluster, md_config_t *conf) +extern "C" int ceph_create_with_config(ceph_mount_t **cmount, md_config_t *conf) { int ret; libceph_init_mutex.Lock(); - ret = ceph_create_with_config_impl(cluster, conf); + ret = ceph_create_with_config_impl(cmount, conf); libceph_init_mutex.Unlock(); return ret; } -extern "C" int ceph_connect(ceph_cluster_t *cluster) +extern "C" void ceph_shutdown(ceph_mount_t *cmount) { - return cluster->connect(); + cmount->shutdown(); } -extern "C" void ceph_shutdown(ceph_cluster_t *cluster) +extern "C" int ceph_conf_read_file(ceph_mount_t *cmount, const char *path) { - cluster->disconnect(); + return cmount->conf_read_file(path); } -extern "C" int ceph_conf_read_file(ceph_cluster_t *cluster, const char *path) -{ - return cluster->conf_read_file(path); -} - -extern "C" void ceph_conf_parse_argv(ceph_cluster_t *cluster, int argc, +extern "C" void ceph_conf_parse_argv(ceph_mount_t *cmount, int argc, const char **argv) { - cluster->conf_parse_argv(argc, argv); + cmount->conf_parse_argv(argc, argv); } -extern "C" int ceph_conf_set(ceph_cluster_t *cluster, const char *option, +extern "C" int ceph_conf_set(ceph_mount_t *cmount, const char *option, const char *value) { - return cluster->conf_set(option, value); + return cmount->conf_set(option, value); } -extern "C" int ceph_conf_get(ceph_cluster_t *cluster, const char *option, +extern "C" int ceph_conf_get(ceph_mount_t *cmount, const char *option, char *buf, size_t len) { - return cluster->conf_get(option, buf, len); + return cmount->conf_get(option, buf, len); } -extern "C" int ceph_mount(ceph_cluster_t *cluster, const char *root) +extern "C" int ceph_mount(ceph_mount_t *cmount, const char *root) { std::string mount_root; if (!root) mount_root = root; - return cluster->mount(mount_root); -} - -extern "C" void ceph_umount(ceph_cluster_t *cluster) -{ - cluster->umount(); + return cmount->mount(mount_root); } -extern "C" int ceph_statfs(ceph_cluster_t *cluster, const char *path, +extern "C" int ceph_statfs(ceph_mount_t *cmount, const char *path, struct statvfs *stbuf) { - return cluster->get_client()->statfs(path, stbuf); + return cmount->get_client()->statfs(path, stbuf); } -extern "C" int ceph_get_local_osd(ceph_cluster_t *cluster) +extern "C" int ceph_get_local_osd(ceph_mount_t *cmount) { - return cluster->get_client()->get_local_osd(); + return cmount->get_client()->get_local_osd(); } -extern "C" const char* ceph_getcwd(ceph_cluster_t *cluster) +extern "C" const char* ceph_getcwd(ceph_mount_t *cmount) { - return cluster->get_cwd(); + return cmount->get_cwd(); } -extern "C" int ceph_chdir (ceph_cluster_t *cluster, const char *s) +extern "C" int ceph_chdir (ceph_mount_t *cmount, const char *s) { - return cluster->get_client()->chdir(s); + return cmount->get_client()->chdir(s); } -extern "C" int ceph_opendir(ceph_cluster_t *cluster, - const char *name, DIR **dirpp) +extern "C" int ceph_opendir(ceph_mount_t *cmount, + const char *name, ceph_dir_result_t **dirpp) { - return cluster->get_client()->opendir(name, dirpp); + return cmount->get_client()->opendir(name, dirpp); } -extern "C" int ceph_closedir(ceph_cluster_t *cluster, DIR *dirp) +extern "C" int ceph_closedir(ceph_mount_t *cmount, ceph_dir_result_t *dirp) { - return cluster->get_client()->closedir(dirp); + return cmount->get_client()->closedir(dirp); } -extern "C" int ceph_readdir_r(ceph_cluster_t *cluster, DIR *dirp, struct dirent *de) +extern "C" int ceph_readdir_r(ceph_mount_t *cmount, ceph_dir_result_t *dirp, struct dirent *de) { - return cluster->get_client()->readdir_r(dirp, de); + return cmount->get_client()->readdir_r(dirp, de); } -extern "C" int ceph_readdirplus_r(ceph_cluster_t *cluster, DIR *dirp, +extern "C" int ceph_readdirplus_r(ceph_mount_t *cmount, ceph_dir_result_t *dirp, struct dirent *de, struct stat *st, int *stmask) { - return cluster->get_client()->readdirplus_r(dirp, de, st, stmask); + return cmount->get_client()->readdirplus_r(dirp, de, st, stmask); } -extern "C" int ceph_getdents(ceph_cluster_t *cluster, DIR *dirp, +extern "C" int ceph_getdents(ceph_mount_t *cmount, ceph_dir_result_t *dirp, char *buf, int buflen) { - return cluster->get_client()->getdents(dirp, buf, buflen); + return cmount->get_client()->getdents(dirp, buf, buflen); } -extern "C" int ceph_getdnames(ceph_cluster_t *cluster, DIR *dirp, +extern "C" int ceph_getdnames(ceph_mount_t *cmount, ceph_dir_result_t *dirp, char *buf, int buflen) { - return cluster->get_client()->getdnames(dirp, buf, buflen); + return cmount->get_client()->getdnames(dirp, buf, buflen); } -extern "C" void ceph_rewinddir(ceph_cluster_t *cluster, DIR *dirp) +extern "C" void ceph_rewinddir(ceph_mount_t *cmount, ceph_dir_result_t *dirp) { - cluster->get_client()->rewinddir(dirp); + cmount->get_client()->rewinddir(dirp); } -extern "C" loff_t ceph_telldir(ceph_cluster_t *cluster, DIR *dirp) +extern "C" loff_t ceph_telldir(ceph_mount_t *cmount, ceph_dir_result_t *dirp) { - return cluster->get_client()->telldir(dirp); + return cmount->get_client()->telldir(dirp); } -extern "C" void ceph_seekdir(ceph_cluster_t *cluster, DIR *dirp, loff_t offset) +extern "C" void ceph_seekdir(ceph_mount_t *cmount, ceph_dir_result_t *dirp, loff_t offset) { - cluster->get_client()->seekdir(dirp, offset); + cmount->get_client()->seekdir(dirp, offset); } -extern "C" int ceph_link (ceph_cluster_t *cluster, const char *existing, +extern "C" int ceph_link (ceph_mount_t *cmount, const char *existing, const char *newname) { - return cluster->get_client()->link(existing, newname); + return cmount->get_client()->link(existing, newname); } -extern "C" int ceph_unlink(ceph_cluster_t *cluster, const char *path) +extern "C" int ceph_unlink(ceph_mount_t *cmount, const char *path) { - return cluster->get_client()->unlink(path); + return cmount->get_client()->unlink(path); } -extern "C" int ceph_rename(ceph_cluster_t *cluster, const char *from, +extern "C" int ceph_rename(ceph_mount_t *cmount, const char *from, const char *to) { - return cluster->get_client()->rename(from, to); + return cmount->get_client()->rename(from, to); } // dirs -extern "C" int ceph_mkdir(ceph_cluster_t *cluster, const char *path, mode_t mode) +extern "C" int ceph_mkdir(ceph_mount_t *cmount, const char *path, mode_t mode) { - return cluster->get_client()->mkdir(path, mode); + return cmount->get_client()->mkdir(path, mode); } -extern "C" int ceph_mkdirs(ceph_cluster_t *cluster, const char *path, mode_t mode) +extern "C" int ceph_mkdirs(ceph_mount_t *cmount, const char *path, mode_t mode) { - return cluster->get_client()->mkdirs(path, mode); + return cmount->get_client()->mkdirs(path, mode); } -extern "C" int ceph_rmdir(ceph_cluster_t *cluster, const char *path) +extern "C" int ceph_rmdir(ceph_mount_t *cmount, const char *path) { - return cluster->get_client()->rmdir(path); + return cmount->get_client()->rmdir(path); } // symlinks -extern "C" int ceph_readlink(ceph_cluster_t *cluster, const char *path, +extern "C" int ceph_readlink(ceph_mount_t *cmount, const char *path, char *buf, loff_t size) { - return cluster->get_client()->readlink(path, buf, size); + return cmount->get_client()->readlink(path, buf, size); } -extern "C" int ceph_symlink(ceph_cluster_t *cluster, const char *existing, +extern "C" int ceph_symlink(ceph_mount_t *cmount, const char *existing, const char *newname) { - return cluster->get_client()->symlink(existing, newname); + return cmount->get_client()->symlink(existing, newname); } // inode stuff -extern "C" int ceph_lstat(ceph_cluster_t *cluster, const char *path, +extern "C" int ceph_lstat(ceph_mount_t *cmount, const char *path, struct stat *stbuf) { - return cluster->get_client()->lstat(path, stbuf); + return cmount->get_client()->lstat(path, stbuf); } -extern "C" int ceph_lstat_precise(ceph_cluster_t *cluster, const char *path, +extern "C" int ceph_lstat_precise(ceph_mount_t *cmount, const char *path, stat_precise *stbuf) { - return cluster->get_client()->lstat_precise(path, (Client::stat_precise*)stbuf); + return cmount->get_client()->lstat_precise(path, (Client::stat_precise*)stbuf); } -extern "C" int ceph_setattr(ceph_cluster_t *cluster, const char *relpath, +extern "C" int ceph_setattr(ceph_mount_t *cmount, const char *relpath, struct stat *attr, int mask) { Client::stat_precise p_attr = Client::stat_precise(*attr); - return cluster->get_client()->setattr(relpath, &p_attr, mask); + return cmount->get_client()->setattr(relpath, &p_attr, mask); } -extern "C" int ceph_setattr_precise(ceph_cluster_t *cluster, const char *relpath, +extern "C" int ceph_setattr_precise(ceph_mount_t *cmount, const char *relpath, struct stat_precise *attr, int mask) { - return cluster->get_client()->setattr(relpath, (Client::stat_precise*)attr, mask); + return cmount->get_client()->setattr(relpath, (Client::stat_precise*)attr, mask); } -extern "C" int ceph_chmod(ceph_cluster_t *cluster, const char *path, mode_t mode) +extern "C" int ceph_chmod(ceph_mount_t *cmount, const char *path, mode_t mode) { - return cluster->get_client()->chmod(path, mode); + return cmount->get_client()->chmod(path, mode); } -extern "C" int ceph_chown(ceph_cluster_t *cluster, const char *path, +extern "C" int ceph_chown(ceph_mount_t *cmount, const char *path, uid_t uid, gid_t gid) { - return cluster->get_client()->chown(path, uid, gid); + return cmount->get_client()->chown(path, uid, gid); } -extern "C" int ceph_utime(ceph_cluster_t *cluster, const char *path, +extern "C" int ceph_utime(ceph_mount_t *cmount, const char *path, struct utimbuf *buf) { - return cluster->get_client()->utime(path, buf); + return cmount->get_client()->utime(path, buf); } -extern "C" int ceph_truncate(ceph_cluster_t *cluster, const char *path, +extern "C" int ceph_truncate(ceph_mount_t *cmount, const char *path, loff_t size) { - return cluster->get_client()->truncate(path, size); + return cmount->get_client()->truncate(path, size); } // file ops -extern "C" int ceph_mknod(ceph_cluster_t *cluster, const char *path, +extern "C" int ceph_mknod(ceph_mount_t *cmount, const char *path, mode_t mode, dev_t rdev) { - return cluster->get_client()->mknod(path, mode, rdev); + return cmount->get_client()->mknod(path, mode, rdev); } -extern "C" int ceph_open(ceph_cluster_t *cluster, const char *path, +extern "C" int ceph_open(ceph_mount_t *cmount, const char *path, int flags, mode_t mode) { - return cluster->get_client()->open(path, flags, mode); + return cmount->get_client()->open(path, flags, mode); } -extern "C" int ceph_close(ceph_cluster_t *cluster, int fd) +extern "C" int ceph_close(ceph_mount_t *cmount, int fd) { - return cluster->get_client()->close(fd); + return cmount->get_client()->close(fd); } -extern "C" loff_t ceph_lseek(ceph_cluster_t *cluster, int fd, +extern "C" loff_t ceph_lseek(ceph_mount_t *cmount, int fd, loff_t offset, int whence) { - return cluster->get_client()->lseek(fd, offset, whence); + return cmount->get_client()->lseek(fd, offset, whence); } -extern "C" int ceph_read(ceph_cluster_t *cluster, int fd, char *buf, +extern "C" int ceph_read(ceph_mount_t *cmount, int fd, char *buf, loff_t size, loff_t offset) { - return cluster->get_client()->read(fd, buf, size, offset); + return cmount->get_client()->read(fd, buf, size, offset); } -extern "C" int ceph_write(ceph_cluster_t *cluster, int fd, const char *buf, +extern "C" int ceph_write(ceph_mount_t *cmount, int fd, const char *buf, loff_t size, loff_t offset) { - return cluster->get_client()->write(fd, buf, size, offset); + return cmount->get_client()->write(fd, buf, size, offset); } -extern "C" int ceph_ftruncate(ceph_cluster_t *cluster, int fd, loff_t size) +extern "C" int ceph_ftruncate(ceph_mount_t *cmount, int fd, loff_t size) { - return cluster->get_client()->ftruncate(fd, size); + return cmount->get_client()->ftruncate(fd, size); } -extern "C" int ceph_fsync(ceph_cluster_t *cluster, int fd, int syncdataonly) +extern "C" int ceph_fsync(ceph_mount_t *cmount, int fd, int syncdataonly) { - return cluster->get_client()->fsync(fd, syncdataonly); + return cmount->get_client()->fsync(fd, syncdataonly); } -extern "C" int ceph_fstat(ceph_cluster_t *cluster, int fd, struct stat *stbuf) +extern "C" int ceph_fstat(ceph_mount_t *cmount, int fd, struct stat *stbuf) { - return cluster->get_client()->fstat(fd, stbuf); + return cmount->get_client()->fstat(fd, stbuf); } -extern "C" int ceph_sync_fs(ceph_cluster_t *cluster) +extern "C" int ceph_sync_fs(ceph_mount_t *cmount) { - return cluster->get_client()->sync_fs(); + return cmount->get_client()->sync_fs(); } -extern "C" int ceph_get_file_stripe_unit(ceph_cluster_t *cluster, int fh) +extern "C" int ceph_get_file_stripe_unit(ceph_mount_t *cmount, int fh) { - return cluster->get_client()->get_file_stripe_unit(fh); + return cmount->get_client()->get_file_stripe_unit(fh); } -extern "C" int ceph_get_file_replication(ceph_cluster_t *cluster, +extern "C" int ceph_get_file_replication(ceph_mount_t *cmount, const char *path) { - int fd = cluster->get_client()->open(path, O_RDONLY); + int fd = cmount->get_client()->open(path, O_RDONLY); if (fd < 0) return fd; - int rep = cluster->get_client()->get_file_replication(fd); - cluster->get_client()->close(fd); + int rep = cmount->get_client()->get_file_replication(fd); + cmount->get_client()->close(fd); return rep; } -extern "C" int ceph_get_default_preferred_pg(ceph_cluster_t *cluster, int fd) +extern "C" int ceph_get_default_preferred_pg(ceph_mount_t *cmount, int fd) { - return cluster->get_client()->get_default_preferred_pg(fd); + return cmount->get_client()->get_default_preferred_pg(fd); } -extern "C" int ceph_set_default_file_stripe_unit(ceph_cluster_t *cluster, +extern "C" int ceph_set_default_file_stripe_unit(ceph_mount_t *cmount, int stripe) { - cluster->get_client()->set_default_file_stripe_unit(stripe); + cmount->get_client()->set_default_file_stripe_unit(stripe); return 0; } -extern "C" int ceph_set_default_file_stripe_count(ceph_cluster_t *cluster, +extern "C" int ceph_set_default_file_stripe_count(ceph_mount_t *cmount, int count) { - cluster->get_client()->set_default_file_stripe_unit(count); + cmount->get_client()->set_default_file_stripe_unit(count); return 0; } -extern "C" int ceph_set_default_object_size(ceph_cluster_t *cluster, int size) +extern "C" int ceph_set_default_object_size(ceph_mount_t *cmount, int size) { - cluster->get_client()->set_default_object_size(size); + cmount->get_client()->set_default_object_size(size); return 0; } -extern "C" int ceph_set_default_file_replication(ceph_cluster_t *cluster, +extern "C" int ceph_set_default_file_replication(ceph_mount_t *cmount, int replication) { - cluster->get_client()->set_default_file_replication(replication); + cmount->get_client()->set_default_file_replication(replication); return 0; } -extern "C" int ceph_set_default_preferred_pg(ceph_cluster_t *cluster, int pg) +extern "C" int ceph_set_default_preferred_pg(ceph_mount_t *cmount, int pg) { - cluster->get_client()->set_default_preferred_pg(pg); + cmount->get_client()->set_default_preferred_pg(pg); return 0; } -extern "C" int ceph_get_file_stripe_address(ceph_cluster_t *cluster, int fh, +extern "C" int ceph_get_file_stripe_address(ceph_mount_t *cmount, int fh, loff_t offset, char *buf, int buflen) { string address; - int r = cluster->get_client()->get_file_stripe_address(fh, offset, address); + int r = cmount->get_client()->get_file_stripe_address(fh, offset, address); if (r != 0) return r; //at time of writing, method ONLY returns // 0 or -EINVAL if there are no known osds int len = address.size()+1; @@ -581,11 +572,11 @@ extern "C" int ceph_get_file_stripe_address(ceph_cluster_t *cluster, int fh, return 0; } -extern "C" int ceph_localize_reads(ceph_cluster_t *cluster, int val) +extern "C" int ceph_localize_reads(ceph_mount_t *cmount, int val) { if (!val) - cluster->get_client()->clear_filer_flags(CEPH_OSD_FLAG_LOCALIZE_READS); + cmount->get_client()->clear_filer_flags(CEPH_OSD_FLAG_LOCALIZE_READS); else - cluster->get_client()->set_filer_flags(CEPH_OSD_FLAG_LOCALIZE_READS); + cmount->get_client()->set_filer_flags(CEPH_OSD_FLAG_LOCALIZE_READS); return 0; } -- 2.47.3