ctDeferredIndexControl

Declaration

Function prototype:

NINT ctDeferredIndexControl(pDFKCTL pdfkctl);

Description

The ctDeferredIndexControl() function can be used for monitoring and controlling deferred indexing.

The function accepts one parameter, a pointer to a deferred key control structure:


typedef struct dfkctl {
    COUNT   version; /* version of this structure */
    COUNT   opcode; /* operation code            */
    LONG    bufsiz; /* buffer size               */
    pTEXT   bufptr; /* output buffer             */
#ifndef ct8P
    LONG    pad;
#endif
} DFKCTL, *pDFKCTL;

To call this function set version to DFKCTL_VERS_CUR to use the current structure version from your c-tree header files, or specify a specific structure version such as DFKCTL_VERS_V01 (version 1 of this structure, which is currently the only version supported).

Set opcode to one of the following values:

  • DFKCTLclearstats - Clear deferred indexing statistics
  • DFKCTLgetstats - Get deferred indexing statistics
  • DFKCTLgetstate - Get deferred indexing thread state
  • DFKCTLgetbilstate - Get background index load thread state
  • DFKCTLpausethrds - Pause deferred indexing threads
  • DFKCTLresumethrds - Resume deferred indexing threads

For opcodes DFKCTLgetstats and DFKCTLgetstate, set bufptr to point to a DFKSTT structure (defined below), and set bufsiz to the size of this buffer.

Statistics and thread state variables are returned in a structure of the following format:


/* deferred indexing statistics */
#define DFKSTTvern 1 /* DFKSTT (deferred indexing stats) version # */
typedef struct dfkstt {
    ULONG   client_ver;  /* client version of structure          */
    ULONG   server_ver;  /* server version of structure          */
    LONG8   tstamp;      /* Time stamp: seconds since 70         */
    LONG8   opnok;       /* Successful file opens                */
    LONG8   addok;       /* Successful adds                       */
    LONG8   delok;       /* Successful deletes                   */
    LONG8   rwtok;       /* Successful updates                   */
    LONG8   opnerr;      /* Failed file opens                    */
    LONG8   adderr;      /* Failed adds                          */
    LONG8   delerr;      /* Failed deletes                       */
    LONG8   rwterr;      /* Failed updates                       */
    LONG8   addskp;      /* Skipped adds                         */
    LONG8   delskp;      /* Skipped deletes                      */
    LONG8   rwtskp;      /* Skipped updates                      */
    LONG    qcnt;        /* Queue entries                        */
    LONG    lognum;      /* Log number of current scan pos       */
    LONG    logpos;      /* Offset of current scan pos           */
    DFRKOP  curopT;      /* Current operation for tran thread    */
    DFRKOP  curopN;      /* Current operation for non-tran thread*/
} DFKSTT, *pDFKSTT;

Return Values

Value Symbolic Constant Explanation
0 CTDBRET_OK Successful operation.

See c-tree Plus Error Codes for a complete listing of valid c-tree Plus error values.

Example

1) Read deferred indexing statistics:


    NINT    rc;
    DFKCTL  dfkctl;

    memset(&dfkctl,0,sizeof(dfkctl));
    dfkctl.verson = DFKCTL_VERS_V01;
    dfkctl.opcode = DFKCTLgetstats;
    dfkctl.bufsiz = sizeof(dfkstt);
    dfkctl.bufptr = (pTEXT) &dfkstt;
    if ((rc = ctDeferredIndexControl(&dfkctl)) != NO_ERROR) {
        printf("Error: Failed to get deferred indexing statistics: %d\n", rc);
    } else {
        /* display dfkstt structure members */
    }

2) Read deferred indexing thread state:


    NINT    rc;
    DFKCTL  dfkctl;

    memset(&dfkctl,0,sizeof(dfkctl));
    dfkctl.verson = DFKCTL_VERS_V01;
    dfkctl.opcode = DFKCTLgetstate;
    dfkctl.bufsiz = sizeof(dfkstt);
    dfkctl.bufptr = (pTEXT) &dfkstt;
    if ((rc = ctDeferredIndexControl(&dfkctl)) != NO_ERROR) {
        printf("Error: Failed to get deferred indexing statistics: %d\n", rc);
    } else {
        /* display dfkstt structure members */
    }

3) Clear deferred indexing statistics:


    NINT    rc;
    DFKCTL  dfkctl;

    dfkctl.verson = DFKCTL_VERS_V01;
    dfkctl.opcode = DFKCTLclearstats;
    if ((rc = ctDeferredIndexControl(&dfkctl))) {
        printf("Error: Failed to reset deferred indexing statistics: %d\n", rc);
    } else {
        printf("Successfully reset deferred indexing statistics.\n");
    }

4) Pause deferred indexing threads.


    NINT    rc;
    DFKCTL  dfkctl;

    dfkctl.verson = DFKCTL_VERS_V01;
    dfkctl.opcode = DFKCTLpausethrds;
    if ((rc = ctDeferredIndexControl(&dfkctl))) {
        printf("Error: Failed to pause deferred indexing threads: %d\n", rc);
    } else {
        printf("Successfully paused deferred indexing threads.\n");
    }

5) Resume deferred indexing threads.


    NINT    rc;
    DFKCTL  dfkctl;

    dfkctl.verson = DFKCTL_VERS_V01;
    dfkctl.opcode = DFKCTLresumethrds;
    if ((rc = ctDeferredIndexControl(&dfkctl))) {
        printf("Error: Failed to resume deferred indexing threads: %d\n", rc);
    } else {
        printf("Successfully resumed deferred indexing threads.\n");
    }