~drizzle-trunk/drizzle/development

« back to all changes in this revision

Viewing changes to drizzled/transaction_services.h

  • Committer: Brian Aker
  • Date: 2009-06-16 00:53:22 UTC
  • mto: This revision was merged to the branch mainline in revision 1094.
  • Revision ID: brian@gaz-20090616005322-w0ode4jul9z8s2y9
Partial fix for tests for tmp

Show diffs side-by-side

added added

removed removed

Lines of Context:
3
3
 *
4
4
 *  Copyright (C) 2008-2009 Sun Microsystems
5
5
 *
6
 
 *  Authors:
7
 
 *
8
 
 *    Jay Pipes <joinfu@sun.com>
9
 
 *
10
6
 *  This program is free software; you can redistribute it and/or modify
11
7
 *  it under the terms of the GNU General Public License as published by
12
8
 *  the Free Software Foundation; version 2 of the License.
21
17
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
22
18
 */
23
19
 
24
 
#ifndef DRIZZLED_REPLICATION_SERVICES_H
25
 
#define DRIZZLED_REPLICATION_SERVICES_H
 
20
#ifndef DRIZZLED_REPLICATOR_H
 
21
#define DRIZZLED_REPLICATOR_H
26
22
 
27
 
#include "drizzled/atomics.h"
28
23
#include <vector>
29
24
 
 
25
 
30
26
/* some forward declarations needed */
31
27
class Session;
32
28
class Table;
44
40
  }
45
41
}
46
42
 
47
 
void add_replicator(drizzled::plugin::Replicator *replicator);
48
 
void remove_replicator(drizzled::plugin::Replicator *replicator);
49
 
 
50
 
void add_applier(drizzled::plugin::Applier *applier);
51
 
void remove_applier(drizzled::plugin::Applier *applier);
 
43
void add_replicator(drizzled::plugin::Replicator *repl);
 
44
void remove_replicator(drizzled::plugin::Replicator *repl);
52
45
 
53
46
/**
54
47
 * This is a class which manages transforming internal 
57
50
 */
58
51
namespace drizzled
59
52
{
60
 
class ReplicationServices
 
53
class TransactionServices
61
54
{
62
 
public:
63
 
  static const size_t DEFAULT_RECORD_SIZE= 100;
64
55
private:
65
 
  /** 
66
 
   * Atomic boolean set to true if any *active* replicators
67
 
   * or appliers are actually registered.
68
 
   */
69
 
  atomic<bool> is_active;
70
 
  /**
71
 
   * The timestamp of the last time a Command message was successfully
72
 
   * applied (sent to an Applier)
73
 
   */
74
 
  atomic<uint64_t> last_applied_timestamp;
75
56
  /** Our collection of replicator plugins */
76
57
  std::vector<drizzled::plugin::Replicator *> replicators;
77
58
  /** Our collection of applier plugins */
78
59
  std::vector<drizzled::plugin::Applier *> appliers;
79
 
  /**
80
 
   * Helper method which is called after any change in the
81
 
   * registered appliers or replicators to evaluate whether
82
 
   * any remaining plugins are actually active.
83
 
   * 
84
 
   * This method properly sets the is_active member variable.
85
 
   */
86
 
  void evaluateActivePlugins();
87
60
  /** 
88
61
   * Helper method which attaches a transaction context
89
62
   * the supplied command based on the supplied Session's
99
72
  void push(drizzled::message::Command *to_push);
100
73
public:
101
74
  /**
102
 
   * Constructor
103
 
   */
104
 
  ReplicationServices();
105
 
  /**
106
 
   * Returns whether the ReplicationServices object
107
 
   * is active.  In other words, does it have both
108
 
   * a replicator and an applier that are *active*?
109
 
   */
110
 
  bool isActive() const;
111
 
  /**
112
75
   * Attaches a replicator to our internal collection of
113
76
   * replicators.
114
77
   *
171
134
   *
172
135
   * @param Pointer to the Session which has updated a record
173
136
   * @param Pointer to the Table containing update information
174
 
   * @param Pointer to the raw bytes representing the old record/row
175
 
   * @param Pointer to the raw bytes representing the new record/row 
176
137
   */
177
 
  void updateRecord(Session *in_session, 
178
 
                    Table *in_table, 
179
 
                    const unsigned char *old_record, 
180
 
                    const unsigned char *new_record);
 
138
  void updateRecord(Session *in_session, Table *in_table, const unsigned char *, const unsigned char *);
181
139
  /**
182
140
   * Creates a new DeleteRecord GPB message and pushes it to
183
141
   * replicators.
200
158
   * @param Length of the query string
201
159
   */
202
160
  void rawStatement(Session *in_session, const char *in_query, size_t in_query_len);
203
 
  /**
204
 
   * Returns the timestamp of the last Command which was sent to 
205
 
   * an applier.
206
 
   */
207
 
  uint64_t getLastAppliedTimestamp() const;
208
161
};
209
162
 
210
163
} /* end namespace drizzled */
211
164
 
212
 
#endif /* DRIZZLED_REPLICATION_SERVICES_H */
 
165
#ifdef oldcode
 
166
/* todo, fill in this API */
 
167
/* these are the functions called by the rest of the drizzle server
 
168
   to do whatever this plugin does. */
 
169
bool replicator_session_init (Session *session);
 
170
bool replicator_write_row(Session *session, Table *table);
 
171
bool replicator_update_row(Session *session, Table *table,
 
172
                           const unsigned char *before,
 
173
                           const unsigned char *after);
 
174
bool replicator_delete_row(Session *session, Table *table);
 
175
 
 
176
/* The below control transactions */
 
177
bool replicator_end_transaction(Session *session, bool autocommit, bool commit);
 
178
bool replicator_prepare(Session *session);
 
179
bool replicator_statement(Session *session, const char *query, size_t query_length);
 
180
#endif /* oldcode */
 
181
#endif /* DRIZZLED_REPLICATOR_H */