Beispiel #1
0
  private void releaseExportBytes(long releaseOffset, ArrayList<StreamBlock> blocksToDelete)
      throws IOException {
    // if released offset is in an already-released past, just return success
    if (!m_committedBuffers.isEmpty() && releaseOffset < m_committedBuffers.peek().uso()) {
      return;
    }

    long lastUso = m_firstUnpolledUso;
    while (!m_committedBuffers.isEmpty() && releaseOffset >= m_committedBuffers.peek().uso()) {
      StreamBlock sb = m_committedBuffers.peek();
      if (releaseOffset >= sb.uso() + sb.totalUso()) {
        m_committedBuffers.pop();
        blocksToDelete.add(sb);
        lastUso = sb.uso() + sb.totalUso();
      } else if (releaseOffset >= sb.uso()) {
        sb.releaseUso(releaseOffset);
        lastUso = releaseOffset;
        break;
      }
    }
    m_firstUnpolledUso = Math.max(m_firstUnpolledUso, lastUso);
  }
Beispiel #2
0
 public void truncateExportToTxnId(long txnId) {
   try {
     synchronized (m_committedBuffers) {
       m_committedBuffers.truncateToTxnId(txnId, m_nullArrayLength);
       if (m_committedBuffers.isEmpty() && m_endOfStream) {
         try {
           m_onDrain.run();
         } finally {
           m_onDrain = null;
         }
       }
     }
   } catch (IOException e) {
     VoltDB.crashLocalVoltDB(e.getMessage(), true, e);
   }
 }
Beispiel #3
0
 private void resetPollMarker() throws IOException {
   if (!m_committedBuffers.isEmpty()) {
     StreamBlock oldestBlock = m_committedBuffers.peek();
     m_firstUnpolledUso = oldestBlock.unreleasedUso();
   }
 }