Hello,
The locking on these tables was implemented to prevent some deadlock
situations we saw.
With Postgres, we run a SELECT ... FOR UPDATE command which locks the
selected rows followed by an UPDATE. Then only the process that locked
them can write to them. If another process does a similar command, it is
possible for some of the same rows to be selected for locking, but in a
different order. When two rows are locked in the opposite order, you end
up with a deadlock.
The only solution we found was to lock the entire table for writing
while the SELECT and UPDATE commands were run.
Unfortunately, I'm not familiar with MySQL locks to say what might be
appropriate in this case.
Regards,
Hugh
On 30/07/2013 05:22, Shane Harrison wrote:
Hi Peter,
In thread:
http://lists.kamailio.org/pipermail/sr-dev/2013-January/018347.html
you mentioned transaction support that you have added to PostgreSQL
driver. Unfortunately I do need to use mysql as our HA solution is
based on mysql cluster.
Hence I have implemented the required new functions e.g start_transaction.
However mysql only has one table locking mode (unlike PostgreSQL) and
if you lock a table within a transaction, you can't read other tables
without also obtaining locks for them as well. As there are places
where active_watchers table is locked but the code tries to query the
watchers table, this is an issue. I have simply disabled the table
locking for the time being.
It is possible that the implicit transaction locking that mysql is
enough to solve the issues you were trying to solve. To determine
this, can you tell me or point to a thread that explains what race
conditions were trying to be mitigated in process_notifier mode.
Cheers and thanks
Shane
--
Imagination NZ Ltd
Level 6
92 Queens Drive
P0 Box 30449
Lower Hutt 5040
+64 4 5703870 Extn 875
+64 21 608919 (mobile)
_______________________________________________
sr-dev mailing list
sr-dev(a)lists.sip-router.org
http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-dev
--
Hugh Waite
Principal Design Engineer
Crocodile RCS Ltd.