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

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. //**************************************************************************** 
  14. // 
  15. //  AUTHOR 
  16. //      舠a Fransson 
  17. // 
  18. //  NAME 
  19. //      TransporterCallback 
  20. // 
  21. // 
  22. //***************************************************************************/ 
  23. #ifndef TRANSPORTER_CALLBACK_H 
  24. #define TRANSPORTER_CALLBACK_H 
  25.  
  26. #include <kernel_types.h> 
  27. #include "TransporterDefinitions.hpp" 
  28.  
  29.  
  30. /** 
  31.  * Call back functions 
  32.  */ 
  33.  
  34. /** 
  35.  * The execute function 
  36.  */ 
  37. void
  38. execute(void * callbackObj, 
  39. SignalHeader * const header,  
  40. Uint8 prio,  
  41. Uint32 * const signalData,
  42. LinearSectionPtr ptr[3]);
  43. /** 
  44.  * A function to avoid job buffer overflow in NDB kernel, empty in API 
  45.  * Non-zero return means we executed signals. This is necessary information 
  46.  * to the transporter to ensure that it properly uses the transporter after 
  47.  * coming back again. 
  48.  */ 
  49. int
  50. checkJobBuffer(); 
  51. /** 
  52.  * Report send length 
  53.  */ 
  54. void 
  55. reportSendLen(void * callbackObj,
  56.       NodeId nodeId, Uint32 count, Uint64 bytes); 
  57.  
  58. /** 
  59.  * Report average receive length 
  60.  */ 
  61. void 
  62. reportReceiveLen(void * callbackObj, 
  63.  NodeId nodeId, Uint32 count, Uint64 bytes); 
  64.  
  65. /** 
  66.  * Report connection established 
  67.  */ 
  68. void 
  69. reportConnect(void * callbackObj, NodeId nodeId); 
  70.  
  71. /** 
  72.  * Report connection broken 
  73.  */ 
  74.  
  75. void 
  76. reportDisconnect(void * callbackObj,
  77.  NodeId nodeId, Uint32 errNo); 
  78.  
  79. enum TransporterError { 
  80.   TE_NO_ERROR = 0,
  81.   /** 
  82.    * TE_ERROR_CLOSING_SOCKET 
  83.    * 
  84.    *   Error found during closing of socket 
  85.    * 
  86.    * Recommended behavior: Ignore 
  87.    */ 
  88.   TE_ERROR_CLOSING_SOCKET = 0x1, 
  89.  
  90.   /** 
  91.    * TE_ERROR_IN_SELECT_BEFORE_ACCEPT 
  92.    * 
  93.    *   Error found during accept (just before) 
  94.    *     The transporter will retry. 
  95.    * 
  96.    * Recommended behavior: Ignore  
  97.    *   (or possible do setPerformState(PerformDisconnect) 
  98.    */ 
  99.   TE_ERROR_IN_SELECT_BEFORE_ACCEPT = 0x2, 
  100.  
  101.   /** 
  102.    * TE_INVALID_MESSAGE_LENGTH 
  103.    * 
  104.    *   Error found in message (message length) 
  105.    * 
  106.    * Recommended behavior: setPerformState(PerformDisconnect) 
  107.    */ 
  108.   TE_INVALID_MESSAGE_LENGTH = 0x8003, 
  109.    
  110.   /** 
  111.    * TE_INVALID_CHECKSUM 
  112.    * 
  113.    *   Error found in message (checksum) 
  114.    * 
  115.    * Recommended behavior: setPerformState(PerformDisonnect) 
  116.    */ 
  117.   TE_INVALID_CHECKSUM = 0x8004, 
  118.  
  119.   /** 
  120.    * TE_COULD_NOT_CREATE_SOCKET 
  121.    * 
  122.    *   Error found while creating socket 
  123.    * 
  124.    * Recommended behavior: setPerformState(PerformDisonnect) 
  125.    */ 
  126.   TE_COULD_NOT_CREATE_SOCKET = 0x8005, 
  127.  
  128.   /** 
  129.    * TE_COULD_NOT_BIND_SOCKET 
  130.    * 
  131.    *   Error found while binding server socket 
  132.    * 
  133.    * Recommended behavior: setPerformState(PerformDisonnect) 
  134.    */ 
  135.   TE_COULD_NOT_BIND_SOCKET = 0x8006, 
  136.  
  137.   /** 
  138.    * TE_LISTEN_FAILED 
  139.    * 
  140.    *   Error found while listening to server socket 
  141.    * 
  142.    * Recommended behavior: setPerformState(PerformDisonnect) 
  143.    */ 
  144.   TE_LISTEN_FAILED = 0x8007, 
  145.  
  146.   /** 
  147.    * TE_ACCEPT_RETURN_ERROR 
  148.    * 
  149.    *   Error found during accept 
  150.    *     The transporter will retry. 
  151.    * 
  152.    * Recommended behavior: Ignore  
  153.    *   (or possible do setPerformState(PerformDisconnect) 
  154.    */ 
  155.   TE_ACCEPT_RETURN_ERROR = 0x8008 
  156.  
  157.   /** 
  158.    * TE_SHM_DISCONNECT  
  159.    * 
  160.    *    The remote node has disconnected 
  161.    * 
  162.    * Recommended behavior: setPerformState(PerformDisonnect) 
  163.    */ 
  164.   ,TE_SHM_DISCONNECT = 0x800b 
  165.  
  166.   /** 
  167.    * TE_SHM_IPC_STAT 
  168.    * 
  169.    *    Unable to check shm segment 
  170.    *      probably because remote node 
  171.    *      has disconnected and removed it 
  172.    * 
  173.    * Recommended behavior: setPerformState(PerformDisonnect) 
  174.    */ 
  175.   ,TE_SHM_IPC_STAT = 0x800c 
  176.  
  177.   /** 
  178.    * TE_SHM_UNABLE_TO_CREATE_SEGMENT 
  179.    * 
  180.    *    Unable to create shm segment 
  181.    *      probably os something error 
  182.    * 
  183.    * Recommended behavior: setPerformState(PerformDisonnect) 
  184.    */ 
  185.   ,TE_SHM_UNABLE_TO_CREATE_SEGMENT = 0x800d 
  186.  
  187.   /** 
  188.    * TE_SHM_UNABLE_TO_ATTACH_SEGMENT 
  189.    * 
  190.    *    Unable to attach shm segment 
  191.    *      probably invalid group / user 
  192.    * 
  193.    * Recommended behavior: setPerformState(PerformDisonnect) 
  194.    */ 
  195.   ,TE_SHM_UNABLE_TO_ATTACH_SEGMENT = 0x800e 
  196.  
  197.   /** 
  198.    * TE_SHM_UNABLE_TO_REMOVE_SEGMENT 
  199.    * 
  200.    *    Unable to remove shm segment 
  201.    * 
  202.    * Recommended behavior: Ignore (not much to do) 
  203.    *                       Print warning to logfile 
  204.    */ 
  205.   ,TE_SHM_UNABLE_TO_REMOVE_SEGMENT = 0x800f 
  206.  
  207.   ,TE_TOO_SMALL_SIGID = 0x0010 
  208.   ,TE_TOO_LARGE_SIGID = 0x0011 
  209.   ,TE_WAIT_STACK_FULL = 0x8012 
  210.   ,TE_RECEIVE_BUFFER_FULL = 0x8013 
  211.  
  212.   /** 
  213.    * TE_SIGNAL_LOST_SEND_BUFFER_FULL 
  214.    * 
  215.    *   Send buffer is full, and trying to force send fails 
  216.    *   a signal is dropped!! very bad very bad 
  217.    * 
  218.    */ 
  219.   ,TE_SIGNAL_LOST_SEND_BUFFER_FULL = 0x8014 
  220.  
  221.   /** 
  222.    * TE_SIGNAL_LOST 
  223.    * 
  224.    *   Send failed for unknown reason 
  225.    *   a signal is dropped!! very bad very bad 
  226.    * 
  227.    */ 
  228.   ,TE_SIGNAL_LOST = 0x8015 
  229.  
  230.   /** 
  231.    * TE_SEND_BUFFER_FULL 
  232.    *  
  233.    *   The send buffer was full, but sleeping for a while solved it 
  234.    */ 
  235.   ,TE_SEND_BUFFER_FULL = 0x0016 
  236.  
  237.   /** 
  238.    * TE_SCI_UNABLE_TO_CLOSE_CHANNEL 
  239.    *  
  240.    *  Unable to close the sci channel and the resources allocated by  
  241.    *  the sisci api. 
  242.    */ 
  243.   ,TE_SCI_UNABLE_TO_CLOSE_CHANNEL = 0x8016 
  244.  
  245.   /** 
  246.    * TE_SCI_LINK_ERROR 
  247.    *  
  248.    *  There is no link from this node to the switch.  
  249.    *  No point in continuing. Must check the connections. 
  250.    * Recommended behavior: setPerformState(PerformDisonnect) 
  251.    */ 
  252.   ,TE_SCI_LINK_ERROR = 0x8017 
  253.  
  254.   /** 
  255.    * TE_SCI_UNABLE_TO_START_SEQUENCE 
  256.    *  
  257.    *  Could not start a sequence, because system resources  
  258.    *  are exumed or no sequence has been created. 
  259.    *  Recommended behavior: setPerformState(PerformDisonnect) 
  260.    */ 
  261.   ,TE_SCI_UNABLE_TO_START_SEQUENCE = 0x8018 
  262.    
  263.   /** 
  264.    * TE_SCI_UNABLE_TO_REMOVE_SEQUENCE 
  265.    *  
  266.    *  Could not remove a sequence 
  267.    */ 
  268.   ,TE_SCI_UNABLE_TO_REMOVE_SEQUENCE = 0x8019 
  269.  
  270.   /** 
  271.    * TE_SCI_UNABLE_TO_CREATE_SEQUENCE 
  272.    *  
  273.    *  Could not create a sequence, because system resources are 
  274.    *  exempted. Must reboot. 
  275.    *  Recommended behavior: setPerformState(PerformDisonnect) 
  276.    */ 
  277.   ,TE_SCI_UNABLE_TO_CREATE_SEQUENCE = 0x801a 
  278.  
  279.   /** 
  280.    * TE_SCI_UNRECOVERABLE_DATA_TFX_ERROR 
  281.    *  
  282.    *  Tried to send data on redundant link but failed. 
  283.    *  Recommended behavior: setPerformState(PerformDisonnect) 
  284.    */ 
  285.   ,TE_SCI_UNRECOVERABLE_DATA_TFX_ERROR = 0x801b 
  286.  
  287.   /** 
  288.    * TE_SCI_CANNOT_INIT_LOCALSEGMENT 
  289.    *  
  290.    *  Cannot initialize local segment. A whole lot of things has 
  291.    *  gone wrong (no system resources). Must reboot. 
  292.    *  Recommended behavior: setPerformState(PerformDisonnect) 
  293.    */ 
  294.   ,TE_SCI_CANNOT_INIT_LOCALSEGMENT = 0x801c 
  295.  
  296.   /** 
  297.    * TE_SCI_CANNOT_MAP_REMOTESEGMENT 
  298.    *  
  299.    *  Cannot map remote segment. No system resources are left.  
  300.    *  Must reboot system. 
  301.    *  Recommended behavior: setPerformState(PerformDisonnect) 
  302.    */ 
  303.   ,TE_SCI_CANNOT_MAP_REMOTESEGMENT = 0x801d 
  304.  
  305.    /** 
  306.    * TE_SCI_UNABLE_TO_UNMAP_SEGMENT 
  307.    *  
  308.    *  Cannot free the resources used by this segment (step 1). 
  309.    *  Recommended behavior: setPerformState(PerformDisonnect) 
  310.    */ 
  311.   ,TE_SCI_UNABLE_TO_UNMAP_SEGMENT = 0x801e 
  312.  
  313.    /** 
  314.    * TE_SCI_UNABLE_TO_REMOVE_SEGMENT 
  315.    *  
  316.    *  Cannot free the resources used by this segment (step 2). 
  317.    *  Cannot guarantee that enough resources exist for NDB 
  318.    *  to map more segment 
  319.    *  Recommended behavior: setPerformState(PerformDisonnect) 
  320.    */ 
  321.   ,TE_SCI_UNABLE_TO_REMOVE_SEGMENT = 0x801f 
  322.  
  323.    /** 
  324.    * TE_SCI_UNABLE_TO_DISCONNECT_SEGMENT 
  325.    *  
  326.    *  Cannot disconnect from a remote segment. 
  327.    *  Recommended behavior: setPerformState(PerformDisonnect) 
  328.    */ 
  329.   ,TE_SCI_UNABLE_TO_DISCONNECT_SEGMENT = 0x8020 
  330.  
  331. }; 
  332.  
  333. /** 
  334.  * Report error 
  335.  */ 
  336. void 
  337. reportError(void * callbackObj, NodeId nodeId, TransporterError errorCode); 
  338.  
  339. #endif