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); }
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); } }
private void resetPollMarker() throws IOException { if (!m_committedBuffers.isEmpty()) { StreamBlock oldestBlock = m_committedBuffers.peek(); m_firstUnpolledUso = oldestBlock.unreleasedUso(); } }