[bind10-dev] proposed design of scalable in-memory zone loading/updating

Shane Kerr shane at isc.org
Fri Jun 29 14:36:12 UTC 2012


Jinmei,

On Wednesday, 2012-06-27 11:58:35 -0700,
JINMEI Tatuya / 神明達哉 <jinmei at isc.org> wrote:
> > A final consideration is whether we want to have multiple Memory
> > Event Handler instances per process. The use case here is when we
> > are loading a large zone and don't want to block updates to other
> > zones. It may complicate the design slightly, but if we don't
> > include it now and add it later it seems like it may be quite a bit
> > of work to refactor around this idea.
> 
> I believe it's possible with the initially proposed design and a
> single Memory Event Handler:
> 
> 1. auth forwards "replace(full load)" command of zone A to the handler
> 2. the handler starts the replace task, creates (some kind of)
>    continuation context for it and returns it to auth
> 3. auth periodically resumes this incremental task.  everytime the
>    handler makes some progress on replacement
> 4. before the replacement is completed, auth receives an "(partial)
>    update" command of zone B.  auth forwards it to the handler.
> 5. handler immediately completes the update task and returns the
>    result to auth, the in-memory client will use the new version from
>    this point
> 6. the handler still continues the replacement task as it's resumed by
>    auth
> 
> If A != B (which should be the normal case in this scenario), this
> should be safe because the corresponding memory regions are completely
> different.  If A == B we'll need to handle it as a kind of error
> condition (rejecting the latter update or aborting the replacement,
> etc).

This approach makes sense to me. Back to co-operative multi-tasking! :)

Seriously this is quite reasonable, at least as a first pass. If we
need improved performance we can consider increased parallelism,
although this is probably something more for consideration in the
shared-memory model.

Cheers,

--
Shane


More information about the bind10-dev mailing list