[Freeipa-devel] DNS SOA serial managed by 389 DS plugin: design
Simo Sorce
simo at redhat.com
Tue Feb 12 14:25:57 UTC 2013
On Tue, 2013-02-12 at 10:57 +0100, Petr Spacek wrote:
> On 11.2.2013 17:23, Simo Sorce wrote:
> > On Mon, 2013-02-11 at 15:37 +0100, Petr Spacek wrote:
> >> Possible optimization
> >>
> >> Increment serial value at most once per second.
> >>
> >> Basic idea: Write current timestamp (no incrementation) and write
> >> serial value
> >> to the database with one second delay.
> >>
> >> Problem: How to solve LDAP server crash? Write timestamp immediately
> >> and
> >> (while reading) subtract 1 if timestamp == serial?
> >>
> > I am not sure I understand the solution here ?
> >
> > Maybe a simpler solution is to always write the serial as time() + 1 ?
>
> I tried to solve following problem:
> (numbers represent time in "second.millisecond" format)
>
> 1.000 : new_serial = time() + 1
> 1.100 : record test.example.com. updated
> 1.100 : zone serial overwritten with new_serial
> 1.500 : zone transfer started
> 1.500 : search result for all records and zone serial stored
> 1.500 : search result is transferred to slaves
> 1.700 : record test2.example.com. updated
> 1.700 : zone serial overwritten with new_serial
> <no changes from now>
>
> Result:
> Zones on master and it's slave servers have serial = "new_serial" but the zone
> content is different (records under test2.example.com. are not equal).
>
>
>
> What I tried to describe above is that search for zone serial returns:
> if (serial value == time())
> return (serial value - 1)
> else
> return (serial value)
>
> Example:
> 1.000 : new_serial = time()
> 1.100 : record test.example.com. updated
> 1.100 : zone serial overwritten with new_serial
> 1.500 : zone transfer started
> 1.500 : search result for all records and zone serial stored
> 1.500 : zone serial in search result is (new_serial - 1)
> 1.500 : snapshot is transferred to slaves
> 1.700 : record test2.example.com. updated
> 1.700 : zone serial overwritten with new_serial
> <no changes from now>
> 2.000 : now the search for serial value returns new_serial, i.e. slaves see
> value incremented by one from last zone transfer (1.500)
> 9.000 : serial value is unchanged from last search
>
> Expected result:
> Zone data can be inconsistent between master and slaves for only one second.
> Data will be consistent if directory server crashed at 1.701 - new zone
> transfer can be initiated after server restart.
>
> Requirement:
> DS plugin have to modify serial value during reads. Does getimeofday() cost
> too much to do it for all read-serial operations?
>
> Makes it sense?
Thanks, makes a lot of sense.
Simo.
--
Simo Sorce * Red Hat, Inc * New York
More information about the Freeipa-devel
mailing list