You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@asterixdb.apache.org by "Ian Maxon (Code Review)" <do...@asterixdb.incubator.apache.org> on 2016/08/24 23:42:09 UTC

Change in asterixdb[master]: Fixes related to ASTERIXDB-1534

Ian Maxon has uploaded a new change for review.

  https://asterix-gerrit.ics.uci.edu/1111

Change subject: Fixes related to ASTERIXDB-1534
......................................................................

Fixes related to ASTERIXDB-1534

- Cleanup boolean conditions and exceptions from SonarQube comments
- Fix issue where filter page in on-disk LSM components
  can be confused with root page on restart

Change-Id: If51e0cd183f9d5ed6edaebef4a0568a6c67062e3
---
M hyracks-fullstack/hyracks/hyracks-storage-am-common/src/main/java/org/apache/hyracks/storage/am/common/freepage/LinkedMetaDataPageManager.java
M hyracks-fullstack/hyracks/hyracks-storage-am-common/src/main/java/org/apache/hyracks/storage/am/common/impls/AbstractTreeIndex.java
2 files changed, 40 insertions(+), 35 deletions(-)


  git pull ssh://asterix-gerrit.ics.uci.edu:29418/asterixdb refs/changes/11/1111/1

diff --git a/hyracks-fullstack/hyracks/hyracks-storage-am-common/src/main/java/org/apache/hyracks/storage/am/common/freepage/LinkedMetaDataPageManager.java b/hyracks-fullstack/hyracks/hyracks-storage-am-common/src/main/java/org/apache/hyracks/storage/am/common/freepage/LinkedMetaDataPageManager.java
index fbb16b2..e7a1123 100644
--- a/hyracks-fullstack/hyracks/hyracks-storage-am-common/src/main/java/org/apache/hyracks/storage/am/common/freepage/LinkedMetaDataPageManager.java
+++ b/hyracks-fullstack/hyracks/hyracks-storage-am-common/src/main/java/org/apache/hyracks/storage/am/common/freepage/LinkedMetaDataPageManager.java
@@ -18,7 +18,6 @@
  */
 package org.apache.hyracks.storage.am.common.freepage;
 
-import java.util.logging.Logger;
 
 import org.apache.hyracks.api.exceptions.HyracksDataException;
 import org.apache.hyracks.storage.am.common.api.IMetaDataPageManager;
@@ -44,7 +43,6 @@
     private boolean appendOnly = false;
     ICachedPage confiscatedMetaNode;
     ICachedPage filterPage;
-    private static Logger LOGGER = Logger.getLogger(LinkedMetaDataPageManager.class.getName());
 
     public LinkedMetaDataPageManager(IBufferCache bufferCache, ITreeIndexMetaDataFrameFactory metaDataFrameFactory) {
         this.bufferCache = bufferCache;
@@ -65,7 +63,8 @@
                 // allocate a new page in the chain of meta pages
                 int newPage = metaFrame.getFreePage();
                 if (newPage < 0) {
-                    throw new Exception("Inconsistent Meta Page State. It has no space, but it also has no entries.");
+                    throw new HyracksDataException(
+                              "Inconsistent Meta Page State. It has no space, but it also has no entries.");
                 }
 
                 ICachedPage newNode = bufferCache.pin(BufferedFileHandle.getDiskPageId(fileId, newPage), false);
@@ -87,8 +86,6 @@
                     bufferCache.unpin(newNode);
                 }
             }
