[ https://issues.apache.org/jira/browse/PHOENIX-1016?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14067320#comment-14067320 ]
Thomas D'Silva commented on PHOENIX-1016: ----------------------------------------- [~jamestaylor] Sorry, I mean if a sequence *is not* declared with CYCLE and the min/max limit is reached an exception is thrown. I downloaded the 3.0 code from http://mirrors.koehn.com/apache/incubator/phoenix/phoenix-3.0.0-incubating/ and verified that the test fails if a sequence is not returned. I am trying to figure out what changed in 3.1. In ConnectionQueryServicesImpl.removeConnectio() formerSequenceMap is not null in 3.0, but is null in 3.1, so it does not call returnAllSequences. I will try and figure out why this is happening.. {code} @Override public void removeConnection(PhoenixConnection connection) throws SQLException { ConcurrentMap<SequenceKey,Sequence> formerSequenceMap = null; synchronized(this) { if (--connectionCount == 0) { if (!this.sequenceMap.isEmpty()) { formerSequenceMap = this.sequenceMap; this.sequenceMap = Maps.newConcurrentMap(); } } } // Since we're using the former sequenceMap, we can do this outside // the lock. if (formerSequenceMap != null) { // When there are no more connections, attempt to return any sequences returnAllSequences(formerSequenceMap); } } {code} > Support MINVALUE, MAXVALUE, and CYCLE options in CREATE SEQUENCE > ---------------------------------------------------------------- > > Key: PHOENIX-1016 > URL: https://issues.apache.org/jira/browse/PHOENIX-1016 > Project: Phoenix > Issue Type: Bug > Reporter: James Taylor > Assignee: Thomas D'Silva > Attachments: AddSeqColumns.txt, PHOENIX-1016-3.1.v3.patch, > PHOENIX-1016-3.1.v4.patch, PHOENIX-1016-4.1.v3.patch, > PHOENIX-1016-4.1.v4.patch, PHOENIX-1016.3.0.patch, PHOENIX-1016.patch, > PHOENIX-1016.v2.3.0.patch, PHOENIX-1016.v2.patch, diff.txt > > > We currently don't support MINVALUE, MAXVALUE, and CYCLE options in CREATE > SEQUENCE, but we should. See > http://msdn.microsoft.com/en-us/library/ff878091.aspx for the syntax. > I believe MINVALUE applies if the INCREMENT is negative while MAXVALUE > applies otherwise. If the value of a sequence goes beyond MINVALUE/MAXVALUE, > then: > - if CYCLE is true, then the sequence value should start again at the START > WITH value (or the MINVALUE if specified too? Not sure about this). > - if CYCLE is false, then an exception should be thrown. > To implement this: > - make the grammar changes in PhoenixSQL.g > - add member variables for MINVALUE, MAXVALUE, and CYCLE to > CreateSequenceStatement > - add the appropriate error checking and handle bind variables for these new > options in CreateSequenceCompiler > - modify the MetaDataClient.createSequence() call by passing along these new > parameters. > - same for ConnectionQueryServices.createSequence() call > - same for Sequence.createSequence(). > - pass along these parameters as new KeyValues in the Append that constitutes > the RPC call > - act on these in the SequenceRegionObserver coprocessor as indicated above. -- This message was sent by Atlassian JIRA (v6.2#6252)