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

Rick Hillegas updated DERBY-712:
--------------------------------

    Attachment: derby-712-05-al-sequenceGenerator.diff

Attaching derby-712-05-al-sequenceGenerator.diff. This reworks the previous 
version of the patch, replacing a deadlock situation with a potential 
race-condition.

The separation of functionality between SequenceUpdater and SequenceGenerator 
is now more clear:

o SequenceUpdater handles handshaking with the catalog.

o SequenceGenerator is just a calculator which does no i/o.

This patch includes more extensive header comments for both classes,explaining 
how they are used. The basic logic flow is documented in in SequenceUpdater.  
Hopefully this is clear enough that other people will be able to reason about 
its correctness and spot flaws. Here is that header comment:

---------

Here is the algorithm pursued when the caller asks for the next number in a 
sequence:

o We try to get the next number from a cache of pre-allocated numbers. The 
endpoint (last number in the pre-allocated range) was previously recorded in 
the catalog row which describes this sequence. If we are successful in getting 
the next number, we return it and all is well.

o Otherwise, we must allocate a new range by updating the catalog row. At this 
point we may find ourselves racing another session, which also needs the next 
number in the sequence.

o When we try to update the catalog row, we check to see whether the current 
value there is what we expect it to be. If it is, then all is well: we update 
the catalog row then return to the first step to try to get the next number 
from the new cache of pre-allocated numbers.

o If, however, the value in the catalog row is not what we expect, then another 
session has won the race to update the catalog. We accept this fact gracefully 
and do not touch the catalog. Instead, we return to the first step and try to 
get the next number from the new cache of numbers which the other session has 
just pre-allocated.

o We only allow ourselves to retry this loop a small number of times. If we 
still can't get the next number in the sequence, we raise an exception 
complaining that there is too much contention on the generator.


If applications start seeing exceptions complaining that there is too much 
contention on a sequence generator, then we should improve this algorithm. Here 
are some options based on the idea that contention should go down if we 
increase the number of pre-allocated numbers:

o We can let the user change the size of the pre-allocated range.

o Derby can increase the size of the pre-allocated range when Derby detects too 
much contention.

-------


> Support for sequences
> ---------------------
>
>                 Key: DERBY-712
>                 URL: https://issues.apache.org/jira/browse/DERBY-712
>             Project: Derby
>          Issue Type: Improvement
>          Components: SQL
>         Environment: feature request 
>            Reporter: Tony Dahbura
>            Assignee: Suran Jayathilaka
>             Fix For: 10.6.0.0
>
>         Attachments: altertable.diff, catalogs_a.patch, catalogs_b.patch, 
> catalogs_c.patch, catalogs_d.patch, catalogs_e.patch, catalogs_f.patch, 
> catalogs_f_2.patch, catalogs_g.diff, catalogs_h.diff, 
> create_drop_sequence_a.patch, create_drop_sequence_b.patch, 
> create_drop_sequence_c.patch, create_drop_sequence_d.patch, 
> create_sequence_a.patch, createseq_args_bind_a.diff, 
> createseq_args_bind_b.diff, derby-712-02-aa-privilegeNodeCleanup.diff, 
> derby-712-03-aa-usagePrivilege.diff, derby-712-03-ac-usagePrivilege.diff, 
> derby-712-04-aa-dblook.diff, derby-712-05-af-sequenceGenerator.diff, 
> derby-712-05-al-sequenceGenerator.diff, SequenceGenerator.html, 
> sequences_next_value_a.patch
>
>
> Would like to see support added for sequences.  This would permit a select 
> against the sequence to always obtain a ever increasing/decreasing value.  
> The identity column works fine but there are times for applications where the 
> application needs to obtain the sequence number and use it prior to the 
> database write.  Subsequent calls to the table/column would result in a new 
> number on each call.
> SQL such as the following:
> SELECT NEXT VALUE FOR sequence_name FROM sometable ; would result in a next 
> value.

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