-        } catch (Exception e) {
-            e.printStackTrace();
         } finally {
             metaNode.releaseWriteLatch(true);
             bufferCache.unpin(metaNode);
@@ -181,7 +178,7 @@
     @Override
     public int getMaxPage(ITreeIndexMetaDataFrame metaFrame) throws HyracksDataException {
         ICachedPage metaNode;
-        if (!appendOnly || (appendOnly && confiscatedMetaNode == null)) {
+        if (!appendOnly || confiscatedMetaNode == null) {
             int mdPage = getFirstMetadataPage();
             if (mdPage < 0) {
                 return IBufferCache.INVALID_PAGEID;
@@ -197,7 +194,7 @@
             maxPage = metaFrame.getMaxPage();
         } finally {
             metaNode.releaseReadLatch();
-            if (!appendOnly || (appendOnly && confiscatedMetaNode == null)) {
+            if (!appendOnly || confiscatedMetaNode == null) {
                 bufferCache.unpin(metaNode);
             }
         }
@@ -235,7 +232,7 @@
     public int getFilterPageId() throws HyracksDataException {
         ICachedPage metaNode;
         int filterPageId = NO_FILTER_IN_PLACE;
-        if (!appendOnly || (appendOnly && confiscatedMetaNode == null)) {
+        if (!appendOnly || confiscatedMetaNode == null) {
             metaNode = bufferCache.pin(BufferedFileHandle.getDiskPageId(fileId, getFirstMetadataPage()), false);
         } else {
             metaNode = confiscatedMetaNode;
@@ -251,7 +248,7 @@
             }
         } finally {
             metaNode.releaseReadLatch();
-            if (!appendOnly || (appendOnly && confiscatedMetaNode == null)) {
+            if (!appendOnly || confiscatedMetaNode == null) {
                 bufferCache.unpin(metaNode);
             }
         }
@@ -316,7 +313,7 @@
 
     @Override
     public boolean isMetaPage(ITreeIndexMetaDataFrame metaFrame) {
-        return (metaFrame.getLevel() == META_PAGE_LEVEL_INDICATOR);
+        return metaFrame.getLevel() == META_PAGE_LEVEL_INDICATOR;
     }
 
     @Override
@@ -345,6 +342,7 @@
             ITreeIndexMetaDataFrame metaFrame = metaDataFrameFactory.createFrame();
             metaFrame.setPage(confiscatedMetaNode);
             int finalFilterPage = getFreePage(metaFrame);
+            setFilterPageId(finalFilterPage);
             bufferCache.setPageDiskId(filterPage, BufferedFileHandle.getDiskPageId(fileId, finalFilterPage));
             queue.put(filterPage);
         }
@@ -413,7 +411,7 @@
     @Override
     public long getLSN() throws HyracksDataException {
         ICachedPage metaNode;
-        if (!appendOnly || (appendOnly && confiscatedMetaNode == null)) {
+        if (!appendOnly || confiscatedMetaNode == null) {
             metaNode = bufferCache.pin(BufferedFileHandle.getDiskPageId(fileId, getFirstMetadataPage()), false);
         } else {
             metaNode = confiscatedMetaNode;
@@ -425,7 +423,7 @@
             return metaFrame.getLSN();
         } finally {
             metaNode.releaseReadLatch();
-            if (!appendOnly || (appendOnly && confiscatedMetaNode == null)) {
+            if (!appendOnly || confiscatedMetaNode == null) {
                 bufferCache.unpin(metaNode);
             }
         }
diff --git a/hyracks-fullstack/hyracks/hyracks-storage-am-common/src/main/java/org/apache/hyracks/storage/am/common/impls/AbstractTreeIndex.java b/hyracks-fullstack/hyracks/hyracks-storage-am-common/src/main/java/org/apache/hyracks/storage/am/common/impls/AbstractTreeIndex.java
index 3a7eb77..c373621 100644
--- a/hyracks-fullstack/hyracks/hyracks-storage-am-common/src/main/java/org/apache/hyracks/storage/am/common/impls/AbstractTreeIndex.java
+++ b/hyracks-fullstack/hyracks/hyracks-storage-am-common/src/main/java/org/apache/hyracks/storage/am/common/impls/AbstractTreeIndex.java
@@ -46,6 +46,7 @@
 public abstract class AbstractTreeIndex implements ITreeIndex {
 
     public static final int MINIMAL_TREE_PAGE_COUNT = 2;
+    public static final int MINIMAL_TREE_PAGE_COUNT_WITH_FILTER = 3;
     protected int rootPage = 1;
 
     protected final IBufferCache bufferCache;
@@ -70,12 +71,10 @@
 
     protected int bulkloadLeafStart = 0;
 
-
     public AbstractTreeIndex(IBufferCache bufferCache, IFileMapProvider fileMapProvider,
-                             IMetaDataPageManager freePageManager, ITreeIndexFrameFactory interiorFrameFactory,
-                             ITreeIndexFrameFactory leafFrameFactory, IBinaryComparatorFactory[] cmpFactories,
-                             int fieldCount,
-                             FileReference file) {
+            IMetaDataPageManager freePageManager, ITreeIndexFrameFactory interiorFrameFactory,
+            ITreeIndexFrameFactory leafFrameFactory, IBinaryComparatorFactory[] cmpFactories, int fieldCount,
+            FileReference file) {
         this.bufferCache = bufferCache;
         this.fileMapProvider = fileMapProvider;
         this.freePageManager = freePageManager;
@@ -141,16 +140,27 @@
         }
     }
 
-    private void setRootAndMetadataPages(boolean appendOnly) throws HyracksDataException{
+    private void setRootAndMetadataPages(boolean appendOnly) throws HyracksDataException {
         if (!appendOnly) {
             // regular or empty tree
             rootPage = 1;
             bulkloadLeafStart = 2;
         } else {
-            // bulkload-only tree (used e.g. for HDFS). -1 is meta page, -2 is root page
+            //the root page is either page n-2 (no filter) or n-3 (filter)
             int numPages = bufferCache.getNumPagesOfFile(fileId);
-            //the root page is the last page before the metadata page
-            rootPage = numPages > MINIMAL_TREE_PAGE_COUNT ? numPages - MINIMAL_TREE_PAGE_COUNT : 0;
+            if(numPages > MINIMAL_TREE_PAGE_COUNT){
+                int filterPageId = freePageManager.getFilterPageId();
+                if(filterPageId > 0){
+                    rootPage = numPages - MINIMAL_TREE_PAGE_COUNT_WITH_FILTER;
+                }
+                else{
+                    rootPage = numPages - MINIMAL_TREE_PAGE_COUNT;
+                }
+            }
+            else{
+                rootPage = 0;
+            }
+
             //leaves start from the very beginning of the file.
             bulkloadLeafStart = 0;
         }
@@ -188,10 +198,9 @@
         int mdPageLoc = freePageManager.getFirstMetadataPage();
         ITreeIndexMetaDataFrame metaFrame = freePageManager.getMetaDataFrameFactory().createFrame();
         int numPages = freePageManager.getMaxPage(metaFrame);
-        if(mdPageLoc > 1 || (mdPageLoc == 1 && numPages <= MINIMAL_TREE_PAGE_COUNT -1)) { //md page doesn't count itself
+        if (mdPageLoc > 1 || (mdPageLoc == 1 && numPages <= MINIMAL_TREE_PAGE_COUNT - 1)) { //md page doesn't count itself
             appendOnly = true;
-        }
-        else{
+        } else {
             appendOnly = false;
         }
         setRootAndMetadataPages(appendOnly);
@@ -245,7 +254,7 @@
         if (rootPage == -1) {
             return true;
         }
-        if(freePageManager.appendOnlyMode() && bufferCache.getNumPagesOfFile(fileId) <= MINIMAL_TREE_PAGE_COUNT){
+        if (freePageManager.appendOnlyMode() && bufferCache.getNumPagesOfFile(fileId) <= MINIMAL_TREE_PAGE_COUNT) {
             return true;
         }
         ICachedPage rootNode = bufferCache.pin(BufferedFileHandle.getDiskPageId(fileId, rootPage), false);
@@ -262,8 +271,6 @@
             bufferCache.unpin(rootNode);
         }
     }
-
-
 
     public byte getTreeHeight(ITreeIndexFrame frame) throws HyracksDataException {
         ICachedPage rootNode = bufferCache.pin(BufferedFileHandle.getDiskPageId(fileId, rootPage), false);
@@ -331,8 +338,8 @@
         protected final IFIFOPageQueue queue;
         protected List<ICachedPage> pagesToWrite;
 
-        public AbstractTreeIndexBulkLoader(float fillFactor, boolean appendOnly) throws TreeIndexException,
-                HyracksDataException {
+        public AbstractTreeIndexBulkLoader(float fillFactor, boolean appendOnly)
+                throws TreeIndexException, HyracksDataException {
             //Initialize the tree
             if (appendOnly) {
                 create(appendOnly);
@@ -359,8 +366,8 @@
 
             NodeFrontier leafFrontier = new NodeFrontier(leafFrame.createTupleReference());
             leafFrontier.pageId = freePageManager.getFreePage(metaFrame);
-            leafFrontier.page = bufferCache.confiscatePage(
-                    BufferedFileHandle.getDiskPageId(fileId, leafFrontier.pageId));
+            leafFrontier.page = bufferCache
+                    .confiscatePage(BufferedFileHandle.getDiskPageId(fileId, leafFrontier.pageId));
 
             interiorFrame.setPage(leafFrontier.page);
             interiorFrame.initBuffer((byte) 0);
@@ -382,10 +389,10 @@
             for (NodeFrontier nodeFrontier : nodeFrontiers) {
                 ICachedPage frontierPage = nodeFrontier.page;
                 if (frontierPage.confiscated()) {
-                    bufferCache.returnPage(frontierPage,false);
+                    bufferCache.returnPage(frontierPage, false);
                 }
             }
-            for(ICachedPage pageToDiscard: pagesToWrite){
+            for (ICachedPage pageToDiscard : pagesToWrite) {
                 bufferCache.returnPage(pageToDiscard, false);
             }
             releasedLatches = true;
@@ -400,8 +407,8 @@
                 newRoot.acquireWriteLatch();
                 //root will be the highest frontier
                 NodeFrontier lastNodeFrontier = nodeFrontiers.get(nodeFrontiers.size() - 1);
-                ICachedPage oldRoot = bufferCache.pin(
-                        BufferedFileHandle.getDiskPageId(fileId, lastNodeFrontier.pageId), false);
+                ICachedPage oldRoot = bufferCache.pin(BufferedFileHandle.getDiskPageId(fileId, lastNodeFrontier.pageId),
+                        false);
                 oldRoot.acquireReadLatch();
                 lastNodeFrontier.page = oldRoot;
                 try {

-- 
To view, visit https://asterix-gerrit.ics.uci.edu/1111
To unsubscribe, visit https://asterix-gerrit.ics.uci.edu/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: If51e0cd183f9d5ed6edaebef4a0568a6c67062e3
Gerrit-PatchSet: 1
Gerrit-Project: asterixdb
Gerrit-Branch: master
Gerrit-Owner: Ian Maxon <im...@apache.org>

Change in asterixdb[master]: Fixes related to ASTERIXDB-1534

Posted by "Jenkins (Code Review)" <do...@asterixdb.incubator.apache.org>.
Jenkins has posted comments on this change.

Change subject: Fixes related to ASTERIXDB-1534
......................................................................


Patch Set 2:

Build Started https://asterix-jenkins.ics.uci.edu/job/asterix-gerrit-notopic/2366/

-- 
To view, visit https://asterix-gerrit.ics.uci.edu/1111
To unsubscribe, visit https://asterix-gerrit.ics.uci.edu/settings

Gerrit-MessageType: comment
Gerrit-Change-Id: If51e0cd183f9d5ed6edaebef4a0568a6c67062e3
Gerrit-PatchSet: 2
Gerrit-Project: asterixdb
Gerrit-Branch: master
Gerrit-Owner: Ian Maxon <im...@apache.org>
Gerrit-Reviewer: Jenkins <je...@fulliautomatix.ics.uci.edu>
Gerrit-HasComments: No

Change in asterixdb[master]: Fixes related to ASTERIXDB-1534

Posted by "Jenkins (Code Review)" <do...@asterixdb.incubator.apache.org>.
Jenkins has posted comments on this change.

Change subject: Fixes related to ASTERIXDB-1534
......................................................................


Patch Set 1:

Build Started https://asterix-jenkins.ics.uci.edu/job/asterix-gerrit-notopic/2365/

-- 
To view, visit https://asterix-gerrit.ics.uci.edu/1111
To unsubscribe, visit https://asterix-gerrit.ics.uci.edu/settings

Gerrit-MessageType: comment
Gerrit-Change-Id: If51e0cd183f9d5ed6edaebef4a0568a6c67062e3
Gerrit-PatchSet: 1
Gerrit-Project: asterixdb
Gerrit-Branch: master
Gerrit-Owner: Ian Maxon <im...@apache.org>
Gerrit-Reviewer: Jenkins <je...@fulliautomatix.ics.uci.edu>
Gerrit-HasComments: No

Change in asterixdb[master]: Fixes related to ASTERIXDB-1534

Posted by "Jenkins (Code Review)" <do...@asterixdb.incubator.apache.org>.
Jenkins has posted comments on this change.

Change subject: Fixes related to ASTERIXDB-1534
......................................................................


Patch Set 2: Integration-Tests+1

Integration Tests Successful

https://asterix-jenkins.ics.uci.edu/job/asterix-gerrit-integration-tests/441/ : SUCCESS

-- 
To view, visit https://asterix-gerrit.ics.uci.edu/1111
To unsubscribe, visit https://asterix-gerrit.ics.uci.edu/settings

Gerrit-MessageType: comment
Gerrit-Change-Id: If51e0cd183f9d5ed6edaebef4a0568a6c67062e3
Gerrit-PatchSet: 2
Gerrit-Project: asterixdb
Gerrit-Branch: master
Gerrit-Owner: Ian Maxon <im...@apache.org>
Gerrit-Reviewer: Jenkins <je...@fulliautomatix.ics.uci.edu>
Gerrit-HasComments: No

Change in asterixdb[master]: Fixes related to ASTERIXDB-1534

Posted by "Ian Maxon (Code Review)" <do...@asterixdb.incubator.apache.org>.
Ian Maxon has submitted this change and it was merged.

Change subject: Fixes related to ASTERIXDB-1534
......................................................................


Fixes related to ASTERIXDB-1534

- Cleanup boolean conditions and exceptions from SonarQube comments
- Fix issue where filter page in on-disk LSM components
  can be confused with root page on restart

Change-Id: If51e0cd183f9d5ed6edaebef4a0568a6c67062e3
Reviewed-on: https://asterix-gerrit.ics.uci.edu/1111
Sonar-Qube: Jenkins <je...@fulliautomatix.ics.uci.edu>
Tested-by: Jenkins <je...@fulliautomatix.ics.uci.edu>
Integration-Tests: Jenkins <je...@fulliautomatix.ics.uci.edu>
Reviewed-by: Jianfeng Jia <ji...@gmail.com>
Reviewed-by: Michael Blow <mb...@apache.org>
---
M hyracks-fullstack/hyracks/hyracks-storage-am-common/src/main/java/org/apache/hyracks/storage/am/common/freepage/LinkedMetaDataPageManager.java
M hyracks-fullstack/hyracks/hyracks-storage-am-common/src/main/java/org/apache/hyracks/storage/am/common/impls/AbstractTreeIndex.java
2 files changed, 38 insertions(+), 35 deletions(-)

Approvals:
  Michael Blow: Looks good to me, approved
  Jianfeng Jia: Looks good to me, but someone else must approve
  Jenkins: Verified; No violations found; Verified



diff --git a/hyracks-fullstack/hyracks/hyracks-storage-am-common/src/main/java/org/apache/hyracks/storage/am/common/freepage/LinkedMetaDataPageManager.java b/hyracks-fullstack/hyracks/hyracks-storage-am-common/src/main/java/org/apache/hyracks/storage/am/common/freepage/LinkedMetaDataPageManager.java
index fbb16b2..e7a1123 100644
--- a/hyracks-fullstack/hyracks/hyracks-storage-am-common/src/main/java/org/apache/hyracks/storage/am/common/freepage/LinkedMetaDataPageManager.java
+++ b/hyracks-fullstack/hyracks/hyracks-storage-am-common/src/main/java/org/apache/hyracks/storage/am/common/freepage/LinkedMetaDataPageManager.java
@@ -18,7 +18,6 @@
  */
 package org.apache.hyracks.storage.am.common.freepage;
 
-import java.util.logging.Logger;
 
 import org.apache.hyracks.api.exceptions.HyracksDataException;
 import org.apache.hyracks.storage.am.common.api.IMetaDataPageManager;
@@ -44,7 +43,6 @@
     private boolean appendOnly = false;
     ICachedPage confiscatedMetaNode;
     ICachedPage filterPage;
-    private static Logger LOGGER = Logger.getLogger(LinkedMetaDataPageManager.class.getName());
 
     public LinkedMetaDataPageManager(IBufferCache bufferCache, ITreeIndexMetaDataFrameFactory metaDataFrameFactory) {
         this.bufferCache = bufferCache;
@@ -65,7 +63,8 @@
                 // allocate a new page in the chain of meta pages
                 int newPage = metaFrame.getFreePage();
                 if (newPage < 0) {
-                    throw new Exception("Inconsistent Meta Page State. It has no space, but it also has no entries.");
+                    throw new HyracksDataException(
+                              "Inconsistent Meta Page State. It has no space, but it also has no entries.");
                 }
 
                 ICachedPage newNode = bufferCache.pin(BufferedFileHandle.getDiskPageId(fileId, newPage), false);
@@ -87,8 +86,6 @@
                     bufferCache.unpin(newNode);
                 }
             }
-        } catch (Exception e) {
-            e.printStackTrace();
         } finally {
             metaNode.releaseWriteLatch(true);
             bufferCache.unpin(metaNode);
@@ -181,7 +178,7 @@
     @Override
     public int getMaxPage(ITreeIndexMetaDataFrame metaFrame) throws HyracksDataException {
         ICachedPage metaNode;
-        if (!appendOnly || (appendOnly && confiscatedMetaNode == null)) {
+        if (!appendOnly || confiscatedMetaNode == null) {
             int mdPage = getFirstMetadataPage();
             if (mdPage < 0) {
                 return IBufferCache.INVALID_PAGEID;
@@ -197,7 +194,7 @@
             maxPage = metaFrame.getMaxPage();
         } finally {
             metaNode.releaseReadLatch();
-            if (!appendOnly || (appendOnly && confiscatedMetaNode == null)) {
+            if (!appendOnly || confiscatedMetaNode == null) {
                 bufferCache.unpin(metaNode);
             }
         }
@@ -235,7 +232,7 @@
     public int getFilterPageId() throws HyracksDataException {
         ICachedPage metaNode;
         int filterPageId = NO_FILTER_IN_PLACE;
-        if (!appendOnly || (appendOnly && confiscatedMetaNode == null)) {
+        if (!appendOnly || confiscatedMetaNode == null) {
             metaNode = bufferCache.pin(BufferedFileHandle.getDiskPageId(fileId, getFirstMetadataPage()), false);
         } else {
             metaNode = confiscatedMetaNode;
@@ -251,7 +248,7 @@
             }
         } finally {
             metaNode.releaseReadLatch();
-            if (!appendOnly || (appendOnly && confiscatedMetaNode == null)) {
+            if (!appendOnly || confiscatedMetaNode == null) {
                 bufferCache.unpin(metaNode);
             }
         }
@@ -316,7 +313,7 @@
 
     @Override
     public boolean isMetaPage(ITreeIndexMetaDataFrame metaFrame) {
-        return (metaFrame.getLevel() == META_PAGE_LEVEL_INDICATOR);
+        return metaFrame.getLevel() == META_PAGE_LEVEL_INDICATOR;
     }
 
     @Override
@@ -345,6 +342,7 @@
             ITreeIndexMetaDataFrame metaFrame = metaDataFrameFactory.createFrame();
             metaFrame.setPage(confiscatedMetaNode);
             int finalFilterPage = getFreePage(metaFrame);
+            setFilterPageId(finalFilterPage);
             bufferCache.setPageDiskId(filterPage, BufferedFileHandle.getDiskPageId(fileId, finalFilterPage));
             queue.put(filterPage);
         }
@@ -413,7 +411,7 @@
     @Override
     public long getLSN() throws HyracksDataException {
         ICachedPage metaNode;
-        if (!appendOnly || (appendOnly && confiscatedMetaNode == null)) {
+        if (!appendOnly || confiscatedMetaNode == null) {
             metaNode = bufferCache.pin(BufferedFileHandle.getDiskPageId(fileId, getFirstMetadataPage()), false);
         } else {
             metaNode = confiscatedMetaNode;
@@ -425,7 +423,7 @@
             return metaFrame.getLSN();
         } finally {
             metaNode.releaseReadLatch();
-            if (!appendOnly || (appendOnly && confiscatedMetaNode == null)) {
+            if (!appendOnly || confiscatedMetaNode == null) {
                 bufferCache.unpin(metaNode);
             }
         }
diff --git a/hyracks-fullstack/hyracks/hyracks-storage-am-common/src/main/java/org/apache/hyracks/storage/am/common/impls/AbstractTreeIndex.java b/hyracks-fullstack/hyracks/hyracks-storage-am-common/src/main/java/org/apache/hyracks/storage/am/common/impls/AbstractTreeIndex.java
index 3a7eb77..0dcfc90 100644
--- a/hyracks-fullstack/hyracks/hyracks-storage-am-common/src/main/java/org/apache/hyracks/storage/am/common/impls/AbstractTreeIndex.java
+++ b/hyracks-fullstack/hyracks/hyracks-storage-am-common/src/main/java/org/apache/hyracks/storage/am/common/impls/AbstractTreeIndex.java
@@ -46,6 +46,7 @@
 public abstract class AbstractTreeIndex implements ITreeIndex {
 
     public static final int MINIMAL_TREE_PAGE_COUNT = 2;
+    public static final int MINIMAL_TREE_PAGE_COUNT_WITH_FILTER = 3;
     protected int rootPage = 1;
 
     protected final IBufferCache bufferCache;
@@ -70,12 +71,10 @@
 
     protected int bulkloadLeafStart = 0;
 
-
     public AbstractTreeIndex(IBufferCache bufferCache, IFileMapProvider fileMapProvider,
-                             IMetaDataPageManager freePageManager, ITreeIndexFrameFactory interiorFrameFactory,
-                             ITreeIndexFrameFactory leafFrameFactory, IBinaryComparatorFactory[] cmpFactories,
-                             int fieldCount,
-                             FileReference file) {
+            IMetaDataPageManager freePageManager, ITreeIndexFrameFactory interiorFrameFactory,
+            ITreeIndexFrameFactory leafFrameFactory, IBinaryComparatorFactory[] cmpFactories, int fieldCount,
+            FileReference file) {
         this.bufferCache = bufferCache;
         this.fileMapProvider = fileMapProvider;
         this.freePageManager = freePageManager;
@@ -141,16 +140,25 @@
         }
     }
 
-    private void setRootAndMetadataPages(boolean appendOnly) throws HyracksDataException{
+    private void setRootAndMetadataPages(boolean appendOnly) throws HyracksDataException {
         if (!appendOnly) {
             // regular or empty tree
             rootPage = 1;
             bulkloadLeafStart = 2;
         } else {
-            // bulkload-only tree (used e.g. for HDFS). -1 is meta page, -2 is root page
+            //the root page is either page n-2 (no filter) or n-3 (filter)
             int numPages = bufferCache.getNumPagesOfFile(fileId);
-            //the root page is the last page before the metadata page
-            rootPage = numPages > MINIMAL_TREE_PAGE_COUNT ? numPages - MINIMAL_TREE_PAGE_COUNT : 0;
+            if (numPages > MINIMAL_TREE_PAGE_COUNT) {
+                int filterPageId = freePageManager.getFilterPageId();
+                if (filterPageId > 0) {
+                    rootPage = numPages - MINIMAL_TREE_PAGE_COUNT_WITH_FILTER;
+                } else {
+                    rootPage = numPages - MINIMAL_TREE_PAGE_COUNT;
+                }
+            } else {
+                rootPage = 0;
+            }
+
             //leaves start from the very beginning of the file.
             bulkloadLeafStart = 0;
         }
@@ -188,10 +196,9 @@
         int mdPageLoc = freePageManager.getFirstMetadataPage();
         ITreeIndexMetaDataFrame metaFrame = freePageManager.getMetaDataFrameFactory().createFrame();
         int numPages = freePageManager.getMaxPage(metaFrame);
-        if(mdPageLoc > 1 || (mdPageLoc == 1 && numPages <= MINIMAL_TREE_PAGE_COUNT -1)) { //md page doesn't count itself
+        if (mdPageLoc > 1 || (mdPageLoc == 1 && numPages <= MINIMAL_TREE_PAGE_COUNT - 1)) { //md page doesn't count
             appendOnly = true;
-        }
-        else{
+        } else {
             appendOnly = false;
         }
         setRootAndMetadataPages(appendOnly);
@@ -245,7 +252,7 @@
         if (rootPage == -1) {
             return true;
         }
-        if(freePageManager.appendOnlyMode() && bufferCache.getNumPagesOfFile(fileId) <= MINIMAL_TREE_PAGE_COUNT){
+        if (freePageManager.appendOnlyMode() && bufferCache.getNumPagesOfFile(fileId) <= MINIMAL_TREE_PAGE_COUNT) {
             return true;
         }
         ICachedPage rootNode = bufferCache.pin(BufferedFileHandle.getDiskPageId(fileId, rootPage), false);
@@ -262,8 +269,6 @@
             bufferCache.unpin(rootNode);
         }
     }
-
-
 
     public byte getTreeHeight(ITreeIndexFrame frame) throws HyracksDataException {
         ICachedPage rootNode = bufferCache.pin(BufferedFileHandle.getDiskPageId(fileId, rootPage), false);
@@ -331,8 +336,8 @@
         protected final IFIFOPageQueue queue;
         protected List<ICachedPage> pagesToWrite;
 
-        public AbstractTreeIndexBulkLoader(float fillFactor, boolean appendOnly) throws TreeIndexException,
-                HyracksDataException {
+        public AbstractTreeIndexBulkLoader(float fillFactor, boolean appendOnly)
+                throws TreeIndexException, HyracksDataException {
             //Initialize the tree
             if (appendOnly) {
                 create(appendOnly);
@@ -359,8 +364,8 @@
 
             NodeFrontier leafFrontier = new NodeFrontier(leafFrame.createTupleReference());
             leafFrontier.pageId = freePageManager.getFreePage(metaFrame);
-            leafFrontier.page = bufferCache.confiscatePage(
-                    BufferedFileHandle.getDiskPageId(fileId, leafFrontier.pageId));
+            leafFrontier.page = bufferCache
+                    .confiscatePage(BufferedFileHandle.getDiskPageId(fileId, leafFrontier.pageId));
 
             interiorFrame.setPage(leafFrontier.page);
             interiorFrame.initBuffer((byte) 0);
@@ -382,10 +387,10 @@
             for (NodeFrontier nodeFrontier : nodeFrontiers) {
                 ICachedPage frontierPage = nodeFrontier.page;
                 if (frontierPage.confiscated()) {
-                    bufferCache.returnPage(frontierPage,false);
+                    bufferCache.returnPage(frontierPage, false);
                 }
             }
-            for(ICachedPage pageToDiscard: pagesToWrite){
+            for (ICachedPage pageToDiscard : pagesToWrite) {
                 bufferCache.returnPage(pageToDiscard, false);
             }
             releasedLatches = true;
@@ -400,8 +405,8 @@
                 newRoot.acquireWriteLatch();
                 //root will be the highest frontier
                 NodeFrontier lastNodeFrontier = nodeFrontiers.get(nodeFrontiers.size() - 1);
-                ICachedPage oldRoot = bufferCache.pin(
-                        BufferedFileHandle.getDiskPageId(fileId, lastNodeFrontier.pageId), false);
+                ICachedPage oldRoot = bufferCache.pin(BufferedFileHandle.getDiskPageId(fileId, lastNodeFrontier.pageId),
+                        false);
                 oldRoot.acquireReadLatch();
                 lastNodeFrontier.page = oldRoot;
                 try {

-- 
To view, visit https://asterix-gerrit.ics.uci.edu/1111
To unsubscribe, visit https://asterix-gerrit.ics.uci.edu/settings

Gerrit-MessageType: merged
Gerrit-Change-Id: If51e0cd183f9d5ed6edaebef4a0568a6c67062e3
Gerrit-PatchSet: 3
Gerrit-Project: asterixdb
Gerrit-Branch: master
Gerrit-Owner: Ian Maxon <im...@apache.org>
Gerrit-Reviewer: Ian Maxon <im...@apache.org>
Gerrit-Reviewer: Jenkins <je...@fulliautomatix.ics.uci.edu>
Gerrit-Reviewer: Jianfeng Jia <ji...@gmail.com>
Gerrit-Reviewer: Michael Blow <mb...@apache.org>

Change in asterixdb[master]: Fixes related to ASTERIXDB-1534

Posted by "Jianfeng Jia (Code Review)" <do...@asterixdb.incubator.apache.org>.
Jianfeng Jia has posted comments on this change.

Change subject: Fixes related to ASTERIXDB-1534
......................................................................


Patch Set 2: Code-Review+1

-- 
To view, visit https://asterix-gerrit.ics.uci.edu/1111
To unsubscribe, visit https://asterix-gerrit.ics.uci.edu/settings

Gerrit-MessageType: comment
Gerrit-Change-Id: If51e0cd183f9d5ed6edaebef4a0568a6c67062e3
Gerrit-PatchSet: 2
Gerrit-Project: asterixdb
Gerrit-Branch: master
Gerrit-Owner: Ian Maxon <im...@apache.org>
Gerrit-Reviewer: Jenkins <je...@fulliautomatix.ics.uci.edu>
Gerrit-Reviewer: Jianfeng Jia <ji...@gmail.com>
Gerrit-Reviewer: Michael Blow <mb...@apache.org>
Gerrit-HasComments: No

Change in asterixdb[master]: Fixes related to ASTERIXDB-1534

Posted by "Michael Blow (Code Review)" <do...@asterixdb.incubator.apache.org>.
Michael Blow has posted comments on this change.

Change subject: Fixes related to ASTERIXDB-1534
......................................................................


Patch Set 2: Code-Review+2

-- 
To view, visit https://asterix-gerrit.ics.uci.edu/1111
To unsubscribe, visit https://asterix-gerrit.ics.uci.edu/settings

Gerrit-MessageType: comment
Gerrit-Change-Id: If51e0cd183f9d5ed6edaebef4a0568a6c67062e3
Gerrit-PatchSet: 2
Gerrit-Project: asterixdb
Gerrit-Branch: master
Gerrit-Owner: Ian Maxon <im...@apache.org>
Gerrit-Reviewer: Jenkins <je...@fulliautomatix.ics.uci.edu>
Gerrit-Reviewer: Jianfeng Jia <ji...@gmail.com>
Gerrit-Reviewer: Michael Blow <mb...@apache.org>
Gerrit-HasComments: No

Change in asterixdb[master]: Fixes related to ASTERIXDB-1534

Posted by "Ian Maxon (Code Review)" <do...@asterixdb.incubator.apache.org>.
Hello Jenkins,

I'd like you to reexamine a change.  Please visit

    https://asterix-gerrit.ics.uci.edu/1111

to look at the new patch set (#2).

Change subject: Fixes related to ASTERIXDB-1534
......................................................................

Fixes related to ASTERIXDB-1534

- Cleanup boolean conditions and exceptions from SonarQube comments
- Fix issue where filter page in on-disk LSM components
  can be confused with root page on restart

Change-Id: If51e0cd183f9d5ed6edaebef4a0568a6c67062e3
---
M hyracks-fullstack/hyracks/hyracks-storage-am-common/src/main/java/org/apache/hyracks/storage/am/common/freepage/LinkedMetaDataPageManager.java
M hyracks-fullstack/hyracks/hyracks-storage-am-common/src/main/java/org/apache/hyracks/storage/am/common/impls/AbstractTreeIndex.java
2 files changed, 38 insertions(+), 35 deletions(-)


  git pull ssh://asterix-gerrit.ics.uci.edu:29418/asterixdb refs/changes/11/1111/2
-- 
To view, visit https://asterix-gerrit.ics.uci.edu/1111
To unsubscribe, visit https://asterix-gerrit.ics.uci.edu/settings

Gerrit-MessageType: newpatchset
Gerrit-Change-Id: If51e0cd183f9d5ed6edaebef4a0568a6c67062e3
Gerrit-PatchSet: 2
Gerrit-Project: asterixdb
Gerrit-Branch: master
Gerrit-Owner: Ian Maxon <im...@apache.org>
Gerrit-Reviewer: Jenkins <je...@fulliautomatix.ics.uci.edu>

Change in asterixdb[master]: Fixes related to ASTERIXDB-1534

Posted by "Jenkins (Code Review)" <do...@asterixdb.incubator.apache.org>.
Jenkins has posted comments on this change.

Change subject: Fixes related to ASTERIXDB-1534
......................................................................


Patch Set 2:

Integration Tests Started https://asterix-jenkins.ics.uci.edu/job/asterix-gerrit-integration-tests/438/

-- 
To view, visit https://asterix-gerrit.ics.uci.edu/1111
To unsubscribe, visit https://asterix-gerrit.ics.uci.edu/settings

Gerrit-MessageType: comment
Gerrit-Change-Id: If51e0cd183f9d5ed6edaebef4a0568a6c67062e3
Gerrit-PatchSet: 2
Gerrit-Project: asterixdb
Gerrit-Branch: master
Gerrit-Owner: Ian Maxon <im...@apache.org>
Gerrit-Reviewer: Jenkins <je...@fulliautomatix.ics.uci.edu>
Gerrit-HasComments: No

Change in asterixdb[master]: Fixes related to ASTERIXDB-1534

Posted by "Jenkins (Code Review)" <do...@asterixdb.incubator.apache.org>.
Jenkins has posted comments on this change.

Change subject: Fixes related to ASTERIXDB-1534
......................................................................


Patch Set 2:

Integration Tests Started https://asterix-jenkins.ics.uci.edu/job/asterix-gerrit-integration-tests/441/

-- 
To view, visit https://asterix-gerrit.ics.uci.edu/1111
To unsubscribe, visit https://asterix-gerrit.ics.uci.edu/settings

Gerrit-MessageType: comment
Gerrit-Change-Id: If51e0cd183f9d5ed6edaebef4a0568a6c67062e3
Gerrit-PatchSet: 2
Gerrit-Project: asterixdb
Gerrit-Branch: master
Gerrit-Owner: Ian Maxon <im...@apache.org>
Gerrit-Reviewer: Jenkins <je...@fulliautomatix.ics.uci.edu>
Gerrit-HasComments: No