org.apache.flink.runtime.state.gemini.engine.DbPageIteratorImpl Maven / Gradle / Ivy
/*
*
* * Licensed to the Apache Software Foundation (ASF) under one
* * or more contributor license agreements. See the NOTICE file
* * distributed with this work for additional information
* * regarding copyright ownership. The ASF licenses this file
* * to you under the Apache License, Version 2.0 (the
* * "License"); you may not use this file except in compliance
* * with the License. You may obtain a copy of the License at
* *
* * http://www.apache.org/licenses/LICENSE-2.0
* *
* * Unless required by applicable law or agreed to in writing, software
* * distributed under the License is distributed on an "AS IS" BASIS,
* * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* * See the License for the specific language governing permissions and
* * limitations under the License.
*
*/
package org.apache.flink.runtime.state.gemini.engine;
import org.apache.flink.runtime.state.gemini.engine.page.PageAddress;
import java.util.Collections;
import java.util.Iterator;
/**
* Implementation of {@link DbPageIterator}.
*/
public class DbPageIteratorImpl implements DbPageIterator {
/**
* The DB which is iterated over.
*/
private final GeminiDB geminiDB;
/**
* Iterates all tables in DB.
*/
Iterator tableIterator;
/**
* Iterates all regions in the current table.
*/
Iterator regionIterator;
/**
* Iterates all pages in current region.
*/
Iterator pageIterator;
/**
* Current table.
*/
private GTable table;
/**
* Current region.
*/
private GRegion region;
/**
* Current page.
*/
private PageAddress page;
public DbPageIteratorImpl(GeminiDB geminiDB) {
this.geminiDB = geminiDB;
this.tableIterator = geminiDB.getGeminiTableMap().values().iterator();
this.regionIterator = Collections.emptyIterator();
this.pageIterator = Collections.emptyIterator();
advance();
}
private void advance() {
while (!pageIterator.hasNext()) {
while (!regionIterator.hasNext()) {
if (!tableIterator.hasNext()) {
table = null;
region = null;
page = null;
return;
}
table = tableIterator.next();
regionIterator = table.regionIterator();
}
region = regionIterator.next();
pageIterator = region.getPageStore().getPageIndex().pageIterator();
}
page = pageIterator.next();
}
@Override
public boolean valid() {
return page != null;
}
@Override
public void next() {
advance();
}
@Override
public GTable currentTable() {
return table;
}
@Override
public GRegion currentRegion() {
return region;
}
@Override
public PageAddress currentPage() {
return page;
}
}