presto-atop/src/main/java/io/prestosql/plugin/atop/AtopPageSource.java/AtopPageSource/getNextPage
class AtopPageSource:    @Override
    public Page getNextPage()
    {
        if (atop == null) {
            try {
                readerPermits.acquire();
            }
            catch (InterruptedException e) {
                Thread.currentThread().interrupt();
                throw new RuntimeException(e);
            }
            try {
                atop = atopFactory.create(table, date);
            }
            catch (RuntimeException e) {
                atop = null;
                readerPermits.release();
                throw e;
            }
        }

        while (!pageBuilder.isFull()) {
            if (!atop.hasNext()) {
                close();
                break;
            }
            String row = atop.next();

            if (row.equals("SEP")) {
                continue;
            }

            if (table == AtopTable.REBOOTS) {
                // For the reboots table we're only interested in RESET events, and the event that follows them
                if (!row.equals("RESET")) {
                    continue;
                }
                if (!atop.hasNext()) {
                    close();
                    break;
                }
                row = atop.next();
            }
            else {
                if (row.equals("RESET")) {
                    if (atop.hasNext()) {
                        // Drop samples immediately after a RESET, since this will be a "since boot" event
                        // which tends to have a very long duration
                        atop.next();
                    }
                    continue;
                }
            }

            List<String> fields = Splitter.on(" ").splitToList(row);
            pageBuilder.declarePosition();
            for (int i = 0; i < columns.size(); i++) {
                if (columns.get(i) == AtopColumn.HOST_IP) {
                    types.get(i).writeSlice(pageBuilder.getBlockBuilder(i), hostIp);
                }
                else {
                    columns.get(i).getParser().parse(fields, types.get(i), pageBuilder.getBlockBuilder(i), session);
                }
            }
        }

        Page page = pageBuilder.build();
        pageBuilder.reset();

        return page;
    }