[Sheepdog] [RFC PATCH] sheep: introduce sd_op_template
MORITA Kazutaka
morita.kazutaka at lab.ntt.co.jp
Mon Oct 24 07:16:55 CEST 2011
At Fri, 21 Oct 2011 18:18:51 +0800,
Liu Yuan wrote:
>
> On 10/21/2011 04:28 PM, MORITA Kazutaka wrote:
>
> > When we want to add a new operation (SD_OP_xxxxx), it is not clear
> > which codes we should modify. And in some cases, we need to modify
> > codes everywhere to implement one operation. This is not a good
> > design.
> >
> > This patch abstracts out Sheepdog operations into sd_op_template, and
> > moves all the request processing codes to sheep/ops.c.
> >
> > The definition of sd_op_template is as follows:
> >
> > struct sd_op_template {
> > enum sd_op_type type;
> >
> > int available_always;
> >
> > int (*process)(const struct sd_req *req, struct sd_rsp *rsp,
> > void *data);
> > int (*post_process)(const struct sd_req *req, struct sd_rsp *rsp,
> > void *data);
> > };
> >
> > 'type' is the type of the operation; SD_OP_TYPE_CLUSTER,
> > SD_OP_TYPE_STORE, or SD_OP_TYPE_IO.
> >
> > 'available_always' is set to non-zero if the operations should be
> > processed even when the cluster is not working.
> >
>
>
> how about s/available_always/force ?
>
> > 'process()' and 'post_process()' are the main functions of this
> > operation. process() will be called in the worker thread, and
> > post_process() will be called in the main thread.
> >
>
>
> So how about name it more descriptive like process_worker() and
> process_main()?
>
> > If type is SD_OP_TYPE_CLUSTER, it is guaranteed that only one node
> > processes a cluster operation at the same time. We can use this for
> > something like distributed locking. process() will be called on the
> > local node, and post_process() will be called on every nodes.
> >
> > If type is SD_OP_TYPE_STORE, both process() and post_process() will be
> > called on the local node.
> >
>
>
> Same reason, how about SD_OP_TYPE_LOCAL?
>
> > If type is SD_OP_TYPE_IO, neither process() nor post_process() is used
> > because this type of operation is heavily intertwined with Sheepdog
> > core codes. We will be unlikely to add new operations of this type.
> >
>
>
> So is there any possibility later we might adopt io quest to
> process()/post_process()?
I think there is almost no possibility. I don't want to add another
operation to Sheepdog object storage without a big reason.
create/read/write/remove are enough to me.
Thanks,
Kazutaka
More information about the sheepdog
mailing list