repapi.h
上传用户:romrleung
上传日期:2022-05-23
资源大小:18897k
文件大小:6k
源码类别:

MySQL数据库

开发平台:

Visual C++

  1. /* Copyright (C) 2003 MySQL AB
  2.    This program is free software; you can redistribute it and/or modify
  3.    it under the terms of the GNU General Public License as published by
  4.    the Free Software Foundation; either version 2 of the License, or
  5.    (at your option) any later version.
  6.    This program is distributed in the hope that it will be useful,
  7.    but WITHOUT ANY WARRANTY; without even the implied warranty of
  8.    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  9.    GNU General Public License for more details.
  10.    You should have received a copy of the GNU General Public License
  11.    along with this program; if not, write to the Free Software
  12.    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA */
  13. #ifndef REPAPI_H
  14. #define REPAPI_H
  15. /**
  16.  * @mainpage NDB Cluster REP API
  17.  *
  18.  * The NDB Cluster Replication API (REP API) consists of a C API 
  19.  * which is used to:
  20.  * - Start and stop replication
  21.  * - Other administrative tasks
  22.  *
  23.  * The functions use simple ASCII based
  24.  * commands to interact with thw Replication Server.
  25.  *
  26.  *
  27.  * @section  General Concepts
  28.  *
  29.  * Each REP API function call needs an rep_C_Api::NdbRepHandle 
  30.  * which initally is created by 
  31.  * calling the function ndb_rep_create_handle().
  32.  *
  33.  * A function can return:
  34.  *  -# An integer value.  If it returns 0 then this indicates success.
  35.  *  -# A pointer value.  If it returns NULL then check the latest error.
  36.  *         If it didn't return NULL, then "something" is returned.
  37.  *         This "something" has to be free:ed by the user of the REP API.
  38.  */
  39. /** @addtogroup REP_C_API
  40.  *  @{
  41.  */
  42. #ifdef __cplusplus
  43. extern "C" {
  44. #endif
  45. #define REPAPI_MAX_NODE_GROUPS 4  
  46.   /**
  47.    * The NdbRepHandle.
  48.    */
  49.   typedef struct ndb_rep_handle * NdbRepHandle;
  50.   /**
  51.    *   Default reply from the server
  52.    */
  53.   struct ndb_rep_reply {
  54.     int return_code;                        ///< 0 if successful, 
  55.                                             ///< otherwise error code
  56.     char message[256];                      ///< Error or reply message.
  57.   };
  58.   enum QueryCounter {
  59.     PS = 0,            ///< Stored on Primary System REP
  60.     SSReq = 1,         ///< Requested for transfer to Standby System
  61.     SS = 2,            ///< Stored on Standby System REP
  62.     AppReq = 3,        ///< Requested to be applied to Standby System
  63.     App = 4,           ///< Has been applied to Standby System
  64.     DelReq = 5,        ///< Has been requested to be deleted on PS REP & SS REP
  65.     Subscription = 6,   
  66.     ConnectionRep = 7,
  67.     ConnectionDb = 8
  68.   };
  69.   struct rep_state {
  70.     QueryCounter queryCounter;
  71.     unsigned int no_of_nodegroups;
  72.     unsigned int connected_rep;
  73.     unsigned int connected_db;
  74.     unsigned int subid;
  75.     unsigned int subkey;
  76.     unsigned int state;
  77.     unsigned int state_sub;
  78.     unsigned int first[REPAPI_MAX_NODE_GROUPS];  //4 = max no of nodegroups
  79.     unsigned int last[REPAPI_MAX_NODE_GROUPS];   //4 = max no of nodegroups
  80.   };
  81.   
  82.   
  83.   /***************************************************************************
  84.    * FUNCTIONS
  85.    ***************************************************************************/
  86.   /** 
  87.    * Create a handle
  88.    *
  89.    * @return  A handle != 0
  90.    *          or 0 if failed to create one. (Check errno then).
  91.    */
  92.   NdbRepHandle ndb_rep_create_handle();
  93.   
  94.   /**
  95.    * Destroy a handle
  96.    *
  97.    * @param   handle  Rep server  handle
  98.    */
  99.   void ndb_rep_destroy_handle(NdbRepHandle * handle);
  100.   
  101.   /**
  102.    * Get latest error associated with a handle
  103.    *
  104.    * @param   handle  Rep server handle
  105.    * @return  Latest error.
  106.    */
  107.   int ndb_rep_get_latest_error(const NdbRepHandle handle);
  108.   /**
  109.    * Get latest error line associated with a handle
  110.    *
  111.    * @param   handle  Rep server handle.
  112.    * @return  Latest error line.
  113.    */
  114.   int ndb_rep_get_latest_error_line(const NdbRepHandle handle);
  115.   /**
  116.    * Connect to a REP server
  117.    *
  118.    * @param   handle  Rep server handle.
  119.    * @param   repsrv  Hostname and port of the REP server, 
  120.    *                  "hostname:port".
  121.    * @return  0 if OK, sets ndb_rep_handle->last_error otherwise.
  122.    */
  123.   int ndb_rep_connect(NdbRepHandle handle, const char * repsrv);
  124.   
  125.   /**
  126.    * Disconnect from a REP server
  127.    *
  128.    * @param  handle   Rep server handle.
  129.    */
  130.   void ndb_rep_disconnect(NdbRepHandle handle);
  131.   
  132.   /**
  133.    * Global Replication Command
  134.    *
  135.    * @param handle          NDB REP handle.
  136.    * @param request         Type of request
  137.    * @param replicationId   Replication id is returned from function.
  138.    * @param reply           Reply message.
  139.    * @param epoch           Currenty used to STOP at a certain EPOCH
  140.    * @return                0 if successful, error code otherwise.
  141.    */
  142.   int ndb_rep_command(NdbRepHandle           handle,
  143.       unsigned int           request,
  144.       unsigned int*          replicationId,
  145.       struct ndb_rep_reply*  reply,
  146.       unsigned int           epoch = 0);
  147.     /**
  148.    * Global Replication Command
  149.    *
  150.    * @param handle          NDB REP handle.
  151.    * @param counter         Type of request. If <0, then 
  152.                              "first" and "last" in repstate
  153.      is set to 0;x     
  154.    * @param replicationId   Replication id is returned from function.
  155.    * @param reply           Reply message.
  156.    * @param repstate        Struct containing queried data. (Note!
  157.    *                        All values are set in the struct, regardless
  158.                             which QueryCounter that has been set
  159.    * @return                0 if successful, error code otherwise.
  160.    */
  161.   int ndb_rep_query(NdbRepHandle           handle,
  162.     QueryCounter           counter,
  163.     unsigned int*          replicationId,
  164.     struct ndb_rep_reply*  reply,    
  165.     struct rep_state * repstate);
  166.     
  167. /**
  168.  * @deprecated (will probably be). Can use ndb_rep_query instead.
  169.  */
  170.   int ndb_rep_get_status(NdbRepHandle handle,
  171.  unsigned int* replication_id,
  172.  struct ndb_rep_reply* /*reply*/,
  173.  struct rep_state * repstate);
  174.   
  175.   
  176.   enum RequestStatusCode {
  177.     OK = 0,            ///< Everything OK
  178.     Error = 1,      ///< Generic error
  179.     AlreadyExists = 2, ///< Entry already exists in list
  180.     NotExists = 3,     ///< Entry does not exist in list
  181.     AlreadyStopped = 4
  182.   };
  183.   
  184.   
  185. #ifdef __cplusplus
  186. }
  187. #endif
  188. /** @} */
  189. #endif