use of com.facebook.presto.spi.Page in project presto by prestodb.
the class BlackHolePageSourceProvider method createPageSource.
@Override
public ConnectorPageSource createPageSource(ConnectorTransactionHandle transactionHandle, ConnectorSession session, ConnectorSplit split, List<ColumnHandle> columns) {
BlackHoleSplit blackHoleSplit = (BlackHoleSplit) split;
ImmutableList.Builder<Type> builder = ImmutableList.builder();
for (ColumnHandle column : columns) {
builder.add(((BlackHoleColumnHandle) column).getColumnType());
}
List<Type> types = builder.build();
Page page = generateZeroPage(types, blackHoleSplit.getRowsPerPage(), blackHoleSplit.getFieldsLength());
return new BlackHolePageSource(page, blackHoleSplit.getPagesCount(), executorService, blackHoleSplit.getPageProcessingDelay());
}
use of com.facebook.presto.spi.Page in project presto by prestodb.
the class TestOrcPageSourceMemoryTracking method testTableScanOperator.
@Test
public void testTableScanOperator() throws Exception {
// Numbers used in assertions in this test may change when implementation is modified,
// feel free to change them if they break in the future
DriverContext driverContext = testPreparer.newDriverContext();
SourceOperator operator = testPreparer.newTableScanOperator(driverContext);
assertEquals(driverContext.getSystemMemoryUsage(), 0);
long memoryUsage = -1;
for (int i = 0; i < 20; i++) {
assertFalse(operator.isFinished());
Page page = operator.getOutput();
assertNotNull(page);
page.getBlock(1);
if (memoryUsage == -1) {
memoryUsage = driverContext.getSystemMemoryUsage();
assertBetweenInclusive(memoryUsage, 460000L, 469999L);
} else {
assertEquals(driverContext.getSystemMemoryUsage(), memoryUsage);
}
}
memoryUsage = -1;
for (int i = 20; i < 40; i++) {
assertFalse(operator.isFinished());
Page page = operator.getOutput();
assertNotNull(page);
page.getBlock(1);
if (memoryUsage == -1) {
memoryUsage = driverContext.getSystemMemoryUsage();
assertBetweenInclusive(memoryUsage, 460000L, 469999L);
} else {
assertEquals(driverContext.getSystemMemoryUsage(), memoryUsage);
}
}
memoryUsage = -1;
for (int i = 40; i < 50; i++) {
assertFalse(operator.isFinished());
Page page = operator.getOutput();
assertNotNull(page);
page.getBlock(1);
if (memoryUsage == -1) {
memoryUsage = driverContext.getSystemMemoryUsage();
assertBetweenInclusive(memoryUsage, 360000L, 369999L);
} else {
assertEquals(driverContext.getSystemMemoryUsage(), memoryUsage);
}
}
assertFalse(operator.isFinished());
assertNull(operator.getOutput());
assertTrue(operator.isFinished());
assertEquals(driverContext.getSystemMemoryUsage(), 0);
}
use of com.facebook.presto.spi.Page in project presto by prestodb.
the class TestOrcPageSourceMemoryTracking method testPageSource.
@Test
public void testPageSource() throws Exception {
// Numbers used in assertions in this test may change when implementation is modified,
// feel free to change them if they break in the future
ConnectorPageSource pageSource = testPreparer.newPageSource();
assertEquals(pageSource.getSystemMemoryUsage(), 0);
long memoryUsage = -1;
for (int i = 0; i < 20; i++) {
assertFalse(pageSource.isFinished());
Page page = pageSource.getNextPage();
assertNotNull(page);
Block block = page.getBlock(1);
if (memoryUsage == -1) {
// Memory usage before lazy-loading the block
assertBetweenInclusive(pageSource.getSystemMemoryUsage(), 180000L, 189999L);
// trigger loading for lazy block
createUnboundedVarcharType().getSlice(block, block.getPositionCount() - 1);
memoryUsage = pageSource.getSystemMemoryUsage();
// Memory usage after lazy-loading the actual block
assertBetweenInclusive(memoryUsage, 460000L, 469999L);
} else {
assertEquals(pageSource.getSystemMemoryUsage(), memoryUsage);
// trigger loading for lazy block
createUnboundedVarcharType().getSlice(block, block.getPositionCount() - 1);
assertEquals(pageSource.getSystemMemoryUsage(), memoryUsage);
}
}
memoryUsage = -1;
for (int i = 20; i < 40; i++) {
assertFalse(pageSource.isFinished());
Page page = pageSource.getNextPage();
assertNotNull(page);
Block block = page.getBlock(1);
if (memoryUsage == -1) {
// Memory usage before lazy-loading the block
assertBetweenInclusive(pageSource.getSystemMemoryUsage(), 180000L, 189999L);
// trigger loading for lazy block
createUnboundedVarcharType().getSlice(block, block.getPositionCount() - 1);
memoryUsage = pageSource.getSystemMemoryUsage();
// Memory usage after lazy-loading the actual block
assertBetweenInclusive(memoryUsage, 460000L, 469999L);
} else {
assertEquals(pageSource.getSystemMemoryUsage(), memoryUsage);
// trigger loading for lazy block
createUnboundedVarcharType().getSlice(block, block.getPositionCount() - 1);
assertEquals(pageSource.getSystemMemoryUsage(), memoryUsage);
}
}
memoryUsage = -1;
for (int i = 40; i < 50; i++) {
assertFalse(pageSource.isFinished());
Page page = pageSource.getNextPage();
assertNotNull(page);
Block block = page.getBlock(1);
if (memoryUsage == -1) {
// Memory usage before lazy-loading the block
assertBetweenInclusive(pageSource.getSystemMemoryUsage(), 90000L, 99999L);
// trigger loading for lazy block
createUnboundedVarcharType().getSlice(block, block.getPositionCount() - 1);
memoryUsage = pageSource.getSystemMemoryUsage();
// Memory usage after lazy-loading the actual block
assertBetweenInclusive(memoryUsage, 360000L, 369999L);
} else {
assertEquals(pageSource.getSystemMemoryUsage(), memoryUsage);
// trigger loading for lazy block
createUnboundedVarcharType().getSlice(block, block.getPositionCount() - 1);
assertEquals(pageSource.getSystemMemoryUsage(), memoryUsage);
}
}
assertFalse(pageSource.isFinished());
assertNull(pageSource.getNextPage());
assertTrue(pageSource.isFinished());
assertEquals(pageSource.getSystemMemoryUsage(), 0);
pageSource.close();
}
use of com.facebook.presto.spi.Page in project presto by prestodb.
the class TestJoinProbeCompiler method testSingleChannel.
@Test(dataProvider = "hashEnabledValues")
public void testSingleChannel(boolean hashEnabled) throws Exception {
taskContext.addPipelineContext(0, true, true).addDriverContext();
ImmutableList<Type> types = ImmutableList.of(VARCHAR, DOUBLE);
ImmutableList<Type> outputTypes = ImmutableList.of(VARCHAR);
List<Integer> outputChannels = ImmutableList.of(0);
LookupSourceSupplierFactory lookupSourceSupplierFactory = joinCompiler.compileLookupSourceFactory(types, Ints.asList(0));
// crate hash strategy with a single channel blocks -- make sure there is some overlap in values
List<Block> varcharChannel = ImmutableList.of(BlockAssertions.createStringSequenceBlock(10, 20), BlockAssertions.createStringSequenceBlock(20, 30), BlockAssertions.createStringSequenceBlock(15, 25));
List<Block> extraUnusedDoubleChannel = ImmutableList.of(BlockAssertions.createDoubleSequenceBlock(10, 20), BlockAssertions.createDoubleSequenceBlock(20, 30), BlockAssertions.createDoubleSequenceBlock(15, 25));
LongArrayList addresses = new LongArrayList();
for (int blockIndex = 0; blockIndex < varcharChannel.size(); blockIndex++) {
Block block = varcharChannel.get(blockIndex);
for (int positionIndex = 0; positionIndex < block.getPositionCount(); positionIndex++) {
addresses.add(encodeSyntheticAddress(blockIndex, positionIndex));
}
}
Optional<Integer> hashChannel = Optional.empty();
List<List<Block>> channels = ImmutableList.of(varcharChannel, extraUnusedDoubleChannel);
if (hashEnabled) {
ImmutableList.Builder<Block> hashChannelBuilder = ImmutableList.builder();
for (Block block : varcharChannel) {
hashChannelBuilder.add(TypeUtils.getHashBlock(ImmutableList.<Type>of(VARCHAR), block));
}
types = ImmutableList.of(VARCHAR, DOUBLE, BigintType.BIGINT);
hashChannel = Optional.of(2);
channels = ImmutableList.of(varcharChannel, extraUnusedDoubleChannel, hashChannelBuilder.build());
outputChannels = ImmutableList.of(0, 2);
outputTypes = ImmutableList.of(VARCHAR, BigintType.BIGINT);
}
LookupSource lookupSource = lookupSourceSupplierFactory.createLookupSourceSupplier(taskContext.getSession().toConnectorSession(), addresses, channels, hashChannel, Optional.empty()).get();
JoinProbeCompiler joinProbeCompiler = new JoinProbeCompiler();
JoinProbeFactory probeFactory = joinProbeCompiler.internalCompileJoinProbe(types, outputChannels, Ints.asList(0), hashChannel);
Page page = SequencePageBuilder.createSequencePage(types, 10, 10, 10);
Page outputPage = new Page(page.getBlock(0));
if (hashEnabled) {
page = new Page(page.getBlock(0), page.getBlock(1), TypeUtils.getHashBlock(ImmutableList.of(VARCHAR), page.getBlock(0)));
outputPage = new Page(page.getBlock(0), page.getBlock(2));
}
JoinProbe joinProbe = probeFactory.createJoinProbe(lookupSource, page);
// verify channel count
assertEquals(joinProbe.getOutputChannelCount(), outputChannels.size());
PageBuilder pageBuilder = new PageBuilder(outputTypes);
for (int position = 0; position < page.getPositionCount(); position++) {
assertTrue(joinProbe.advanceNextPosition());
pageBuilder.declarePosition();
joinProbe.appendTo(pageBuilder);
assertEquals(joinProbe.getCurrentJoinPosition(), lookupSource.getJoinPosition(position, page, page));
}
assertFalse(joinProbe.advanceNextPosition());
assertPageEquals(outputTypes, pageBuilder.build(), outputPage);
}
use of com.facebook.presto.spi.Page in project presto by prestodb.
the class BenchmarkDecimalOperators method execute.
private List<Page> execute(BaseState state) {
ImmutableList.Builder<Page> pages = ImmutableList.builder();
Page inputPage = state.getInputPage();
PageBuilder pageBuilder = state.getPageBuilder();
PageProcessor processor = state.getProcessor();
int currentPosition = 0;
while (currentPosition < PAGE_SIZE) {
pageBuilder.reset();
currentPosition = processor.process(null, inputPage, currentPosition, inputPage.getPositionCount(), pageBuilder);
pages.add(pageBuilder.build());
}
return pages.build();
}
Aggregations