On 11/13/06, Emmanuel Cecchet <[EMAIL PROTECTED]> wrote:
Hi Alfonso,
It helps a lot. Find my comments below.
> 10:49:42,270 DEBUG controller.RequestManager.ITECBAN_DB Begin
> transaction 10
> 10:49:42,279 DEBUG
> virtualdatabase.VirtualDatabaseWorkerThread.ITECBAN_DB
> StatementExecuteQuery command
> 10:49:42,282 DEBUG controller.RequestManager.ITECBAN_DB Scheduling
> read Request (22): select people_seq.nextval from dual/
> 10:49:42,282 DEBUG controller.RequestManager.ITECBAN_DB Getting from
> cache read request (22): select people_seq.nextval from dual/
> 10:49:42,283 DEBUG controller.RequestManager.ITECBAN_DB Load balancing
> read request (22): select people_seq.nextval from dual/
First issue is that Sequoia does not broadcast this select statement
which means that the sequence will not get updated on all nodes. This
will lead to a cluster inconsistency and needs some alteration of the
regular expressions to make sure that these statements are broadcast and
logged into the recovery log. Note that there is a similar issue with
PostgreSQL that can be circumvented by altering the Hibernate dialect
to transform select into a stored procedure call (see Sequoia doc and
recent thread on the mailing list).
Ok I see what you mean with altering the Hibernate dialect, but I do
not like the call procedure solution, I prefer the second one, is a
more clean sloution.
Is this fix included in the sequoia 3.1 beta?
If you are using Sequoia 3.0, you can also enter a custom semantic
information to force any 'select ... from dual' to be broadcast. Just
set the readonly field to false (note that this is only available with
https://forge.continuent.org/jira/browse/SEQUOIA-849 fix).
If we have several oracle db replicated by sequoia cluster. How can we
know that different inserts over the same table from different
computers and managed by different sequoia controller will not get the
same primary key ID and multicast this value to the others?
Both queries are sent at the same time form different clients
insert into tableT rowA
managed by sequoiaA
requests OracleA
gets ID 5 on Oracle A ? then multicast?
insert into tableT rowB
managed by sequoiaB
requests OrableB
gets ID 5 on Oracle B? then multicast?
Are you using any totally ordered multicast algorithm? that prevents
this scenario?
> 10:49:42,419 DEBUG
> virtualdatabase.VirtualDatabaseWorkerThread.ITECBAN_DB
> StatementExecuteUpdate command
> 10:49:42,423 DEBUG controller.RequestManager.ITECBAN_DB Aborting
> transaction 10
> 10:49:42,425 DEBUG controller.RequestManager.ITECBAN_DB Transaction 10
> aborted
It is not clear here what triggered the transaction abort. Having DEBUG
information from the DatabaseBackend might help here.
Ok I will run the same scenario with DEBUG info at the DatabaseBackend
and posted.
> ...
> 10:51:35,177 DEBUG controller.RequestManager.ITECBAN_DB Getting from
> cache read request (23): select people_seq.nextval from dual/
As nextval is not properly detected, it is also cached which means that
you will get duplicate ids ! An option would be to remove the request
cache but that will not solve the missing broadcast issue anyway that
should be fixed using one of the options described above.
Ok how can I do this? Once I have solved the previous problem? ---
remove the request cache?
Thanks for your feedback,
Emmanuel
--
Emmanuel Cecchet
Chief Scientific Officer, Continuent
Blog: http://emanux.blogspot.com/
Open source: http://www.continuent.org
Corporate: http://www.continuent.com
Skype: emmanuel_cecchet
Cell: +33 687 342 685
_______________________________________________
Sequoia mailing list
[email protected]
https://forge.continuent.org/mailman/listinfo/sequoia
_______________________________________________
Sequoia mailing list
[email protected]
https://forge.continuent.org/mailman/listinfo/sequoia