GCIContainerPS.cpp
上传用户:romrleung
上传日期:2022-05-23
资源大小:18897k
文件大小:3k
源码类别:

MySQL数据库

开发平台:

Visual C++

  1. /* Copyright (C) 2003 MySQL AB
  2.    This program is free software; you can redistribute it and/or modify
  3.    it under the terms of the GNU General Public License as published by
  4.    the Free Software Foundation; either version 2 of the License, or
  5.    (at your option) any later version.
  6.    This program is distributed in the hope that it will be useful,
  7.    but WITHOUT ANY WARRANTY; without even the implied warranty of
  8.    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  9.    GNU General Public License for more details.
  10.    You should have received a copy of the GNU General Public License
  11.    along with this program; if not, write to the Free Software
  12.    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA */
  13. #include "GCIContainerPS.hpp"
  14. #include <NdbOut.hpp>
  15. #include <NdbMem.h>
  16. #include <new>
  17. GCIContainerPS::GCIContainerPS(Uint32 maxNoOfNodeGrps) 
  18. {
  19.   m_container = new GCIContainer(maxNoOfNodeGrps);
  20.   if (!m_container) REPABORT("Could not allocate new GCIContainer");
  21. }
  22. GCIContainerPS::~GCIContainerPS() 
  23. {
  24.   delete m_container;
  25. }
  26. void
  27. GCIContainerPS::setNodeGroupInfo(NodeGroupInfo * info) 
  28. {
  29.   m_nodeGroupInfo=info;
  30. };
  31. void 
  32. GCIContainerPS::createGCIBuffer(Uint32 gci, Uint32 id) 
  33. {
  34.   m_container->createGCIBuffer(gci, id);
  35. }
  36. void 
  37. GCIContainerPS::getAvailableGCIBuffers(Uint32 id /*nodegrp */, 
  38.        Uint32 * first, Uint32 * last) {
  39.   Uint32 nodeId = m_nodeGroupInfo->getPrimaryNode(id);
  40.   if(!nodeId) {
  41.     *first = 1;
  42.     *last  = 0;
  43.     return;
  44.   }
  45.   /** 
  46.    *@todo do smart stuff with this!
  47.    */
  48.   m_container->getAvailableGCIBuffers(nodeId, first, last);
  49.    
  50. }
  51.   
  52. void 
  53. GCIContainerPS::destroyGCIBuffersBeforeGCI(Uint32 gci) 
  54. {
  55.   //for each node in every nodeGrp do:
  56.   NodeGroupInfo::iterator * it;  
  57.   for(Uint32 i=0; i<m_nodeGroupInfo->getNoOfNodeGroups(); i++) {
  58.     it = new NodeGroupInfo::iterator(i, m_nodeGroupInfo);
  59.     for(NodeConnectInfo * nci=it->first(); it->exists();nci=it->next()) {
  60.       m_container->destroyGCIBuffersBeforeGCI(gci, nci->nodeId);
  61.     }
  62.     delete it;
  63.   }
  64. }
  65. void
  66. GCIContainerPS::insertLogRecord(Uint32 id, Uint32 tableId, Uint32 operation,
  67. class LinearSectionPtr ptr[3], Uint32 gci) 
  68. {
  69.   m_container->insertLogRecord(id, tableId, operation, ptr, gci);
  70. }
  71. void
  72. GCIContainerPS::insertMetaRecord(Uint32 id, Uint32 tableId, 
  73.  class LinearSectionPtr ptr[3], Uint32 gci) 
  74. {
  75.   m_container->insertMetaRecord(id, tableId, ptr, gci);
  76. }
  77. void
  78. GCIContainerPS::setCompleted(Uint32 gci, Uint32 id) 
  79. {
  80.   m_container->setCompleted(gci, id);
  81. }
  82. GCIBuffer *
  83. GCIContainerPS::getGCIBuffer(Uint32 gci, Uint32 id) 
  84. {
  85.   return m_container->getGCIBuffer(gci, id);
  86. }
  87. /**
  88.  * @todo: fix return value
  89.  */
  90. bool
  91. GCIContainerPS::destroyGCIBuffer(Uint32 gci, Uint32 id) 
  92. {
  93.   //for each node in  nodeGrp id  do:
  94.   NodeGroupInfo::iterator * it;  
  95.   it = new NodeGroupInfo::iterator(id, m_nodeGroupInfo);
  96.   for(NodeConnectInfo * nci=it->first(); it->exists();nci=it->next()) 
  97.   {
  98.     if(!m_container->destroyGCIBuffer(gci, nci->nodeId)) 
  99.     {
  100.       delete it;
  101.       return false;
  102.     }
  103.   }
  104.   delete it;
  105.   return true;
  106. }
  107. bool
  108. GCIContainerPS::reset() 
  109. {
  110.   return m_container->reset();
  111. }