Commit cd976d16 authored by unknown's avatar unknown
Browse files

ndb dd -

  fix undo of bitmap


storage/ndb/include/kernel/signaldata/PgmanContinueB.hpp:
  Handle locked pages last
storage/ndb/src/kernel/blocks/dblqh/DblqhMain.cpp:
  Remove LCP_PREPARE to pgman
storage/ndb/src/kernel/blocks/dblqh/Makefile.am:
  Fix make of redo reader
storage/ndb/src/kernel/blocks/dbtup/DbtupCommit.cpp:
  Fix assert
storage/ndb/src/kernel/blocks/dbtup/DbtupDiskAlloc.cpp:
  Fix bitmap undo
storage/ndb/src/kernel/blocks/lgman.cpp:
  Better lgman dump
storage/ndb/src/kernel/blocks/pgman.cpp:
  LCP locked pages last
storage/ndb/src/kernel/blocks/pgman.hpp:
  Handle locked pages last
storage/ndb/src/kernel/blocks/tsman.cpp:
  Fix bitmap undo
parent d5fad326
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -30,7 +30,7 @@ private:
    BUSY_LOOP = 1,
    CLEANUP_LOOP = 2,
    LCP_LOOP = 3,
    LCP_PREPARE = 4
    LCP_LOCKED = 4
  };
};

+0 −6
Original line number Diff line number Diff line
@@ -11203,12 +11203,6 @@ void Dblqh::sendLCP_FRAGIDREQ(Signal* signal)
  sendSignal(BACKUP_REF, GSN_LCP_PREPARE_REQ, signal, 
	     LcpPrepareReq::SignalLength, JBB);
  if (lcpPtr.p->firstFragmentFlag)
  {
    lcpPtr.p->m_outstanding++;
    sendSignal(PGMAN_REF, GSN_LCP_PREPARE_REQ, signal, 
	       LcpPrepareReq::SignalLength, JBB);
  }
}//Dblqh::sendLCP_FRAGIDREQ()
void Dblqh::sendEMPTY_LCP_CONF(Signal* signal, bool idle)
+5 −3
Original line number Diff line number Diff line
@@ -6,9 +6,11 @@ ndbd_redo_log_reader_SOURCES = redoLogReader/records.cpp \
include $(top_srcdir)/storage/ndb/config/common.mk.am
include $(top_srcdir)/storage/ndb/config/type_kernel.mk.am

LDADD +=  \
              $(top_builddir)/storage/ndb/src/common/util/libgeneral.la \
              $(top_builddir)/storage/ndb/src/common/portlib/libportlib.la
ndbd_redo_log_reader_LDFLAGS = @ndb_bin_am_ldflags@ \
  $(top_builddir)/storage/ndb/src/libndbclient.la \
         $(top_builddir)/dbug/libdbug.a \
         $(top_builddir)/mysys/libmysys.a \
         $(top_builddir)/strings/libmystrings.a

# Don't update the files from bitkeeper
%::SCCS/s.%
+1 −1
Original line number Diff line number Diff line
@@ -56,7 +56,7 @@ void Dbtup::execTUP_DEALLOCREQ(Signal* signal)

    if (ptr->m_header_bits & Tuple_header::LCP_KEEP)
    {
      ndbassert(ptr.p->m_header_bits & Tuple_header::FREED);
      ndbassert(! (ptr->m_header_bits & Tuple_header::FREED));
      ptr->m_header_bits |= Tuple_header::FREED;
      return;
    }
+45 −15
Original line number Diff line number Diff line
@@ -287,8 +287,24 @@ Dbtup::restart_setup_page(Disk_alloc_info& alloc, Ptr<Page> pagePtr)
    extentPtr.p->m_free_space += (real_free - estimated);
    update_extent_pos(alloc, extentPtr);
  }
}

#ifdef VM_TRACE
  {
    Local_key page;
    page.m_file_no = pagePtr.p->m_file_no;
    page.m_page_no = pagePtr.p->m_page_no;

    Tablespace_client tsman(0, c_tsman,
			    0, 0, 0);
    unsigned uncommitted, committed;
    uncommitted = committed = ~(unsigned)0;
    int ret = tsman.get_page_free_bits(&page, &uncommitted, &committed);
    
    idx = alloc.calc_page_free_bits(real_free);
    ddassert(idx == committed);
  }
