66
69
TRANSACTION= 1, /* A GPB Transaction Message */
67
70
BLOB= 2 /* A BLOB value */
69
typedef std::vector<plugin::TransactionReplicator *> Replicators;
70
typedef std::vector<plugin::TransactionApplier *> Appliers;
73
* Atomic boolean set to true if any *active* replicators
74
* or appliers are actually registered.
76
atomic<bool> is_active;
78
* The timestamp of the last time a Transaction message was successfully
79
* applied (sent to an Applier)
81
atomic<uint64_t> last_applied_timestamp;
82
/** Our collection of replicator plugins */
83
Replicators replicators;
84
/** Our collection of applier plugins */
87
* Helper method which is called after any change in the
88
* registered appliers or replicators to evaluate whether
89
* any remaining plugins are actually active.
91
* This method properly sets the is_active member variable.
93
void evaluateActivePlugins();
72
typedef std::pair<plugin::TransactionReplicator *, plugin::TransactionApplier *> ReplicationPair;
73
typedef std::vector<ReplicationPair> ReplicationStreams;
75
* Method which is called after plugins have been loaded but
76
* before the first client connects. It determines if the registration
77
* of applier and replicator plugins is proper and pairs
78
* the applier and requested replicator plugins into the replication
83
* This is only necessary because we don't yet have plugin dependency
86
bool evaluateRegisteredPlugins();
96
88
* Helper method which pushes a constructed message out to the registered
97
89
* replicator and applier plugins.
91
* @param Session descriptor
99
92
* @param Message to push out
101
void pushTransactionMessage(message::Transaction &to_push);
94
plugin::ReplicationReturnCode pushTransactionMessage(Session &in_session,
95
message::Transaction &to_push);
127
127
* @param Pointer to a replicator to attach/register
129
129
void attachReplicator(plugin::TransactionReplicator *in_replicator);
131
132
* Detaches/unregisters a replicator with our internal
132
133
* collection of replicators.
134
135
* @param Pointer to the replicator to detach
136
137
void detachReplicator(plugin::TransactionReplicator *in_replicator);
138
140
* Attaches a applier to our internal collection of
141
143
* @param Pointer to a applier to attach/register
144
* @param The name of the replicator to pair with
143
void attachApplier(plugin::TransactionApplier *in_applier);
146
void attachApplier(plugin::TransactionApplier *in_applier, const std::string &requested_replicator);
145
149
* Detaches/unregisters a applier with our internal
146
150
* collection of appliers.
148
152
* @param Pointer to the applier to detach
150
154
void detachApplier(plugin::TransactionApplier *in_applier);
151
/** Returns the timestamp of the last Transaction which was sent to an
157
* Returns the timestamp of the last Transaction which was sent to an
154
160
uint64_t getLastAppliedTimestamp() const;
162
typedef std::vector<plugin::TransactionReplicator *> Replicators;
163
typedef std::vector<std::pair<std::string, plugin::TransactionApplier *> > Appliers;
165
* Atomic boolean set to true if any *active* replicators
166
* or appliers are actually registered.
170
* The timestamp of the last time a Transaction message was successfully
171
* applied (sent to an Applier)
173
atomic<uint64_t> last_applied_timestamp;
174
/** Our collection of registered replicator plugins */
175
Replicators replicators;
176
/** Our collection of registered applier plugins and their requested replicator plugin names */
178
/** Our replication streams */
179
ReplicationStreams replication_streams;
181
* Strips underscores and lowercases supplied replicator name
182
* or requested name, and appends the suffix "replicator" if missing...
184
void normalizeReplicatorName(std::string &name);
157
187
} /* namespace drizzled */