[
https://issues.apache.org/jira/browse/PHOENIX-2149?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14703718#comment-14703718
]
Samarth Jain commented on PHOENIX-2149:
---------------------------------------
[~tdsilva] - was this committed to 4.x branches too? If yes, then hopefully
this fix was part of our 4.5.1 patch release too. Can you confirm?
> MAX Value of Sequences not honored when closing Connection between calls to
> NEXT VALUE FOR
> ------------------------------------------------------------------------------------------
>
> Key: PHOENIX-2149
> URL: https://issues.apache.org/jira/browse/PHOENIX-2149
> Project: Phoenix
> Issue Type: Bug
> Affects Versions: 4.4.0
> Reporter: Jan Fernando
> Assignee: Jan Fernando
> Fix For: 4.5.1
>
> Attachments: PHOENIX-2149-v2.patch, PHOENIX-2149.patch
>
>
> There appears to be an issue be related to closing connections between calls
> to NEXT VALUE FOR that causes the MAX sequence value to be ignored. I have
> found scenarios when I am allocating sequences near the MAX whereby the MAX
> is not honored and value greater than the max are returned by NEXT VALUE FOR.
> It appears to be related to the logic to return all sequences on connection
> close. It looks like if you close the connection between each invocation when
> you hit the max value instead of the expected error being thrown sequence
> values continue to be doled out. It looks like for some reason the
> limit_reached_flag is not being set correctly on the SYSTEM.SEQUENCE table
> for the sequence in this case.
> I added the test below to SequenceBulkAllocationIT that repros the issue.
> If I either a) remove the nextConnection() call that keeps recycling
> connections in the test below or b) comment our the code in
> PhoenixConnection.close() that calls services.removeConnection() the test
> below starts to pass.
> I wasn't able to repro in Squirrel because I guess it doesn't recycle
> connections.
> {code}
> @Test
> public void testNextValuesForSequenceClosingConnections() throws
> Exception {
> final SequenceProperties props =
> new
> SequenceProperties.Builder().incrementBy(1).startsWith(4990).cacheSize(10).minValue(4990).maxValue(5000)
> .numAllocated(4989).build();
>
> // Create Sequence
> nextConnection();
> createSequenceWithMinMax(props);
> nextConnection();
>
> // Try and get next value
> try {
> long val = 0L;
> for (int i = 0; i <= 11; i++) {
> ResultSet rs =
> conn.createStatement().executeQuery(String.format(SELECT_NEXT_VALUE_SQL,
> "bulkalloc.alpha"));
> rs.next();
> val = rs.getLong(1);
> nextConnection();
> }
> fail("Expect to fail as this value is greater than seq max " +
> val);
> } catch (SQLException e) {
>
> assertEquals(SQLExceptionCode.SEQUENCE_VAL_REACHED_MAX_VALUE.getErrorCode(),
> e.getErrorCode());
> assertTrue(e.getNextException() == null);
> }
> }
> {code}
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)