Commit 7efbf0af authored by unknown's avatar unknown
Browse files

ndb - add support for blocking/unblocking GCP using WAIT_GCP_REQ


ndb/include/kernel/signaldata/WaitGCP.hpp:
  Add supprt for block/unblocking GCP
ndb/src/kernel/blocks/dbdih/DbdihMain.cpp:
  Add supprt for block/unblocking GCP
parent e2b6987a
Loading
Loading
Loading
Loading
+5 −2
Original line number Diff line number Diff line
@@ -46,7 +46,9 @@ public:
    Complete = 1,           ///< Wait for a GCP to complete
    CompleteForceStart = 2, ///< Wait for a GCP to complete start one if needed
    CompleteIfRunning = 3,  ///< Wait for ongoing GCP
    CurrentGCI        = 8   ///< Immediately return current GCI
    CurrentGCI        = 8,  ///< Immediately return current GCI
    BlockStartGcp     = 9,
    UnblockStartGcp   = 10
  };

  Uint32 senderRef;
@@ -70,11 +72,12 @@ class WaitGCPConf {
  //friend class Grep::PSCoord;

public:
  STATIC_CONST( SignalLength = 2 );
  STATIC_CONST( SignalLength = 3 );
  
public:
  Uint32 senderData;
  Uint32 gcp;
  Uint32 blockStatus;
};

class WaitGCPRef {
+28 −0
Original line number Diff line number Diff line
@@ -14160,11 +14160,36 @@ void Dbdih::execWAIT_GCP_REQ(Signal* signal)
    jam();
    conf->senderData = senderData;
    conf->gcp = cnewgcp;
    conf->blockStatus = cgcpOrderBlocked;
    sendSignal(senderRef, GSN_WAIT_GCP_CONF, signal, 
	       WaitGCPConf::SignalLength, JBB);
    return;
  }//if

  if (requestType == WaitGCPReq::BlockStartGcp)
  {
    jam();
    conf->senderData = senderData;
    conf->gcp = cnewgcp;
    conf->blockStatus = cgcpOrderBlocked;
    sendSignal(senderRef, GSN_WAIT_GCP_CONF, signal, 
	       WaitGCPConf::SignalLength, JBB);
    cgcpOrderBlocked = 1;
    return;
  }

  if (requestType == WaitGCPReq::UnblockStartGcp)
  {
    jam();
    conf->senderData = senderData;
    conf->gcp = cnewgcp;
    conf->blockStatus = cgcpOrderBlocked;
    sendSignal(senderRef, GSN_WAIT_GCP_CONF, signal, 
	       WaitGCPConf::SignalLength, JBB);
    cgcpOrderBlocked = 0;
    return;
  }
  
  if(isMaster()) {
    /**
     * Master
@@ -14176,6 +14201,7 @@ void Dbdih::execWAIT_GCP_REQ(Signal* signal)
      jam();
      conf->senderData = senderData;
      conf->gcp = coldgcp;
      conf->blockStatus = cgcpOrderBlocked;
      sendSignal(senderRef, GSN_WAIT_GCP_CONF, signal, 
		 WaitGCPConf::SignalLength, JBB);
      return;
@@ -14262,6 +14288,7 @@ void Dbdih::execWAIT_GCP_CONF(Signal* signal)

  conf->senderData = ptr.p->clientData;
  conf->gcp = gcp;
  conf->blockStatus = cgcpOrderBlocked;
  sendSignal(ptr.p->clientRef, GSN_WAIT_GCP_CONF, signal,
	     WaitGCPConf::SignalLength, JBB);
  
@@ -14329,6 +14356,7 @@ void Dbdih::emptyWaitGCPMasterQueue(Signal* signal)

    c_waitGCPMasterList.next(ptr);    
    conf->senderData = clientData;
    conf->blockStatus = cgcpOrderBlocked;
    sendSignal(clientRef, GSN_WAIT_GCP_CONF, signal,
	       WaitGCPConf::SignalLength, JBB);