Commit 9e26c327 authored by unknown's avatar unknown
Browse files

wl2077 - ndb close scan - fix introduced bugs wrt premature close of scan


ndb/src/common/debugger/signaldata/ScanTab.cpp:
  Fix printout
ndb/src/kernel/blocks/dbtc/DbtcMain.cpp:
  Handle already closed fragments
ndb/src/ndbapi/NdbConnectionScan.cpp:
  Better handling of SCAN_TABREF
ndb/src/ndbapi/NdbScanOperation.cpp:
  Removed some special cases by setting up them instead
ndb/test/src/NDBT_Test.cpp:
  Fix createTable(false)
ndb/tools/select_all.cpp:
  Use full scan as default
parent eed2b972
Loading
Loading
Loading
Loading
+3 −2
Original line number Diff line number Diff line
@@ -30,13 +30,14 @@ printSCANTABREQ(FILE * output, const Uint32 * theData, Uint32 len, Uint16 receiv
  fprintf(output, " apiConnectPtr: H\'%.8x", 
	  sig->apiConnectPtr);
  fprintf(output, " requestInfo: H\'%.8x:\n",  requestInfo);
  fprintf(output, "  Parallellism: %u, Batch: %u LockMode: %u, Keyinfo: %u Holdlock: %u, RangeScan: %u\n",
  fprintf(output, "  Parallellism: %u, Batch: %u LockMode: %u, Keyinfo: %u Holdlock: %u, RangeScan: %u ReadCommitted: %u\n",
	  sig->getParallelism(requestInfo), 
	  sig->getScanBatch(requestInfo), 
	  sig->getLockMode(requestInfo), 
	  sig->getKeyinfoFlag(requestInfo),
	  sig->getHoldLockFlag(requestInfo), 
	  sig->getRangeScanFlag(requestInfo),
	  sig->getKeyinfoFlag(requestInfo));
	  sig->getReadCommittedFlag(requestInfo));
  
  Uint32 keyLen = (sig->attrLenKeyLen >> 16);
  Uint32 attrLen = (sig->attrLenKeyLen & 0xFFFF);
+1 −2
Original line number Diff line number Diff line
@@ -9329,7 +9329,6 @@ void Dbtc::execSCAN_NEXTREQ(Signal* signal)
    /*********************************************************************
     * APPLICATION IS CLOSING THE SCAN.
     **********************************************************************/
    ndbrequire(len == 0);
    close_scan_req(signal, scanptr, true);
    return;
  }//if
@@ -9457,7 +9456,7 @@ Dbtc::close_scan_req(Signal* signal, ScanRecordPtr scanPtr, bool req_received){
      ndbrequire(curr.p->scanFragState == ScanFragRec::DELIVERED);
      delivered.remove(curr);
      
      if(curr.p->m_ops > 0){
      if(curr.p->m_ops > 0 && curr.p->m_scan_frag_conf_status == 0){
	jam();
	running.add(curr);
	curr.p->scanFragState = ScanFragRec::LQH_ACTIVE;
+8 −2
Original line number Diff line number Diff line
@@ -57,12 +57,18 @@ NdbConnection::receiveSCAN_TABREF(NdbApiSignal* aSignal){
  
  if(checkState_TransId(&ref->transId1)){
    theScanningOp->theError.code = ref->errorCode;
    if(!ref->closeNeeded){
    theScanningOp->execCLOSE_SCAN_REP();
    if(!ref->closeNeeded){
      return 0;
    }
    assert(theScanningOp->m_sent_receivers_count);

    /**
     * Setup so that close_impl will actually perform a close
     *   and not "close scan"-optimze it away
     */
    theScanningOp->m_conf_receivers_count++;
    theScanningOp->m_conf_receivers[0] = theScanningOp->m_receivers[0];
    theScanningOp->m_conf_receivers[0]->m_tcPtrI = ~0;
    return 0;
  } else {
#ifdef NDB_NO_DROPPED_SIGNAL
+5 −3
Original line number Diff line number Diff line
@@ -613,21 +613,22 @@ NdbScanOperation::send_next_scan(Uint32 cnt, bool stopScanFlag){
	sent++;
      }
    }
    memcpy(&m_api_receivers[0], &m_api_receivers[cnt], cnt * sizeof(char*));
    memmove(m_api_receivers, m_api_receivers+cnt, 
	    (theParallelism-cnt) * sizeof(char*));
    
    int ret = 0;
    if(sent)
    {
      Uint32 nodeId = theNdbCon->theDBnode;
      TransporterFacade * tp = TransporterFacade::instance();
      if(cnt > 21 && !stopScanFlag){
      if(cnt > 21){
	tSignal.setLength(4);
	LinearSectionPtr ptr[3];
	ptr[0].p = prep_array;
	ptr[0].sz = sent;
	ret = tp->sendSignal(&tSignal, nodeId, ptr, 1);
      } else {
	tSignal.setLength(4+(stopScanFlag ? 0 : sent));
	tSignal.setLength(4+sent);
	ret = tp->sendSignal(&tSignal, nodeId);
      }
    }
@@ -687,6 +688,7 @@ NdbScanOperation::execCLOSE_SCAN_REP(){
  m_api_receivers_count = 0;
  m_conf_receivers_count = 0;
  m_sent_receivers_count = 0;
  m_current_api_receiver = theParallelism;
}

void NdbScanOperation::release()
+1 −3
Original line number Diff line number Diff line
@@ -839,8 +839,6 @@ void NDBT_TestSuite::execute(Ndb* ndb, const NdbDictionary::Table* pTab,
	continue;
      }
      pTab2 = pDict->getTable(pTab->getName());
    } else {
      pTab2 = pTab;
    } 
    
    ctx = new NDBT_Context();
Loading