summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorUltrabug <ultrabug@gentoo.org>2019-10-18 11:35:09 +0200
committerUltrabug <ultrabug@gentoo.org>2019-10-18 11:35:09 +0200
commit3a89cc0e446ca93b868587615dc997cae3d5f6b0 (patch)
treee54cc9be13116de0e534640bccb5bd6c0c38eb56
parentapp-admin/scylla-jmx: fix keywords (diff)
downloadultrabug-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>
-rw-r--r--dev-db/scylla/Manifest29
-rw-r--r--dev-db/scylla/files/3.1-thrift-support.patch543
-rw-r--r--dev-db/scylla/scylla-3.1.0.ebuild1
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() {