📄 database_8h-source.html
字号:
01345
01351 <span class="keywordtype">void</span> updateCursors(oid_t oid, <span class="keywordtype">bool</span> removed = <span class="keyword">false</span>);
01352
01356 <span class="keywordtype">void</span> recovery();
01357
01366 <span class="keywordtype">bool</span> checkVersion();
01367
<a name="l01373"></a><a class="code" href="classdbDatabase.html#dbSubSqlb38">01373</a> oid_t allocateObject(dbInternalObject marker) {
01374 oid_t oid = allocateId();
01375 offs_t pos = allocate(internalObjectSize[marker]) + marker;
01376 currIndex[oid] = pos;
01377 <span class="keywordflow">return</span> oid;
01378 }
01379
<a name="l01386"></a><a class="code" href="classdbDatabase.html#dbSubSqlb39">01386</a> oid_t allocateRow(oid_t tableId, size_t size)
01387 {
01388 oid_t oid = allocateId();
01389 allocateRow(tableId, oid, size);
01390 <span class="keywordflow">return</span> oid;
01391 }
01392
01400 <span class="keywordtype">void</span> allocateRow(oid_t tableId, oid_t oid, size_t size);
01401
01407 <span class="keywordtype">void</span> freeRow(oid_t tableId, oid_t oid);
01408
01412 <span class="keywordtype">void</span> freeObject(oid_t oid);
01413
01417 <span class="keyword">static</span> <span class="keywordtype">void</span> deleteCompiledQuery(dbExprNode* tree);
01418
01425 <span class="keywordtype">bool</span> beginTransaction(dbLockType);
01426
<a name="l01430"></a><a class="code" href="classdbDatabase.html#dbSubSqlb44">01430</a> <span class="keywordtype">void</span> endTransaction() {
01431 endTransaction(threadContext.get());
01432 }
01433
01438 <span class="keywordtype">void</span> endTransaction(dbDatabaseThreadContext* ctx);
01439
01440 <span class="keyword">virtual</span> <span class="keywordtype">void</span> waitTransactionAcknowledgement();
01441
01446 <span class="keywordtype">void</span> initializeMetaTable();
01447
01455 <span class="keywordtype">bool</span> loadScheme(<span class="keywordtype">bool</span> alter);
01456
01462 <span class="keywordtype">bool</span> completeDescriptorsInitialization();
01463
01469 <span class="keywordtype">void</span> reformatTable(oid_t tableId, <a class="code" href="classdbTableDescriptor.html">dbTableDescriptor</a>* desc);
01470
01478 <span class="keywordtype">bool</span> addIndices(<span class="keywordtype">bool</span> alter, <a class="code" href="classdbTableDescriptor.html">dbTableDescriptor</a>* desc);
01479
01485 oid_t addNewTable(<a class="code" href="classdbTableDescriptor.html">dbTableDescriptor</a>* desc);
01486
01492 <span class="keywordtype">void</span> updateTableDescriptor(<a class="code" href="classdbTableDescriptor.html">dbTableDescriptor</a>* desc, oid_t tableId);
01493
01502 <span class="keywordtype">void</span> insertInverseReference(<a class="code" href="classdbFieldDescriptor.html">dbFieldDescriptor</a>* fd,
01503 oid_t reverseId, oid_t targetId);
01504
01510 <span class="keywordtype">void</span> removeInverseReferences(<a class="code" href="classdbTableDescriptor.html">dbTableDescriptor</a>* desc, oid_t oid);
01511
01520 <span class="keywordtype">void</span> removeInverseReference(<a class="code" href="classdbFieldDescriptor.html">dbFieldDescriptor</a>* fd,
01521 oid_t reverseId, oid_t targetId);
01522
01527 <span class="keywordtype">void</span> deleteTable(<a class="code" href="classdbTableDescriptor.html">dbTableDescriptor</a>* desc);
01528
01533 <span class="keywordtype">void</span> dropTable(<a class="code" href="classdbTableDescriptor.html">dbTableDescriptor</a>* desc);
01534
01539 <span class="keywordtype">void</span> createIndex(<a class="code" href="classdbFieldDescriptor.html">dbFieldDescriptor</a>* fd);
01540
01545 <span class="keywordtype">void</span> createHashTable(<a class="code" href="classdbFieldDescriptor.html">dbFieldDescriptor</a>* fd);
01546
01551 <span class="keywordtype">void</span> dropIndex(<a class="code" href="classdbFieldDescriptor.html">dbFieldDescriptor</a>* fd);
01552
01557 <span class="keywordtype">void</span> dropHashTable(<a class="code" href="classdbFieldDescriptor.html">dbFieldDescriptor</a>* fd);
01558
01564 <span class="keywordtype">void</span> linkTable(<a class="code" href="classdbTableDescriptor.html">dbTableDescriptor</a>* table, oid_t tableId);
01565
01570 <span class="keywordtype">void</span> unlinkTable(<a class="code" href="classdbTableDescriptor.html">dbTableDescriptor</a>* table);
01571
01578 <span class="keywordtype">bool</span> wasReserved(offs_t pos, size_t size);
01579
01588 <span class="keywordtype">void</span> reserveLocation(dbLocation& location, offs_t pos, size_t size);
01589
01594 <span class="keywordtype">void</span> commitLocation();
01595
01601 <a class="code" href="classdbTableDescriptor.html">dbTableDescriptor</a>* findTable(<span class="keywordtype">char</span> <span class="keyword">const</span>* name);
01602
01609 <a class="code" href="classdbTableDescriptor.html">dbTableDescriptor</a>* findTableByName(<span class="keywordtype">char</span> <span class="keyword">const</span>* name);
01610
<a name="l01615"></a><a class="code" href="classdbDatabase.html#dbSubSqlb70">01615</a> <a class="code" href="classdbTableDescriptor.html">dbTableDescriptor</a>* getTables() {
01616 <span class="keywordflow">return</span> tables;
01617 }
01618
01622 <span class="keywordtype">void</span> setDirty();
01623
01629 <span class="keywordtype">bool</span> isFree(offs_t pos, <span class="keywordtype">int</span> objBitSize);
01630
01636 <span class="keywordtype">void</span> markAsAllocated(offs_t pos, <span class="keywordtype">int</span> objBitSize);
01637
01638 };
01639
01640
01641 <span class="preprocessor">#ifdef REPLICATION_SUPPORT</span>
01642 <span class="preprocessor"></span>
01643 <span class="preprocessor">#include "sockio.h"</span>
01644
01645 <span class="keyword">class </span>FASTDB_DLL_ENTRY dbConnection {
01646 <span class="keyword">public</span>:
01647 socket_t* reqSock;
01648 socket_t* respSock;
01649 dbLocalEvent statusEvent;
01650 dbLocalEvent readyEvent;
01651 dbLocalEvent useEvent;
01652 dbLocalEvent committedEvent;
01653 dbMutex writeCS;
01654 <span class="keywordtype">int</span> useCount;
01655 <span class="keywordtype">int</span> waitUseEventFlag;
01656 <span class="keywordtype">int</span> waitStatusEventFlag;
01657 <span class="keywordtype">int</span> status;
01658 <span class="keywordtype">int</span> updateCounter;
01659 <span class="keywordtype">int</span> nRecoveredPages;
01660
01661 dbConnection() {
01662 readyEvent.open();
01663 useEvent.open();
01664 statusEvent.open();
01665 committedEvent.open();
01666 useCount = 0;
01667 waitUseEventFlag = 0;
01668 waitStatusEventFlag = 0;
01669 status = 0;
01670 reqSock = respSock = NULL;
01671 nRecoveredPages = 0;
01672 }
01673 ~dbConnection() {
01674 readyEvent.close();
01675 useEvent.close();
01676 statusEvent.close();
01677 committedEvent.close();
01678 <span class="keyword">delete</span> reqSock;
01679 <span class="keyword">delete</span> respSock;
01680 }
01681 };
01682
01683 <span class="keyword">class </span>FASTDB_DLL_ENTRY dbReplicatedDatabase : <span class="keyword">public</span> dbDatabase {
01684 <span class="keyword">friend</span> <span class="keyword">class </span>dbFile;
01685 <span class="keyword">protected</span>:
01686 <span class="keywordtype">char</span>** serverURL;
01687 <span class="keywordtype">int</span> nServers;
01688 <span class="keywordtype">int</span> id;
01689 dbConnection* con;
01690
01691 <span class="keyword">enum</span> NodeStatus {
01692 ST_OFFLINE, <span class="comment">// node is not available </span>
01693 ST_ONLINE, <span class="comment">// node is available </span>
01694 ST_ACTIVE, <span class="comment">// primary node is running, replicating changes</span>
01695 ST_STANDBY, <span class="comment">// standby node receives changes from primary node</span>
01696 ST_RECOVERED <span class="comment">// node is recovered after the fault</span>
01697 };
01698
01699 dbLocalEvent startEvent;
01700 dbLocalEvent recoveredEvent;
01701 dbMutex startCS;
01702 dbMutex commitCS;
01703 fd_set inputSD;
01704 <span class="keywordtype">int</span> nInputSD;
01705
01706 <span class="keywordtype">int</span> activeNodeId;
01707 <span class="keywordtype">int</span> masterNodeId;
01708 <span class="keywordtype">bool</span> onlineRecovery;
01709 <span class="keywordtype">bool</span> handshake;
01710 dbMutex sockCS;
01711 socket_t* acceptSock;
01712 dbThread readerThread;
01713
01714 <span class="keywordtype">int</span> pollInterval;
01715 <span class="keywordtype">int</span> waitReadyTimeout;
01716 <span class="keywordtype">int</span> waitStatusTimeout;
01717 <span class="keywordtype">int</span> recoveryConnectionAttempts;
01718 <span class="keywordtype">int</span> startupConnectionAttempts;
01719 <span class="keywordtype">int</span> replicationWriteTimeout;
01720 <span class="keywordtype">int</span> maxAsyncRecoveryIterations;
01721
01722 <span class="keyword">static</span> <span class="keywordtype">void</span> thread_proc startReader(<span class="keywordtype">void</span>* arg);
01723
01724 <span class="keywordtype">void</span> waitTransactionAcknowledgement();
01725
01726 <span class="keywordtype">void</span> reader();
01727 <span class="keyword">virtual</span> <span class="keywordtype">void</span> close0();
01728 <span class="keyword">virtual</span> <span class="keywordtype">bool</span> isReplicated();
01729
01730 <span class="keyword">public</span>:
01731 <span class="keywordtype">void</span> deleteConnection(<span class="keywordtype">int</span> nodeId);
01732 <span class="keywordtype">void</span> lockConnection(<span class="keywordtype">int</span> nodeId);
01733 <span class="keywordtype">void</span> unlockConnection(<span class="keywordtype">int</span> nodeId);
01734 <span class="keywordtype">void</span> changeActiveNode();
01735 <span class="keywordtype">void</span> addConnection(<span class="keywordtype">int</span> nodeId, socket_t* s);
01736 <span class="keywordtype">bool</span> writeReq(<span class="keywordtype">int</span> nodeId, ReplicationRequest <span class="keyword">const</span>& hdr,
01737 <span class="keywordtype">void</span>* body = NULL, size_t bodySize = 0);
01738 <span class="keywordtype">bool</span> writeResp(<span class="keywordtype">int</span> nodeId, ReplicationRequest <span class="keyword">const</span>& hdr);
01739
01740 <span class="keywordtype">bool</span> <a class="code" href="classdbDatabase.html#dbSubSqla6">open</a>(<span class="keywordtype">char</span> <span class="keyword">const</span>* databaseName, <span class="keywordtype">char</span> <span class="keyword">const</span>* fileName,
01741 <span class="keywordtype">int</span> id, <span class="keywordtype">char</span>* servers[], <span class="keywordtype">int</span> nServers);
01742 <span class="keywordtype">bool</span> <a class="code" href="classdbDatabase.html#dbSubSqla6">open</a>(OpenParameters& params);
01743
01744 <span class="keywordtype">int</span> getNumberOfOnlineNodes();
01745
01746 dbReplicatedDatabase(dbAccessType type = dbAllAccess,
01747 size_t dbInitSize = dbDefaultInitDatabaseSize
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -