You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@lucene.apache.org by "mashudong (Jira)" <ji...@apache.org> on 2021/01/20 08:06:00 UTC

[jira] [Updated] (LUCENE-9673) The level of IntBlockPool slice is always 1

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

mashudong updated LUCENE-9673:
------------------------------
    Attachment: LUCENE-9673.patch

> The level of IntBlockPool slice is always 1 
> --------------------------------------------
>
>                 Key: LUCENE-9673
>                 URL: https://issues.apache.org/jira/browse/LUCENE-9673
>             Project: Lucene - Core
>          Issue Type: Bug
>          Components: core/other
>            Reporter: mashudong
>            Priority: Minor
>         Attachments: LUCENE-9673.patch
>
>
> First slice is allocated by IntBlockPoo.newSlice(), and its level is 1,
>  
> {code:java}
> private int newSlice(final int size) {
>  if (intUpto > INT_BLOCK_SIZE-size) {
>  nextBuffer();
>  assert assertSliceBuffer(buffer);
>  }
>  
>  final int upto = intUpto;
>  intUpto += size;
>  buffer[intUpto-1] = 1;
>  return upto;
> }{code}
>  
>  
> If one slice is not enough, IntBlockPoo.allocSlice() is called to allocate more slices,
> as the following code shows, level is 1, newLevel is NEXT_LEVEL_ARRAY[0] which is also 1.
>  
> The result is the level of IntBlockPool slice is always 1, the first slice is  2 bytes long, and all subsequent slices are 4 bytes long.
>  
> {code:java}
> private static final int[] NEXT_LEVEL_ARRAY = {1, 2, 3, 4, 5, 6, 7, 8, 9, 9};
> private int allocSlice(final int[] slice, final int sliceOffset) {
>  final int level = slice[sliceOffset];
>  final int newLevel = NEXT_LEVEL_ARRAY[level - 1];
>  final int newSize = LEVEL_SIZE_ARRAY[newLevel];
>  // Maybe allocate another block
>  if (intUpto > INT_BLOCK_SIZE - newSize) {
>  nextBuffer();
>  assert assertSliceBuffer(buffer);
>  }
> final int newUpto = intUpto;
>  final int offset = newUpto + intOffset;
>  intUpto += newSize;
>  // Write forwarding address at end of last slice:
>  slice[sliceOffset] = offset;
> // Write new level:
>  buffer[intUpto - 1] = newLevel;
> return newUpto;
>  } 
> {code}
>  



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

---------------------------------------------------------------------
To unsubscribe, e-mail: issues-unsubscribe@lucene.apache.org
For additional commands, e-mail: issues-help@lucene.apache.org