summaryrefslogtreecommitdiffstats
path: root/xlators/features/changelog/src/changelog-encoders.c
diff options
context:
space:
mode:
Diffstat (limited to 'xlators/features/changelog/src/changelog-encoders.c')
-rw-r--r--xlators/features/changelog/src/changelog-encoders.c123
1 files changed, 54 insertions, 69 deletions
diff --git a/xlators/features/changelog/src/changelog-encoders.c b/xlators/features/changelog/src/changelog-encoders.c
index 08626ee2f..ecd598e4d 100644
--- a/xlators/features/changelog/src/changelog-encoders.c
+++ b/xlators/features/changelog/src/changelog-encoders.c
@@ -56,24 +56,6 @@ fop_fn (void *data, char *buffer, gf_boolean_t encode)
return bufsz;
}
-size_t
-number_fn (void *data, char *buffer, gf_boolean_t encode)
-{
- size_t bufsz = 0;
- unsigned int nr = 0;
- char buf[20] = {0,};
-
- nr = *(unsigned int *) data;
-
- if (encode) {
- (void) snprintf (buf, sizeof (buf), "%u", nr);
- CHANGELOG_FILL_BUFFER (buffer, bufsz, buf, strlen (buf));
- } else
- CHANGELOG_FILL_BUFFER (buffer, bufsz, &nr, sizeof (unsigned int));
-
- return bufsz;
-}
-
void
entry_free_fn (void *data)
{
@@ -90,7 +72,7 @@ entry_free_fn (void *data)
*/
static inline void
-changelog_encode_write_xtra (changelog_log_data_t *cld,
+changelog_encode_write_xtra (changelog_write_data_t *cwd,
char *buffer, size_t *off, gf_boolean_t encode)
{
int i = 0;
@@ -100,10 +82,11 @@ changelog_encode_write_xtra (changelog_log_data_t *cld,
offset = *off;
- co = (changelog_opt_t *) cld->cld_ptr;
+ co = (changelog_opt_t *) cwd->cwd_ptr;
- for (; i < cld->cld_xtra_records; i++, co++) {
- CHANGELOG_FILL_BUFFER (buffer, offset, "\0", 1);
+ for (; i < cwd->cwd_xtra_records; i++, co++) {
+ if (i)
+ CHANGELOG_FILL_BUFFER (buffer, offset, "\0", 1);
switch (co->co_type) {
case CHANGELOG_OPT_REC_FOP:
@@ -112,6 +95,18 @@ changelog_encode_write_xtra (changelog_log_data_t *cld,
case CHANGELOG_OPT_REC_ENTRY:
data = &co->co_entry;
break;
+ case CHANGELOG_OPT_REC_NAME:
+ data = co->co_entry.cef_bname;
+ break;
+ case CHANGELOG_OPT_REC_ULL:
+ data = &co->co_number;
+ break;
+ case CHANGELOG_OPT_REC_UUID:
+ data = &co->co_uuid;
+ break;
+ case CHANGELOG_OPT_REC_INT32:
+ data = &co->co_int32;
+ break;
case CHANGELOG_OPT_REC_UINT32:
data = &co->co_uint32;
break;
@@ -129,69 +124,59 @@ changelog_encode_write_xtra (changelog_log_data_t *cld,
}
int
-changelog_encode_ascii (xlator_t *this, changelog_log_data_t *cld)
+changelog_encode_ascii (xlator_t *this,
+ changelog_local_t *local, changelog_log_data_t *cld)
{
- size_t off = 0;
- size_t gfid_len = 0;
- char *gfid_str = NULL;
- char *buffer = NULL;
- changelog_priv_t *priv = NULL;
+ size_t off = 0;
+ size_t gfid_len = 0;
+ char *gfid_str = NULL;
+ char *buffer = NULL;
+ changelog_priv_t *priv = NULL;
+ changelog_write_data_t *cwd = NULL;
priv = this->private;
+ cwd = &cld->cld_wdata;
- gfid_str = uuid_utoa (cld->cld_gfid);
+ gfid_str = uuid_utoa (cwd->cwd_gfid);
gfid_len = strlen (gfid_str);
/* extra bytes for decorations */
- buffer = alloca (gfid_len + cld->cld_ptr_len + 10);
- CHANGELOG_STORE_ASCII (priv, buffer,
- off, gfid_str, gfid_len, cld);
-
- if (cld->cld_xtra_records)
- changelog_encode_write_xtra (cld, buffer, &off, _gf_true);
-
- CHANGELOG_FILL_BUFFER (buffer, off, "\0", 1);
+ buffer = alloca (gfid_len + cwd->cwd_ptr_len + 100);
+ if (!priv->no_gfid_hdr)
+ CHANGELOG_STORE_ASCII (priv, buffer,
+ off, gfid_str, gfid_len, cld);
+
+ if (cwd->cwd_xtra_records) {
+ changelog_encode_write_xtra (cwd, buffer, &off, _gf_true);
+ CHANGELOG_FILL_BUFFER (buffer, off, "\0", 1);
+ }
- return changelog_write_change (priv, buffer, off);
+ return changelog_write_change (this, priv,
+ local, buffer, off);
}
int
-changelog_encode_binary (xlator_t *this, changelog_log_data_t *cld)
+changelog_encode_binary (xlator_t *this,
+ changelog_local_t *local, changelog_log_data_t *cld)
{
- size_t off = 0;
- char *buffer = NULL;
- changelog_priv_t *priv = NULL;
+ size_t off = 0;
+ char *buffer = NULL;
+ changelog_priv_t *priv = NULL;
+ changelog_write_data_t *cwd = NULL;
priv = this->private;
+ cwd = &cld->cld_wdata;
/* extra bytes for decorations */
- buffer = alloca (sizeof (uuid_t) + cld->cld_ptr_len + 10);
- CHANGELOG_STORE_BINARY (priv, buffer, off, cld->cld_gfid, cld);
-
- if (cld->cld_xtra_records)
- changelog_encode_write_xtra (cld, buffer, &off, _gf_false);
+ buffer = alloca (sizeof (uuid_t) + cwd->cwd_ptr_len + 100);
+ if (!priv->no_gfid_hdr)
+ CHANGELOG_STORE_BINARY (priv, buffer, off, cwd->cwd_gfid, cld);
- CHANGELOG_FILL_BUFFER (buffer, off, "\0", 1);
-
- return changelog_write_change (priv, buffer, off);
-}
-
-static struct changelog_encoder
-cb_encoder[] = {
- [CHANGELOG_ENCODE_BINARY] =
- {
- .encoder = CHANGELOG_ENCODE_BINARY,
- .encode = changelog_encode_binary,
- },
- [CHANGELOG_ENCODE_ASCII] =
- {
- .encoder = CHANGELOG_ENCODE_ASCII,
- .encode = changelog_encode_ascii,
- },
-};
+ if (cwd->cwd_xtra_records) {
+ changelog_encode_write_xtra (cwd, buffer, &off, _gf_false);
+ CHANGELOG_FILL_BUFFER (buffer, off, "\0", 1);
+ }
-void
-changelog_encode_change( changelog_priv_t * priv)
-{
- priv->ce = &cb_encoder[priv->encode_mode];
+ return changelog_write_change (this, priv,
+ local, buffer, off);
}