You've already forked mariadb-columnstore-engine
							
							
				mirror of
				https://github.com/mariadb-corporation/mariadb-columnstore-engine.git
				synced 2025-10-30 07:25:34 +03:00 
			
		
		
		
	
		
			
				
	
	
		
			102 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			102 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| #include <iostream>
 | |
| #include "dbrm.h"
 | |
| #include "IDBPolicy.h"
 | |
| 
 | |
| using namespace std;
 | |
| using namespace BRM;
 | |
| 
 | |
| CopyLocks copylocks;
 | |
| DBRM dbrm;
 | |
| 
 | |
| void lockRange()
 | |
| {
 | |
|   LBIDRange r;
 | |
|   r.start = 12345;
 | |
|   r.size = 5;
 | |
|   copylocks.lock(CopyLocks::WRITE);
 | |
| 
 | |
|   if (copylocks.isLocked(r))
 | |
|     cout << "already locked\n";
 | |
|   else
 | |
|   {
 | |
|     copylocks.lockRange(r, -1);
 | |
|     cout << "got the 1st lock\n";
 | |
|   }
 | |
| 
 | |
|   r.start = 12349;
 | |
| 
 | |
|   if (copylocks.isLocked(r))
 | |
|     cout << "2nd range is locked\n";
 | |
|   else
 | |
|     cout << "2nd range is NOT locked\n";
 | |
| 
 | |
|   r.start = 12350;
 | |
| 
 | |
|   if (copylocks.isLocked(r))
 | |
|     cout << "3rd range is locked\n";
 | |
|   else
 | |
|   {
 | |
|     copylocks.lockRange(r, -1);
 | |
|     cout << "got the 3rd lock\n";
 | |
|   }
 | |
| 
 | |
|   copylocks.release(CopyLocks::WRITE);
 | |
| }
 | |
| 
 | |
| void dbrmLockRange()
 | |
| {
 | |
|   dbrm.lockLBIDRange(12345, 5);
 | |
|   cout << "OK\n";
 | |
| }
 | |
| 
 | |
| void dbrmReleaseRange()
 | |
| {
 | |
|   dbrm.releaseLBIDRange(12345, 5);
 | |
|   cout << "OK\n";
 | |
| }
 | |
| 
 | |
| void releaseRange()
 | |
| {
 | |
|   LBIDRange r;
 | |
|   r.start = 12345;
 | |
|   r.size = 5;
 | |
|   copylocks.lock(CopyLocks::WRITE);
 | |
|   copylocks.releaseRange(r);
 | |
| 
 | |
|   r.start = 12350;
 | |
|   copylocks.releaseRange(r);
 | |
|   copylocks.release(CopyLocks::WRITE);
 | |
| 
 | |
|   cout << "OK\n";
 | |
| }
 | |
| 
 | |
| int main(int argc, char** argv)
 | |
| {
 | |
|   char cmd;
 | |
| 
 | |
|   if (argc < 2)
 | |
|     goto usage;
 | |
| 
 | |
|   cmd = argv[1][0];
 | |
| 
 | |
|   idbdatafile::IDBPolicy::configIDBPolicy();
 | |
| 
 | |
|   switch (cmd)
 | |
|   {
 | |
|     case 'l': lockRange(); break;
 | |
| 
 | |
|     case 'r': releaseRange(); break;
 | |
| 
 | |
|     case 'L': dbrmLockRange(); break;
 | |
| 
 | |
|     case 'R': dbrmReleaseRange(); break;
 | |
| 
 | |
|     default: goto usage;
 | |
|   }
 | |
| 
 | |
|   exit(0);
 | |
| usage:
 | |
|   cout << "Usage: " << argv[0] << " l | r | L | R. lock/release. Check the code for specifics. :P" << endl;
 | |
|   exit(1);
 | |
| }
 |