00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 #pragma once
00026
00027 #include <drizzled/atomics.h>
00028 #include <drizzled/plugin/replication.h>
00029
00030 #include <string>
00031 #include <vector>
00032 #include <utility>
00033
00034 #include <drizzled/visibility.h>
00035 #include <drizzled/common_fwd.h>
00036
00037 namespace drizzled {
00038
00044 class DRIZZLED_API ReplicationServices
00045 {
00046 public:
00047 typedef uint64_t GlobalTransactionId;
00054 enum MessageType
00055 {
00056 TRANSACTION= 1,
00057 BLOB= 2
00058 };
00059 typedef std::pair<plugin::TransactionReplicator *, plugin::TransactionApplier *> ReplicationPair;
00060 typedef std::vector<ReplicationPair> ReplicationStreams;
00073 static bool evaluateRegisteredPlugins();
00081 static plugin::ReplicationReturnCode pushTransactionMessage(Session &in_session, message::Transaction &to_push);
00082
00088 static bool isActive();
00089
00093 static ReplicationStreams &getReplicationStreams();
00094
00101 static void attachReplicator(plugin::TransactionReplicator *in_replicator);
00102
00109 static void detachReplicator(plugin::TransactionReplicator *in_replicator);
00110
00118 static void attachApplier(plugin::TransactionApplier *in_applier, const std::string &requested_replicator);
00119
00126 static void detachApplier(plugin::TransactionApplier *in_applier);
00127
00132 static uint64_t getLastAppliedTimestamp();
00133 };
00134
00135 }
00136