[ 
https://issues.apache.org/jira/browse/DERBY-4881?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Kristian Waagan updated DERBY-4881:
-----------------------------------

    Attachment: derby-4881-1a-deadlock_fix.diff

Attached patch 1a.

** FromBaseTable
Minor change, avoid second call to TableDescriptor.statisticsExist if 
unnecessary.

** DataDictionaryImpl
 o Removed getDescriptorViaIndex-overload not taking isolation level as 
parameter (only used in once place).
 o getStatisticsDescriptors:
    - new JavaDoc
    - use READ_UNCOMMITTED instead of REPEATABLE_READ
 o @@ -8455,16 +8466,16 @@: formatting change due to long line
 o getDescriptorViaIndexMinion
    - removed unused variable indexTemplateRow
    - removed assert allowing only a single result to be returned when using 
isolation level read uncommitted
    - modified if to ignore match if tuple descriptor is null (index row 
existed, but not base row)                   <=== Behavior change
 o computeSequenceRowLocation (cleanup only)
    - removed unused variable row
    - use getDescriptorViaIndex instead of getDescriptorViaIndexMinion


Regression tests passed: derbyall (104 tests) and suites.All (13075 tests).
Patch ready for review.

> Deadlock accessing SYS.SYSSTATISTICS
> ------------------------------------
>
>                 Key: DERBY-4881
>                 URL: https://issues.apache.org/jira/browse/DERBY-4881
>             Project: Derby
>          Issue Type: Bug
>          Components: SQL
>    Affects Versions: 10.3.3.0, 10.4.2.0, 10.5.3.0, 10.6.2.1, 10.7.1.0
>            Reporter: Kristian Waagan
>            Assignee: Kristian Waagan
>            Priority: Minor
>         Attachments: derby-4881-1a-deadlock_fix.diff
>
>
> Transactions accessing index statistics can deadlock if one of them inserts 
> new entries and the other selects from the system table. Inserts happens for 
> instance when update of index statistics are perform manually, or when a 
> table is compressed (given that the table has indexes and contains some 
> rows). This issue may be more problematic when automatic update of index 
> statistics is implemented.
> Issue discovered when writing a regression tests for DERBY-4849, see 
> discussion there. The bug is timing dependent, but has been observed on a 
> variety of JVMs and platform architectures.
> To sum up:
>   o using NO_WAIT + retry was suggested, but turned out to be an infeasible 
> solution
>   o current approach is to allow using read uncommitted isolation level when 
> accessing statistics in the system table (take no locks)

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to