summaryrefslogtreecommitdiff
path: root/storage/ndb/src/old_files/rep/storage/GCIContainerPS.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'storage/ndb/src/old_files/rep/storage/GCIContainerPS.cpp')
-rw-r--r--storage/ndb/src/old_files/rep/storage/GCIContainerPS.cpp128
1 files changed, 128 insertions, 0 deletions
diff --git a/storage/ndb/src/old_files/rep/storage/GCIContainerPS.cpp b/storage/ndb/src/old_files/rep/storage/GCIContainerPS.cpp
new file mode 100644
index 00000000000..5adb53f965c
--- /dev/null
+++ b/storage/ndb/src/old_files/rep/storage/GCIContainerPS.cpp
@@ -0,0 +1,128 @@
+/* Copyright (C) 2003 MySQL AB
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
+
+#include "GCIContainerPS.hpp"
+#include <NdbOut.hpp>
+#include <NdbMem.h>
+#include <new>
+
+GCIContainerPS::GCIContainerPS(Uint32 maxNoOfNodeGrps)
+{
+ m_container = new GCIContainer(maxNoOfNodeGrps);
+ if (!m_container) REPABORT("Could not allocate new GCIContainer");
+}
+
+GCIContainerPS::~GCIContainerPS()
+{
+ delete m_container;
+}
+
+void
+GCIContainerPS::setNodeGroupInfo(NodeGroupInfo * info)
+{
+ m_nodeGroupInfo=info;
+};
+
+void
+GCIContainerPS::createGCIBuffer(Uint32 gci, Uint32 id)
+{
+ m_container->createGCIBuffer(gci, id);
+}
+
+void
+GCIContainerPS::getAvailableGCIBuffers(Uint32 id /*nodegrp */,
+ Uint32 * first, Uint32 * last) {
+
+ Uint32 nodeId = m_nodeGroupInfo->getPrimaryNode(id);
+ if(!nodeId) {
+ *first = 1;
+ *last = 0;
+ return;
+ }
+
+ /**
+ *@todo do smart stuff with this!
+ */
+ m_container->getAvailableGCIBuffers(nodeId, first, last);
+
+}
+
+void
+GCIContainerPS::destroyGCIBuffersBeforeGCI(Uint32 gci)
+{
+ //for each node in every nodeGrp do:
+ NodeGroupInfo::iterator * it;
+ for(Uint32 i=0; i<m_nodeGroupInfo->getNoOfNodeGroups(); i++) {
+ it = new NodeGroupInfo::iterator(i, m_nodeGroupInfo);
+ for(NodeConnectInfo * nci=it->first(); it->exists();nci=it->next()) {
+ m_container->destroyGCIBuffersBeforeGCI(gci, nci->nodeId);
+ }
+ delete it;
+ }
+}
+
+void
+GCIContainerPS::insertLogRecord(Uint32 id, Uint32 tableId, Uint32 operation,
+ class LinearSectionPtr ptr[3], Uint32 gci)
+{
+ m_container->insertLogRecord(id, tableId, operation, ptr, gci);
+}
+
+void
+GCIContainerPS::insertMetaRecord(Uint32 id, Uint32 tableId,
+ class LinearSectionPtr ptr[3], Uint32 gci)
+{
+ m_container->insertMetaRecord(id, tableId, ptr, gci);
+}
+
+void
+GCIContainerPS::setCompleted(Uint32 gci, Uint32 id)
+{
+ m_container->setCompleted(gci, id);
+}
+
+GCIBuffer *
+GCIContainerPS::getGCIBuffer(Uint32 gci, Uint32 id)
+{
+ return m_container->getGCIBuffer(gci, id);
+}
+
+/**
+ * @todo: fix return value
+ */
+bool
+GCIContainerPS::destroyGCIBuffer(Uint32 gci, Uint32 id)
+{
+ //for each node in nodeGrp id do:
+ NodeGroupInfo::iterator * it;
+ it = new NodeGroupInfo::iterator(id, m_nodeGroupInfo);
+ for(NodeConnectInfo * nci=it->first(); it->exists();nci=it->next())
+ {
+ if(!m_container->destroyGCIBuffer(gci, nci->nodeId))
+ {
+ delete it;
+ return false;
+ }
+ }
+ delete it;
+ return true;
+}
+
+bool
+GCIContainerPS::reset()
+{
+ return m_container->reset();
+}