Hi there,
I'm trying to chase the cause of a problem with concurrent reads/writes,
that shows up as either a "COMMIT FAILED" error or an assertion
(delta_append_bat: Assertion `!c || ((c)->U->count) == bat->ibase' failed),
probably depending timing issues.
The scenario is roughly: two threads, one reading, one writing. Sometimes,
they need to read/write from/to the same table. I'm aware that this may
raise issues, but I'd like to get straight what the real cause is (and
possibly what the cause of the assertion is).
Imagine two JDBC connections, R (read only) and W (write only), in the
following timeline:
TS = transaction start
TC = transaction commit
TR = transaction trollback
CO = cursor open
C++ = increment cursor (read one row)
IN = insert
R | W
_______________
1| | TS
2| TS |
3| CO | IN
4| C++ |
5| | TC
6| | TS
6| C++ | IN
7| TR |
8| | TC
The question is: is this supposed to fail or to succeed?
There are no UPDATE in W, only INSERT INTO (actually COPY INTO).
I tried a similar scenario with 2 mclient sessions, continuously reading
from R (without cursors) and writing and committing from W.
R kept nicely showing no updates, until the ROLLBACK. Then, it showed the
updates from W.
But I'm not sure whether the scenario above with cursors should behave the
same.
This is using very up to date Feb2013 branch. I guess the assertion is a
bug, and I'd like to file it, but at the moment it's quite hard to
reproduce consistently, perhaps it would be easier if I could get a better
understanding of the scenario above.
Thanks, Roberto