Hi All,
We are facing a deadlock while putting entries to a Embedded Derby database.
Some info about the way we use the derby database. We have a mapsdatabase,
objects and transactions tables in the Derby database.
Tables info:
mapsdatabase = (objectid as long, key as byte[], value as byte[]) with
(objectid, key) being the primary key
objects = (objectid as long, value as byte[]) with (objectid) being the primary
key
transactions = (transactionid as long, value as byte[]) with (transactionid)
being the primary key
Within a Derby database transaction changes can go in each of the tables
described above.
However we are seeing a deadlock in the "mapsdatabase" table.
I enabled the following properties to debug this issue:
derby.locks.deadlockTrace=true
derby.language.logStatementText=true
derby.locks.monitor=true
We get a deadlock like this:
(XID = 496), (SESSIONID = 55), (DATABASE =
C:\hudson\workspace\dso_check_dso2_system_trunk_JDK_1.6_-server\trunk\community\code\base\build\testrun-0001\dso-system-tests\tests.system.temp\MapClearDeadLocksSleepycatTest\objectdb\datadb),
(DRDAID = null), Failed Statement is: UPDATE mapsdatabase SET derbyvalue = ?
WHERE derbykey = ? AND objectid = ? with 3 parameters begin parameter #1:
BLOB:Length=17 :end parameter begin parameter #2: VARCHAR () FOR BIT
DATA:Length=9 :end parameter begin parameter #3: 11002 :end parameter
ERROR 40001: A lock could not be obtained due to a deadlock, cycle of locks and
waiters is:
Lock : ROW, MAPSDATABASE, (1,131)
Waiting XID : {496, X} , APP, UPDATE mapsdatabase SET derbyvalue = ? WHERE
derbykey = ? AND objectid = ?
Granted XID : {495, X}
Lock : ROW, MAPSDATABASE, (1,130)
Waiting XID : {495, X} , APP, DELETE FROM mapsdatabase WHERE objectid = ?
Granted XID : {496, X}
The log statements for XIDs 495 and 496 are:
(XID = 495), (SESSIONID = 51), (DATABASE =
C:\hudson\workspace\dso_check_dso2_system_trunk_JDK_1.6_-server\trunk\community\code\base\build\testrun-0001\dso-system-tests\tests.system.temp\MapClearDeadLocksSleepycatTest\objectdb\datadb),
(DRDAID = null), Executing prepared statement: INSERT INTO transactions VALUES
(?, ?) :End prepared statement with 2 parameters begin parameter #1: 30 :end
parameter begin parameter #2: BLOB:Length=17 :end parameter
(XID = 495), (SESSIONID = 51), (DATABASE =
C:\hudson\workspace\dso_check_dso2_system_trunk_JDK_1.6_-server\trunk\community\code\base\build\testrun-0001\dso-system-tests\tests.system.temp\MapClearDeadLocksSleepycatTest\objectdb\datadb),
(DRDAID = null), Executing prepared statement: UPDATE objects SET derbyvalue =
? WHERE derbykey = ? :End prepared statement with 2 parameters begin parameter
#1: BLOB:Length=25 :end parameter begin parameter #2: 11000 :end parameter
(XID = 495), (SESSIONID = 51), (DATABASE =
C:\hudson\workspace\dso_check_dso2_system_trunk_JDK_1.6_-server\trunk\community\code\base\build\testrun-0001\dso-system-tests\tests.system.temp\MapClearDeadLocksSleepycatTest\objectdb\datadb),
(DRDAID = null), Executing prepared statement: DELETE FROM mapsdatabase WHERE
objectid = ? :End prepared statement with 1 parameters begin parameter #1:
11000 :end parameter
(XID = 496), (SESSIONID = 55), (DATABASE =
C:\hudson\workspace\dso_check_dso2_system_trunk_JDK_1.6_-server\trunk\community\code\base\build\testrun-0001\dso-system-tests\tests.system.temp\MapClearDeadLocksSleepycatTest\objectdb\datadb),
(DRDAID = null), Executing prepared statement: INSERT INTO transactions VALUES
(?, ?) :End prepared statement with 2 parameters begin parameter #1: 29 :end
parameter begin parameter #2: BLOB:Length=17 :end parameter
(XID = 496), (SESSIONID = 55), (DATABASE =
C:\hudson\workspace\dso_check_dso2_system_trunk_JDK_1.6_-server\trunk\community\code\base\build\testrun-0001\dso-system-tests\tests.system.temp\MapClearDeadLocksSleepycatTest\objectdb\datadb),
(DRDAID = null), Executing prepared statement: INSERT INTO transactions VALUES
(?, ?) :End prepared statement with 2 parameters begin parameter #1: 32 :end
parameter begin parameter #2: BLOB:Length=17 :end parameter
(XID = 496), (SESSIONID = 55), (DATABASE =
C:\hudson\workspace\dso_check_dso2_system_trunk_JDK_1.6_-server\trunk\community\code\base\build\testrun-0001\dso-system-tests\tests.system.temp\MapClearDeadLocksSleepycatTest\objectdb\datadb),
(DRDAID = null), Executing prepared statement: UPDATE objects SET derbyvalue =
? WHERE derbykey = ? :End prepared statement with 2 parameters begin parameter
#1: BLOB:Length=25 :end parameter begin parameter #2: 11002 :end parameter
(XID = 496), (SESSIONID = 55), (DATABASE =
C:\hudson\workspace\dso_check_dso2_system_trunk_JDK_1.6_-server\trunk\community\code\base\build\testrun-0001\dso-system-tests\tests.system.temp\MapClearDeadLocksSleepycatTest\objectdb\datadb),
(DRDAID = null), Executing prepared statement: UPDATE mapsdatabase SET
derbyvalue = ? WHERE derbykey = ? AND objectid = ? :End prepared statement
with 3 parameters begin parameter #1: BLOB:Length=18 :end parameter begin
parameter #2: VARCHAR () FOR BIT DATA:Length=9 :end parameter begin parameter
#3: 11002 :end parameter
(XID = 496), (SESSIONID = 55), (DATABASE =
C:\hudson\workspace\dso_check_dso2_system_trunk_JDK_1.6_-server\trunk\community\code\base\build\testrun-0001\dso-system-tests\tests.system.temp\MapClearDeadLocksSleepycatTest\objectdb\datadb),
(DRDAID = null), Executing prepared statement: UPDATE mapsdatabase SET
derbyvalue = ? WHERE derbykey = ? AND objectid = ? :End prepared statement
with 3 parameters begin parameter #1: BLOB:Length=17 :end parameter begin
parameter #2: VARCHAR () FOR BIT DATA:Length=9 :end parameter begin parameter
#3: 11002 :end parameter
Thu May 12 04:50:39 PDT 2011 Thread[WorkerThread(commit_changes_stage, 2,
0),5,TC Thread Group] (XID = 496), (SESSIONID = 55), (DATABASE =
C:\hudson\workspace\dso_check_dso2_system_trunk_JDK_1.6_-server\trunk\community\code\base\build\testrun-0001\dso-system-tests\tests.system.temp\MapClearDeadLocksSleepycatTest\objectdb\datadb),
(DRDAID = null), Cleanup action starting
Anyone has any clues?
Thanks in advance,