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

Lily Wei updated DERBY-4314:
----------------------------

    Attachment: DERBY-4314-7-withoutpiggybacking.diff

This is the version I intent to submit for this fix.
This fix avoid assertion like DERBY-4343 by short-circuiting 
setTransactionIsolation. 
For case as users obtaining the pooled connection for the third time, the 
variable
isolation_ is reset Connection.completeReset. If users call 
setTransactionIsolation and executed, the server does not send any piggybacking 
update because the isolation level has not changed.
 Isolation_ remain as UNKNOWN until getTransactionIsolation is called
 or a different statement causing a change of the isolation level
 is executed.  As mention before, we should think about change this to 
READ_UNCOMMITTED.
With introducing getTransactionIsolationX and assertion is never reach. 
Therefore, no assertion.
The client driver acts as embedded as without commit action when 
setTransactionIsolation is called.
Performance concern: This fix does not improve performance, it will just move 
the server round-trip. In some cases performance will be worse for the initial 
setTransactionIsolation call, depending on
 whether isolation_ value being set to READ_COMMITTED or not. If it is, one 
round-trip (check + short-circuit). If it is not, two round-trip (check + 
change).

I don't fully understand piggybacking. Any suggestion is welcome.  I simply 
think this is a good place to address this bug and DERBY-4343. I will 
suggestion to open a new JIRA for the performance concern.

I run suits.all and derbyall. 

> With derby client setTransactionIsolation executes and commits even if 
> isolation has not changed 
> -------------------------------------------------------------------------------------------------
>
>                 Key: DERBY-4314
>                 URL: https://issues.apache.org/jira/browse/DERBY-4314
>             Project: Derby
>          Issue Type: Improvement
>          Components: JDBC, Network Client
>    Affects Versions: 10.1.3.1, 10.2.2.0, 10.3.3.0, 10.4.2.0, 10.5.1.1, 
> 10.6.1.0
>            Reporter: Kathey Marsden
>            Priority: Minor
>         Attachments: DERBY-4314-2.diff, DERBY-4314-3.diff, DERBY-4314-5.diff, 
> derby-4314-6a-initial_piggybacking.diff, 
> derby-4314-6a-initial_piggybacking.stat, 
> DERBY-4314-6b-combinepiggybacking.diff, DERBY-4314-6c-combineaftermerge.diff, 
> derby-4314-6d-handle_xa.diff, DERBY-4314-7-withoutpiggybacking.diff, 
> DERBY-4314.diff, ReproIsoLost.java, TestConnReuse.java, utilXid.java
>
>
> With in EmbedConnection.setIsolation() we have a check to see if the 
> isolation level is the same and if so just return without doing a commit:
>   public void setTransactionIsolation(int level) throws SQLException {
>               if (level == getTransactionIsolation())
>                       return;
> with org.apache.derby.client.am.Connection we have no such check. It would be 
> good if the client driver acted like embedded.

-- 
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