diff --git a/include/wsrep/provider.hpp b/include/wsrep/provider.hpp index 2b6291c..81cd4c6 100644 --- a/include/wsrep/provider.hpp +++ b/include/wsrep/provider.hpp @@ -217,7 +217,8 @@ namespace wsrep static const int pa_unsafe = (1 << 4); static const int commutative = (1 << 5); static const int native = (1 << 6); - static const int snapshot = (1 << 7); + static const int prepare = (1 << 7); + static const int snapshot = (1 << 8); }; /** @@ -378,6 +379,11 @@ namespace wsrep return (flags & wsrep::provider::flag::rollback); } + static inline bool prepares_transaction(int flags) + { + return (flags & wsrep::provider::flag::prepare); + } + static inline bool is_toi(int flags) { return (flags & wsrep::provider::flag::isolation); diff --git a/src/provider.cpp b/src/provider.cpp index 231018e..e526d56 100644 --- a/src/provider.cpp +++ b/src/provider.cpp @@ -62,6 +62,8 @@ std::string wsrep::flags_to_string(int flags) oss << "isolation | "; if (flags & provider::flag::pa_unsafe) oss << "pa_unsafe | "; + if (flags & provider::flag::prepare) + oss << "prepare | "; if (flags & provider::flag::snapshot) oss << "snapshot | "; diff --git a/src/wsrep_provider_v26.cpp b/src/wsrep_provider_v26.cpp index bd8fc02..027c76e 100644 --- a/src/wsrep_provider_v26.cpp +++ b/src/wsrep_provider_v26.cpp @@ -92,6 +92,7 @@ namespace { return wsrep::seqno(seqno); } + template inline uint32_t map_one(const int flags, const F from, const T to) @@ -102,18 +103,32 @@ namespace uint32_t map_flags_to_native(int flags) { using wsrep::provider; - return (map_one(flags, provider::flag::start_transaction, + return (map_one(flags, + provider::flag::start_transaction, WSREP_FLAG_TRX_START) | - map_one(flags, provider::flag::commit, WSREP_FLAG_TRX_END) | - map_one(flags, provider::flag::rollback, WSREP_FLAG_ROLLBACK) | - map_one(flags, provider::flag::isolation, WSREP_FLAG_ISOLATION) | - map_one(flags, provider::flag::pa_unsafe, WSREP_FLAG_PA_UNSAFE) | + map_one(flags, + provider::flag::commit, + WSREP_FLAG_TRX_END) | + map_one(flags, + provider::flag::rollback, + WSREP_FLAG_ROLLBACK) | + map_one(flags, + provider::flag::isolation, + WSREP_FLAG_ISOLATION) | + map_one(flags, + provider::flag::pa_unsafe, + WSREP_FLAG_PA_UNSAFE) | // map_one(flags, provider::flag::commutative, WSREP_FLAG_COMMUTATIVE) | // map_one(flags, provider::flag::native, WSREP_FLAG_NATIVE) | - map_one(flags, provider::flag::snapshot, WSREP_FLAG_SNAPSHOT)); + map_one(flags, + provider::flag::prepare, + WSREP_FLAG_TRX_PREPARE) | + map_one(flags, + provider::flag::snapshot, + WSREP_FLAG_SNAPSHOT)); } - int map_flags_from_native(uint32_t flags) + int map_flags_from_native(uint32_t flags) { using wsrep::provider; return (map_one(flags, @@ -133,7 +148,12 @@ namespace provider::flag::pa_unsafe) | // map_one(flags, provider::flag::commutative, WSREP_FLAG_COMMUTATIVE) | // map_one(flags, provider::flag::native, WSREP_FLAG_NATIVE) | - map_one(flags, WSREP_FLAG_SNAPSHOT, provider::flag::snapshot)); + map_one(flags, + WSREP_FLAG_TRX_PREPARE, + provider::flag::prepare) | + map_one(flags, + WSREP_FLAG_SNAPSHOT, + provider::flag::snapshot)); } class mutable_ws_handle