Commit 96f56150 authored by unknown's avatar unknown
Browse files

ndb: fix assertion code in event code during cluster shutdown

parent 6f179e81
Loading
Loading
Loading
Loading
+27 −17
Original line number Diff line number Diff line
@@ -1523,30 +1523,39 @@ NdbEventBuffer::completeClusterFailed()
  } while((op = m_ndb->getEventOperation(op)));
  
  /**
   * Find min not completed GCI
   *  Release all GCI's with m_gci > gci
   */
  Uint32 i;
  Uint32 sz= m_active_gci.size();
  Uint64 gci= ~0;
  Uint64 gci= data.gci;
  Gci_container* bucket = 0;
  Gci_container* array = (Gci_container*)m_active_gci.getBase();
  for(i = 0; i < sz; i++)
  {
    if(array[i].m_gcp_complete_rep_count && array[i].m_gci < gci)
    Gci_container* tmp = array + i;
    if (tmp->m_gci > gci)
    {
      if(!tmp->m_data.is_empty())
      {
      bucket= array + i;
      gci = bucket->m_gci;
        free_list(tmp->m_data);
      }
      tmp->~Gci_container();
      bzero(tmp, sizeof(Gci_container));
    }

  /**
   * Release all GCI's with m_gci > gci
   */
  for(i = 0; i < sz; i++)
    else if (tmp->m_gcp_complete_rep_count)
    {
    Gci_container* tmp = array + i;
    if (tmp->m_gci > gci)
      if (tmp->m_gci == gci)
      {
        bucket= tmp;
        continue;
      }
      // we have found an old not-completed gci
      // something is wrong, assert in debug, but try so salvage
      // in release
      ndbout_c("out of order bucket detected at cluster disconnect, "
               "data.gci: %u.  tmp->m_gci: %u",
               (unsigned)data.gci, (unsigned)tmp->m_gci);
      assert(false);
      if(!tmp->m_data.is_empty())
      {
        free_list(tmp->m_data);
@@ -1556,7 +1565,8 @@ NdbEventBuffer::completeClusterFailed()
    }
  }

  assert(bucket != 0 && data.gci == gci);
  assert(bucket != 0);

  const Uint32 cnt= bucket->m_gcp_complete_rep_count = 1; 
  bucket->m_gci = gci;
  bucket->m_gcp_complete_rep_count = cnt;