#endif
}

/**
 * - Page free bits -
@@ -743,10 +759,6 @@ Dbtup::disk_page_prealloc_callback_common(Signal* signal,
    
    update_extent_pos(alloc, extentPtr);
  }
  else
  {
    ndbout << endl;
  }
  
  {
    Page_request_list list(c_page_request_pool, 
@@ -771,15 +783,14 @@ Dbtup::disk_page_set_dirty(Ptr<Page> pagePtr)
  key.m_page_no = pagePtr.p->m_page_no;
  key.m_file_no = pagePtr.p->m_file_no;

  pagePtr.p->nextList = pagePtr.p->prevList = RNIL;

  if (DBG_DISK)
    ndbout << " disk_page_set_dirty " << key << endl;
  
  Uint32 tableId = pagePtr.p->m_table_id;
  Uint32 fragId = pagePtr.p->m_fragment_id;
  
  Uint32 free = pagePtr.p->free_space;
  Uint32 used = pagePtr.p->uncommitted_used_space;
  
  Ptr<Tablerec> tabPtr;
  tabPtr.i= pagePtr.p->m_table_id;
  ptrCheckGuard(tabPtr, cnoOfTablerec, tablerec);
@@ -789,19 +800,28 @@ Dbtup::disk_page_set_dirty(Ptr<Page> pagePtr)
  
  Disk_alloc_info& alloc= fragPtr.p->m_disk_alloc_info;

  Uint32 free = pagePtr.p->free_space;
  Uint32 used = pagePtr.p->uncommitted_used_space;
  if (unlikely(pagePtr.p->m_restart_seq != globalData.m_restart_seq))
  {
    jam();
    restart_setup_page(alloc, pagePtr);
    idx = alloc.calc_page_free_bits(free);
    used = 0;
  }
  else
  {
    idx &= ~0x8000;
    ddassert(idx == alloc.calc_page_free_bits(free - used));
  }
  
  ddassert(free >= used);
  
  Tablespace_client tsman(0, c_tsman,
			  fragPtr.p->fragTableId,
			  fragPtr.p->fragmentId,
			  fragPtr.p->m_tablespace_id);
  
  ddassert(free >= used);
  idx= alloc.calc_page_free_bits(free - used);
  
  pagePtr.p->list_index = idx;
  ArrayPool<Page> *pool= (ArrayPool<Page>*)&m_global_page_pool;
  LocalDLList<Page> list(*pool, alloc.m_dirty_pages[idx]);
@@ -1340,9 +1360,15 @@ Dbtup::disk_restart_undo_callback(Signal* signal,
  lsn += pagePtr.p->m_page_header.m_page_lsn_hi; lsn <<= 32;
  lsn += pagePtr.p->m_page_header.m_page_lsn_lo;

  undo->m_page_ptr = pagePtr;
  
  if (undo->m_lsn <= lsn)
  {
    undo->m_page_ptr = pagePtr;
    if (DBG_UNDO)
    {
      ndbout << "apply: " << undo->m_lsn << "(" << lsn << " )" 
	     << key << " type: " << undo->m_type << endl;
    }
    
    update = true;
    if (DBG_UNDO)
@@ -1368,13 +1394,17 @@ Dbtup::disk_restart_undo_callback(Signal* signal,
      ndbout << "disk_restart_undo: " << undo->m_type << " " 
	     << undo->m_key << endl;
    
    disk_restart_undo_page_bits(signal, undo);
    
    lsn = undo->m_lsn - 1; // make sure undo isn't run again...
    
    m_pgman.update_lsn(undo->m_key, lsn);
  }
  else if (DBG_UNDO)
  {
    ndbout << "ignore: " << undo->m_lsn << "(" << lsn << " )" 
	   << key << " type: " << undo->m_type << endl;
  }

  disk_restart_undo_page_bits(signal, undo);
  disk_restart_undo_next(signal);
}

Loading