[sheepdog] [PATCH] sheep: disable journal by default
Liu Yuan
namei.unix at gmail.com
Fri Sep 7 11:26:28 CEST 2012
sent from my galaxy 2
在 2012-9-7 PM5:17,"MORITA Kazutaka" <morita.kazutaka at lab.ntt.co.jp>写道:
>
> It seems that most modern disk drives implement atomic sector writes
> (e.g. section 7.4 in http://www.sqlite.org/atomiccommit.html). If it
> is true, we don't need to use journal for vdi object updates because
> we don't update them across a sector boundary.
>
> This patch uses atomic_put() for vdi creation, and doesn't use journal
> for vdi updates by default.
for partial update, we can use check command to repair consistency. So can
we completely remove journal?
>
> Signed-off-by: MORITA Kazutaka <morita.kazutaka at lab.ntt.co.jp>
> ---
> sheep/ops.c | 5 ++++-
> sheep/sheep.c | 7 ++++++-
> sheep/sheep_priv.h | 2 ++
> 3 files changed, 12 insertions(+), 2 deletions(-)
>
> diff --git a/sheep/ops.c b/sheep/ops.c
> index 6aff0d5..4c0426f 100644
> --- a/sheep/ops.c
> +++ b/sheep/ops.c
> @@ -886,7 +886,10 @@ static int do_write_obj(struct siocb *iocb, struct
sd_req *hdr, uint32_t epoch,
> iocb->buf = data;
> iocb->length = hdr->data_length;
> iocb->offset = hdr->obj.offset;
> - if (is_vdi_obj(oid)) {
> +
> + if (is_vdi_obj(oid) && create)
> + ret = sd_store->atomic_put(oid, iocb);
> + else if (is_vdi_obj(oid) && sys->use_journal) {
> struct strbuf buf = STRBUF_INIT;
>
> strbuf_addf(&buf, "%s%016" PRIx64, obj_path, oid);
> diff --git a/sheep/sheep.c b/sheep/sheep.c
> index b09443f..cdf447d 100644
> --- a/sheep/sheep.c
> +++ b/sheep/sheep.c
> @@ -43,6 +43,7 @@ static struct option const long_options[] = {
> {"foreground", no_argument, NULL, 'f'},
> {"gateway", no_argument, NULL, 'g'},
> {"help", no_argument, NULL, 'h'},
> + {"journal", no_argument, NULL, 'j'},
> {"loglevel", required_argument, NULL, 'l'},
> {"myaddr", required_argument, NULL, 'y'},
> {"stdout", no_argument, NULL, 'o'},
> @@ -54,7 +55,7 @@ static struct option const long_options[] = {
> {NULL, 0, NULL, 0},
> };
>
> -static const char *short_options = "c:dDfghl:op:P:s:w:y:z:";
> +static const char *short_options = "c:dDfghjl:op:P:s:w:y:z:";
>
> static void usage(int status)
> {
> @@ -71,6 +72,7 @@ Options:\n\
> -f, --foreground make the program run in the foreground\n\
> -g, --gateway make the progam run as a gateway mode\n\
> -h, --help display this help and exit\n\
> + -j, --journal use jouranl to update vdi objects\n\
> -l, --loglevel specify the level of logging detail\n\
> -o, --stdout log to stdout instead of shared logger\n\
> -p, --port specify the TCP port on which to listen\n\
> @@ -409,6 +411,9 @@ int main(int argc, char **argv)
> case 'w':
> init_cache_type(optarg);
> break;
> + case 'j':
> + sys->use_journal = true;
> + break;
> case 'h':
> usage(0);
> break;
> diff --git a/sheep/sheep_priv.h b/sheep/sheep_priv.h
> index b31328a..5cd9d3f 100644
> --- a/sheep/sheep_priv.h
> +++ b/sheep/sheep_priv.h
> @@ -122,6 +122,8 @@ struct cluster_info {
>
> uint64_t object_cache_size;
> bool object_cache_directio;
> +
> + bool use_journal;
> };
>
> struct siocb {
> --
> 1.7.2.5
>
> --
> sheepdog mailing list
> sheepdog at lists.wpkg.org
> http://lists.wpkg.org/mailman/listinfo/sheepdog
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.wpkg.org/pipermail/sheepdog/attachments/20120907/d1953921/attachment-0003.html>
More information about the sheepdog
mailing list