~drizzle-trunk/drizzle/development

« back to all changes in this revision

Viewing changes to drizzled/replication_services.h

  • Committer: Brian Aker
  • Date: 2009-07-29 18:35:48 UTC
  • mfrom: (1101.1.12 merge)
  • Revision ID: brian@gaz-20090729183548-yp36iwoaemfc76z0
Merging Monty (which includes new replication)

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
 *
6
10
 *  This program is free software; you can redistribute it and/or modify
7
11
 *  it under the terms of the GNU General Public License as published by
8
12
 *  the Free Software Foundation; version 2 of the License.
17
21
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
18
22
 */
19
23
 
20
 
#ifndef DRIZZLED_REPLICATOR_H
21
 
#define DRIZZLED_REPLICATOR_H
 
24
#ifndef DRIZZLED_REPLICATION_SERVICES_H
 
25
#define DRIZZLED_REPLICATION_SERVICES_H
22
26
 
 
27
#include "drizzled/atomics.h"
23
28
#include <vector>
24
29
 
25
 
 
26
30
/* some forward declarations needed */
27
31
class Session;
28
32
class Table;
40
44
  }
41
45
}
42
46
 
43
 
void add_replicator(drizzled::plugin::Replicator *repl);
44
 
void remove_replicator(drizzled::plugin::Replicator *repl);
 
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);
45
52
 
46
53
/**
47
54
 * This is a class which manages transforming internal 
50
57
 */
51
58
namespace drizzled
52
59
{
53
 
class TransactionServices
 
60
class ReplicationServices
54
61
{
 
62
public:
 
63
  static const size_t DEFAULT_RECORD_SIZE= 100;
55
64
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;
56
75
  /** Our collection of replicator plugins */
57
76
  std::vector<drizzled::plugin::Replicator *> replicators;
58
77
  /** Our collection of applier plugins */
59
78
  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();
60
87
  /** 
61
88
   * Helper method which attaches a transaction context
62
89
   * the supplied command based on the supplied Session's
72
99
  void push(drizzled::message::Command *to_push);
73
100
public:
74
101
  /**
 
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
  /**
75
112
   * Attaches a replicator to our internal collection of
76
113
   * replicators.
77
114
   *
134
171
   *
135
172
   * @param Pointer to the Session which has updated a record
136
173
   * @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 
137
176
   */
138
 
  void updateRecord(Session *in_session, Table *in_table, const unsigned char *, const unsigned char *);
 
177
  void updateRecord(Session *in_session, 
 
178
                    Table *in_table, 
 
179
                    const unsigned char *old_record, 
 
180
                    const unsigned char *new_record);
139
181
  /**
140
182
   * Creates a new DeleteRecord GPB message and pushes it to
141
183
   * replicators.
158
200
   * @param Length of the query string
159
201
   */
160
202
  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;
161
208
};
162
209
 
163
210
} /* end namespace drizzled */
164
211
 
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 */
 
212
#endif /* DRIZZLED_REPLICATION_SERVICES_H */