Pawel Veselov created OPENJPA-2905:
--------------------------------------

             Summary: Sequences are altered unnecessarily
                 Key: OPENJPA-2905
                 URL: https://issues.apache.org/jira/browse/OPENJPA-2905
             Project: OpenJPA
          Issue Type: Bug
          Components: jdbc
    Affects Versions: 3.2.2, 3.2.1, 3.2.0, 3.1.2, 3.1.1, 3.1.0
            Reporter: Pawel Veselov


{{NativeJDBCSeq.allocateInternal()}} attempts to alter a sequence for every 
sequence encountered at least once during a runtime.

In Postgres, for example, executing this DDL requires that no other locks are 
held, we are seeing this blockage:

{noformat}
blocked_pid                           | 12519
blocked_user                          | snapstore
blocking_pid                          | 29611
blocking_user                         | snapstore
blocked_statement                     | ALTER SEQUENCE campaign_seq INCREMENT 
BY 50
current_statement_in_blocking_process | select id from other_lock where id = $1 
for share 
{noformat}

It doesn't make sense to alter the sequence if the sequence already has the 
right increment, otherwise there are the following issues:

1. In a cluster, the alterations are going to be attempted by each node
2. If there is a sudden request, in the middle of operations, to get a sequence 
value for some rarely written to table, that sequence can be held up for a long 
time, unwarranted so, at least in Progress

I really recommend that the sequence increment is first checked, and is only 
changed if it doesn't match the expectation, at least on the databases where 
this is possible.




--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to