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