~drizzle-trunk/drizzle/development

« back to all changes in this revision

Viewing changes to drizzled/xid.h

  • Committer: brian
  • Date: 2008-06-25 05:29:13 UTC
  • Revision ID: brian@localhost.localdomain-20080625052913-6upwo0jsrl4lnapl
clean slate

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
/* -*- mode: c++; c-basic-offset: 2; indent-tabs-mode: nil; -*-
2
 
 *  vim:expandtab:shiftwidth=2:tabstop=2:smarttab:
3
 
 *
4
 
 *  Copyright (C) 2008 Sun Microsystems
5
 
 *
6
 
 *  This program is free software; you can redistribute it and/or modify
7
 
 *  it under the terms of the GNU General Public License as published by
8
 
 *  the Free Software Foundation; version 2 of the License.
9
 
 *
10
 
 *  This program is distributed in the hope that it will be useful,
11
 
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
12
 
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13
 
 *  GNU General Public License for more details.
14
 
 *
15
 
 *  You should have received a copy of the GNU General Public License
16
 
 *  along with this program; if not, write to the Free Software
17
 
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
18
 
 */
19
 
 
20
 
#ifndef DRIZZLED_XID_H
21
 
#define DRIZZLED_XID_H
22
 
 
23
 
#include <cstring>
24
 
 
25
 
namespace drizzled
26
 
{
27
 
 
28
 
extern uint32_t server_id;
29
 
 
30
 
/**
31
 
  class XID _may_ be binary compatible with the XID structure as
32
 
  in the X/Open CAE Specification, Distributed Transaction Processing:
33
 
  The XA Specification, X/Open Company Ltd., 1991.
34
 
  http://www.opengroup.org/bookstore/catalog/c193.htm
35
 
 
36
 
*/
37
 
 
38
 
typedef uint64_t my_xid;
39
 
 
40
 
#define DRIZZLE_XIDDATASIZE 128
41
 
#define DRIZZLE_XID_PREFIX "MySQLXid"
42
 
#define DRIZZLE_XID_PREFIX_LEN 8 // must be a multiple of 8
43
 
#define DRIZZLE_XID_OFFSET (DRIZZLE_XID_PREFIX_LEN+sizeof(server_id))
44
 
#define DRIZZLE_XID_GTRID_LEN (DRIZZLE_XID_OFFSET+sizeof(my_xid))
45
 
 
46
 
class XID {
47
 
 
48
 
public:
49
 
 
50
 
  long formatID;
51
 
  long gtrid_length;
52
 
  long bqual_length;
53
 
  char data[DRIZZLE_XIDDATASIZE];  // not \0-terminated !
54
 
 
55
 
  XID() :
56
 
    formatID(-1), /* -1 == null */
57
 
    gtrid_length(0),
58
 
    bqual_length(0)
59
 
  {
60
 
    memset(data, 0, DRIZZLE_XIDDATASIZE);
61
 
  }
62
 
  bool eq(XID *xid);
63
 
  bool eq(long g, long b, const char *d);
64
 
  void set(XID *xid);
65
 
  void set(long f, const char *g, long gl, const char *b, long bl);
66
 
  void set(uint64_t xid);
67
 
  void set(long g, long b, const char *d);
68
 
  bool is_null();
69
 
  void null();
70
 
  my_xid quick_get_my_xid();
71
 
  my_xid get_my_xid();
72
 
  uint32_t length();
73
 
  unsigned char *key();
74
 
  uint32_t key_length();
75
 
};
76
 
 
77
 
/**
78
 
  struct st_drizzle_xid is binary compatible with the XID structure as
79
 
  in the X/Open CAE Specification, Distributed Transaction Processing:
80
 
  The XA Specification, X/Open Company Ltd., 1991.
81
 
  http://www.opengroup.org/bookstore/catalog/c193.htm
82
 
 
83
 
*/
84
 
 
85
 
class drizzle_xid {
86
 
public:
87
 
  long formatID;
88
 
  long gtrid_length;
89
 
  long bqual_length;
90
 
  char data[DRIZZLE_XIDDATASIZE];  /* Not \0-terminated */
91
 
 
92
 
  drizzle_xid() :
93
 
    formatID(0),
94
 
    gtrid_length(0),
95
 
    bqual_length(0)
96
 
  {
97
 
    memset(data, 0, DRIZZLE_XIDDATASIZE);
98
 
  }
99
 
};
100
 
typedef class drizzle_xid DRIZZLE_XID;
101
 
 
102
 
enum xa_states {XA_NOTR=0, XA_ACTIVE, XA_IDLE, XA_PREPARED};
103
 
extern const char *xa_state_names[];
104
 
 
105
 
/* for recover() plugin::StorageEngine call */
106
 
#define MIN_XID_LIST_SIZE  128
107
 
#define MAX_XID_LIST_SIZE  (1024*128)
108
 
 
109
 
class XID_STATE 
110
 
{
111
 
public:
112
 
  XID_STATE() :
113
 
    xid(),
114
 
    xa_state(XA_NOTR),
115
 
    in_session(false)
116
 
  {}
117
 
  /* For now, this is only used to catch duplicated external xids */
118
 
  XID  xid;                           // transaction identifier
119
 
  enum xa_states xa_state;            // used by external XA only
120
 
  bool in_session;
121
 
};
122
 
 
123
 
bool xid_cache_init(void);
124
 
void xid_cache_free(void);
125
 
XID_STATE *xid_cache_search(XID *xid);
126
 
bool xid_cache_insert(XID *xid, enum xa_states xa_state);
127
 
bool xid_cache_insert(XID_STATE *xid_state);
128
 
void xid_cache_delete(XID_STATE *xid_state);
129
 
 
130
 
} /* namespace drizzled */
131
 
 
132
 
#endif /* DRIZZLED_XID_H */