hi Robert,

thanks for your quick response!

as i believe to now understand your design, i have the following problem:
if all controllers fail (whatever reason) i'm unable to tell which database to trust (which is the one with consistent data) because i can not trust the recovery log and therefor i'm not able to tell which database survived

maybe i will give you an example with the requirement:

1. Client commits an transaction
2. controller sends OK to client (request failed on all but one backend)
3. client receives OK
4. all controller fail, recovery log not written!

now, how can i recover from this error, with consistent data? (with the data from the commited transaction of the client) the problem is: as unlikely as this might be, its vital for our application because we have to ensure that all successful committed data are "never" lost.

this goes further as we have to ensure that the data has been written on at least 2 different nodes (out of 3) before success is reported back to the client, but this is another story.

thanks for your time

regards
markus


Robert Hodges wrote:
Hi Markus,
The asynchronous update to the recovery log is by design.  The Sequoia
"recovery log" is in a sense really a replication log rather than a
roll-forward/roll-back log of the sort you find in civilized databases.  Our
log does not have an impact on data consistency unless you need to
initialize a database or restore one that has become unsynchronized.  The
design works according to the following principles:
1.) Updates go directly to backends and are effectively applied
synchronously.  If you receive a successful commit, there are two possible
states for each backend.  Either the commit succeeded in which case you are
consistent or it failed and the database is now off-line.  This takes care
of backends.
2.) There is a copy of the recovery log in each controller.  Assuming you
have more than one controller running, you would need to lose all
controllers simultaneously to lose the logs.  This takes care of log
redundancy.  Sooner or later the log messages do hit the database.  This is
a common design in distributed systems.
Finally, as far as the question on failed writes to the log.  It's pretty
bad when that happens.  Look for the following message in the logs where {0}
and {1} can be ignored.
   Failed to log {0} for transaction {1}

This should rarely happen if you keep the database happy by purging logs
regularly.
Cheers, Robert

Robert Hodges, CTO, Continuent, Inc. Email: [EMAIL PROTECTED] Cell: +1-510-501-3728 +49-(0)177-6137817 Skype: hodgesrm

-----Original Message-----
From: [EMAIL PROTECTED]
[mailto:[EMAIL PROTECTED] On Behalf Of Markus
Woschank
Sent: Thursday, July 05, 2007 11:24 AM
To: [email protected]
Subject: [Sequoia] synchronous recovery log

hi,

i noticed that the recovery log is written asynchronous (in the LoggerThread). But as a requirement we need to ensure the consistency of the data and therefor the recovery log is vital for our application.Is there an "easy" way of forcing the recovery log to be written synchronous, and to ensure that a request fails if the recovery log could not be written?

thanks in advance

best regards
markus
_______________________________________________
Sequoia mailing list
[email protected]
https://forge.continuent.org/mailman/listinfo/sequoia

_______________________________________________
Sequoia mailing list
[email protected]
https://forge.continuent.org/mailman/listinfo/sequoia

!DSPAM:288,468cded1262211009077471!



_______________________________________________
Sequoia mailing list
[email protected]
https://forge.continuent.org/mailman/listinfo/sequoia

Reply via email to