1717 */
1818package uk .ac .ebi .ampt2d .commons .accession .generators .monotonic ;
1919
20+ import org .slf4j .Logger ;
21+ import org .slf4j .LoggerFactory ;
2022import org .springframework .data .util .Pair ;
2123import uk .ac .ebi .ampt2d .commons .accession .core .exceptions .AccessionCouldNotBeGeneratedException ;
2224import uk .ac .ebi .ampt2d .commons .accession .core .exceptions .AccessionIsNotPendingException ;
3638 */
3739class BlockManager {
3840
41+ private static final Logger logger = LoggerFactory .getLogger (BlockManager .class );
42+
3943 private final PriorityQueue <ContiguousIdBlock > assignedBlocks ;
4044
4145 private final MonotonicRangePriorityQueue availableRanges ;
@@ -52,6 +56,7 @@ public BlockManager() {
5256 }
5357
5458 public void addBlock (ContiguousIdBlock block ) {
59+ logger .trace ("Adding block: {}" , block );
5560 assignedBlocks .add (block );
5661 availableRanges .add (new MonotonicRange (block .getLastCommitted () + 1 , block .getLastValue ()));
5762 }
@@ -67,12 +72,14 @@ public MonotonicRangePriorityQueue getAvailableRanges() {
6772 * @return Array of monotonically increasing IDs
6873 */
6974 public long [] pollNext (int maxValues ) throws AccessionCouldNotBeGeneratedException {
75+ logger .trace ("Polling for {} values" , maxValues );
7076 if (!hasAvailableAccessions (maxValues )) {
7177 throw new AccessionCouldNotBeGeneratedException ("Block manager doesn't have " + maxValues + " values available." );
7278 }
7379 MonotonicRange monotonicRange = pollNextMonotonicRange (maxValues );
7480 long [] ids = monotonicRange .getIds ();
7581 generatedAccessions .addAll (LongStream .of (ids ).boxed ().collect (Collectors .toList ()));
82+ logger .trace ("Generated accessions: {}" , ids );
7683 return ids ;
7784 }
7885
@@ -98,6 +105,7 @@ public boolean hasAvailableAccessions(int accessionsNeeded) {
98105 }
99106
100107 public Set <ContiguousIdBlock > commit (long [] accessions ) throws AccessionIsNotPendingException {
108+ logger .trace ("Inside commit for accessions: {}" , accessions );
101109 assertAccessionsArePending (accessions );
102110 return doCommit (accessions );
103111 }
@@ -119,17 +127,31 @@ private Set<ContiguousIdBlock> doCommit(long[] accessions) {
119127 addToCommitted (accessions );
120128
121129 ContiguousIdBlock block = assignedBlocks .peek ();
122- while (block != null && committedAccessions .peek () != null &&
123- committedAccessions .peek () == block .getLastCommitted () + 1 ) {
124- //Next value continues sequence, change last committed value
130+ logger .trace ("Trying to commit within block: {}" , block );
131+ while (true ) {
132+ if (block == null ) {
133+ logger .trace ("No more blocks" );
134+ break ;
135+ } else if (committedAccessions .peek () == null ) {
136+ logger .trace ("No more accessions to commit" );
137+ break ;
138+ } else if (committedAccessions .peek () != block .getLastCommitted () + 1 ) {
139+ logger .trace ("Next accession to commit is not in sequence: {} != {} + 1" ,
140+ committedAccessions .peek (), block .getLastCommitted ());
141+ break ;
142+ }
143+ // Next value continues sequence, change last committed value
144+ logger .trace ("Setting last committed to {}" , committedAccessions .peek ());
125145 block .setLastCommitted (committedAccessions .poll ());
126146 blocksToUpdate .add (block );
127147 if (!block .isNotFull ()) {
128148 assignedBlocks .poll ();
129149 block = assignedBlocks .peek ();
150+ logger .trace ("Trying to commit within block: {}" , block );
130151 }
131152 }
132153
154+ logger .trace ("Blocks to update: {}" , blocksToUpdate );
133155 return blocksToUpdate ;
134156 }
135157
@@ -141,6 +163,7 @@ private void addToCommitted(long[] accessions) {
141163 }
142164
143165 public void release (long [] accessions ) throws AccessionIsNotPendingException {
166+ logger .trace ("Inside release for accessions: {}" , accessions );
144167 assertAccessionsArePending (accessions );
145168 doRelease (accessions );
146169 }
@@ -158,6 +181,7 @@ private void doRelease(long[] accessions) {
158181 * @throws AccessionIsNotPendingException When the generated accession does not match with the accession to commit
159182 */
160183 public Set <ContiguousIdBlock > recoverState (long [] committedElements ) throws AccessionIsNotPendingException {
184+ logger .trace ("Inside recoverState for accessions: {}" , committedElements );
161185 List <MonotonicRange > ranges = MonotonicRange .convertToMonotonicRanges (committedElements );
162186 List <MonotonicRange > newAvailableRanges = new ArrayList <>();
163187 for (MonotonicRange monotonicRange : this .availableRanges ) {
0 commit comments