diff options
Diffstat (limited to 'xlators/features/cloudsync/src/cloudsync.c')
-rw-r--r-- | xlators/features/cloudsync/src/cloudsync.c | 2460 |
1 files changed, 1197 insertions, 1263 deletions
diff --git a/xlators/features/cloudsync/src/cloudsync.c b/xlators/features/cloudsync/src/cloudsync.c index 3e1cd6a7111..00437aaf80c 100644 --- a/xlators/features/cloudsync/src/cloudsync.c +++ b/xlators/features/cloudsync/src/cloudsync.c @@ -19,1713 +19,1647 @@ #include <dlfcn.h> void -cs_cleanup_private (cs_private_t *priv) +cs_cleanup_private(cs_private_t *priv) { - if (priv) { - if (priv->stores) { - priv->stores->fini (priv->stores->config); - GF_FREE (priv->stores); - } - - pthread_spin_destroy (&priv->lock); - GF_FREE (priv); + if (priv) { + if (priv->stores) { + priv->stores->fini(priv->stores->config); + GF_FREE(priv->stores); } - return; + pthread_spin_destroy(&priv->lock); + GF_FREE(priv); + } + + return; } struct cs_plugin plugins[] = { - { - .name = "cloudsyncs3", - .library = "cloudsyncs3.so", - .description = "cloudsync s3 store." - }, + {.name = "cloudsyncs3", + .library = "cloudsyncs3.so", + .description = "cloudsync s3 store."}, - {.name = NULL}, + {.name = NULL}, }; int -cs_init (xlator_t *this) +cs_init(xlator_t *this) { - cs_private_t *priv = NULL; - gf_boolean_t per_vol = _gf_false; - int ret = 0; - char *libpath = NULL; - store_methods_t *store_methods = NULL; - void *handle = NULL; - char *temp_str = NULL; - int index = 0; - char *libname = NULL; - - priv = GF_CALLOC (1, sizeof (*priv), gf_cs_mt_cs_private_t); - if (!priv) { - gf_msg (this->name, GF_LOG_ERROR, 0, 0, "insufficient memory"); - goto out; + cs_private_t *priv = NULL; + gf_boolean_t per_vol = _gf_false; + int ret = 0; + char *libpath = NULL; + store_methods_t *store_methods = NULL; + void *handle = NULL; + char *temp_str = NULL; + int index = 0; + char *libname = NULL; + + priv = GF_CALLOC(1, sizeof(*priv), gf_cs_mt_cs_private_t); + if (!priv) { + gf_msg(this->name, GF_LOG_ERROR, 0, 0, "insufficient memory"); + goto out; + } + + priv->this = this; + + this->local_pool = mem_pool_new(cs_local_t, 512); + if (!this->local_pool) { + gf_msg(this->name, GF_LOG_ERROR, 0, ENOMEM, "initialisation failed."); + ret = -1; + goto out; + } + + this->private = priv; + + /* temp workaround. Should be configurable through glusterd*/ + per_vol = _gf_true; + + if (per_vol) { + if (dict_get_str(this->options, "cloudsync-storetype", &temp_str) == + 0) { + for (index = 0; plugins[index].name; index++) { + if (!strcmp(temp_str, plugins[index].name)) { + libname = plugins[index].library; + break; + } + } + } else { + ret = 0; } - priv->this = this; - - this->local_pool = mem_pool_new (cs_local_t, 512); - if (!this->local_pool) { - gf_msg (this->name, GF_LOG_ERROR, 0, ENOMEM, - "initialisation failed."); - ret = -1; - goto out; + if (!libname) { + gf_msg(this->name, GF_LOG_WARNING, 0, 0, "no plugin enabled"); + ret = 0; + goto out; } - this->private = priv; - - /* temp workaround. Should be configurable through glusterd*/ - per_vol = _gf_true; - - if (per_vol) { - if (dict_get_str (this->options, "cloudsync-storetype", - &temp_str) == 0) { - for (index = 0; plugins[index].name; index++) { - if (!strcmp (temp_str, plugins[index].name)) { - libname = plugins[index].library; - break; - } - } - } else { - ret = 0; - } - - if (!libname) { - gf_msg (this->name, GF_LOG_WARNING, 0, 0, - "no plugin enabled"); - ret = 0; - goto out; - } - - ret = gf_asprintf (&libpath, "%s/%s", CS_PLUGINDIR, libname); - if (ret == -1) { - goto out; - } - - handle = dlopen (libpath, RTLD_NOW); - if (!handle) { - gf_msg (this->name, GF_LOG_WARNING, 0, 0, "could not " - "load the required library. %s", dlerror ()); - ret = 0; - goto out; - } else { - gf_msg (this->name, GF_LOG_INFO, 0, 0, - "loading library:%s successful", libname); - } + ret = gf_asprintf(&libpath, "%s/%s", CS_PLUGINDIR, libname); + if (ret == -1) { + goto out; + } + handle = dlopen(libpath, RTLD_NOW); + if (!handle) { + gf_msg(this->name, GF_LOG_WARNING, 0, 0, + "could not " + "load the required library. %s", + dlerror()); + ret = 0; + goto out; + } else { + gf_msg(this->name, GF_LOG_INFO, 0, 0, + "loading library:%s successful", libname); + } - priv->stores = GF_CALLOC (1, sizeof (struct cs_remote_stores), - gf_cs_mt_cs_remote_stores_t); - if (!priv->stores) { - gf_msg (this->name, GF_LOG_ERROR, 0, 0, "Could not " - "allocate memory for priv->stores"); - ret = -1; - goto out; - } + priv->stores = GF_CALLOC(1, sizeof(struct cs_remote_stores), + gf_cs_mt_cs_remote_stores_t); + if (!priv->stores) { + gf_msg(this->name, GF_LOG_ERROR, 0, 0, + "Could not " + "allocate memory for priv->stores"); + ret = -1; + goto out; + } - (void) dlerror (); /* clear out previous error string */ + (void)dlerror(); /* clear out previous error string */ - /* load library methods */ - store_methods = (store_methods_t *) dlsym (handle, "store_ops"); - if (!store_methods) { - gf_msg (this->name, GF_LOG_ERROR, 0, 0, - "null store_methods %s", dlerror ()); - ret = -1; - goto out; - } + /* load library methods */ + store_methods = (store_methods_t *)dlsym(handle, "store_ops"); + if (!store_methods) { + gf_msg(this->name, GF_LOG_ERROR, 0, 0, "null store_methods %s", + dlerror()); + ret = -1; + goto out; + } - (void) dlerror (); + (void)dlerror(); - priv->stores->dlfop = store_methods->fop_download; - if (!priv->stores->dlfop) { - gf_msg (this->name, GF_LOG_ERROR, 0, 0, "failed to get" - " download fop %s", dlerror ()); - ret = -1; - goto out; - } + priv->stores->dlfop = store_methods->fop_download; + if (!priv->stores->dlfop) { + gf_msg(this->name, GF_LOG_ERROR, 0, 0, + "failed to get" + " download fop %s", + dlerror()); + ret = -1; + goto out; + } - (void) dlerror (); - priv->stores->init = store_methods->fop_init; - if (!priv->stores->init) { - gf_msg (this->name, GF_LOG_ERROR, 0, 0, "failed to get" - " init fop %s", dlerror ()); - ret = -1; - goto out; - } + (void)dlerror(); + priv->stores->init = store_methods->fop_init; + if (!priv->stores->init) { + gf_msg(this->name, GF_LOG_ERROR, 0, 0, + "failed to get" + " init fop %s", + dlerror()); + ret = -1; + goto out; + } - (void) dlerror (); - priv->stores->reconfigure = store_methods->fop_reconfigure; - if (!priv->stores->reconfigure) { - gf_msg (this->name, GF_LOG_ERROR, 0, 0, "failed to get" - " reconfigure fop %s", dlerror ()); - ret = -1; - goto out; - } + (void)dlerror(); + priv->stores->reconfigure = store_methods->fop_reconfigure; + if (!priv->stores->reconfigure) { + gf_msg(this->name, GF_LOG_ERROR, 0, 0, + "failed to get" + " reconfigure fop %s", + dlerror()); + ret = -1; + goto out; + } - priv->stores->handle = handle; + priv->stores->handle = handle; - priv->stores->config = (void *) ((priv->stores->init) (this)); - if (!priv->stores->config) { - gf_msg (this->name, GF_LOG_ERROR, 0, 0, "null config"); - ret = -1; - goto out; - } + priv->stores->config = (void *)((priv->stores->init)(this)); + if (!priv->stores->config) { + gf_msg(this->name, GF_LOG_ERROR, 0, 0, "null config"); + ret = -1; + goto out; } + } - ret = 0; + ret = 0; out: - if (ret == -1) { - if (this->local_pool) - mem_pool_destroy (this->local_pool); + if (ret == -1) { + if (this->local_pool) + mem_pool_destroy(this->local_pool); - cs_cleanup_private (priv); + cs_cleanup_private(priv); - if (handle) { - dlclose (handle); - } + if (handle) { + dlclose(handle); } + } - GF_FREE (libpath); + GF_FREE(libpath); - return ret; + return ret; } void -cs_fini (xlator_t *this) +cs_fini(xlator_t *this) { - cs_private_t *priv = NULL; - priv = this->private; + cs_private_t *priv = NULL; + priv = this->private; - cs_cleanup_private (priv); + cs_cleanup_private(priv); } int -cs_reconfigure (xlator_t *this, dict_t *options) +cs_reconfigure(xlator_t *this, dict_t *options) { - cs_private_t *priv = NULL; - int ret = 0; + cs_private_t *priv = NULL; + int ret = 0; - priv = this->private; - if (!priv) { - ret = -1; - goto out; - } + priv = this->private; + if (!priv) { + ret = -1; + goto out; + } - /* needed only for per volume configuration*/ - ret = priv->stores->reconfigure (this, options); + /* needed only for per volume configuration*/ + ret = priv->stores->reconfigure(this, options); out: - return ret; + return ret; } int32_t -cs_mem_acct_init (xlator_t *this) +cs_mem_acct_init(xlator_t *this) { - int ret = -1; + int ret = -1; - GF_VALIDATE_OR_GOTO ("cloudsync", this, out); + GF_VALIDATE_OR_GOTO("cloudsync", this, out); - ret = xlator_mem_acct_init (this, gf_cs_mt_end + 1); + ret = xlator_mem_acct_init(this, gf_cs_mt_end + 1); - if (ret != 0) { - gf_msg (this->name, GF_LOG_ERROR, 0, 0, - "Memory accounting init failed"); - return ret; - } -out: + if (ret != 0) { + gf_msg(this->name, GF_LOG_ERROR, 0, 0, "Memory accounting init failed"); return ret; + } +out: + return ret; } int32_t -cs_readdirp_cbk (call_frame_t *frame, void *cookie, xlator_t *this, - int32_t op_ret, int32_t op_errno, gf_dirent_t *entries, - dict_t *xdata) +cs_readdirp_cbk(call_frame_t *frame, void *cookie, xlator_t *this, + int32_t op_ret, int32_t op_errno, gf_dirent_t *entries, + dict_t *xdata) { - gf_dirent_t *tmp = NULL; - char *sxattr = NULL; - uint64_t ia_size = 0; - int ret = 0; - - list_for_each_entry (tmp, &entries->list, list) { - ret = dict_get_str (tmp->dict, GF_CS_OBJECT_SIZE, &sxattr); - if (ret) { - gf_msg_trace (this->name, 0, "size xattr found"); - continue; - } - - ia_size = atoll (sxattr); - tmp->d_stat.ia_size = ia_size; + gf_dirent_t *tmp = NULL; + char *sxattr = NULL; + uint64_t ia_size = 0; + int ret = 0; + + list_for_each_entry(tmp, &entries->list, list) + { + ret = dict_get_str(tmp->dict, GF_CS_OBJECT_SIZE, &sxattr); + if (ret) { + gf_msg_trace(this->name, 0, "size xattr found"); + continue; } - STACK_UNWIND_STRICT (readdirp, frame, op_ret, op_errno, - entries, xdata); - return 0; -} + ia_size = atoll(sxattr); + tmp->d_stat.ia_size = ia_size; + } + STACK_UNWIND_STRICT(readdirp, frame, op_ret, op_errno, entries, xdata); + return 0; +} int32_t -cs_readdirp (call_frame_t *frame, xlator_t *this, fd_t *fd, size_t size, - off_t off, dict_t *xdata) +cs_readdirp(call_frame_t *frame, xlator_t *this, fd_t *fd, size_t size, + off_t off, dict_t *xdata) { - int ret = 0; - int op_errno = ENOMEM; + int ret = 0; + int op_errno = ENOMEM; + if (!xdata) { + xdata = dict_new(); if (!xdata) { - xdata = dict_new (); - if (!xdata) { - goto err; - } + goto err; } + } - ret = dict_set_int32 (xdata, GF_CS_OBJECT_SIZE, 1); - if (ret) { - goto err; - } + ret = dict_set_int32(xdata, GF_CS_OBJECT_SIZE, 1); + if (ret) { + goto err; + } - STACK_WIND (frame, cs_readdirp_cbk, - FIRST_CHILD(this), FIRST_CHILD(this)->fops->readdirp, - fd, size, off, xdata); - return 0; + STACK_WIND(frame, cs_readdirp_cbk, FIRST_CHILD(this), + FIRST_CHILD(this)->fops->readdirp, fd, size, off, xdata); + return 0; err: - STACK_UNWIND_STRICT (readdirp, frame, -1, op_errno, - NULL, NULL); - return 0; + STACK_UNWIND_STRICT(readdirp, frame, -1, op_errno, NULL, NULL); + return 0; } - int32_t -cs_truncate_cbk (call_frame_t *frame, void *cookie, xlator_t *this, - int32_t op_ret, int32_t op_errno, struct iatt *prebuf, - struct iatt *postbuf, dict_t *xdata) +cs_truncate_cbk(call_frame_t *frame, void *cookie, xlator_t *this, + int32_t op_ret, int32_t op_errno, struct iatt *prebuf, + struct iatt *postbuf, dict_t *xdata) { - cs_local_t *local = NULL; - int ret = 0; - uint64_t val = 0; - - local = frame->local; - - /* Do we need lock here? */ - local->call_cnt++; - - if (op_ret == -1) { - gf_msg (this->name, GF_LOG_ERROR, 0, 0, "truncate failed"); - ret = dict_get_uint64 (xdata, GF_CS_OBJECT_STATUS, &val); - if (ret == 0) { - if (val == GF_CS_ERROR) { - gf_msg (this->name, GF_LOG_ERROR, 0, 0, - "could not get file state, unwinding"); - op_ret = -1; - op_errno = EIO; - goto unwind; - } else { - __cs_inode_ctx_update (this, local->loc.inode, - val); - gf_msg (this->name, GF_LOG_INFO, 0, 0, - " state = %ld", val); - - if (local->call_cnt == 1 && - (val == GF_CS_REMOTE || - val == GF_CS_DOWNLOADING)) { - gf_msg (this->name, GF_LOG_WARNING, 0, - 0, "will repair and download " - "the file, current state : %ld", - val); - goto repair; - } else { - gf_msg (this->name, GF_LOG_ERROR, 0, 0, - "second truncate, Unwinding"); - goto unwind; - } - } + cs_local_t *local = NULL; + int ret = 0; + uint64_t val = 0; + + local = frame->local; + + /* Do we need lock here? */ + local->call_cnt++; + + if (op_ret == -1) { + gf_msg(this->name, GF_LOG_ERROR, 0, 0, "truncate failed"); + ret = dict_get_uint64(xdata, GF_CS_OBJECT_STATUS, &val); + if (ret == 0) { + if (val == GF_CS_ERROR) { + gf_msg(this->name, GF_LOG_ERROR, 0, 0, + "could not get file state, unwinding"); + op_ret = -1; + op_errno = EIO; + goto unwind; + } else { + __cs_inode_ctx_update(this, local->loc.inode, val); + gf_msg(this->name, GF_LOG_INFO, 0, 0, " state = %ld", val); + + if (local->call_cnt == 1 && + (val == GF_CS_REMOTE || val == GF_CS_DOWNLOADING)) { + gf_msg(this->name, GF_LOG_WARNING, 0, 0, + "will repair and download " + "the file, current state : %ld", + val); + goto repair; } else { - gf_msg (this->name, GF_LOG_ERROR, 0, 0, "file state " - "could not be figured, unwinding"); - goto unwind; + gf_msg(this->name, GF_LOG_ERROR, 0, 0, + "second truncate, Unwinding"); + goto unwind; } + } } else { - /* successful write => file is local */ - __cs_inode_ctx_update (this, local->loc.inode, GF_CS_LOCAL); - gf_msg (this->name, GF_LOG_INFO, 0, 0, "state : GF_CS_LOCAL" - ", truncate successful"); - - goto unwind; + gf_msg(this->name, GF_LOG_ERROR, 0, 0, + "file state " + "could not be figured, unwinding"); + goto unwind; } + } else { + /* successful write => file is local */ + __cs_inode_ctx_update(this, local->loc.inode, GF_CS_LOCAL); + gf_msg(this->name, GF_LOG_INFO, 0, 0, + "state : GF_CS_LOCAL" + ", truncate successful"); + + goto unwind; + } repair: - ret = locate_and_execute (frame); - if (ret) { - goto unwind; - } + ret = locate_and_execute(frame); + if (ret) { + goto unwind; + } - return 0; + return 0; unwind: - CS_STACK_UNWIND (truncate, frame, op_ret, op_errno, prebuf, postbuf, - xdata); - return 0; + CS_STACK_UNWIND(truncate, frame, op_ret, op_errno, prebuf, postbuf, xdata); + return 0; } - int32_t -cs_truncate (call_frame_t *frame, xlator_t *this, loc_t *loc, off_t offset, - dict_t *xdata) +cs_truncate(call_frame_t *frame, xlator_t *this, loc_t *loc, off_t offset, + dict_t *xdata) { - int op_errno = -1; - cs_local_t *local = NULL; - int ret = 0; - cs_inode_ctx_t *ctx = NULL; - gf_cs_obj_state state = -1; - - VALIDATE_OR_GOTO (frame, err); - VALIDATE_OR_GOTO (this, err); - VALIDATE_OR_GOTO (loc, err); - - local = cs_local_init (this, frame, loc, NULL, GF_FOP_TRUNCATE); - if (!local) { - gf_msg (this->name, GF_LOG_ERROR, 0, 0, "local init failed"); - op_errno = ENOMEM; - goto err; - } - - __cs_inode_ctx_get (this, loc->inode, &ctx); - - if (ctx) - state = __cs_get_file_state (this, loc->inode, ctx); - else - state = GF_CS_LOCAL; - - local->xattr_req = xdata ? dict_ref (xdata) : (xdata = dict_new ()); - - ret = dict_set_uint32 (local->xattr_req, GF_CS_OBJECT_STATUS, 1); + int op_errno = -1; + cs_local_t *local = NULL; + int ret = 0; + cs_inode_ctx_t *ctx = NULL; + gf_cs_obj_state state = -1; + + VALIDATE_OR_GOTO(frame, err); + VALIDATE_OR_GOTO(this, err); + VALIDATE_OR_GOTO(loc, err); + + local = cs_local_init(this, frame, loc, NULL, GF_FOP_TRUNCATE); + if (!local) { + gf_msg(this->name, GF_LOG_ERROR, 0, 0, "local init failed"); + op_errno = ENOMEM; + goto err; + } + + __cs_inode_ctx_get(this, loc->inode, &ctx); + + if (ctx) + state = __cs_get_file_state(this, loc->inode, ctx); + else + state = GF_CS_LOCAL; + + local->xattr_req = xdata ? dict_ref(xdata) : (xdata = dict_new()); + + ret = dict_set_uint32(local->xattr_req, GF_CS_OBJECT_STATUS, 1); + if (ret) { + gf_msg(this->name, GF_LOG_ERROR, 0, 0, + "dict_set failed key:" + " %s", + GF_CS_OBJECT_STATUS); + goto err; + } + + local->stub = fop_truncate_stub(frame, cs_resume_truncate, loc, offset, + xdata); + if (!local->stub) { + gf_msg(this->name, GF_LOG_ERROR, 0, 0, "insufficient memory"); + op_errno = ENOMEM; + goto err; + } + + if (state == GF_CS_LOCAL) { + STACK_WIND(frame, cs_truncate_cbk, FIRST_CHILD(this), + FIRST_CHILD(this)->fops->truncate, loc, offset, xdata); + + } else { + local->call_cnt++; + ret = locate_and_execute(frame); if (ret) { - gf_msg (this->name, GF_LOG_ERROR, 0, 0, "dict_set failed key:" - " %s", GF_CS_OBJECT_STATUS); - goto err; + op_errno = ENOMEM; + goto err; } + } - local->stub = fop_truncate_stub (frame, cs_resume_truncate, loc, offset, - xdata); - if (!local->stub) { - gf_msg (this->name, GF_LOG_ERROR, 0, 0, "insufficient memory"); - op_errno = ENOMEM; - goto err; - } - - if (state == GF_CS_LOCAL) { - STACK_WIND (frame, cs_truncate_cbk, - FIRST_CHILD(this), - FIRST_CHILD(this)->fops->truncate, - loc, offset, xdata); - - } else { - local->call_cnt++; - ret = locate_and_execute (frame); - if (ret) { - op_errno = ENOMEM; - goto err; - } - } - - return 0; + return 0; err: - CS_STACK_UNWIND (truncate, frame, -1, op_errno, NULL, NULL, NULL); - return 0; + CS_STACK_UNWIND(truncate, frame, -1, op_errno, NULL, NULL, NULL); + return 0; } int32_t -cs_statfs_cbk (call_frame_t *frame, void *cookie, xlator_t *this, - int32_t op_ret, int32_t op_errno, struct statvfs *buf, - dict_t *xdata) +cs_statfs_cbk(call_frame_t *frame, void *cookie, xlator_t *this, int32_t op_ret, + int32_t op_errno, struct statvfs *buf, dict_t *xdata) { - STACK_UNWIND_STRICT (statfs, frame, op_ret, op_errno, - buf, xdata); - return 0; + STACK_UNWIND_STRICT(statfs, frame, op_ret, op_errno, buf, xdata); + return 0; } - int32_t -cs_statfs (call_frame_t *frame, xlator_t *this, - loc_t *loc, - dict_t *xdata) +cs_statfs(call_frame_t *frame, xlator_t *this, loc_t *loc, dict_t *xdata) { - STACK_WIND (frame, cs_statfs_cbk, - FIRST_CHILD(this), FIRST_CHILD(this)->fops->statfs, - loc, xdata); - return 0; + STACK_WIND(frame, cs_statfs_cbk, FIRST_CHILD(this), + FIRST_CHILD(this)->fops->statfs, loc, xdata); + return 0; } - int32_t -cs_getxattr_cbk (call_frame_t *frame, void *cookie, xlator_t *this, - int32_t op_ret, int32_t op_errno, dict_t *dict, - dict_t *xdata) +cs_getxattr_cbk(call_frame_t *frame, void *cookie, xlator_t *this, + int32_t op_ret, int32_t op_errno, dict_t *dict, dict_t *xdata) { - STACK_UNWIND_STRICT (getxattr, frame, op_ret, op_errno, - dict, xdata); - return 0; + STACK_UNWIND_STRICT(getxattr, frame, op_ret, op_errno, dict, xdata); + return 0; } - int32_t -cs_getxattr (call_frame_t *frame, xlator_t *this, - loc_t *loc, - const char *name, - dict_t *xattr_req) +cs_getxattr(call_frame_t *frame, xlator_t *this, loc_t *loc, const char *name, + dict_t *xattr_req) { - STACK_WIND (frame, cs_getxattr_cbk, - FIRST_CHILD(this), FIRST_CHILD(this)->fops->getxattr, - loc, name, xattr_req); - return 0; + STACK_WIND(frame, cs_getxattr_cbk, FIRST_CHILD(this), + FIRST_CHILD(this)->fops->getxattr, loc, name, xattr_req); + return 0; } int32_t -cs_setxattr_cbk (call_frame_t *frame, void *cookie, xlator_t *this, - int32_t op_ret, int32_t op_errno, dict_t *xdata) +cs_setxattr_cbk(call_frame_t *frame, void *cookie, xlator_t *this, + int32_t op_ret, int32_t op_errno, dict_t *xdata) { - cs_local_t *local = NULL; + cs_local_t *local = NULL; - local = frame->local; + local = frame->local; - if (local->locked) - cs_inodelk_unlock (frame); + if (local->locked) + cs_inodelk_unlock(frame); - CS_STACK_UNWIND (setxattr, frame, op_ret, op_errno, xdata); + CS_STACK_UNWIND(setxattr, frame, op_ret, op_errno, xdata); - return 0; + return 0; } - int32_t -cs_setxattr (call_frame_t *frame, xlator_t *this, loc_t *loc, dict_t *dict, - int32_t flags, dict_t *xdata) +cs_setxattr(call_frame_t *frame, xlator_t *this, loc_t *loc, dict_t *dict, + int32_t flags, dict_t *xdata) { - data_t *tmp = NULL; - cs_local_t *local = NULL; - int ret = 0; + data_t *tmp = NULL; + cs_local_t *local = NULL; + int ret = 0; - VALIDATE_OR_GOTO (frame, err); - VALIDATE_OR_GOTO (this, err); - - local = cs_local_init (this, frame, loc, NULL, GF_FOP_SETXATTR); - if (!local) { - ret = -1; - goto err; - } + VALIDATE_OR_GOTO(frame, err); + VALIDATE_OR_GOTO(this, err); - local->xattr_req = xdata ? dict_ref (xdata) : (xdata = dict_new ()); + local = cs_local_init(this, frame, loc, NULL, GF_FOP_SETXATTR); + if (!local) { + ret = -1; + goto err; + } - tmp = dict_get (dict, GF_CS_OBJECT_UPLOAD_COMPLETE); - if (tmp) { - /* Value of key should be the atime */ - local->stub = fop_setxattr_stub (frame, cs_resume_setxattr, - loc, dict, flags, xdata); + local->xattr_req = xdata ? dict_ref(xdata) : (xdata = dict_new()); - if (!local->stub) - goto err; + tmp = dict_get(dict, GF_CS_OBJECT_UPLOAD_COMPLETE); + if (tmp) { + /* Value of key should be the atime */ + local->stub = fop_setxattr_stub(frame, cs_resume_setxattr, loc, dict, + flags, xdata); - ret = locate_and_execute (frame); - if (ret) { - goto err; - } + if (!local->stub) + goto err; - return 0; + ret = locate_and_execute(frame); + if (ret) { + goto err; } - STACK_WIND (frame, cs_setxattr_cbk, - FIRST_CHILD(this), FIRST_CHILD(this)->fops->setxattr, - loc, dict, flags, xdata); return 0; + } + + STACK_WIND(frame, cs_setxattr_cbk, FIRST_CHILD(this), + FIRST_CHILD(this)->fops->setxattr, loc, dict, flags, xdata); + return 0; err: - CS_STACK_UNWIND (setxattr, frame, -1, errno, NULL); - return 0; + CS_STACK_UNWIND(setxattr, frame, -1, errno, NULL); + return 0; } - int32_t -cs_fgetxattr_cbk (call_frame_t *frame, void *cookie, xlator_t *this, - int32_t op_ret, int32_t op_errno, dict_t *dict, - dict_t *xdata) +cs_fgetxattr_cbk(call_frame_t *frame, void *cookie, xlator_t *this, + int32_t op_ret, int32_t op_errno, dict_t *dict, dict_t *xdata) { - STACK_UNWIND_STRICT (fgetxattr, frame, op_ret, op_errno, - dict, xdata); - return 0; + STACK_UNWIND_STRICT(fgetxattr, frame, op_ret, op_errno, dict, xdata); + return 0; } - int32_t -cs_fgetxattr (call_frame_t *frame, xlator_t *this, fd_t *fd, const char *name, - dict_t *xdata) +cs_fgetxattr(call_frame_t *frame, xlator_t *this, fd_t *fd, const char *name, + dict_t *xdata) { - STACK_WIND (frame, cs_fgetxattr_cbk, - FIRST_CHILD(this), FIRST_CHILD(this)->fops->fgetxattr, - fd, name, xdata); - return 0; + STACK_WIND(frame, cs_fgetxattr_cbk, FIRST_CHILD(this), + FIRST_CHILD(this)->fops->fgetxattr, fd, name, xdata); + return 0; } - - int32_t -cs_fsetxattr_cbk (call_frame_t *frame, void *cookie, xlator_t *this, - int32_t op_ret, int32_t op_errno, dict_t *xdata) +cs_fsetxattr_cbk(call_frame_t *frame, void *cookie, xlator_t *this, + int32_t op_ret, int32_t op_errno, dict_t *xdata) { - STACK_UNWIND_STRICT (fsetxattr, frame, op_ret, op_errno, - xdata); - return 0; + STACK_UNWIND_STRICT(fsetxattr, frame, op_ret, op_errno, xdata); + return 0; } - int32_t -cs_fsetxattr (call_frame_t *frame, xlator_t *this, - fd_t *fd, - dict_t *dict, - int32_t flags, - dict_t *xdata) +cs_fsetxattr(call_frame_t *frame, xlator_t *this, fd_t *fd, dict_t *dict, + int32_t flags, dict_t *xdata) { - STACK_WIND (frame, cs_fsetxattr_cbk, - FIRST_CHILD(this), FIRST_CHILD(this)->fops->fsetxattr, - fd, dict, flags, xdata); - return 0; + STACK_WIND(frame, cs_fsetxattr_cbk, FIRST_CHILD(this), + FIRST_CHILD(this)->fops->fsetxattr, fd, dict, flags, xdata); + return 0; } int32_t -cs_unlink_cbk (call_frame_t *frame, void *cookie, xlator_t *this, - int32_t op_ret, int32_t op_errno, struct iatt *preparent, - struct iatt *postparent, - dict_t *xdata) +cs_unlink_cbk(call_frame_t *frame, void *cookie, xlator_t *this, int32_t op_ret, + int32_t op_errno, struct iatt *preparent, struct iatt *postparent, + dict_t *xdata) { - STACK_UNWIND_STRICT (unlink, frame, op_ret, op_errno, - preparent, postparent, xdata); - return 0; + STACK_UNWIND_STRICT(unlink, frame, op_ret, op_errno, preparent, postparent, + xdata); + return 0; } - int32_t -cs_unlink (call_frame_t *frame, xlator_t *this, - loc_t *loc, - int32_t flags, - dict_t *xattr_req) +cs_unlink(call_frame_t *frame, xlator_t *this, loc_t *loc, int32_t flags, + dict_t *xattr_req) { - cs_local_t *local = NULL; - int ret = 0; - - local = cs_local_init (this, frame, loc, NULL, GF_FOP_UNLINK); - if (!local) - goto err; - - local->xattr_req = xattr_req ? dict_ref (xattr_req) : dict_new (); - - ret = dict_set_uint32 (local->xattr_req, GF_CS_OBJECT_STATUS, 1); - if (ret) { - gf_msg (this->name, GF_LOG_ERROR, 0, 0, "dict_set failed key:" - " %s", GF_CS_OBJECT_STATUS); - goto err; - } - STACK_WIND (frame, cs_unlink_cbk, - FIRST_CHILD(this), FIRST_CHILD(this)->fops->unlink, - loc, flags, local->xattr_req); - return 0; + cs_local_t *local = NULL; + int ret = 0; + + local = cs_local_init(this, frame, loc, NULL, GF_FOP_UNLINK); + if (!local) + goto err; + + local->xattr_req = xattr_req ? dict_ref(xattr_req) : dict_new(); + + ret = dict_set_uint32(local->xattr_req, GF_CS_OBJECT_STATUS, 1); + if (ret) { + gf_msg(this->name, GF_LOG_ERROR, 0, 0, + "dict_set failed key:" + " %s", + GF_CS_OBJECT_STATUS); + goto err; + } + STACK_WIND(frame, cs_unlink_cbk, FIRST_CHILD(this), + FIRST_CHILD(this)->fops->unlink, loc, flags, local->xattr_req); + return 0; err: - CS_STACK_UNWIND (unlink, frame, -1, errno, NULL, NULL, NULL); - return 0; + CS_STACK_UNWIND(unlink, frame, -1, errno, NULL, NULL, NULL); + return 0; } - int32_t -cs_open_cbk (call_frame_t *frame, void *cookie, xlator_t *this, - int32_t op_ret, int32_t op_errno, fd_t *fd, - dict_t *xdata) +cs_open_cbk(call_frame_t *frame, void *cookie, xlator_t *this, int32_t op_ret, + int32_t op_errno, fd_t *fd, dict_t *xdata) { - int ret = 0; - uint64_t val = 0; - - if (op_ret == 0) { - ret = dict_get_uint64 (xdata, GF_CS_OBJECT_STATUS, &val); - if (!ret) { - ret = __cs_inode_ctx_update (this, fd->inode, val); - if (ret) { - gf_msg (this->name, GF_LOG_ERROR, 0, 0, - "ctx update failed"); - } - } - } else { - cs_inode_ctx_reset (this, fd->inode); + int ret = 0; + uint64_t val = 0; + + if (op_ret == 0) { + ret = dict_get_uint64(xdata, GF_CS_OBJECT_STATUS, &val); + if (!ret) { + ret = __cs_inode_ctx_update(this, fd->inode, val); + if (ret) { + gf_msg(this->name, GF_LOG_ERROR, 0, 0, "ctx update failed"); + } } + } else { + cs_inode_ctx_reset(this, fd->inode); + } - CS_STACK_UNWIND (open, frame, op_ret, op_errno, fd, xdata); - return 0; + CS_STACK_UNWIND(open, frame, op_ret, op_errno, fd, xdata); + return 0; } - int32_t -cs_open (call_frame_t *frame, xlator_t *this, - loc_t *loc, - int32_t flags, - fd_t *fd, - dict_t *xattr_req) +cs_open(call_frame_t *frame, xlator_t *this, loc_t *loc, int32_t flags, + fd_t *fd, dict_t *xattr_req) { - cs_local_t *local = NULL; - int ret = 0; - - local = cs_local_init (this, frame, NULL, fd, GF_FOP_OPEN); - if (!local) - goto err; - - local->xattr_req = xattr_req ? dict_ref (xattr_req) : dict_new (); - - ret = dict_set_uint32 (local->xattr_req, GF_CS_OBJECT_STATUS, 1); - if (ret) { - gf_msg (this->name, GF_LOG_ERROR, 0, 0, "dict_set failed key:" - " %s", GF_CS_OBJECT_STATUS); - goto err; - } - - STACK_WIND (frame, cs_open_cbk, - FIRST_CHILD(this), FIRST_CHILD(this)->fops->open, - loc, flags, fd, local->xattr_req); - return 0; + cs_local_t *local = NULL; + int ret = 0; + + local = cs_local_init(this, frame, NULL, fd, GF_FOP_OPEN); + if (!local) + goto err; + + local->xattr_req = xattr_req ? dict_ref(xattr_req) : dict_new(); + + ret = dict_set_uint32(local->xattr_req, GF_CS_OBJECT_STATUS, 1); + if (ret) { + gf_msg(this->name, GF_LOG_ERROR, 0, 0, + "dict_set failed key:" + " %s", + GF_CS_OBJECT_STATUS); + goto err; + } + + STACK_WIND(frame, cs_open_cbk, FIRST_CHILD(this), + FIRST_CHILD(this)->fops->open, loc, flags, fd, local->xattr_req); + return 0; err: - CS_STACK_UNWIND (open, frame, -1, errno, NULL, NULL); - return 0; + CS_STACK_UNWIND(open, frame, -1, errno, NULL, NULL); + return 0; } - int32_t -cs_fstat_cbk (call_frame_t *frame, void *cookie, xlator_t *this, - int32_t op_ret, int32_t op_errno, struct iatt *buf, - dict_t *xdata) +cs_fstat_cbk(call_frame_t *frame, void *cookie, xlator_t *this, int32_t op_ret, + int32_t op_errno, struct iatt *buf, dict_t *xdata) { - int ret = 0; - uint64_t val = 0; - fd_t *fd = NULL; - cs_local_t *local = NULL; - - local = frame->local; - - fd = local->fd; - - if (op_ret == 0) { - ret = dict_get_uint64 (xdata, GF_CS_OBJECT_STATUS, &val); - if (!ret) { - gf_msg_debug (this->name, 0, "state %ld", val); - ret = __cs_inode_ctx_update (this, fd->inode, val); - if (ret) { - gf_msg (this->name, GF_LOG_ERROR, 0, 0, - "ctx update failed"); - } - } - } else { - cs_inode_ctx_reset (this, fd->inode); + int ret = 0; + uint64_t val = 0; + fd_t *fd = NULL; + cs_local_t *local = NULL; + + local = frame->local; + + fd = local->fd; + + if (op_ret == 0) { + ret = dict_get_uint64(xdata, GF_CS_OBJECT_STATUS, &val); + if (!ret) { + gf_msg_debug(this->name, 0, "state %ld", val); + ret = __cs_inode_ctx_update(this, fd->inode, val); + if (ret) { + gf_msg(this->name, GF_LOG_ERROR, 0, 0, "ctx update failed"); + } } + } else { + cs_inode_ctx_reset(this, fd->inode); + } - CS_STACK_UNWIND (fstat, frame, op_ret, op_errno, buf, xdata); + CS_STACK_UNWIND(fstat, frame, op_ret, op_errno, buf, xdata); - return 0; + return 0; } - int32_t -cs_fstat (call_frame_t *frame, xlator_t *this, fd_t *fd, dict_t *xattr_req) +cs_fstat(call_frame_t *frame, xlator_t *this, fd_t *fd, dict_t *xattr_req) { - cs_local_t *local = NULL; - int ret = 0; + cs_local_t *local = NULL; + int ret = 0; - local = cs_local_init (this, frame, NULL, fd, GF_FOP_FSTAT); - if (!local) - goto err; + local = cs_local_init(this, frame, NULL, fd, GF_FOP_FSTAT); + if (!local) + goto err; - if (fd->inode->ia_type == IA_IFDIR) - goto wind; + if (fd->inode->ia_type == IA_IFDIR) + goto wind; - local->xattr_req = xattr_req ? dict_ref (xattr_req) : dict_new (); + local->xattr_req = xattr_req ? dict_ref(xattr_req) : dict_new(); - ret = dict_set_uint32 (local->xattr_req, GF_CS_OBJECT_STATUS, 1); - if (ret) { - gf_msg (this->name, GF_LOG_ERROR, 0, 0, "dict_set failed key:" - " %s", GF_CS_OBJECT_STATUS); - goto err; - } + ret = dict_set_uint32(local->xattr_req, GF_CS_OBJECT_STATUS, 1); + if (ret) { + gf_msg(this->name, GF_LOG_ERROR, 0, 0, + "dict_set failed key:" + " %s", + GF_CS_OBJECT_STATUS); + goto err; + } wind: - STACK_WIND (frame, cs_fstat_cbk, - FIRST_CHILD(this), FIRST_CHILD(this)->fops->fstat, - fd, local->xattr_req); - return 0; + STACK_WIND(frame, cs_fstat_cbk, FIRST_CHILD(this), + FIRST_CHILD(this)->fops->fstat, fd, local->xattr_req); + return 0; err: - CS_STACK_UNWIND (fstat, frame, -1, errno, NULL, NULL); - return 0; + CS_STACK_UNWIND(fstat, frame, -1, errno, NULL, NULL); + return 0; } cs_local_t * -cs_local_init (xlator_t *this, call_frame_t *frame, loc_t *loc, fd_t *fd, - glusterfs_fop_t fop) +cs_local_init(xlator_t *this, call_frame_t *frame, loc_t *loc, fd_t *fd, + glusterfs_fop_t fop) { - cs_local_t *local = NULL; - int ret = 0; - - local = mem_get0 (this->local_pool); - if (!local) - goto out; - - if (loc) { - ret = loc_copy (&local->loc, loc); - if (ret) - goto out; - } + cs_local_t *local = NULL; + int ret = 0; - if (fd) { - local->fd = fd_ref (fd); - } + local = mem_get0(this->local_pool); + if (!local) + goto out; - local->op_ret = -1; - local->op_errno = EUCLEAN; - local->fop = fop; - local->dloffset = 0; - frame->local = local; - local->locked = _gf_false; - local->call_cnt = 0; + if (loc) { + ret = loc_copy(&local->loc, loc); + if (ret) + goto out; + } + + if (fd) { + local->fd = fd_ref(fd); + } + + local->op_ret = -1; + local->op_errno = EUCLEAN; + local->fop = fop; + local->dloffset = 0; + frame->local = local; + local->locked = _gf_false; + local->call_cnt = 0; out: - if (ret) { - if (local) - mem_put (local); - local = NULL; - } + if (ret) { + if (local) + mem_put(local); + local = NULL; + } - return local; + return local; } call_frame_t * -cs_lock_frame (call_frame_t *parent_frame) +cs_lock_frame(call_frame_t *parent_frame) { - call_frame_t *lock_frame = NULL; + call_frame_t *lock_frame = NULL; - lock_frame = copy_frame (parent_frame); + lock_frame = copy_frame(parent_frame); - if (lock_frame == NULL) - goto out; + if (lock_frame == NULL) + goto out; - set_lk_owner_from_ptr (&lock_frame->root->lk_owner, parent_frame->root); + set_lk_owner_from_ptr(&lock_frame->root->lk_owner, parent_frame->root); out: - return lock_frame; - + return lock_frame; } void -cs_lock_wipe (call_frame_t *lock_frame) +cs_lock_wipe(call_frame_t *lock_frame) { - CS_STACK_DESTROY (lock_frame); + CS_STACK_DESTROY(lock_frame); } - int32_t -cs_inodelk_unlock_cbk (call_frame_t *frame, void *cookie, xlator_t *this, - int32_t op_ret, int32_t op_errno, dict_t *xdata) +cs_inodelk_unlock_cbk(call_frame_t *frame, void *cookie, xlator_t *this, + int32_t op_ret, int32_t op_errno, dict_t *xdata) { - cs_lock_wipe (frame); + cs_lock_wipe(frame); - return 0; + return 0; } int -cs_inodelk_unlock (call_frame_t *main_frame) +cs_inodelk_unlock(call_frame_t *main_frame) { - xlator_t *this = NULL; - struct gf_flock flock = {0,}; - call_frame_t *lock_frame = NULL; - cs_local_t *lock_local = NULL; - cs_local_t *main_local = NULL; - int ret = 0; - - this = main_frame->this; - main_local = main_frame->local; - - lock_frame = cs_lock_frame (main_frame); - if (!lock_frame) - goto out; + xlator_t *this = NULL; + struct gf_flock flock = { + 0, + }; + call_frame_t *lock_frame = NULL; + cs_local_t *lock_local = NULL; + cs_local_t *main_local = NULL; + int ret = 0; - lock_local = cs_local_init (this, lock_frame, NULL, NULL, 0); - if (!lock_local) - goto out; + this = main_frame->this; + main_local = main_frame->local; - ret = cs_build_loc (&lock_local->loc, main_frame); - if (ret) { - goto out; - } + lock_frame = cs_lock_frame(main_frame); + if (!lock_frame) + goto out; - flock.l_type = F_UNLCK; + lock_local = cs_local_init(this, lock_frame, NULL, NULL, 0); + if (!lock_local) + goto out; - main_local->locked = _gf_false; + ret = cs_build_loc(&lock_local->loc, main_frame); + if (ret) { + goto out; + } - STACK_WIND (lock_frame, cs_inodelk_unlock_cbk, FIRST_CHILD (this), - FIRST_CHILD (this)->fops->inodelk, CS_LOCK_DOMAIN, - &lock_local->loc, F_SETLKW, &flock, NULL); + flock.l_type = F_UNLCK; - return 0; + main_local->locked = _gf_false; + + STACK_WIND(lock_frame, cs_inodelk_unlock_cbk, FIRST_CHILD(this), + FIRST_CHILD(this)->fops->inodelk, CS_LOCK_DOMAIN, + &lock_local->loc, F_SETLKW, &flock, NULL); + + return 0; out: - gf_msg (this->name, GF_LOG_ERROR, 0, 0, "Stale lock would be found on" - " server"); + gf_msg(this->name, GF_LOG_ERROR, 0, 0, + "Stale lock would be found on" + " server"); - if (lock_frame) - cs_lock_wipe (lock_frame); + if (lock_frame) + cs_lock_wipe(lock_frame); - return 0; + return 0; } void * -cs_download_task (void *arg) +cs_download_task(void *arg) { - call_frame_t *frame = NULL; - xlator_t *this = NULL; - cs_private_t *priv = NULL; - int ret = -1; - char *sign_req = NULL; - fd_t *fd = NULL; - cs_local_t *local = NULL; - dict_t *dict = NULL; - int *retval = NULL; - - frame = (call_frame_t *)arg; - - this = frame->this; - - priv = this->private; - - retval = GF_CALLOC (1, sizeof(int), gf_common_mt_int); - if (!retval) { - gf_msg (this->name, GF_LOG_ERROR, 0, 0, "insufficient memory"); - ret = -1; - goto out; - } - - if (!priv->stores) { - gf_msg (this->name, GF_LOG_ERROR, 0, 0, "No remote store " - "plugins found"); - ret = -1; - goto out; - } - - local = frame->local; - - - if (local->fd) - fd = fd_anonymous (local->fd->inode); - else - fd = fd_anonymous (local->loc.inode); - - if (!fd) { - gf_msg ("CS", GF_LOG_ERROR, 0, 0, "fd creation failed"); - ret = -1; - goto out; + call_frame_t *frame = NULL; + xlator_t *this = NULL; + cs_private_t *priv = NULL; + int ret = -1; + char *sign_req = NULL; + fd_t *fd = NULL; + cs_local_t *local = NULL; + dict_t *dict = NULL; + int *retval = NULL; + + frame = (call_frame_t *)arg; + + this = frame->this; + + priv = this->private; + + retval = GF_CALLOC(1, sizeof(int), gf_common_mt_int); + if (!retval) { + gf_msg(this->name, GF_LOG_ERROR, 0, 0, "insufficient memory"); + ret = -1; + goto out; + } + + if (!priv->stores) { + gf_msg(this->name, GF_LOG_ERROR, 0, 0, + "No remote store " + "plugins found"); + ret = -1; + goto out; + } + + local = frame->local; + + if (local->fd) + fd = fd_anonymous(local->fd->inode); + else + fd = fd_anonymous(local->loc.inode); + + if (!fd) { + gf_msg("CS", GF_LOG_ERROR, 0, 0, "fd creation failed"); + ret = -1; + goto out; + } + + local->dlfd = fd; + local->dloffset = 0; + + dict = dict_new(); + if (!dict) { + gf_msg(this->name, GF_LOG_ERROR, 0, ENOMEM, + "failed to create " + "dict"); + ret = -1; + goto out; + } + + ret = dict_set_uint32(dict, GF_CS_OBJECT_DOWNLOADING, 1); + if (ret) { + gf_msg(this->name, GF_LOG_ERROR, 0, 0, "dict_set failed"); + ret = -1; + goto out; + } + + ret = syncop_fsetxattr(this, local->fd, dict, 0, NULL, NULL); + if (ret) { + gf_msg(this->name, GF_LOG_ERROR, 0, 0, + "fsetxattr failed " + "key %s", + GF_CS_OBJECT_DOWNLOADING); + ret = -1; + goto out; + } + /*this calling method is for per volume setting */ + ret = priv->stores->dlfop(frame, priv->stores->config); + if (ret) { + gf_msg(this->name, GF_LOG_ERROR, 0, 0, + "download failed" + ", remotepath: %s", + local->remotepath); + + /*using dlfd as it is anonymous and have RDWR flag*/ + ret = syncop_ftruncate(FIRST_CHILD(this), local->dlfd, 0, NULL, NULL, + NULL, NULL); + if (ret) { + gf_msg(this->name, GF_LOG_ERROR, 0, -ret, "ftruncate failed"); + } else { + gf_msg_debug(this->name, 0, "ftruncate succeed"); } - local->dlfd = fd; - local->dloffset = 0; - - dict = dict_new (); - if (!dict) { - gf_msg (this->name, GF_LOG_ERROR, 0, ENOMEM, "failed to create " - "dict"); - ret = -1; - goto out; - } + ret = -1; + goto out; + } else { + gf_msg(this->name, GF_LOG_INFO, 0, 0, + "download success, path" + " : %s", + local->remotepath); - ret = dict_set_uint32 (dict, GF_CS_OBJECT_DOWNLOADING, 1); + ret = syncop_fremovexattr(this, local->fd, GF_CS_OBJECT_REMOTE, NULL, + NULL); if (ret) { - gf_msg (this->name, GF_LOG_ERROR, 0, 0, "dict_set failed"); - ret = -1; - goto out; + gf_msg(this->name, GF_LOG_ERROR, 0, -ret, + "removexattr failed, remotexattr"); + ret = -1; + goto out; + } else { + gf_msg_debug(this->name, 0, + "fremovexattr success, " + "path : %s", + local->remotepath); } - ret = syncop_fsetxattr (this, local->fd, dict, 0, NULL, NULL); - if (ret) { - gf_msg (this->name, GF_LOG_ERROR, 0, 0, "fsetxattr failed " - "key %s", GF_CS_OBJECT_DOWNLOADING); - ret = -1; - goto out; - } - /*this calling method is for per volume setting */ - ret = priv->stores->dlfop (frame, priv->stores->config); + ret = syncop_fremovexattr(this, local->fd, GF_CS_OBJECT_DOWNLOADING, + NULL, NULL); if (ret) { - gf_msg (this->name, GF_LOG_ERROR, 0, 0, "download failed" - ", remotepath: %s", local->remotepath); - - /*using dlfd as it is anonymous and have RDWR flag*/ - ret = syncop_ftruncate (FIRST_CHILD (this), local->dlfd, 0, - NULL, NULL, NULL, NULL); - if (ret) { - gf_msg (this->name, GF_LOG_ERROR, 0, -ret, - "ftruncate failed"); - } else { - gf_msg_debug (this->name, 0, "ftruncate succeed"); - } - - ret = -1; - goto out; + gf_msg(this->name, GF_LOG_ERROR, 0, -ret, + "removexattr failed, downloading xattr, path %s", + local->remotepath); + ret = -1; + goto out; } else { - gf_msg (this->name, GF_LOG_INFO, 0, 0, "download success, path" - " : %s", local->remotepath); - - ret = syncop_fremovexattr (this, local->fd, - GF_CS_OBJECT_REMOTE, NULL, NULL); - if (ret) { - gf_msg (this->name, GF_LOG_ERROR, 0, -ret, - "removexattr failed, remotexattr"); - ret = -1; - goto out; - } else { - gf_msg_debug (this->name, 0, "fremovexattr success, " - "path : %s", local->remotepath); - } - - ret = syncop_fremovexattr (this, local->fd, - GF_CS_OBJECT_DOWNLOADING, NULL, - NULL); - if (ret) { - gf_msg (this->name, GF_LOG_ERROR, 0, -ret, - "removexattr failed, downloading xattr, path %s" - , local->remotepath); - ret = -1; - goto out; - } else { - gf_msg_debug (this->name, 0, "fremovexattr success" - " path %s", local->remotepath); - } + gf_msg_debug(this->name, 0, + "fremovexattr success" + " path %s", + local->remotepath); } + } out: - GF_FREE (sign_req); - - if (dict) - dict_unref (dict); - - if (fd) { - fd_unref (fd); - local->dlfd = NULL; - } - - if (retval) { - *retval = ret; - pthread_exit (retval); - } else { - pthread_exit (&ret); - } + GF_FREE(sign_req); + + if (dict) + dict_unref(dict); + + if (fd) { + fd_unref(fd); + local->dlfd = NULL; + } + + if (retval) { + *retval = ret; + pthread_exit(retval); + } else { + pthread_exit(&ret); + } } int -cs_download (call_frame_t *frame) +cs_download(call_frame_t *frame) { - int *retval = NULL; - int ret = 0; - pthread_t dthread; - cs_local_t *local = NULL; - xlator_t *this = NULL; + int *retval = NULL; + int ret = 0; + pthread_t dthread; + cs_local_t *local = NULL; + xlator_t *this = NULL; - local = frame->local; - this = frame->this; + local = frame->local; + this = frame->this; - if (!local->remotepath) { - ret = -1; - gf_msg (this->name, GF_LOG_ERROR, 0, 0, "remote path not" - " available. Check posix logs to resolve"); - goto out; - } + if (!local->remotepath) { + ret = -1; + gf_msg(this->name, GF_LOG_ERROR, 0, 0, + "remote path not" + " available. Check posix logs to resolve"); + goto out; + } - ret = gf_thread_create (&dthread, NULL, &cs_download_task, - (void *)frame, "downloadthread"); + ret = gf_thread_create(&dthread, NULL, &cs_download_task, (void *)frame, + "downloadthread"); - pthread_join (dthread, (void **)&retval); + pthread_join(dthread, (void **)&retval); - ret = *retval; + ret = *retval; out: - if (retval) - GF_FREE (retval); + if (retval) + GF_FREE(retval); - return ret; + return ret; } int -cs_stat_check_cbk (call_frame_t *frame, void *cookie, xlator_t *this, - int op_ret, int op_errno, struct iatt *stbuf, dict_t *xdata) +cs_stat_check_cbk(call_frame_t *frame, void *cookie, xlator_t *this, int op_ret, + int op_errno, struct iatt *stbuf, dict_t *xdata) { - cs_local_t *local = NULL; - call_stub_t *stub = NULL; - char *filepath = NULL; - int ret = 0; - inode_t *inode = NULL; - uint64_t val = 0; - - local = frame->local; - - if (op_ret == -1) { - local->op_ret = op_ret; - local->op_errno = op_errno; - gf_msg (this->name, GF_LOG_ERROR, 0, op_errno, - "stat check failed"); - goto err; - } else { - if (local->fd) - inode = local->fd->inode; - else - inode = local->loc.inode; - - if (!inode) { - local->op_ret = -1; - local->op_errno = EINVAL; - gf_msg (this->name, GF_LOG_ERROR, 0, 0, "null inode " - "returned"); - goto err; - } - - ret = dict_get_uint64 (xdata, GF_CS_OBJECT_STATUS, &val); - if (ret == 0) { - if (val == GF_CS_ERROR) { - cs_inode_ctx_reset (this, inode); - local->op_ret = -1; - local->op_errno = EIO; - gf_msg (this->name, GF_LOG_ERROR, 0, 0, - "status = GF_CS_ERROR. failed to get " - " file state"); - goto err; - } else { - ret = __cs_inode_ctx_update (this, inode, val); - gf_msg_debug (this->name, 0, "status : %lu", - val); - if (ret) { - gf_msg (this->name, GF_LOG_ERROR, 0, 0, - "ctx update failed"); - local->op_ret = -1; - local->op_errno = ENOMEM; - goto err; - } - } - } else { - gf_msg_debug (this->name, 0, - "status not found in dict"); - local->op_ret = -1; - local->op_errno = ENOMEM; - goto err; - } + cs_local_t *local = NULL; + call_stub_t *stub = NULL; + char *filepath = NULL; + int ret = 0; + inode_t *inode = NULL; + uint64_t val = 0; + + local = frame->local; + + if (op_ret == -1) { + local->op_ret = op_ret; + local->op_errno = op_errno; + gf_msg(this->name, GF_LOG_ERROR, 0, op_errno, "stat check failed"); + goto err; + } else { + if (local->fd) + inode = local->fd->inode; + else + inode = local->loc.inode; + + if (!inode) { + local->op_ret = -1; + local->op_errno = EINVAL; + gf_msg(this->name, GF_LOG_ERROR, 0, 0, + "null inode " + "returned"); + goto err; + } - ret = dict_get_str (xdata, GF_CS_OBJECT_REMOTE, &filepath); - if (filepath) { - gf_msg_debug (this->name, 0, "filepath returned %s", - filepath); - local->remotepath = gf_strdup (filepath); - if (!local->remotepath) { - local->op_ret = -1; - local->op_errno = ENOMEM; - goto err; - } - } else { - gf_msg_debug (this->name, 0, "NULL filepath"); + ret = dict_get_uint64(xdata, GF_CS_OBJECT_STATUS, &val); + if (ret == 0) { + if (val == GF_CS_ERROR) { + cs_inode_ctx_reset(this, inode); + local->op_ret = -1; + local->op_errno = EIO; + gf_msg(this->name, GF_LOG_ERROR, 0, 0, + "status = GF_CS_ERROR. failed to get " + " file state"); + goto err; + } else { + ret = __cs_inode_ctx_update(this, inode, val); + gf_msg_debug(this->name, 0, "status : %lu", val); + if (ret) { + gf_msg(this->name, GF_LOG_ERROR, 0, 0, "ctx update failed"); + local->op_ret = -1; + local->op_errno = ENOMEM; + goto err; } + } + } else { + gf_msg_debug(this->name, 0, "status not found in dict"); + local->op_ret = -1; + local->op_errno = ENOMEM; + goto err; + } - local->op_ret = 0; - local->xattr_rsp = dict_ref (xdata); - memcpy (&local->stbuf, stbuf, sizeof (struct iatt)); + ret = dict_get_str(xdata, GF_CS_OBJECT_REMOTE, &filepath); + if (filepath) { + gf_msg_debug(this->name, 0, "filepath returned %s", filepath); + local->remotepath = gf_strdup(filepath); + if (!local->remotepath) { + local->op_ret = -1; + local->op_errno = ENOMEM; + goto err; + } + } else { + gf_msg_debug(this->name, 0, "NULL filepath"); } - stub = local->stub; - local->stub = NULL; - call_resume (stub); + local->op_ret = 0; + local->xattr_rsp = dict_ref(xdata); + memcpy(&local->stbuf, stbuf, sizeof(struct iatt)); + } - return 0; + stub = local->stub; + local->stub = NULL; + call_resume(stub); + + return 0; err: - cs_inodelk_unlock (frame); + cs_inodelk_unlock(frame); - cs_common_cbk (frame); + cs_common_cbk(frame); - return 0; + return 0; } int -cs_do_stat_check (call_frame_t *main_frame) +cs_do_stat_check(call_frame_t *main_frame) { - cs_local_t *local = NULL; - xlator_t *this = NULL; - int ret = 0; - - local = main_frame->local; - this = main_frame->this; - - ret = dict_set_uint32 (local->xattr_req, GF_CS_OBJECT_REPAIR, 256); - if (ret) { - gf_msg (this->name, GF_LOG_ERROR, 0, 0, "dict_set failed"); - goto err; - } - - if (local->fd) { - STACK_WIND (main_frame, cs_stat_check_cbk, FIRST_CHILD (this), - FIRST_CHILD (this)->fops->fstat, local->fd, - local->xattr_req); - } else { - STACK_WIND (main_frame, cs_stat_check_cbk, FIRST_CHILD (this), - FIRST_CHILD (this)->fops->stat, &local->loc, - local->xattr_req); - } - - return 0; + cs_local_t *local = NULL; + xlator_t *this = NULL; + int ret = 0; + + local = main_frame->local; + this = main_frame->this; + + ret = dict_set_uint32(local->xattr_req, GF_CS_OBJECT_REPAIR, 256); + if (ret) { + gf_msg(this->name, GF_LOG_ERROR, 0, 0, "dict_set failed"); + goto err; + } + + if (local->fd) { + STACK_WIND(main_frame, cs_stat_check_cbk, FIRST_CHILD(this), + FIRST_CHILD(this)->fops->fstat, local->fd, local->xattr_req); + } else { + STACK_WIND(main_frame, cs_stat_check_cbk, FIRST_CHILD(this), + FIRST_CHILD(this)->fops->stat, &local->loc, + local->xattr_req); + } + + return 0; err: - cs_inodelk_unlock (main_frame); + cs_inodelk_unlock(main_frame); - cs_common_cbk (main_frame); + cs_common_cbk(main_frame); - return 0; + return 0; } void -cs_common_cbk (call_frame_t *frame) +cs_common_cbk(call_frame_t *frame) { - glusterfs_fop_t fop = -1; - cs_local_t *local = NULL; + glusterfs_fop_t fop = -1; + cs_local_t *local = NULL; - local = frame->local; + local = frame->local; - fop = local->fop; + fop = local->fop; - /*Note: Only the failure case needs to be handled here. Since for - * successful stat check the fop will resume anyway. The unwind can - * happen from the fop_cbk and each cbk can unlock the inodelk in case - * a lock was taken before. The lock status can be stored in frame */ + /*Note: Only the failure case needs to be handled here. Since for + * successful stat check the fop will resume anyway. The unwind can + * happen from the fop_cbk and each cbk can unlock the inodelk in case + * a lock was taken before. The lock status can be stored in frame */ - /* for failure case */ + /* for failure case */ - /*TODO: add other fops*/ - switch (fop) { + /*TODO: add other fops*/ + switch (fop) { case GF_FOP_WRITE: - CS_STACK_UNWIND (writev, frame, local->op_ret, - local->op_errno, NULL, NULL, NULL); - break; + CS_STACK_UNWIND(writev, frame, local->op_ret, local->op_errno, NULL, + NULL, NULL); + break; case GF_FOP_SETXATTR: - CS_STACK_UNWIND (setxattr, frame, local->op_ret, - local->op_errno, NULL); - break; + CS_STACK_UNWIND(setxattr, frame, local->op_ret, local->op_errno, + NULL); + break; case GF_FOP_READ: - CS_STACK_UNWIND (readv, frame, local->op_ret, - local->op_errno, NULL, 0, NULL, NULL, - NULL); - break; + CS_STACK_UNWIND(readv, frame, local->op_ret, local->op_errno, NULL, + 0, NULL, NULL, NULL); + break; case GF_FOP_FTRUNCATE: - CS_STACK_UNWIND (ftruncate, frame, local->op_ret, - local->op_errno, NULL, NULL, NULL); - break; - + CS_STACK_UNWIND(ftruncate, frame, local->op_ret, local->op_errno, + NULL, NULL, NULL); + break; default: - break; - } + break; + } - return; + return; } int -cs_blocking_inodelk_cbk (call_frame_t *lock_frame, void *cookie, xlator_t *this, - int32_t op_ret, int32_t op_errno, dict_t *xdata) +cs_blocking_inodelk_cbk(call_frame_t *lock_frame, void *cookie, xlator_t *this, + int32_t op_ret, int32_t op_errno, dict_t *xdata) { - cs_local_t *main_local = NULL; - call_frame_t *main_frame = NULL; - cs_local_t *lock_local = NULL; + cs_local_t *main_local = NULL; + call_frame_t *main_frame = NULL; + cs_local_t *lock_local = NULL; - lock_local = lock_frame->local; + lock_local = lock_frame->local; - main_frame = lock_local->main_frame; - main_local = main_frame->local; + main_frame = lock_local->main_frame; + main_local = main_frame->local; - if (op_ret) { - gf_msg (this->name, GF_LOG_ERROR, 0, 0, "inodelk failed"); - main_local->op_errno = op_errno; - main_local->op_ret = op_ret; - goto err; - } + if (op_ret) { + gf_msg(this->name, GF_LOG_ERROR, 0, 0, "inodelk failed"); + main_local->op_errno = op_errno; + main_local->op_ret = op_ret; + goto err; + } - main_local->locked = _gf_true; + main_local->locked = _gf_true; - cs_lock_wipe (lock_frame); + cs_lock_wipe(lock_frame); - cs_do_stat_check (main_frame); + cs_do_stat_check(main_frame); - return 0; + return 0; err: - cs_common_cbk (main_frame); + cs_common_cbk(main_frame); - cs_lock_wipe (lock_frame); + cs_lock_wipe(lock_frame); - return 0; + return 0; } int -cs_build_loc (loc_t *loc, call_frame_t *frame) +cs_build_loc(loc_t *loc, call_frame_t *frame) { - cs_local_t *local = NULL; - int ret = -1; + cs_local_t *local = NULL; + int ret = -1; - local = frame->local; + local = frame->local; - if (local->fd) { - loc->inode = inode_ref (local->fd->inode); - if (loc->inode) { - gf_uuid_copy (loc->gfid, loc->inode->gfid); - ret = 0; - goto out; - } else { - ret = -1; - goto out; - } + if (local->fd) { + loc->inode = inode_ref(local->fd->inode); + if (loc->inode) { + gf_uuid_copy(loc->gfid, loc->inode->gfid); + ret = 0; + goto out; } else { - loc->inode = inode_ref (local->loc.inode); - if (loc->inode) { - gf_uuid_copy (loc->gfid, loc->inode->gfid); - ret = 0; - goto out; - } else { - ret = -1; - goto out; - } + ret = -1; + goto out; + } + } else { + loc->inode = inode_ref(local->loc.inode); + if (loc->inode) { + gf_uuid_copy(loc->gfid, loc->inode->gfid); + ret = 0; + goto out; + } else { + ret = -1; + goto out; } + } out: - return ret; + return ret; } int -cs_blocking_inodelk (call_frame_t *parent_frame) +cs_blocking_inodelk(call_frame_t *parent_frame) { - call_frame_t *lock_frame = NULL; - cs_local_t *lock_local = NULL; - xlator_t *this = NULL; - struct gf_flock flock = {0,}; - int ret = 0; - - lock_frame = cs_lock_frame (parent_frame); - if (!lock_frame) { - gf_msg (this->name, GF_LOG_ERROR, 0, 0, "insuffcient memory"); - goto err; - } - - this = parent_frame->this; - - lock_local = cs_local_init (this, lock_frame, NULL, NULL, 0); - if (!lock_local) { - gf_msg (this->name, GF_LOG_ERROR, 0, 0, "local init failed"); - goto err; - } - - lock_local->main_frame = parent_frame; - - flock.l_type = F_WRLCK; - - ret = cs_build_loc (&lock_local->loc, parent_frame); - if (ret) { - gf_msg (this->name, GF_LOG_ERROR, 0, 0, "build_loc failed"); - goto err; - } - - STACK_WIND (lock_frame, cs_blocking_inodelk_cbk, FIRST_CHILD (this), - FIRST_CHILD (this)->fops->inodelk, CS_LOCK_DOMAIN, - &lock_local->loc, F_SETLKW, &flock, NULL); - - return 0; + call_frame_t *lock_frame = NULL; + cs_local_t *lock_local = NULL; + xlator_t *this = NULL; + struct gf_flock flock = { + 0, + }; + int ret = 0; + + lock_frame = cs_lock_frame(parent_frame); + if (!lock_frame) { + gf_msg(this->name, GF_LOG_ERROR, 0, 0, "insuffcient memory"); + goto err; + } + + this = parent_frame->this; + + lock_local = cs_local_init(this, lock_frame, NULL, NULL, 0); + if (!lock_local) { + gf_msg(this->name, GF_LOG_ERROR, 0, 0, "local init failed"); + goto err; + } + + lock_local->main_frame = parent_frame; + + flock.l_type = F_WRLCK; + + ret = cs_build_loc(&lock_local->loc, parent_frame); + if (ret) { + gf_msg(this->name, GF_LOG_ERROR, 0, 0, "build_loc failed"); + goto err; + } + + STACK_WIND(lock_frame, cs_blocking_inodelk_cbk, FIRST_CHILD(this), + FIRST_CHILD(this)->fops->inodelk, CS_LOCK_DOMAIN, + &lock_local->loc, F_SETLKW, &flock, NULL); + + return 0; err: - if (lock_frame) - cs_lock_wipe (lock_frame); + if (lock_frame) + cs_lock_wipe(lock_frame); - return -1; + return -1; } int -locate_and_execute (call_frame_t *frame) +locate_and_execute(call_frame_t *frame) { - int ret = 0; + int ret = 0; - ret = cs_blocking_inodelk (frame); + ret = cs_blocking_inodelk(frame); - if (ret) - return -1; - else - return 0; + if (ret) + return -1; + else + return 0; } int32_t -cs_resume_truncate (call_frame_t *frame, xlator_t *this, loc_t *loc, - off_t offset, dict_t *xattr_req) +cs_resume_truncate(call_frame_t *frame, xlator_t *this, loc_t *loc, + off_t offset, dict_t *xattr_req) { - cs_local_t *local = NULL; - int ret = 0; + cs_local_t *local = NULL; + int ret = 0; - local = frame->local; + local = frame->local; - ret = cs_resume_postprocess (this, frame, loc->inode); - if (ret) { - goto unwind; - } + ret = cs_resume_postprocess(this, frame, loc->inode); + if (ret) { + goto unwind; + } - cs_inodelk_unlock (frame); + cs_inodelk_unlock(frame); - STACK_WIND (frame, cs_truncate_cbk, - FIRST_CHILD(this), FIRST_CHILD(this)->fops->truncate, - loc, offset, local->xattr_req); + STACK_WIND(frame, cs_truncate_cbk, FIRST_CHILD(this), + FIRST_CHILD(this)->fops->truncate, loc, offset, + local->xattr_req); - return 0; + return 0; unwind: - cs_inodelk_unlock (frame); + cs_inodelk_unlock(frame); - cs_common_cbk (frame); + cs_common_cbk(frame); - return 0; + return 0; } - int32_t -cs_resume_setxattr (call_frame_t *frame, xlator_t *this, loc_t *loc, - dict_t *dict, int32_t flags, dict_t *xdata) +cs_resume_setxattr(call_frame_t *frame, xlator_t *this, loc_t *loc, + dict_t *dict, int32_t flags, dict_t *xdata) { - cs_local_t *local = NULL; - cs_inode_ctx_t *ctx = NULL; - gf_cs_obj_state state = GF_CS_ERROR; - - local = frame->local; - - __cs_inode_ctx_get (this, loc->inode, &ctx); - - state = __cs_get_file_state (this, loc->inode, ctx); - - if (state == GF_CS_ERROR) { - /* file is already remote */ - local->op_ret = -1; - local->op_errno = EINVAL; - gf_msg (this->name, GF_LOG_WARNING, 0, 0, - "file %s , could not figure file state", loc->path); - goto unwind; - } - - - if (state == GF_CS_REMOTE) { - /* file is already remote */ - local->op_ret = -1; - local->op_errno = EINVAL; - gf_msg (this->name, GF_LOG_WARNING, 0, EINVAL, - "file %s is already remote", loc->path); - goto unwind; - } - - if (state == GF_CS_DOWNLOADING) { - gf_msg (this->name, GF_LOG_WARNING, 0, 0, - " file is in downloading state."); - local->op_ret = -1; - local->op_errno = EINVAL; - goto unwind; - } - - STACK_WIND (frame, cs_setxattr_cbk, FIRST_CHILD(this), - FIRST_CHILD(this)->fops->setxattr, loc, dict, flags, - local->xattr_req); - - return 0; + cs_local_t *local = NULL; + cs_inode_ctx_t *ctx = NULL; + gf_cs_obj_state state = GF_CS_ERROR; + + local = frame->local; + + __cs_inode_ctx_get(this, loc->inode, &ctx); + + state = __cs_get_file_state(this, loc->inode, ctx); + + if (state == GF_CS_ERROR) { + /* file is already remote */ + local->op_ret = -1; + local->op_errno = EINVAL; + gf_msg(this->name, GF_LOG_WARNING, 0, 0, + "file %s , could not figure file state", loc->path); + goto unwind; + } + + if (state == GF_CS_REMOTE) { + /* file is already remote */ + local->op_ret = -1; + local->op_errno = EINVAL; + gf_msg(this->name, GF_LOG_WARNING, 0, EINVAL, + "file %s is already remote", loc->path); + goto unwind; + } + + if (state == GF_CS_DOWNLOADING) { + gf_msg(this->name, GF_LOG_WARNING, 0, 0, + " file is in downloading state."); + local->op_ret = -1; + local->op_errno = EINVAL; + goto unwind; + } + + STACK_WIND(frame, cs_setxattr_cbk, FIRST_CHILD(this), + FIRST_CHILD(this)->fops->setxattr, loc, dict, flags, + local->xattr_req); + + return 0; unwind: - cs_inodelk_unlock (frame); + cs_inodelk_unlock(frame); - cs_common_cbk (frame); + cs_common_cbk(frame); - return 0; + return 0; } - - - gf_cs_obj_state -__cs_get_file_state (xlator_t *this, inode_t *inode, cs_inode_ctx_t *ctx) +__cs_get_file_state(xlator_t *this, inode_t *inode, cs_inode_ctx_t *ctx) { - gf_cs_obj_state state = -1; + gf_cs_obj_state state = -1; - if (!ctx) - return GF_CS_ERROR; + if (!ctx) + return GF_CS_ERROR; - LOCK (&inode->lock); - { - state = ctx->state; - } - UNLOCK (&inode->lock); + LOCK(&inode->lock); + { + state = ctx->state; + } + UNLOCK(&inode->lock); - return state; + return state; } void -__cs_inode_ctx_get (xlator_t *this, inode_t *inode, cs_inode_ctx_t **ctx) +__cs_inode_ctx_get(xlator_t *this, inode_t *inode, cs_inode_ctx_t **ctx) { - uint64_t ctxint = 0; - int ret = 0; + uint64_t ctxint = 0; + int ret = 0; - LOCK (&inode->lock); - { - ret = __inode_ctx_get (inode, this, &ctxint); - } - UNLOCK (&inode->lock); + LOCK(&inode->lock); + { + ret = __inode_ctx_get(inode, this, &ctxint); + } + UNLOCK(&inode->lock); - if (ret) - *ctx = NULL; - else - *ctx = (cs_inode_ctx_t *)ctxint; + if (ret) + *ctx = NULL; + else + *ctx = (cs_inode_ctx_t *)ctxint; - return; + return; } int -__cs_inode_ctx_update (xlator_t *this, inode_t *inode, uint64_t val) +__cs_inode_ctx_update(xlator_t *this, inode_t *inode, uint64_t val) { - cs_inode_ctx_t *ctx = NULL; - uint64_t ctxint = 0; - int ret = 0; + cs_inode_ctx_t *ctx = NULL; + uint64_t ctxint = 0; + int ret = 0; - LOCK (&inode->lock); - { - ret = __inode_ctx_get (inode, this, &ctxint); + LOCK(&inode->lock); + { + ret = __inode_ctx_get(inode, this, &ctxint); if (ret) { - ctx = GF_CALLOC (1, sizeof (*ctx), gf_cs_mt_cs_inode_ctx_t); - if (!ctx) { - gf_msg (this->name, GF_LOG_ERROR, 0, 0, - "ctx allocation failed"); - ret = -1; - goto out; - } + ctx = GF_CALLOC(1, sizeof(*ctx), gf_cs_mt_cs_inode_ctx_t); + if (!ctx) { + gf_msg(this->name, GF_LOG_ERROR, 0, 0, "ctx allocation failed"); + ret = -1; + goto out; + } - ctx->state = val; + ctx->state = val; - ctxint = (uint64_t) ctx; + ctxint = (uint64_t)ctx; - ret = __inode_ctx_set (inode, this, &ctxint); - if (ret) { - GF_FREE (ctx); - goto out; - } + ret = __inode_ctx_set(inode, this, &ctxint); + if (ret) { + GF_FREE(ctx); + goto out; + } } else { - ctx = (cs_inode_ctx_t *) ctxint; - - ctx->state = val; - } + ctx = (cs_inode_ctx_t *)ctxint; + ctx->state = val; } + } out: - UNLOCK (&inode->lock); + UNLOCK(&inode->lock); - return ret; + return ret; } int -cs_inode_ctx_reset (xlator_t *this, inode_t *inode) +cs_inode_ctx_reset(xlator_t *this, inode_t *inode) { - cs_inode_ctx_t *ctx = NULL; - uint64_t ctxint = 0; + cs_inode_ctx_t *ctx = NULL; + uint64_t ctxint = 0; - inode_ctx_del (inode, this, &ctxint); - if (!ctxint) { - return 0; - } + inode_ctx_del(inode, this, &ctxint); + if (!ctxint) { + return 0; + } - ctx = (cs_inode_ctx_t *)ctxint; + ctx = (cs_inode_ctx_t *)ctxint; - GF_FREE (ctx); - return 0; + GF_FREE(ctx); + return 0; } int -cs_resume_postprocess (xlator_t *this, call_frame_t *frame, inode_t *inode) +cs_resume_postprocess(xlator_t *this, call_frame_t *frame, inode_t *inode) { - cs_local_t *local = NULL; - gf_cs_obj_state state = -1; - cs_inode_ctx_t *ctx = NULL; - int ret = 0; - - local = frame->local; - if (!local) { - ret = -1; - goto out; - } - - __cs_inode_ctx_get (this, inode, &ctx); - - state = __cs_get_file_state (this, inode, ctx); - if (state == GF_CS_ERROR) { - gf_msg (this->name, GF_LOG_ERROR, 0, 0, "status is GF_CS_ERROR." - " Aborting write"); - local->op_ret = -1; - local->op_errno = EREMOTE; - ret = -1; - goto out; - } - - if (state == GF_CS_REMOTE || state == GF_CS_DOWNLOADING) { - gf_msg_debug (this->name, 0, "status is %d", state); - ret = cs_download (frame); - if (ret == 0) { - gf_msg_debug (this->name, 0, "Winding for Final Write"); - } else { - gf_msg (this->name, GF_LOG_ERROR, 0, 0, - " download failed, unwinding writev"); - local->op_ret = -1; - local->op_errno = EREMOTE; - ret = -1; - } + cs_local_t *local = NULL; + gf_cs_obj_state state = -1; + cs_inode_ctx_t *ctx = NULL; + int ret = 0; + + local = frame->local; + if (!local) { + ret = -1; + goto out; + } + + __cs_inode_ctx_get(this, inode, &ctx); + + state = __cs_get_file_state(this, inode, ctx); + if (state == GF_CS_ERROR) { + gf_msg(this->name, GF_LOG_ERROR, 0, 0, + "status is GF_CS_ERROR." + " Aborting write"); + local->op_ret = -1; + local->op_errno = EREMOTE; + ret = -1; + goto out; + } + + if (state == GF_CS_REMOTE || state == GF_CS_DOWNLOADING) { + gf_msg_debug(this->name, 0, "status is %d", state); + ret = cs_download(frame); + if (ret == 0) { + gf_msg_debug(this->name, 0, "Winding for Final Write"); + } else { + gf_msg(this->name, GF_LOG_ERROR, 0, 0, + " download failed, unwinding writev"); + local->op_ret = -1; + local->op_errno = EREMOTE; + ret = -1; } + } out: - return ret; + return ret; } int32_t -cs_fdctx_to_dict (xlator_t *this, - fd_t *fd, - dict_t *dict) +cs_fdctx_to_dict(xlator_t *this, fd_t *fd, dict_t *dict) { - return 0; + return 0; } - int32_t -cs_inode (xlator_t *this) +cs_inode(xlator_t *this) { - return 0; + return 0; } - int32_t -cs_inode_to_dict (xlator_t *this, - dict_t *dict) +cs_inode_to_dict(xlator_t *this, dict_t *dict) { - return 0; + return 0; } - int32_t -cs_history (xlator_t *this) +cs_history(xlator_t *this) { - return 0; + return 0; } - int32_t -cs_fd (xlator_t *this) +cs_fd(xlator_t *this) { - return 0; + return 0; } - int32_t -cs_fd_to_dict (xlator_t *this, - dict_t *dict) +cs_fd_to_dict(xlator_t *this, dict_t *dict) { - return 0; + return 0; } - int32_t -cs_fdctx (xlator_t *this, - fd_t *fd) +cs_fdctx(xlator_t *this, fd_t *fd) { - return 0; + return 0; } - int32_t -cs_inodectx (xlator_t *this, - inode_t *ino) +cs_inodectx(xlator_t *this, inode_t *ino) { - return 0; + return 0; } - int32_t -cs_inodectx_to_dict (xlator_t *this, - inode_t *ino, - dict_t *dict) +cs_inodectx_to_dict(xlator_t *this, inode_t *ino, dict_t *dict) { - return 0; + return 0; } - int32_t -cs_priv_to_dict (xlator_t *this, - dict_t *dict, char *brickname) +cs_priv_to_dict(xlator_t *this, dict_t *dict, char *brickname) { - return 0; + return 0; } - int32_t -cs_priv (xlator_t *this) +cs_priv(xlator_t *this) { - return 0; + return 0; } int -cs_notify (xlator_t *this, int event, void *data, ...) +cs_notify(xlator_t *this, int event, void *data, ...) { - return default_notify (this, event, data); + return default_notify(this, event, data); } - struct xlator_fops cs_fops = { - .stat = cs_stat, - .readdirp = cs_readdirp, - .truncate = cs_truncate, - .seek = cs_seek, - .statfs = cs_statfs, - .fallocate = cs_fallocate, - .discard = cs_discard, - .getxattr = cs_getxattr, - .writev = cs_writev, - .setxattr = cs_setxattr, - .fgetxattr = cs_fgetxattr, - .lookup = cs_lookup, - .fsetxattr = cs_fsetxattr, - .readv = cs_readv, - .ftruncate = cs_ftruncate, - .rchecksum = cs_rchecksum, - .unlink = cs_unlink, - .open = cs_open, - .fstat = cs_fstat, - .zerofill = cs_zerofill, + .stat = cs_stat, + .readdirp = cs_readdirp, + .truncate = cs_truncate, + .seek = cs_seek, + .statfs = cs_statfs, + .fallocate = cs_fallocate, + .discard = cs_discard, + .getxattr = cs_getxattr, + .writev = cs_writev, + .setxattr = cs_setxattr, + .fgetxattr = cs_fgetxattr, + .lookup = cs_lookup, + .fsetxattr = cs_fsetxattr, + .readv = cs_readv, + .ftruncate = cs_ftruncate, + .rchecksum = cs_rchecksum, + .unlink = cs_unlink, + .open = cs_open, + .fstat = cs_fstat, + .zerofill = cs_zerofill, }; -struct xlator_cbks cs_cbks = { -}; +struct xlator_cbks cs_cbks = {}; struct xlator_dumpops cs_dumpops = { - .fdctx_to_dict = cs_fdctx_to_dict, - .inode = cs_inode, - .inode_to_dict = cs_inode_to_dict, - .history = cs_history, - .fd = cs_fd, - .fd_to_dict = cs_fd_to_dict, - .fdctx = cs_fdctx, - .inodectx = cs_inodectx, - .inodectx_to_dict = cs_inodectx_to_dict, - .priv_to_dict = cs_priv_to_dict, - .priv = cs_priv, + .fdctx_to_dict = cs_fdctx_to_dict, + .inode = cs_inode, + .inode_to_dict = cs_inode_to_dict, + .history = cs_history, + .fd = cs_fd, + .fd_to_dict = cs_fd_to_dict, + .fdctx = cs_fdctx, + .inodectx = cs_inodectx, + .inodectx_to_dict = cs_inodectx_to_dict, + .priv_to_dict = cs_priv_to_dict, + .priv = cs_priv, }; struct volume_options cs_options[] = { - { .key = {"cloudsync-storetype"}, - .type = GF_OPTION_TYPE_STR, - .description = "Defines which remote store is enabled" - }, - { .key = {NULL} }, + {.key = {"cloudsync-storetype"}, + .type = GF_OPTION_TYPE_STR, + .description = "Defines which remote store is enabled"}, + {.key = {NULL}}, }; xlator_api_t xlator_api = { - .init = cs_init, - .fini = cs_fini, - .notify = cs_notify, - .reconfigure = cs_reconfigure, - .mem_acct_init = cs_mem_acct_init, - .dumpops = &cs_dumpops, - .fops = &cs_fops, - .cbks = &cs_cbks, - .options = cs_options, - .identifier = "cloudsync", - .category = GF_TECH_PREVIEW, + .init = cs_init, + .fini = cs_fini, + .notify = cs_notify, + .reconfigure = cs_reconfigure, + .mem_acct_init = cs_mem_acct_init, + .dumpops = &cs_dumpops, + .fops = &cs_fops, + .cbks = &cs_cbks, + .options = cs_options, + .identifier = "cloudsync", + .category = GF_TECH_PREVIEW, }; |