mco_db_extend_dev

Extend database memory by adding a memory device.

Prototype

 
    MCO_RET	mco_db_extend_dev(	/*IN*/ const char* dbname,
                    /*IN*/ mco_device_t * dev );
 

Arguments

dbname The name of the database to extend
dev The device to be added

Description

This function extends the available database memory by adding the specified memory device.

Return Codes

MCO_S_OK The database was created successfully
MCO_E_NOINSTANCE The specified database is not opened
MCO_ERR_TRN A database transaction error occurred. (eg. The database is already opened by some other thread that has an open transaction.)
MCO_E_ILLEGAL_PARAM Returned if the device size is too small. The minimum size is runtime configuration- and hardware architecture-dependent. On an x64 platform and configured for 100 connections (default) the minimum size is a little over 1K (1104 bytes) .

Example

 
    const char * dbname = "SimpleDb";
     
    int main(int argc, char* argv[])
    {
        mco_db_h db;
        MCO_RET rc;
        mco_device_t       dev;
        int                n_segments = 0;
        char *mem = malloc( DBSIZE );
        ...
         
         
        if( (rc = mco_runtime_start()) != MCO_S_OK)
            exit(-1);
             
        rc = mco_db_open( dbname, simpledb_get_dictionary(), mem, DBSIZE, (uint2)PAGESIZE );
        ...
        rc = mco_db_connect(dbname, &db);
        ...
         
        /* If low memory situation detected (see "Auxiliary APIs:  Statistics") */
        mco_db_free_pages(db, &freepages);
        mco_db_total_pages(db, &totalpages );
        if(freepages  < totalpages / 10)
        {
            // yes.  Extend the database
            while ( MAX_SEGMENTS > n_segments )
            {
                dev[n_segments].type         = MCO_MEMORY_CONV;
                dev[n_segments].assignment   = MCO_MEMORY_ASSIGN_DATABASE;
                dev[n_segments].size         = SEGMENT_SIZE;
                dev[n_segments].dev.conv.ptr = (void*)malloc( SEGMENT_SIZE );
                rc = mco_db_extend_dev(dbname, &dev[n_segments]);

                if ( MCO_S_OK != rc ) break;  /* if extend failed exit loop */
                n_segments++;
            }
            ...
        }
    }
     
 

Files

Header file:
mco.h
Source file:
mcodb.c
Library:
libmcolib.a