@Override public ByteBuffer get() { final ResourceHolder<ByteBuffer> mergeBufferHolder = resource.getMergeBuffer(); closeOnExit.add(mergeBufferHolder); return mergeBufferHolder.get(); } },
@Override public void close() { if (holder != null) { holder.close(); } }
@Override public void close() { if (holder != null) { holder.close(); } }
@Override protected Object getAggVal(BufferAggregator agg, int rowOffset, int aggPosition) { int[] indexAndOffset = indexAndOffsets.get(rowOffset); ByteBuffer bb = aggBuffers.get(indexAndOffset[0]).get(); return agg.get(bb, indexAndOffset[1] + aggOffsetInBuffer[aggPosition]); }
OffheapIncrementalIndex( IncrementalIndexSchema incrementalIndexSchema, boolean deserializeComplexMetrics, boolean reportParseExceptions, boolean concurrentEventAdd, boolean sortFacts, int maxRowCount, NonBlockingPool<ByteBuffer> bufferPool ) { super(incrementalIndexSchema, deserializeComplexMetrics, reportParseExceptions, concurrentEventAdd); this.maxRowCount = maxRowCount; this.bufferPool = bufferPool; this.facts = incrementalIndexSchema.isRollup() ? new RollupFactsHolder(sortFacts, dimsComparator(), getDimensions()) : new PlainFactsHolder(sortFacts, dimsComparator()); //check that stupid pool gives buffers that can hold at least one row's aggregators ResourceHolder<ByteBuffer> bb = bufferPool.take(); if (bb.get().capacity() < aggsTotalSize) { bb.close(); throw new IAE("bufferPool buffers capacity must be >= [%s]", aggsTotalSize); } aggBuffers.add(bb); }
@Override public void close() { if (holder != null) { holder.close(); } }
protected void loadBuffer(int bufferNum) { CloseQuietly.close(holder); holder = singleThreadedBuffers.get(bufferNum); ByteBuffer bb = holder.get(); ByteOrder byteOrder = bb.order(); // slice() makes the buffer's position = 0 buffer = bb.slice().order(byteOrder); currBufferNum = bufferNum; bigEndian = byteOrder.equals(ByteOrder.BIG_ENDIAN); }
@Test public void cleanup() { PooledTopNAlgorithm pooledTopNAlgorithm = new PooledTopNAlgorithm(EasyMock.mock(StorageAdapter.class), null, null); PooledTopNAlgorithm.PooledTopNParams params = EasyMock.createMock(PooledTopNAlgorithm.PooledTopNParams.class); ResourceHolder<ByteBuffer> resourceHolder = EasyMock.createMock(ResourceHolder.class); EasyMock.expect(params.getResultsBufHolder()).andReturn(resourceHolder).times(1); EasyMock.expect(resourceHolder.get()).andReturn(ByteBuffer.allocate(1)).times(1); resourceHolder.close(); EasyMock.expectLastCall().once(); EasyMock.replay(params); EasyMock.replay(resourceHolder); pooledTopNAlgorithm.cleanup(params); EasyMock.verify(params); EasyMock.verify(resourceHolder); } }
@Override public void close() { bufHolder.close(); } };
@Override public double getMetricDoubleValue(int rowOffset, int aggOffset) { BufferAggregator agg = getAggs()[aggOffset]; int[] indexAndOffset = indexAndOffsets.get(rowOffset); ByteBuffer bb = aggBuffers.get(indexAndOffset[0]).get(); return agg.getDouble(bb, indexAndOffset[1] + aggOffsetInBuffer[aggOffset]); }
OffheapIncrementalIndex( IncrementalIndexSchema incrementalIndexSchema, boolean deserializeComplexMetrics, boolean reportParseExceptions, boolean concurrentEventAdd, boolean sortFacts, int maxRowCount, NonBlockingPool<ByteBuffer> bufferPool ) { super(incrementalIndexSchema, deserializeComplexMetrics, reportParseExceptions, concurrentEventAdd); this.maxRowCount = maxRowCount; this.bufferPool = bufferPool; this.facts = incrementalIndexSchema.isRollup() ? new RollupFactsHolder(sortFacts, dimsComparator(), getDimensions()) : new PlainFactsHolder(sortFacts, dimsComparator()); //check that stupid pool gives buffers that can hold at least one row's aggregators ResourceHolder<ByteBuffer> bb = bufferPool.take(); if (bb.get().capacity() < aggsTotalSize) { bb.close(); throw new IAE("bufferPool buffers capacity must be >= [%s]", aggsTotalSize); } aggBuffers.add(bb); }
@Override public void close() { if (holder != null) { holder.close(); } }
@Override public long getMetricLongValue(int rowOffset, int aggOffset) { BufferAggregator agg = getAggs()[aggOffset]; int[] indexAndOffset = indexAndOffsets.get(rowOffset); ByteBuffer bb = aggBuffers.get(indexAndOffset[0]).get(); return agg.getLong(bb, indexAndOffset[1] + aggOffsetInBuffer[aggOffset]); }
@Override public void close() { if (holder != null) { holder.close(); } }
@Override public boolean isNull(int rowOffset, int aggOffset) { BufferAggregator agg = getAggs()[aggOffset]; int[] indexAndOffset = indexAndOffsets.get(rowOffset); ByteBuffer bb = aggBuffers.get(indexAndOffset[0]).get(); return agg.isNull(bb, indexAndOffset[1] + aggOffsetInBuffer[aggOffset]); }
@After public void tearDown() { if (resourceHolderObj != null) { resourceHolderObj.close(); } poolOfString.close(); }
@Override public float getMetricFloatValue(int rowOffset, int aggOffset) { BufferAggregator agg = getAggs()[aggOffset]; int[] indexAndOffset = indexAndOffsets.get(rowOffset); ByteBuffer bb = aggBuffers.get(indexAndOffset[0]).get(); return agg.getFloat(bb, indexAndOffset[1] + aggOffsetInBuffer[aggOffset]); }
@Override public void close() { if (holder != null) { holder.close(); } }
@Override public Object getMetricObjectValue(int rowOffset, int aggOffset) { BufferAggregator agg = getAggs()[aggOffset]; int[] indexAndOffset = indexAndOffsets.get(rowOffset); ByteBuffer bb = aggBuffers.get(indexAndOffset[0]).get(); return agg.get(bb, indexAndOffset[1] + aggOffsetInBuffer[aggOffset]); }