Commit 392c15ef authored by unknown's avatar unknown
Browse files

ndb dd -

  Fix bug in tsman undo


BitKeeper/deleted/.del-RecordPool.hpp~b2360628ee40b04e:
  Delete: storage/ndb/src/kernel/vm/RecordPool.hpp
storage/ndb/src/kernel/blocks/dbtup/DbtupDiskAlloc.cpp:
  Add page lsn to undo handling in tsman
storage/ndb/src/kernel/blocks/record_types.hpp:
  Start filling up record_types.hpp
storage/ndb/src/kernel/blocks/tsman.cpp:
  Add page_lsn to undo handling
storage/ndb/src/kernel/blocks/tsman.hpp:
  Add page_lsn to undo handling
storage/ndb/src/kernel/vm/Makefile.am:
  Remove SuperPool & NdbdSuperPool for now
storage/ndb/src/kernel/vm/Pool.hpp:
  Update Pool.hpp
storage/ndb/src/kernel/vm/pc.hpp:
  Move Ptr to Pool.hpp
parent 8a305ce1
Loading
Loading
Loading
Loading
+5 −1
Original line number Diff line number Diff line
@@ -1479,12 +1479,16 @@ Dbtup::disk_restart_undo_page_bits(Signal* signal, Apply_undo* undo)
  Uint32 new_bits = alloc.calc_page_free_bits(free);
  pageP->list_index = 0x8000 | new_bits;

  Uint64 lsn = 0;
  lsn += pageP->m_page_header.m_page_lsn_hi; lsn <<= 32;
  lsn += pageP->m_page_header.m_page_lsn_lo;
  
  Tablespace_client tsman(signal, c_tsman,
			  fragPtrP->fragTableId,
			  fragPtrP->fragmentId,
			  fragPtrP->m_tablespace_id);
  
  tsman.restart_undo_page_free_bits(&undo->m_key, new_bits, undo->m_lsn);
  tsman.restart_undo_page_free_bits(&undo->m_key, new_bits, undo->m_lsn, lsn);
}

int
+22 −0
Original line number Diff line number Diff line
@@ -20,9 +20,31 @@
/**
 * Record types
 */
#define PGMAN_PAGE_REQUEST      1

#define LGMAN_LOG_BUFFER_WAITER 2
#define LGMAN_LOG_SYNC_WAITER   3

#define DBTUP_PAGE_REQUEST      4
#define DBTUP_EXTENT_INFO       5

/**
 * Resource groups
 */

/**
 * Operations for dd
 *    PGMAN_PAGE_REQUEST
 *    LGMAN_LOG_BUFFER_WAITER
 *    LGMAN_LOG_SYNC_WAITER
 *    DBTUP_PAGE_REQUEST
 */
#define RG_DISK_OPERATIONS      1

/**
 * Records for dd
 *   DBTUP_EXTENT_INFO
 */
#define RG_DISK_RECORDS         2

#endif
+19 −8
Original line number Diff line number Diff line
@@ -1747,7 +1747,8 @@ Tsman::restart_undo_page_free_bits(Signal* signal,
				   Uint32 fragId,
				   Local_key *key, 
				   unsigned bits,
				   Uint64 undo_lsn)
				   Uint64 undo_lsn,
				   Uint64 page_lsn)
{
  jamEntry();
  
@@ -1790,6 +1791,20 @@ Tsman::restart_undo_page_free_bits(Signal* signal,
    File_formats::Datafile::Extent_header* header = 
      page->get_header(extent_no, size);
    
    Uint64 lsn = 0;
    lsn += page->m_page_header.m_page_lsn_hi; lsn <<= 32;
    lsn += page->m_page_header.m_page_lsn_lo;

    if (undo_lsn > lsn && undo_lsn > page_lsn)
    {
      if (DBG_UNDO)
	ndbout << "tsman: ignore " << undo_lsn << "(" << lsn << ", "
	       << page_lsn << ") " 
	       << *key << " "
	       << " -> " << bits << endl;
      return 0;
    }
    
    if (header->m_table == RNIL)
    {
      if (DBG_UNDO)
@@ -1797,15 +1812,11 @@ Tsman::restart_undo_page_free_bits(Signal* signal,
      return 0;
    }

    ndbrequire(header->m_table == tableId);
    ndbrequire(header->m_fragment_id == fragId);
    
    Uint32 page_no_in_extent = (key->m_page_no - data_off) % size;
    Uint32 src = header->get_free_bits(page_no_in_extent);
        
    Uint64 lsn = 0;
    lsn += page->m_page_header.m_page_lsn_hi; lsn <<= 32;
    lsn += page->m_page_header.m_page_lsn_lo;
    ndbrequire(header->m_table == tableId);
    ndbrequire(header->m_fragment_id == fragId);
    
    /**
     * Toggle word
+7 −4
Original line number Diff line number Diff line
@@ -200,7 +200,7 @@ private:
  int get_page_free_bits(Signal*, Local_key*, unsigned*, unsigned*);
  int unmap_page(Signal*, Local_key*, unsigned uncommitted_bits);
  int restart_undo_page_free_bits(Signal*, Uint32, Uint32, Local_key*, 
				  unsigned committed_bits, Uint64 lsn);
				  unsigned committed_bits, Uint64, Uint64);
  
  int alloc_extent(Signal* signal, Uint32 tablespace, Local_key* key);
  int alloc_page_from_extent(Signal*, Uint32, Local_key*, Uint32 bits);
@@ -283,7 +283,8 @@ public:
  /**
   * Undo handling of page bits
   */
  int restart_undo_page_free_bits(Local_key*, unsigned bits, Uint64 lsn);
  int restart_undo_page_free_bits(Local_key*, unsigned bits, 
				  Uint64 lsn, Uint64 page_lsn);
  
  /**
   * Get tablespace info
@@ -382,14 +383,16 @@ inline
int 
Tablespace_client::restart_undo_page_free_bits(Local_key* key, 
					       unsigned committed_bits,
					       Uint64 lsn)
					       Uint64 lsn,
					       Uint64 page_lsn)
{
  return m_tsman->restart_undo_page_free_bits(m_signal,
					      m_table_id,
					      m_fragment_id,
					      key, 
					      committed_bits,
					      lsn);
					      lsn,
					      page_lsn);
}


+1 −3
Original line number Diff line number Diff line
@@ -19,9 +19,7 @@ libkernel_a_SOURCES = \
        SectionReader.cpp \
        Mutex.cpp SafeCounter.cpp \
        Rope.cpp \
	SuperPool.cpp \
	ndbd_malloc.cpp ndbd_malloc_impl.cpp \
        NdbdSuperPool.cpp
	ndbd_malloc.cpp ndbd_malloc_impl.cpp

INCLUDES_LOC = -I$(top_srcdir)/storage/ndb/src/mgmapi

Loading