Exemplo n.º 1
0
 /**
  * Remove all pages until the given data page.
  *
  * @param trunkPage the first trunk page
  * @param firstDataPageToKeep the first data page to keep
  * @return the trunk page of the data page to keep
  */
 private int removeUntil(int trunkPage, int firstDataPageToKeep) {
   trace.debug("log.removeUntil " + trunkPage + " " + firstDataPageToKeep);
   int last = trunkPage;
   while (true) {
     Page p = store.getPage(trunkPage);
     PageStreamTrunk t = (PageStreamTrunk) p;
     if (t == null) {
       throw DbException.throwInternalError(
           "log.removeUntil not found: " + firstDataPageToKeep + " last " + last);
     }
     logKey = t.getLogKey();
     last = t.getPos();
     if (t.contains(firstDataPageToKeep)) {
       return last;
     }
     trunkPage = t.getNextTrunk();
     IntArray list = new IntArray();
     list.add(t.getPos());
     for (int i = 0; ; i++) {
       int next = t.getPageData(i);
       if (next == -1) {
         break;
       }
       list.add(next);
     }
     freeLogPages(list);
     pageOut.free(t);
   }
 }