code: protected final void prepareAdd()
      {
          if (currentPageBuilder.isFull()) {
              valueBlocksRetainedSizeInBytes += currentPageBuilder.getRetainedSizeInBytes();
              sumPositions.add(totalPositions);
              currentPageBuilder = currentPageBuilder.newPageBuilderLike();
              values.add(currentPageBuilder);
  
              verify(values.size() <= MAX_NUM_BLOCKS);
          }
  
          long currentGroupId = getGroupId();
          short insertedBlockIndex = (short) (values.size() - 1);
          int insertedPosition = currentPageBuilder.getPositionCount();
  
          if (totalPositions == capacity) {
              capacity *= 1.5;
              nextBlockIndex.ensureCapacity(capacity);
              nextPosition.ensureCapacity(capacity);
          }
  
          if (isEmpty()) {
              // new linked list, set up the header pointer
              headBlockIndex.set(currentGroupId, insertedBlockIndex);
              headPosition.set(currentGroupId, insertedPosition);
          }
          else {
              // existing linked list, link the new entry to the tail
              long absoluteTailAddress = toAbsolutePosition(tailBlockIndex.get(currentGroupId), tailPosition.get(currentGroupId));
              nextBlockIndex.set(absoluteTailAddress, insertedBlockIndex);
              nextPosition.set(absoluteTailAddress, insertedPosition);
          }
          tailBlockIndex.set(currentGroupId, insertedBlockIndex);
          tailPosition.set(currentGroupId, insertedPosition);
          groupEntryCount.increment(currentGroupId);
          currentPageBuilder.declarePosition();
          totalPositions++;
      }
docs: This method should be called before {@link #appendAtChannel(int, Block, int)} to update the internal linked list, where
  {@link #appendAtChannel(int, Block, int)} is called for each channel that has a new entry to be added.