diff options
author | Ultrabug <ultrabug@gentoo.org> | 2019-10-18 11:35:09 +0200 |
---|---|---|
committer | Ultrabug <ultrabug@gentoo.org> | 2019-10-18 11:35:09 +0200 |
commit | 3a89cc0e446ca93b868587615dc997cae3d5f6b0 (patch) | |
tree | e54cc9be13116de0e534640bccb5bd6c0c38eb56 /dev-db/scylla | |
parent | app-admin/scylla-jmx: fix keywords (diff) | |
download | ultrabug-3a89cc0e446ca93b868587615dc997cae3d5f6b0.tar.gz ultrabug-3a89cc0e446ca93b868587615dc997cae3d5f6b0.tar.bz2 ultrabug-3a89cc0e446ca93b868587615dc997cae3d5f6b0.zip |
dev-db/scylla: add patch for thrift support on 3.1
Package-Manager: Portage-2.3.76, Repoman-2.3.17
Manifest-Sign-Key: F30FAFEE3BD598228B24CB121A3A8C89C56D610B
Signed-off-by: Alexys Jacob <ultrabug@gentoo.org>
Diffstat (limited to 'dev-db/scylla')
-rw-r--r-- | dev-db/scylla/Manifest | 29 | ||||
-rw-r--r-- | dev-db/scylla/files/3.1-thrift-support.patch | 543 | ||||
-rw-r--r-- | dev-db/scylla/scylla-3.1.0.ebuild | 1 |
3 files changed, 559 insertions, 14 deletions
diff --git a/dev-db/scylla/Manifest b/dev-db/scylla/Manifest index 1c88ce2..d8af45f 100644 --- a/dev-db/scylla/Manifest +++ b/dev-db/scylla/Manifest @@ -3,6 +3,7 @@ Hash: SHA256 AUX 0001-thrift-support-version-0.11-after-THRIFT-2221.patch 40277 BLAKE2B 4296b042320db3f3669f487961e58f75403d79fbdce06a4f04b3c9e83b243b637a513cf868c618fac26df82d20bfb7de44b51c959e09d299f6a1f72e54387761 SHA512 5403833a82972be26e5d50f0557cb7a4a2985dec487be3aeb907720b5a8f638d1e3c6bfd3d06bb0c097c707135f29b137f63e77d76ba918f009d179a27dc0c91 AUX 10-scylla.conf 64 BLAKE2B 31ce1b2173214bcac351b71cf19e5506ab08cefbca446ce23ad753c98c5e4fd7fbb89b0f79703ea4dcf1f6233e7929268365eeaab1b4e2e7b31553aa7928a969 SHA512 c24b3ec2f0ea3b1ad0792c05a8eb044b3a157862b59759e020586ae872f9789a558d423fe1dff1a8c6d8342049cf4d919faf31a1439a6a1c69af915365b4ec82 +AUX 3.1-thrift-support.patch 39980 BLAKE2B 7de8bde052186b8a62ea83b7082e9828d4c320ed86381a93d5136906ba014631dc3b5e2a2b1dfd33bec21c6bd7d685fa3f1f270c97f233934cca24473d0e52b5 SHA512 d33e50dbef01dfd4845a093c160b5cbedc658770c1b5a5de063c56b43df0731329fe0cdb3ddfa5d72020ab25573682e4d14a3c39ad366a208694062a3fd49155 AUX boost-1.65.0-icl-ttp-matching.patch 1427 BLAKE2B de9c77253963656f85ed2d05babd600bc5b59b567bc889ed815dfba97f2a1334df48dbb1e67879dea1419fb439c513c54a66531d4e8ec28a7848385f70471334 SHA512 aaa7959df631c17a80486e5b6724d76bf2193694f5559443350c74567506f36c133f740adcbb1b2d3a5a2760730f498f0fd655ec6eff6d20393b6e49549c6ec8 AUX fix-fmt-3.5.0-compilation.patch 3785 BLAKE2B 3cd23ccffe1ec33d5f7e2c6c3583631b294fc0e6d36e49eef582598fd168968805dd7ca4cc786c02cb20ae1e758a814e1b761dbd41a86330906cd4b5af5d6666 SHA512 d7606559fb2aef9ea009e8c417397dcc94d0c708da8283d4c1c6393c059ecca50d9806cfb19d1fe69b8d7898da2b8d194fbc8b8dd1aa9c12e0d6120d52bc2518 AUX scylla-server.confd 386 BLAKE2B e075e8f5cac2ac373a43a637a4080fde5cbd402b5bef2a3865980f3f9d123366315d994ebf9abbd749167db6e1fa9c840295171add7c5507120be70020aaefa1 SHA512 5d3c55933a02d3b16837013b37110f6669c14e01599532f30935b5dc29871a5bed897c9eb01a6e89469eab7d645c9231745a06c2ef827f6700e13c8faa9cdb87 @@ -24,25 +25,25 @@ EBUILD scylla-3.0.10.ebuild 9218 BLAKE2B b993e32bb1eefb017cfad93061be4b1bf752c23 EBUILD scylla-3.0.6.ebuild 9030 BLAKE2B a8ac0f6fef3c5b096a8df627c2bd3cb25374214883e655618a2308e6a0652970c2c60d2b48fae42fffd3374189c96441d8cc0c4c7ee5359d500ffe2352058c28 SHA512 87b9fe1aabaedac861fd6868e65501f6e08b75450fa801ba760d0125666445b97cab10683dd07eab7b988d2520d471458ecb5cb867d8822f7ac6d1fe50cb8986 EBUILD scylla-3.0.8.ebuild 9111 BLAKE2B 565f5d1b42257afbfdf12ec729b7950b77b0f8d7bffb07960c4412e74223966ec368057236ee8fa75c8aee1bdc6f6fa6d06acb4d57a34ffedc2c8670a4178149 SHA512 477be22fcf71b9ec149aeb5b61b5419b3dd0cdb5b28e1d6c094f1acdd6b3aaa1c34b9b0d85bbd13feb9fd2d1b64ba8d90a7dda00b8cb1804f61eec1bdc73fd33 EBUILD scylla-3.0.9.ebuild 9218 BLAKE2B 0b2966a89c72872bebfd3dbe3bc6fea72257a40e269e812037f574491e5fa28f87b1838978251893e83cf207f6d19db63c4800783071a80d137f24cef6f72cde SHA512 1dbe1b9b4cc719c0241fd9f33f96dffbb2b3430963fc4b57e300059547d274dd3e6592db31bacc60cca783fbe862586c93efd58c8b3b6bbbb303864066d5be12 -EBUILD scylla-3.1.0.ebuild 6926 BLAKE2B 8ad5e6b2e7d3ca07bf4d8522568be45e44d8d9d76bdcfd5de08b2be0a104345a14bc3ec548ca4dfb1960c0f6a7ea22d5aa385aacf5bf92d3d054c43bb3d233b9 SHA512 3c03305b10e38238cb4b46b9e49824be2b0f0b29a96b2ae74d95229e6230352652c0396d64738e81b2fd154bb4daed6f603908cb335027ae87fb5f24070a1027 +EBUILD scylla-3.1.0.ebuild 6966 BLAKE2B 3b0b55e2a18f243876814cf8100d00ea96cdac538e98d033fc0762c77dae7144448286aa8c4a1eac5647695a2fc11e35c68d18b7cff843db8a31657a9c420a9c SHA512 7ea6f811d1249373c109557056c399466b20027a9360e2d94bc6bd671814da3b89fc0766b7526c739e2959e2014f5b458d609f5c08d95945a5b826ec82515b8e EBUILD scylla-9999.ebuild 6833 BLAKE2B c21b0db85ca5b2dbe90a7523b739fa6614d40fd0264d8cd5bf77f1c1b37b31f1f042c946b76d5c1e74907badf931c188f7f5112105089658ff6acfc80f440021 SHA512 e5237eddd44fa0f4f88a6aa4bd2d6015dc6c61597636e03957ea932cce240de05533e223aae0abb68d37d16c7734e64267f2b77aedb3913c24b6b73210629972 MISC metadata.xml 249 BLAKE2B 40afa233e18ae5678e52194be8b1235d8deda4810e55b33ea192ded6b09a158f1bc941544f90a1b9e396db00bc0fe277c072d267568473ae4aa2dec8bc5c2f89 SHA512 6eae78a65db44c8f7ef2d20c10c8612cd2072c0204c6294798e4bf94f1283c684c22d1ad28e0f68e78e82a0c60526d6786492c9dacc438d83405218e51c1bf9c -----BEGIN PGP SIGNATURE----- Version: GnuPG v2 -iQKTBAEBCAB9FiEEGiPLJcoPPNcvDvnY9mwK1B9ohkIFAl2pdcBfFIAAAAAALgAo +iQKTBAEBCAB9FiEEGiPLJcoPPNcvDvnY9mwK1B9ohkIFAl2phzFfFIAAAAAALgAo aXNzdWVyLWZwckBub3RhdGlvbnMub3BlbnBncC5maWZ0aGhvcnNlbWFuLm5ldDFB MjNDQjI1Q0EwRjNDRDcyRjBFRjlEOEY2NkMwQUQ0MUY2ODg2NDIACgkQ9mwK1B9o -hkJQ8w//SyyADGHJCasMDdPr/LRs7xWxuDSKHjUrQnIARjh+q6Qpn8abwZ9+FHih -bWbzygBF3Mw024Oc4WonSQzGFPV3XRx8R1oXhJ8J3c87K9xuI77MKHlTK2e40kZ4 -rFbB64M4rLGwHxnhkAxpJVixCY/S9u6YvEA5dINgChenw9aOOFrCCjiatlzUFuBg -tof1PtY7/TUVT9Utki4xMOinmLBEuWLfMJVyQvUS8VTeQOaclmVFDiUJbdQpuiMd -NtN4X+N1e0ee5NlEiSf1bKFdNnrvURyeDkNHcsQmFk6jqSgHeEpJJf3dmu/j5OdL -RfgStWWeDZHKoDw8Xz9hmh1ZyR/8I+JMLOlfVxiOJj3pkcwQ7gj3V/ulrex6pfaw -CWwBiC48ira27htQXgwtTxQaKqvTB/Yzl5jbcLbO2o9QZZ0kdITysGyP2PdFWHBi -uMjuRreY+x/eABfh4UaDkuVK0gejvUqwgDYqdkZyKnGPvjUlRAEgXR1eyveo3L6Q -J9QRIfI0TYxaIKo6I3tLen1fHcux9rX/7svhi2mXGB2hIQcWe4hx8lQMQkxIYMv5 -7vNZbX4fCjvCJfssq1DsofOqksTPPkxrgohHa83VOY6Zwp5YaseUwrMMGFWAGkPH -RD+GmDRG0VPRDq5Zyp8jcjNA0JRT0gtaSAXA9OEYrh3v1Qgislk= -=11aF +hkJHAg//azymcuMAwqwMz+dS/tXWslAxq+1PhIcamBdiA2KpLY+jy8XUfduZrbjs ++gJVsOvXm7pwr0W4J1PNFQnJGjC5ioaR+wXPUuCveJhLW+VYIaphakDVWlUqmX3b +XxrxgWN7A4LdADBKRzipZ022ydxjmlPWGI8NZfjmIOaSnXuoX4wD7RwaxqPwpV+T +C8G0EjO6DfkShOlEml1rNKzXUJJ+D6yJrCPb0Hv1az/eYpRHsvY6+yD7Nt8DM92c +jUO733IYkO7NGmUvtRK9Ds3gJGmKY7/ouNnzIs36PBnLuWSk8Ex3yYHvO97oTxpf +M8p1hrz7J3NSfhZ4PtZMJbjix/zog4KR2bImMFZdSRsoSsyVghlYXsMMq9Zev5E3 +A9PW3g2mj7X21DGg17sVT5/p2F6U4dbfbwKnT+C6SB/Mu9UkyPo5vcPwkNDQk2Gj +4fecRMRP0kdOrmhO42YVNZ0giQPfrKRz/ekKhbgLGqr1zdUulTa2K1uEbQKTkNlD +RFFMboF+Dg9pm1pN6HYxyg7mokmVbltKkTb4FZuyP6ZDmbMp6OTvetTFjYjUUKMB +GnuvNwb3wFcPJ39ewFxHJtzun4dC07Lg32zjQDu4LyjwUFpDO6fpiYT4lRQHsIKk +QNXl2WjZQXsp2HCZr43Mu3KadNjA8+V+dWVDy4XYfVvDnWCKLd0= +=mQZX -----END PGP SIGNATURE----- diff --git a/dev-db/scylla/files/3.1-thrift-support.patch b/dev-db/scylla/files/3.1-thrift-support.patch new file mode 100644 index 0000000..95a841c --- /dev/null +++ b/dev-db/scylla/files/3.1-thrift-support.patch @@ -0,0 +1,543 @@ +diff --git a/configure.py b/configure.py +index b59f7abe6..2e26461fa 100755 +--- a/configure.py ++++ b/configure.py +@@ -1123,6 +1123,12 @@ if not os.path.exists(xxhash_dir) or not os.listdir(xxhash_dir): + if not args.staticboost: + args.user_cflags += ' -DBOOST_TEST_DYN_LINK' + ++# thrift version detection, see #4538 ++thrift_version = subprocess.check_output(["thrift", "-version"]).decode("utf-8").split(" ")[-1] ++if int(thrift_version.replace(".", "")) < 110: ++ print('Note: thrift version < 0.11.0 detected, using boost symbols') ++ args.user_cflags += ' -DTHRIFT_USES_BOOST' ++ + for pkg in pkgs: + args.user_cflags += ' ' + pkg_config(pkg, '--cflags') + libs += ' ' + pkg_config(pkg, '--libs') +diff --git a/thrift/handler.cc b/thrift/handler.cc +index 540cc9cbc..f3725e3d3 100644 +--- a/thrift/handler.cc ++++ b/thrift/handler.cc +@@ -55,6 +55,12 @@ + #include "thrift/server.hh" + #include "db/config.hh" + ++#ifdef THRIFT_USES_BOOST ++namespace thrift_std = tcxx; ++#else ++namespace thrift_std = std; ++#endif ++ + using namespace ::apache::thrift; + using namespace ::apache::thrift::protocol; + namespace thrift_transport = ::apache::thrift::transport; +@@ -69,7 +75,7 @@ class unimplemented_exception : public std::exception { + virtual const char* what() const throw () override { return "sorry, not implemented"; } + }; + +-void pass_unimplemented(const tcxx::function<void(::apache::thrift::TDelayedException* _throw)>& exn_cob) { ++void pass_unimplemented(const thrift_std::function<void(::apache::thrift::TDelayedException* _throw)>& exn_cob) { + exn_cob(::apache::thrift::TDelayedException::delayException(unimplemented_exception())); + } + +@@ -119,8 +125,8 @@ class delayed_exception_wrapper : public ::apache::thrift::TDelayedException { + + template <typename Func, typename T> + void +-with_cob(tcxx::function<void (const T& ret)>&& cob, +- tcxx::function<void (::apache::thrift::TDelayedException* _throw)>&& exn_cob, ++with_cob(thrift_std::function<void (const T& ret)>&& cob, ++ thrift_std::function<void (::apache::thrift::TDelayedException* _throw)>&& exn_cob, + Func&& func) { + // then_wrapped() terminates the fiber by calling one of the cob objects + futurize<noexcept_movable_t<T>>::apply([func = std::forward<Func>(func)] { +@@ -137,8 +143,8 @@ with_cob(tcxx::function<void (const T& ret)>&& cob, + + template <typename Func> + void +-with_cob(tcxx::function<void ()>&& cob, +- tcxx::function<void (::apache::thrift::TDelayedException* _throw)>&& exn_cob, ++with_cob(thrift_std::function<void ()>&& cob, ++ thrift_std::function<void (::apache::thrift::TDelayedException* _throw)>&& exn_cob, + Func&& func) { + // then_wrapped() terminates the fiber by calling one of the cob objects + futurize<void>::apply(func).then_wrapped([cob = std::move(cob), exn_cob = std::move(exn_cob)] (future<> f) { +@@ -154,7 +160,7 @@ with_cob(tcxx::function<void ()>&& cob, + + template <typename Func> + void +-with_exn_cob(tcxx::function<void (::apache::thrift::TDelayedException* _throw)>&& exn_cob, Func&& func) { ++with_exn_cob(thrift_std::function<void (::apache::thrift::TDelayedException* _throw)>&& exn_cob, Func&& func) { + // then_wrapped() terminates the fiber by calling one of the cob objects + futurize<void>::apply(func).then_wrapped([exn_cob = std::move(exn_cob)] (future<> f) { + try { +@@ -203,7 +209,7 @@ class thrift_handler : public CassandraCobSvIf { + template <typename Cob, typename Func> + void + with_schema(Cob&& cob, +- tcxx::function<void (::apache::thrift::TDelayedException* _throw)>&& exn_cob, ++ thrift_std::function<void (::apache::thrift::TDelayedException* _throw)>&& exn_cob, + const std::string& cf, + Func&& func) { + with_cob(std::move(cob), std::move(exn_cob), [this, &cf, func = std::move(func)] { +@@ -227,7 +233,7 @@ class thrift_handler : public CassandraCobSvIf { + return _query_state.get_client_state().validate_login(); + }; + +- void login(tcxx::function<void()> cob, tcxx::function<void(::apache::thrift::TDelayedException* _throw)> exn_cob, const AuthenticationRequest& auth_request) { ++ void login(thrift_std::function<void()> cob, thrift_std::function<void(::apache::thrift::TDelayedException* _throw)> exn_cob, const AuthenticationRequest& auth_request) { + with_cob(std::move(cob), std::move(exn_cob), [&] { + auth::authenticator::credentials_map creds(auth_request.credentials.begin(), auth_request.credentials.end()); + auto& auth_service = *_query_state.get_client_state().get_auth_service(); +@@ -237,13 +243,13 @@ class thrift_handler : public CassandraCobSvIf { + }); + } + +- void set_keyspace(tcxx::function<void()> cob, tcxx::function<void(::apache::thrift::TDelayedException* _throw)> exn_cob, const std::string& keyspace) { ++ void set_keyspace(thrift_std::function<void()> cob, thrift_std::function<void(::apache::thrift::TDelayedException* _throw)> exn_cob, const std::string& keyspace) { + with_cob(std::move(cob), std::move(exn_cob), [&] { + _query_state.get_client_state().set_keyspace(_db.local(), keyspace); + }); + } + +- void get(tcxx::function<void(ColumnOrSuperColumn const& _return)> cob, tcxx::function<void(::apache::thrift::TDelayedException* _throw)> exn_cob, const std::string& key, const ColumnPath& column_path, const ConsistencyLevel::type consistency_level) { ++ void get(thrift_std::function<void(ColumnOrSuperColumn const& _return)> cob, thrift_std::function<void(::apache::thrift::TDelayedException* _throw)> exn_cob, const std::string& key, const ColumnPath& column_path, const ConsistencyLevel::type consistency_level) { + return get_slice([cob = std::move(cob), &column_path](auto&& results) { + if (results.empty()) { + throw NotFoundException(); +@@ -252,7 +258,7 @@ class thrift_handler : public CassandraCobSvIf { + }, exn_cob, key, column_path_to_column_parent(column_path), column_path_to_slice_predicate(column_path), std::move(consistency_level)); + } + +- void get_slice(tcxx::function<void(std::vector<ColumnOrSuperColumn> const& _return)> cob, tcxx::function<void(::apache::thrift::TDelayedException* _throw)> exn_cob, const std::string& key, const ColumnParent& column_parent, const SlicePredicate& predicate, const ConsistencyLevel::type consistency_level) { ++ void get_slice(thrift_std::function<void(std::vector<ColumnOrSuperColumn> const& _return)> cob, thrift_std::function<void(::apache::thrift::TDelayedException* _throw)> exn_cob, const std::string& key, const ColumnParent& column_parent, const SlicePredicate& predicate, const ConsistencyLevel::type consistency_level) { + return multiget_slice([cob = std::move(cob)](auto&& results) { + if (!results.empty()) { + return cob(std::move(results.begin()->second)); +@@ -261,7 +267,7 @@ class thrift_handler : public CassandraCobSvIf { + }, exn_cob, {key}, column_parent, predicate, consistency_level); + } + +- void get_count(tcxx::function<void(int32_t const& _return)> cob, tcxx::function<void(::apache::thrift::TDelayedException* _throw)> exn_cob, const std::string& key, const ColumnParent& column_parent, const SlicePredicate& predicate, const ConsistencyLevel::type consistency_level) { ++ void get_count(thrift_std::function<void(int32_t const& _return)> cob, thrift_std::function<void(::apache::thrift::TDelayedException* _throw)> exn_cob, const std::string& key, const ColumnParent& column_parent, const SlicePredicate& predicate, const ConsistencyLevel::type consistency_level) { + return multiget_count([cob = std::move(cob)](auto&& results) { + if (!results.empty()) { + return cob(results.begin()->second); +@@ -270,7 +276,7 @@ class thrift_handler : public CassandraCobSvIf { + }, exn_cob, {key}, column_parent, predicate, consistency_level); + } + +- void multiget_slice(tcxx::function<void(std::map<std::string, std::vector<ColumnOrSuperColumn> > const& _return)> cob, tcxx::function<void(::apache::thrift::TDelayedException* _throw)> exn_cob, const std::vector<std::string> & keys, const ColumnParent& column_parent, const SlicePredicate& predicate, const ConsistencyLevel::type consistency_level) { ++ void multiget_slice(thrift_std::function<void(std::map<std::string, std::vector<ColumnOrSuperColumn> > const& _return)> cob, thrift_std::function<void(::apache::thrift::TDelayedException* _throw)> exn_cob, const std::vector<std::string> & keys, const ColumnParent& column_parent, const SlicePredicate& predicate, const ConsistencyLevel::type consistency_level) { + with_schema(std::move(cob), std::move(exn_cob), column_parent.column_family, [&](schema_ptr schema) { + if (!column_parent.super_column.empty()) { + fail(unimplemented::cause::SUPER); +@@ -298,7 +304,7 @@ class thrift_handler : public CassandraCobSvIf { + }); + } + +- void multiget_count(tcxx::function<void(std::map<std::string, int32_t> const& _return)> cob, tcxx::function<void(::apache::thrift::TDelayedException* _throw)> exn_cob, const std::vector<std::string> & keys, const ColumnParent& column_parent, const SlicePredicate& predicate, const ConsistencyLevel::type consistency_level) { ++ void multiget_count(thrift_std::function<void(std::map<std::string, int32_t> const& _return)> cob, thrift_std::function<void(::apache::thrift::TDelayedException* _throw)> exn_cob, const std::vector<std::string> & keys, const ColumnParent& column_parent, const SlicePredicate& predicate, const ConsistencyLevel::type consistency_level) { + with_schema(std::move(cob), std::move(exn_cob), column_parent.column_family, [&](schema_ptr schema) { + if (!column_parent.super_column.empty()) { + fail(unimplemented::cause::SUPER); +@@ -327,7 +333,7 @@ class thrift_handler : public CassandraCobSvIf { + * don't know which partition keys in the specified range we should return back to the client. So for + * now our behavior differs from Origin. + */ +- void get_range_slices(tcxx::function<void(std::vector<KeySlice> const& _return)> cob, tcxx::function<void(::apache::thrift::TDelayedException* _throw)> exn_cob, const ColumnParent& column_parent, const SlicePredicate& predicate, const KeyRange& range, const ConsistencyLevel::type consistency_level) { ++ void get_range_slices(thrift_std::function<void(std::vector<KeySlice> const& _return)> cob, thrift_std::function<void(::apache::thrift::TDelayedException* _throw)> exn_cob, const ColumnParent& column_parent, const SlicePredicate& predicate, const KeyRange& range, const ConsistencyLevel::type consistency_level) { + with_schema(std::move(cob), std::move(exn_cob), column_parent.column_family, [&](schema_ptr schema) { + if (!column_parent.super_column.empty()) { + fail(unimplemented::cause::SUPER); +@@ -438,7 +444,7 @@ class thrift_handler : public CassandraCobSvIf { + }); + } + +- void get_paged_slice(tcxx::function<void(std::vector<KeySlice> const& _return)> cob, tcxx::function<void(::apache::thrift::TDelayedException* _throw)> exn_cob, const std::string& column_family, const KeyRange& range, const std::string& start_column, const ConsistencyLevel::type consistency_level) { ++ void get_paged_slice(thrift_std::function<void(std::vector<KeySlice> const& _return)> cob, thrift_std::function<void(::apache::thrift::TDelayedException* _throw)> exn_cob, const std::string& column_family, const KeyRange& range, const std::string& start_column, const ConsistencyLevel::type consistency_level) { + with_schema(std::move(cob), std::move(exn_cob), column_family, [&](schema_ptr schema) { + return do_with(std::vector<KeySlice>(), [&](auto& output) { + if (range.__isset.row_filter) { +@@ -466,14 +472,14 @@ class thrift_handler : public CassandraCobSvIf { + }); + } + +- void get_indexed_slices(tcxx::function<void(std::vector<KeySlice> const& _return)> cob, tcxx::function<void(::apache::thrift::TDelayedException* _throw)> exn_cob, const ColumnParent& column_parent, const IndexClause& index_clause, const SlicePredicate& column_predicate, const ConsistencyLevel::type consistency_level) { ++ void get_indexed_slices(thrift_std::function<void(std::vector<KeySlice> const& _return)> cob, thrift_std::function<void(::apache::thrift::TDelayedException* _throw)> exn_cob, const ColumnParent& column_parent, const IndexClause& index_clause, const SlicePredicate& column_predicate, const ConsistencyLevel::type consistency_level) { + std::vector<KeySlice> _return; + warn(unimplemented::cause::INDEXES); + // FIXME: implement + return pass_unimplemented(exn_cob); + } + +- void insert(tcxx::function<void()> cob, tcxx::function<void(::apache::thrift::TDelayedException* _throw)> exn_cob, const std::string& key, const ColumnParent& column_parent, const Column& column, const ConsistencyLevel::type consistency_level) { ++ void insert(thrift_std::function<void()> cob, thrift_std::function<void(::apache::thrift::TDelayedException* _throw)> exn_cob, const std::string& key, const ColumnParent& column_parent, const Column& column, const ConsistencyLevel::type consistency_level) { + with_schema(std::move(cob), std::move(exn_cob), column_parent.column_family, [&](schema_ptr schema) { + if (column_parent.__isset.super_column) { + fail(unimplemented::cause::SUPER); +@@ -492,7 +498,7 @@ class thrift_handler : public CassandraCobSvIf { + }); + } + +- void add(tcxx::function<void()> cob, tcxx::function<void(::apache::thrift::TDelayedException* _throw)> exn_cob, const std::string& key, const ColumnParent& column_parent, const CounterColumn& column, const ConsistencyLevel::type consistency_level) { ++ void add(thrift_std::function<void()> cob, thrift_std::function<void(::apache::thrift::TDelayedException* _throw)> exn_cob, const std::string& key, const ColumnParent& column_parent, const CounterColumn& column, const ConsistencyLevel::type consistency_level) { + with_schema(std::move(cob), std::move(exn_cob), column_parent.column_family, [&](schema_ptr schema) { + if (column_parent.__isset.super_column) { + fail(unimplemented::cause::SUPER); +@@ -507,14 +513,14 @@ class thrift_handler : public CassandraCobSvIf { + }); + } + +- void cas(tcxx::function<void(CASResult const& _return)> cob, tcxx::function<void(::apache::thrift::TDelayedException* _throw)> exn_cob, const std::string& key, const std::string& column_family, const std::vector<Column> & expected, const std::vector<Column> & updates, const ConsistencyLevel::type serial_consistency_level, const ConsistencyLevel::type commit_consistency_level) { ++ void cas(thrift_std::function<void(CASResult const& _return)> cob, thrift_std::function<void(::apache::thrift::TDelayedException* _throw)> exn_cob, const std::string& key, const std::string& column_family, const std::vector<Column> & expected, const std::vector<Column> & updates, const ConsistencyLevel::type serial_consistency_level, const ConsistencyLevel::type commit_consistency_level) { + CASResult _return; + warn(unimplemented::cause::LWT); + // FIXME: implement + return pass_unimplemented(exn_cob); + } + +- void remove(tcxx::function<void()> cob, tcxx::function<void(::apache::thrift::TDelayedException* _throw)> exn_cob, const std::string& key, const ColumnPath& column_path, const int64_t timestamp, const ConsistencyLevel::type consistency_level) { ++ void remove(thrift_std::function<void()> cob, thrift_std::function<void(::apache::thrift::TDelayedException* _throw)> exn_cob, const std::string& key, const ColumnPath& column_path, const int64_t timestamp, const ConsistencyLevel::type consistency_level) { + with_schema(std::move(cob), std::move(exn_cob), column_path.column_family, [&](schema_ptr schema) { + if (schema->is_view()) { + throw make_exception<InvalidRequestException>("Cannot modify Materialized Views directly"); +@@ -542,7 +548,7 @@ class thrift_handler : public CassandraCobSvIf { + }); + } + +- void remove_counter(tcxx::function<void()> cob, tcxx::function<void(::apache::thrift::TDelayedException* _throw)> exn_cob, const std::string& key, const ColumnPath& column_path, const ConsistencyLevel::type consistency_level) { ++ void remove_counter(thrift_std::function<void()> cob, thrift_std::function<void(::apache::thrift::TDelayedException* _throw)> exn_cob, const std::string& key, const ColumnPath& column_path, const ConsistencyLevel::type consistency_level) { + with_schema(std::move(cob), std::move(exn_cob), column_path.column_family, [&](schema_ptr schema) { + mutation m_to_apply(schema, key_from_thrift(*schema, to_bytes_view(key))); + +@@ -568,7 +574,7 @@ class thrift_handler : public CassandraCobSvIf { + }); + } + +- void batch_mutate(tcxx::function<void()> cob, tcxx::function<void(::apache::thrift::TDelayedException* _throw)> exn_cob, const std::map<std::string, std::map<std::string, std::vector<Mutation> > > & mutation_map, const ConsistencyLevel::type consistency_level) { ++ void batch_mutate(thrift_std::function<void()> cob, thrift_std::function<void(::apache::thrift::TDelayedException* _throw)> exn_cob, const std::map<std::string, std::map<std::string, std::vector<Mutation> > > & mutation_map, const ConsistencyLevel::type consistency_level) { + with_cob(std::move(cob), std::move(exn_cob), [&] { + auto p = prepare_mutations(_db.local(), current_keyspace(), mutation_map); + return parallel_for_each(std::move(p.second), [this](auto&& schema) { +@@ -580,7 +586,7 @@ class thrift_handler : public CassandraCobSvIf { + }); + } + +- void atomic_batch_mutate(tcxx::function<void()> cob, tcxx::function<void(::apache::thrift::TDelayedException* _throw)> exn_cob, const std::map<std::string, std::map<std::string, std::vector<Mutation> > > & mutation_map, const ConsistencyLevel::type consistency_level) { ++ void atomic_batch_mutate(thrift_std::function<void()> cob, thrift_std::function<void(::apache::thrift::TDelayedException* _throw)> exn_cob, const std::map<std::string, std::map<std::string, std::vector<Mutation> > > & mutation_map, const ConsistencyLevel::type consistency_level) { + with_cob(std::move(cob), std::move(exn_cob), [&] { + auto p = prepare_mutations(_db.local(), current_keyspace(), mutation_map); + return parallel_for_each(std::move(p.second), [this](auto&& schema) { +@@ -592,7 +598,7 @@ class thrift_handler : public CassandraCobSvIf { + }); + } + +- void truncate(tcxx::function<void()> cob, tcxx::function<void(::apache::thrift::TDelayedException* _throw)> exn_cob, const std::string& cfname) { ++ void truncate(thrift_std::function<void()> cob, thrift_std::function<void(::apache::thrift::TDelayedException* _throw)> exn_cob, const std::string& cfname) { + with_cob(std::move(cob), std::move(exn_cob), [&] { + if (current_keyspace().empty()) { + throw make_exception<InvalidRequestException>("keyspace not set"); +@@ -607,7 +613,7 @@ class thrift_handler : public CassandraCobSvIf { + }); + } + +- void get_multi_slice(tcxx::function<void(std::vector<ColumnOrSuperColumn> const& _return)> cob, tcxx::function<void(::apache::thrift::TDelayedException* _throw)> exn_cob, const MultiSliceRequest& request) { ++ void get_multi_slice(thrift_std::function<void(std::vector<ColumnOrSuperColumn> const& _return)> cob, thrift_std::function<void(::apache::thrift::TDelayedException* _throw)> exn_cob, const MultiSliceRequest& request) { + with_schema(std::move(cob), std::move(exn_cob), request.column_parent.column_family, [&](schema_ptr schema) { + if (!request.__isset.key) { + throw make_exception<InvalidRequestException>("Key may not be empty"); +@@ -674,7 +680,7 @@ class thrift_handler : public CassandraCobSvIf { + }); + } + +- void describe_schema_versions(tcxx::function<void(std::map<std::string, std::vector<std::string> > const& _return)> cob, tcxx::function<void(::apache::thrift::TDelayedException* _throw)> exn_cob) { ++ void describe_schema_versions(thrift_std::function<void(std::map<std::string, std::vector<std::string> > const& _return)> cob, thrift_std::function<void(::apache::thrift::TDelayedException* _throw)> exn_cob) { + with_cob(std::move(cob), std::move(exn_cob), [] { + return service::get_local_storage_service().describe_schema_versions().then([](auto&& m) { + std::map<std::string, std::vector<std::string>> ret; +@@ -686,7 +692,7 @@ class thrift_handler : public CassandraCobSvIf { + }); + } + +- void describe_keyspaces(tcxx::function<void(std::vector<KsDef> const& _return)> cob, tcxx::function<void(::apache::thrift::TDelayedException* _throw)> exn_cob) { ++ void describe_keyspaces(thrift_std::function<void(std::vector<KsDef> const& _return)> cob, thrift_std::function<void(::apache::thrift::TDelayedException* _throw)> exn_cob) { + with_cob(std::move(cob), std::move(exn_cob), [&] { + validate_login(); + std::vector<KsDef> ret; +@@ -697,15 +703,15 @@ class thrift_handler : public CassandraCobSvIf { + }); + } + +- void describe_cluster_name(tcxx::function<void(std::string const& _return)> cob) { ++ void describe_cluster_name(thrift_std::function<void(std::string const& _return)> cob) { + cob(_db.local().get_config().cluster_name()); + } + +- void describe_version(tcxx::function<void(std::string const& _return)> cob) { ++ void describe_version(thrift_std::function<void(std::string const& _return)> cob) { + cob(::cassandra::thrift_version); + } + +- void do_describe_ring(tcxx::function<void(std::vector<TokenRange> const& _return)> cob, tcxx::function<void(::apache::thrift::TDelayedException* _throw)> exn_cob, const std::string& keyspace, bool local) { ++ void do_describe_ring(thrift_std::function<void(std::vector<TokenRange> const& _return)> cob, thrift_std::function<void(::apache::thrift::TDelayedException* _throw)> exn_cob, const std::string& keyspace, bool local) { + with_cob(std::move(cob), std::move(exn_cob), [&] { + auto& ks = _db.local().find_keyspace(keyspace); + if (ks.get_replication_strategy().get_type() == locator::replication_strategy_type::local) { +@@ -736,15 +742,15 @@ class thrift_handler : public CassandraCobSvIf { + }); + } + +- void describe_ring(tcxx::function<void(std::vector<TokenRange> const& _return)> cob, tcxx::function<void(::apache::thrift::TDelayedException* _throw)> exn_cob, const std::string& keyspace) { ++ void describe_ring(thrift_std::function<void(std::vector<TokenRange> const& _return)> cob, thrift_std::function<void(::apache::thrift::TDelayedException* _throw)> exn_cob, const std::string& keyspace) { + do_describe_ring(std::move(cob), std::move(exn_cob), keyspace, false); + } + +- void describe_local_ring(tcxx::function<void(std::vector<TokenRange> const& _return)> cob, tcxx::function<void(::apache::thrift::TDelayedException* _throw)> exn_cob, const std::string& keyspace) { ++ void describe_local_ring(thrift_std::function<void(std::vector<TokenRange> const& _return)> cob, thrift_std::function<void(::apache::thrift::TDelayedException* _throw)> exn_cob, const std::string& keyspace) { + do_describe_ring(std::move(cob), std::move(exn_cob), keyspace, true); + } + +- void describe_token_map(tcxx::function<void(std::map<std::string, std::string> const& _return)> cob, tcxx::function<void(::apache::thrift::TDelayedException* _throw)> exn_cob) { ++ void describe_token_map(thrift_std::function<void(std::map<std::string, std::string> const& _return)> cob, thrift_std::function<void(::apache::thrift::TDelayedException* _throw)> exn_cob) { + with_cob(std::move(cob), std::move(exn_cob), [] { + auto m = service::get_local_storage_service().get_token_to_endpoint_map(); + std::map<std::string, std::string> ret; +@@ -755,15 +761,15 @@ class thrift_handler : public CassandraCobSvIf { + }); + } + +- void describe_partitioner(tcxx::function<void(std::string const& _return)> cob) { ++ void describe_partitioner(thrift_std::function<void(std::string const& _return)> cob) { + cob(dht::global_partitioner().name()); + } + +- void describe_snitch(tcxx::function<void(std::string const& _return)> cob) { ++ void describe_snitch(thrift_std::function<void(std::string const& _return)> cob) { + cob(format("org.apache.cassandra.locator.{}", _db.local().get_snitch_name())); + } + +- void describe_keyspace(tcxx::function<void(KsDef const& _return)> cob, tcxx::function<void(::apache::thrift::TDelayedException* _throw)> exn_cob, const std::string& keyspace) { ++ void describe_keyspace(thrift_std::function<void(KsDef const& _return)> cob, thrift_std::function<void(::apache::thrift::TDelayedException* _throw)> exn_cob, const std::string& keyspace) { + with_cob(std::move(cob), std::move(exn_cob), [&] { + validate_login(); + auto& ks = _db.local().find_keyspace(keyspace); +@@ -771,7 +777,7 @@ class thrift_handler : public CassandraCobSvIf { + }); + } + +- void describe_splits(tcxx::function<void(std::vector<std::string> const& _return)> cob, tcxx::function<void(::apache::thrift::TDelayedException* _throw)> exn_cob, const std::string& cfName, const std::string& start_token, const std::string& end_token, const int32_t keys_per_split) { ++ void describe_splits(thrift_std::function<void(std::vector<std::string> const& _return)> cob, thrift_std::function<void(::apache::thrift::TDelayedException* _throw)> exn_cob, const std::string& cfName, const std::string& start_token, const std::string& end_token, const int32_t keys_per_split) { + return describe_splits_ex([cob = std::move(cob)](auto&& results) { + std::vector<std::string> res; + res.reserve(results.size() + 1); +@@ -783,13 +789,13 @@ class thrift_handler : public CassandraCobSvIf { + }, exn_cob, cfName, start_token, end_token, keys_per_split); + } + +- void trace_next_query(tcxx::function<void(std::string const& _return)> cob) { ++ void trace_next_query(thrift_std::function<void(std::string const& _return)> cob) { + std::string _return; + // FIXME: implement + return cob("dummy trace"); + } + +- void describe_splits_ex(tcxx::function<void(std::vector<CfSplit> const& _return)> cob, tcxx::function<void(::apache::thrift::TDelayedException* _throw)> exn_cob, const std::string& cfName, const std::string& start_token, const std::string& end_token, const int32_t keys_per_split) { ++ void describe_splits_ex(thrift_std::function<void(std::vector<CfSplit> const& _return)> cob, thrift_std::function<void(::apache::thrift::TDelayedException* _throw)> exn_cob, const std::string& cfName, const std::string& start_token, const std::string& end_token, const int32_t keys_per_split) { + with_cob(std::move(cob), std::move(exn_cob), [&]{ + dht::token_range_vector ranges; + auto tstart = start_token.empty() ? dht::minimum_token() : dht::global_partitioner().from_sstring(sstring(start_token)); +@@ -812,7 +818,7 @@ class thrift_handler : public CassandraCobSvIf { + }); + } + +- void system_add_column_family(tcxx::function<void(std::string const& _return)> cob, tcxx::function<void(::apache::thrift::TDelayedException* _throw)> exn_cob, const CfDef& cf_def) { ++ void system_add_column_family(thrift_std::function<void(std::string const& _return)> cob, thrift_std::function<void(::apache::thrift::TDelayedException* _throw)> exn_cob, const CfDef& cf_def) { + with_cob(std::move(cob), std::move(exn_cob), [&] { + if (!_db.local().has_keyspace(cf_def.keyspace)) { + throw NotFoundException(); +@@ -829,7 +835,7 @@ class thrift_handler : public CassandraCobSvIf { + }); + }); + } +- void system_drop_column_family(tcxx::function<void(std::string const& _return)> cob, tcxx::function<void(::apache::thrift::TDelayedException* _throw)> exn_cob, const std::string& column_family) { ++ void system_drop_column_family(thrift_std::function<void(std::string const& _return)> cob, thrift_std::function<void(::apache::thrift::TDelayedException* _throw)> exn_cob, const std::string& column_family) { + with_cob(std::move(cob), std::move(exn_cob), [&] { + return _query_state.get_client_state().has_column_family_access(current_keyspace(), column_family, auth::permission::DROP).then([=] { + auto& cf = _db.local().find_column_family(current_keyspace(), column_family); +@@ -846,7 +852,7 @@ class thrift_handler : public CassandraCobSvIf { + }); + } + +- void system_add_keyspace(tcxx::function<void(std::string const& _return)> cob, tcxx::function<void(::apache::thrift::TDelayedException* _throw)> exn_cob, const KsDef& ks_def) { ++ void system_add_keyspace(thrift_std::function<void(std::string const& _return)> cob, thrift_std::function<void(::apache::thrift::TDelayedException* _throw)> exn_cob, const KsDef& ks_def) { + with_cob(std::move(cob), std::move(exn_cob), [&] { + auto ksm = keyspace_from_thrift(ks_def); + return _query_state.get_client_state().has_all_keyspaces_access(auth::permission::CREATE).then([this, ksm = std::move(ksm)] { +@@ -857,7 +863,7 @@ class thrift_handler : public CassandraCobSvIf { + }); + } + +- void system_drop_keyspace(tcxx::function<void(std::string const& _return)> cob, tcxx::function<void(::apache::thrift::TDelayedException* _throw)> exn_cob, const std::string& keyspace) { ++ void system_drop_keyspace(thrift_std::function<void(std::string const& _return)> cob, thrift_std::function<void(::apache::thrift::TDelayedException* _throw)> exn_cob, const std::string& keyspace) { + with_cob(std::move(cob), std::move(exn_cob), [&] { + thrift_validation::validate_keyspace_not_system(keyspace); + if (!_db.local().has_keyspace(keyspace)) { +@@ -872,7 +878,7 @@ class thrift_handler : public CassandraCobSvIf { + }); + } + +- void system_update_keyspace(tcxx::function<void(std::string const& _return)> cob, tcxx::function<void(::apache::thrift::TDelayedException* _throw)> exn_cob, const KsDef& ks_def) { ++ void system_update_keyspace(thrift_std::function<void(std::string const& _return)> cob, thrift_std::function<void(::apache::thrift::TDelayedException* _throw)> exn_cob, const KsDef& ks_def) { + with_cob(std::move(cob), std::move(exn_cob), [&] { + thrift_validation::validate_keyspace_not_system(ks_def.name); + +@@ -892,7 +898,7 @@ class thrift_handler : public CassandraCobSvIf { + }); + } + +- void system_update_column_family(tcxx::function<void(std::string const& _return)> cob, tcxx::function<void(::apache::thrift::TDelayedException* _throw)> exn_cob, const CfDef& cf_def) { ++ void system_update_column_family(thrift_std::function<void(std::string const& _return)> cob, thrift_std::function<void(::apache::thrift::TDelayedException* _throw)> exn_cob, const CfDef& cf_def) { + with_cob(std::move(cob), std::move(exn_cob), [&] { + auto& cf = _db.local().find_column_family(cf_def.keyspace, cf_def.name); + auto schema = cf.schema(); +@@ -923,7 +929,7 @@ class thrift_handler : public CassandraCobSvIf { + }); + } + +- void execute_cql_query(tcxx::function<void(CqlResult const& _return)> cob, tcxx::function<void(::apache::thrift::TDelayedException* _throw)> exn_cob, const std::string& query, const Compression::type compression) { ++ void execute_cql_query(thrift_std::function<void(CqlResult const& _return)> cob, thrift_std::function<void(::apache::thrift::TDelayedException* _throw)> exn_cob, const std::string& query, const Compression::type compression) { + throw make_exception<InvalidRequestException>("CQL2 is not supported"); + } + +@@ -953,7 +959,7 @@ class thrift_handler : public CassandraCobSvIf { + } + }; + +- void execute_cql3_query(tcxx::function<void(CqlResult const& _return)> cob, tcxx::function<void(::apache::thrift::TDelayedException* _throw)> exn_cob, const std::string& query, const Compression::type compression, const ConsistencyLevel::type consistency) { ++ void execute_cql3_query(thrift_std::function<void(CqlResult const& _return)> cob, thrift_std::function<void(::apache::thrift::TDelayedException* _throw)> exn_cob, const std::string& query, const Compression::type compression, const ConsistencyLevel::type consistency) { + with_exn_cob(std::move(exn_cob), [&] { + if (compression != Compression::type::NONE) { + throw make_exception<InvalidRequestException>("Compressed query strings are not supported"); +@@ -969,7 +975,7 @@ class thrift_handler : public CassandraCobSvIf { + }); + } + +- void prepare_cql_query(tcxx::function<void(CqlPreparedResult const& _return)> cob, tcxx::function<void(::apache::thrift::TDelayedException* _throw)> exn_cob, const std::string& query, const Compression::type compression) { ++ void prepare_cql_query(thrift_std::function<void(CqlPreparedResult const& _return)> cob, thrift_std::function<void(::apache::thrift::TDelayedException* _throw)> exn_cob, const std::string& query, const Compression::type compression) { + throw make_exception<InvalidRequestException>("CQL2 is not supported"); + } + +@@ -997,7 +1003,7 @@ class thrift_handler : public CassandraCobSvIf { + } + }; + +- void prepare_cql3_query(tcxx::function<void(CqlPreparedResult const& _return)> cob, tcxx::function<void(::apache::thrift::TDelayedException* _throw)> exn_cob, const std::string& query, const Compression::type compression) { ++ void prepare_cql3_query(thrift_std::function<void(CqlPreparedResult const& _return)> cob, thrift_std::function<void(::apache::thrift::TDelayedException* _throw)> exn_cob, const std::string& query, const Compression::type compression) { + with_exn_cob(std::move(exn_cob), [&] { + validate_login(); + if (compression != Compression::type::NONE) { +@@ -1011,11 +1017,11 @@ class thrift_handler : public CassandraCobSvIf { + }); + } + +- void execute_prepared_cql_query(tcxx::function<void(CqlResult const& _return)> cob, tcxx::function<void(::apache::thrift::TDelayedException* _throw)> exn_cob, const int32_t itemId, const std::vector<std::string> & values) { ++ void execute_prepared_cql_query(thrift_std::function<void(CqlResult const& _return)> cob, thrift_std::function<void(::apache::thrift::TDelayedException* _throw)> exn_cob, const int32_t itemId, const std::vector<std::string> & values) { + throw make_exception<InvalidRequestException>("CQL2 is not supported"); + } + +- void execute_prepared_cql3_query(tcxx::function<void(CqlResult const& _return)> cob, tcxx::function<void(::apache::thrift::TDelayedException* _throw)> exn_cob, const int32_t itemId, const std::vector<std::string> & values, const ConsistencyLevel::type consistency) { ++ void execute_prepared_cql3_query(thrift_std::function<void(CqlResult const& _return)> cob, thrift_std::function<void(::apache::thrift::TDelayedException* _throw)> exn_cob, const int32_t itemId, const std::vector<std::string> & values, const ConsistencyLevel::type consistency) { + with_exn_cob(std::move(exn_cob), [&] { + cql3::prepared_cache_key_type cache_key(itemId); + bool needs_authorization = false; +@@ -1048,7 +1054,7 @@ class thrift_handler : public CassandraCobSvIf { + }); + } + +- void set_cql_version(tcxx::function<void()> cob, tcxx::function<void(::apache::thrift::TDelayedException* _throw)> exn_cob, const std::string& version) { ++ void set_cql_version(thrift_std::function<void()> cob, thrift_std::function<void(::apache::thrift::TDelayedException* _throw)> exn_cob, const std::string& version) { + // No-op. + cob(); + } +diff --git a/thrift/server.cc b/thrift/server.cc +index c41ab5c22..85d07e8ca 100644 +--- a/thrift/server.cc ++++ b/thrift/server.cc +@@ -41,7 +41,14 @@ + #include <limits> + #include <cctype> + #include <vector> ++ ++#ifdef THRIFT_USES_BOOST + #include <boost/make_shared.hpp> ++namespace thrift_std = boost; ++#else ++#include <memory> ++namespace thrift_std = std; ++#endif + + static logging::logger tlogger("thrift"); + +@@ -97,9 +104,9 @@ struct thrift_server::connection::fake_transport : TTransport { + thrift_server::connection::connection(thrift_server& server, connected_socket&& fd, socket_address addr) + : _server(server), _fd(std::move(fd)), _read_buf(_fd.input()) + , _write_buf(_fd.output()) +- , _transport(boost::make_shared<thrift_server::connection::fake_transport>(this)) +- , _input(boost::make_shared<TMemoryBuffer>()) +- , _output(boost::make_shared<TMemoryBuffer>()) ++ , _transport(thrift_std::make_shared<thrift_server::connection::fake_transport>(this)) ++ , _input(thrift_std::make_shared<TMemoryBuffer>()) ++ , _output(thrift_std::make_shared<TMemoryBuffer>()) + , _in_proto(_server._protocol_factory->getProtocol(_input)) + , _out_proto(_server._protocol_factory->getProtocol(_output)) + , _processor(_server._processor_factory->getProcessor({ _in_proto, _out_proto, _transport })) { +diff --git a/thrift/server.hh b/thrift/server.hh +index af37c4e60..2f4662178 100644 +--- a/thrift/server.hh ++++ b/thrift/server.hh +@@ -31,6 +31,12 @@ + #include <cstdint> + #include <boost/intrusive/list.hpp> + ++#ifdef THRIFT_USES_BOOST ++namespace thrift_std = boost; ++#else ++namespace thrift_std = std; ++#endif ++ + class thrift_server; + class thrift_stats; + class database; +@@ -80,12 +86,12 @@ class thrift_server { + input_stream<char> _read_buf; + output_stream<char> _write_buf; + temporary_buffer<char> _in_tmp; +- boost::shared_ptr<fake_transport> _transport; +- boost::shared_ptr<apache::thrift::transport::TMemoryBuffer> _input; +- boost::shared_ptr<apache::thrift::transport::TMemoryBuffer> _output; +- boost::shared_ptr<apache::thrift::protocol::TProtocol> _in_proto; +- boost::shared_ptr<apache::thrift::protocol::TProtocol> _out_proto; +- boost::shared_ptr<apache::thrift::async::TAsyncProcessor> _processor; ++ thrift_std::shared_ptr<fake_transport> _transport; ++ thrift_std::shared_ptr<apache::thrift::transport::TMemoryBuffer> _input; ++ thrift_std::shared_ptr<apache::thrift::transport::TMemoryBuffer> _output; ++ thrift_std::shared_ptr<apache::thrift::protocol::TProtocol> _in_proto; ++ thrift_std::shared_ptr<apache::thrift::protocol::TProtocol> _out_proto; ++ thrift_std::shared_ptr<apache::thrift::async::TAsyncProcessor> _processor; + promise<> _processor_promise; + public: + connection(thrift_server& server, connected_socket&& fd, socket_address addr); +@@ -101,9 +107,9 @@ class thrift_server { + private: + std::vector<server_socket> _listeners; + std::unique_ptr<thrift_stats> _stats; +- boost::shared_ptr<::cassandra::CassandraCobSvIfFactory> _handler_factory; ++ thrift_std::shared_ptr<::cassandra::CassandraCobSvIfFactory> _handler_factory; + std::unique_ptr<apache::thrift::protocol::TProtocolFactory> _protocol_factory; +- boost::shared_ptr<apache::thrift::async::TAsyncProcessorFactory> _processor_factory; ++ thrift_std::shared_ptr<apache::thrift::async::TAsyncProcessorFactory> _processor_factory; + uint64_t _total_connections = 0; + uint64_t _current_connections = 0; + uint64_t _requests_served = 0; diff --git a/dev-db/scylla/scylla-3.1.0.ebuild b/dev-db/scylla/scylla-3.1.0.ebuild index 8f8f63d..f5c0ec5 100644 --- a/dev-db/scylla/scylla-3.1.0.ebuild +++ b/dev-db/scylla/scylla-3.1.0.ebuild @@ -87,6 +87,7 @@ ERROR_TRANSPARENT_HUGEPAGE="${PN} recommends support for Transparent Hugepage (T DOCS=( LICENSE.AGPL NOTICE.txt ORIGIN README.md README-DPDK.md ) PATCHES=( "${FILESDIR}/fix-fmt-3.5.0-compilation.patch" + "${FILESDIR}/3.1-thrift-support.patch" ) pkg_setup() { |