<pre style='margin:0'>
Perry E. Metzger (pmetzger) pushed a commit to branch master
in repository macports-ports.
</pre>
<p><a href="https://github.com/macports/macports-ports/commit/b634626c768c3b132c12c6b67cd526d0e0a174ea">https://github.com/macports/macports-ports/commit/b634626c768c3b132c12c6b67cd526d0e0a174ea</a></p>
<pre style="white-space: pre; background: #F8F8F8"><span style='display:block; white-space:pre;color:#808000;'>commit b634626c768c3b132c12c6b67cd526d0e0a174ea
</span>Author: barracuda156 <vital.had@gmail.com>
AuthorDate: Fri Jan 12 14:11:36 2024 +0800
<span style='display:block; white-space:pre;color:#404040;'> fbthrift: update to 2024.01.08.00, drop patches reverting some commits
</span>---
devel/fbthrift/Portfile | 24 +-
...te-methods-to-dcheck-ToSend-Received-OrEm.patch | 27 --
...request-telemetry-5-x-Implement-writeStar.patch | 360 ----------------
...act-FDs-from-otherMetadata-when-pack-make.patch | 476 ---------------------
...AsyncFdSocket-when-accepting-Unix-socket-.patch | 77 ----
5 files changed, 7 insertions(+), 957 deletions(-)
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/devel/fbthrift/Portfile b/devel/fbthrift/Portfile
</span><span style='display:block; white-space:pre;color:#808080;'>index 7c3ad2d5865..54a9c42549b 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/devel/fbthrift/Portfile
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/devel/fbthrift/Portfile
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -10,11 +10,11 @@ PortGroup openssl 1.0
</span>
boost.version 1.81
<span style='display:block; white-space:pre;background:#ffe0e0;'>-github.setup facebook fbthrift 2023.05.15.00 v
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-revision 2
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-checksums rmd160 d39ba8a3d574bccfa34541b3d46afd7e40a9bbb8 \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- sha256 c939d9e97b0cfde6e8f1ad35ae481300a542d7f7dcfe4461981efc39135dbfa5 \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- size 13837302
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+github.setup facebook fbthrift 2024.01.08.00 v
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+revision 0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+checksums rmd160 4e3e58e64f03549c4f226c7249090052f211f7c3 \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ sha256 31250e325acd763052f40764154ceec9517da4a8e027efc132a266daac82d486 \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ size 14154593
</span>
categories devel
license Apache-2
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -26,7 +26,7 @@ long_description {*}${description}
</span>
github.tarball_from archive
<span style='display:block; white-space:pre;background:#ffe0e0;'>-set port_libfmt libfmt9
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+set port_libfmt libfmt10
</span> cmake.module_path-append \
${prefix}/lib/${port_libfmt}/cmake
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -35,22 +35,12 @@ depends_build-append \
</span> port:flex
depends_lib-append port:fizz \
port:mstch \
<span style='display:block; white-space:pre;background:#e0ffe0;'>+ port:mvfst \
</span> port:wangle \
port:${port_libfmt}
patchfiles patch-cpp2.diff
<span style='display:block; white-space:pre;background:#ffe0e0;'>-# Keep until breaking changes in Folly are fixed:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-platform darwin {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if {${os.major} < 20} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- patchfiles-append \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 0001-Revert-Update-methods-to-dcheck-ToSend-Received-OrEm.patch \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 0002-Revert-Per-request-telemetry-5-x-Implement-writeStar.patch \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 0003-Revert-Extract-FDs-from-otherMetadata-when-pack-make.patch \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 0004-Revert-Use-AsyncFdSocket-when-accepting-Unix-socket-.patch
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span> # Fix error: invalid output constraint '=@ccc' in asm
compiler.blacklist-append \
{clang < 1200}
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/devel/fbthrift/files/0001-Revert-Update-methods-to-dcheck-ToSend-Received-OrEm.patch b/devel/fbthrift/files/0001-Revert-Update-methods-to-dcheck-ToSend-Received-OrEm.patch
</span>deleted file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index e0c1f8095f6..00000000000
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/devel/fbthrift/files/0001-Revert-Update-methods-to-dcheck-ToSend-Received-OrEm.patch
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -1,27 +0,0 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-From 54be3719e26d21758a4e2a2199f42124419c91f6 Mon Sep 17 00:00:00 2001
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-From: barracuda156 <vital.had@gmail.com>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Date: Wed, 17 May 2023 16:16:44 +0800
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Subject: [PATCH 1/4] Revert "Update methods to
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- `dcheck{ToSend,Received}OrEmpty()`"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-This reverts commit df79893d4b66e97e9778df8aeea4f712e09a780f.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>----
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- thrift/lib/cpp2/transport/rocket/PayloadUtils.h | 2 +-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 1 file changed, 1 insertion(+), 1 deletion(-)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-diff --git thrift/lib/cpp2/transport/rocket/PayloadUtils.h thrift/lib/cpp2/transport/rocket/PayloadUtils.h
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-index 9cc7c21cd0..6751a2b351 100644
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---- thrift/lib/cpp2/transport/rocket/PayloadUtils.h
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ thrift/lib/cpp2/transport/rocket/PayloadUtils.h
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -187,7 +187,7 @@ rocket::Payload packWithFds(
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- auto ret = apache::thrift::rocket::detail::makePayload(
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *metadata, std::move(serializedPayload));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if (numFds) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- ret.fds = std::move(fds.dcheckToSendOrEmpty());
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ ret.fds = std::move(fds.dcheckToSend());
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- return ret;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-2.40.1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/devel/fbthrift/files/0002-Revert-Per-request-telemetry-5-x-Implement-writeStar.patch b/devel/fbthrift/files/0002-Revert-Per-request-telemetry-5-x-Implement-writeStar.patch
</span>deleted file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 44aee0da92c..00000000000
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/devel/fbthrift/files/0002-Revert-Per-request-telemetry-5-x-Implement-writeStar.patch
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -1,360 +0,0 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-From bbd9e317ffc9d990ea281aacac36cb495d5dcb66 Mon Sep 17 00:00:00 2001
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-From: barracuda156 <vital.had@gmail.com>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Date: Wed, 17 May 2023 16:17:12 +0800
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Subject: [PATCH 2/4] Revert "Per-request telemetry (5/x): Implement
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- writeStarting() and add raw byte offset to write events"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-This reverts commit 8e2d236c882857c0e42bd2a403f7660bb3fcf349.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>----
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- .../rocket/server/RocketServerConnection.cpp | 33 +++----
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- .../rocket/server/RocketServerConnection.h | 5 +-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- .../server/RocketServerConnectionObserver.h | 12 +--
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- .../transport/rocket/test/network/Mocks.h | 6 +-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- .../rocket/test/network/RocketNetworkTest.cpp | 87 ++++++-------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 5 files changed, 41 insertions(+), 102 deletions(-)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-diff --git thrift/lib/cpp2/transport/rocket/server/RocketServerConnection.cpp thrift/lib/cpp2/transport/rocket/server/RocketServerConnection.cpp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-index 438c25d3c5..966fbaa0ed 100644
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---- thrift/lib/cpp2/transport/rocket/server/RocketServerConnection.cpp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ thrift/lib/cpp2/transport/rocket/server/RocketServerConnection.cpp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -155,6 +155,16 @@ void RocketServerConnection::flushWrites(
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- DestructorGuard dg(this);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- DVLOG(10) << fmt::format("write: {} B", writes->computeChainDataLength());
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ if (auto observerContainer = getObserverContainer();
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ observerContainer && observerContainer->numObservers()) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ for (const auto& writeEvent : context.writeEvents) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ observerContainer->invokeInterfaceMethodAllObservers(
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ [&](auto observer, auto observed) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ observer->writeReady(observed, writeEvent);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ });
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- inflightWritesQueue_.push_back(std::move(context));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- socket_->writeChain(this, std::move(writes));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -736,24 +746,6 @@ void RocketServerConnection::closeWhenIdle() {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- "Closing due to imminent shutdown"));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--void RocketServerConnection::writeStarting() noexcept {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- DestructorGuard dg(this);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- DCHECK(!inflightWritesQueue_.empty());
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- auto& context = inflightWritesQueue_.front();
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- DCHECK(!context.writeEventsContext.startRawByteOffset.has_value());
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- context.writeEventsContext.startRawByteOffset = socket_->getRawBytesWritten();
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- if (auto observerContainer = getObserverContainer();
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- observerContainer && observerContainer->numObservers()) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- for (const auto& writeEvent : context.writeEvents) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- observerContainer->invokeInterfaceMethodAllObservers(
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- [&](auto observer, auto observed) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- observer->writeStarting(observed, writeEvent);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- });
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- void RocketServerConnection::writeSuccess() noexcept {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- DestructorGuard dg(this);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- DCHECK(!inflightWritesQueue_.empty());
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -763,16 +755,13 @@ void RocketServerConnection::writeSuccess() noexcept {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- --processingCompleteCount) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- frameHandler_->requestComplete();
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- DCHECK(!context.writeEventsContext.endRawByteOffset.has_value());
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- context.writeEventsContext.endRawByteOffset = socket_->getRawBytesWritten();
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if (auto observerContainer = getObserverContainer();
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- observerContainer && observerContainer->numObservers()) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- for (const auto& writeEvent : context.writeEvents) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- observerContainer->invokeInterfaceMethodAllObservers(
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- [&](auto observer, auto observed) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- observer->writeSuccess(
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- observed, writeEvent, context.writeEventsContext);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ observer->writeSuccess(observed, writeEvent);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- });
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-diff --git thrift/lib/cpp2/transport/rocket/server/RocketServerConnection.h thrift/lib/cpp2/transport/rocket/server/RocketServerConnection.h
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-index 68e9240c98..7fc092bc48 100644
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---- thrift/lib/cpp2/transport/rocket/server/RocketServerConnection.h
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ thrift/lib/cpp2/transport/rocket/server/RocketServerConnection.h
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -118,7 +118,6 @@ class RocketServerConnection final
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- void close(folly::exception_wrapper ew);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- // AsyncTransport::WriteCallback implementation
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- void writeStarting() noexcept final;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- void writeSuccess() noexcept final;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- void writeErr(
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- size_t bytesWritten,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -299,7 +298,7 @@ class RocketServerConnection final
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * @return Attached observers of type T.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- template <typename T = Observer>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- std::vector<T*> findObservers() const {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ std::vector<T*> findObservers() {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if (auto list = getObserverContainer()) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- return list->findObservers<T>();
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -353,8 +352,6 @@ class RocketServerConnection final
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- std::vector<apache::thrift::MessageChannel::SendCallbackPtr> sendCallbacks;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- // the WriteEvent objects associated with each write in the batch
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- std::vector<RocketServerConnectionObserver::WriteEvent> writeEvents;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- // the raw byte offset at the beginning and end of the inflight write
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- RocketServerConnectionObserver::WriteEventBatchContext writeEventsContext;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- };
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- // The size of the queue is equal to the total number of inflight writes to
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- // the underlying transport, i.e., writes for which the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-diff --git thrift/lib/cpp2/transport/rocket/server/RocketServerConnectionObserver.h thrift/lib/cpp2/transport/rocket/server/RocketServerConnectionObserver.h
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-index eee8bde872..19bd9aad13 100644
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---- thrift/lib/cpp2/transport/rocket/server/RocketServerConnectionObserver.h
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ thrift/lib/cpp2/transport/rocket/server/RocketServerConnectionObserver.h
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -31,13 +31,6 @@ class RocketServerConnectionObserver {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- WriteEvents = 1,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- };
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- struct WriteEventBatchContext {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- // the raw byte offset at the beginning of the batch of writes
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- folly::Optional<size_t> startRawByteOffset;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- // the raw byte offset at the end of the batch of writes
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- folly::Optional<size_t> endRawByteOffset;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- };
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- struct WriteEvent {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- // the stream id of the write
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- const StreamId streamId;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -60,7 +53,7 @@ class RocketServerConnectionObserver {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * writeReady() is invoked when a new response is ready to be written to
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * the underlying transport
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- virtual void writeStarting(
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ virtual void writeReady(
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- RocketServerConnection* /* connection */,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- const WriteEvent& /* writeEvent */) {}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -70,8 +63,7 @@ class RocketServerConnectionObserver {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- virtual void writeSuccess(
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- RocketServerConnection* /* connection */,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- const WriteEvent& /* writeEvent */,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- const WriteEventBatchContext& /* writeEventBatchContext */) {}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ const WriteEvent& /* writeEvent */) {}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- };
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- } // namespace rocket
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-diff --git thrift/lib/cpp2/transport/rocket/test/network/Mocks.h thrift/lib/cpp2/transport/rocket/test/network/Mocks.h
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-index dd1d87f3f0..be0e999ef8 100644
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---- thrift/lib/cpp2/transport/rocket/test/network/Mocks.h
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ thrift/lib/cpp2/transport/rocket/test/network/Mocks.h
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -31,15 +31,13 @@ class MockRocketServerConnectionObserver
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- using RocketServerConnection::ManagedObserver::ManagedObserver;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- MOCK_METHOD(
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- void,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- writeStarting,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ writeReady,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- (RocketServerConnection*, const WriteEvent&),
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- (override));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- MOCK_METHOD(
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- void,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- writeSuccess,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- (RocketServerConnection*,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- const WriteEvent&,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- const WriteEventBatchContext&),
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ (RocketServerConnection*, const WriteEvent&),
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- (override));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- };
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-diff --git thrift/lib/cpp2/transport/rocket/test/network/RocketNetworkTest.cpp thrift/lib/cpp2/transport/rocket/test/network/RocketNetworkTest.cpp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-index a220506a77..a405f09af8 100644
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---- thrift/lib/cpp2/transport/rocket/test/network/RocketNetworkTest.cpp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ thrift/lib/cpp2/transport/rocket/test/network/RocketNetworkTest.cpp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -1397,25 +1397,12 @@ TEST_F(RocketNetworkTest, ObserverIsNotInstalledWhenFlagIsFalse) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- });
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--MATCHER_P3(WriteStartingMatcher, id, bytes, offset, "") {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+MATCHER_P3(WriteEventMatcher, id, bytes, offset, "") {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- return arg.streamId == StreamId(id) &&
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- arg.totalBytesInWrite == (size_t)bytes &&
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- arg.batchOffset == (size_t)offset;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--MATCHER_P3(WriteSuccessMatcher, id, bytes, offset, "") {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- return arg.streamId == StreamId(id) &&
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- arg.totalBytesInWrite == (size_t)bytes &&
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- arg.batchOffset == (size_t)offset;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--MATCHER_P2(WriteEventContextMatcher, startRawOffset, endRawOffset, "") {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- return arg.startRawByteOffset.has_value() &&
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- arg.startRawByteOffset.value() == startRawOffset &&
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- arg.endRawByteOffset.has_value() &&
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- arg.endRawByteOffset.value() == endRawOffset;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- TEST_F(RocketNetworkTest, ObserverIsNotifiedOnWriteSuccessRequestResponse) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- THRIFT_FLAG_SET_MOCK(enable_rocket_connection_observers, true);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- this->withClient([&](RocketTestClient& client) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -1443,21 +1430,19 @@ TEST_F(RocketNetworkTest, ObserverIsNotifiedOnWriteSuccessRequestResponse) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- constexpr size_t kSetupFrameSize(14);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- constexpr size_t kSetupFrameStreamId(0);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- // send a request and check the event notifications when the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- // response is ready and written to the socket
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ // send a request and check the event notifications when the response is
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ // ready and written to the socket
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- constexpr folly::StringPiece kMetadata("metadata");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- constexpr folly::StringPiece kData("data");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- const unsigned int startOffsetBatch1 = 0;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- const unsigned int endOffsetBatch1 = kSetupFrameSize + 24;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- // responses to setup frame (stream id = 0) and to the first
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- // request (stream id = 1) are batched together
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ // responses to setup frame (stream id = 0) and to the first request
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ // (stream id = 1) are batched together
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- EXPECT_CALL(
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *observer,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- writeStarting(
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ writeReady(
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- _,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- WriteStartingMatcher(
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ WriteEventMatcher(
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- kSetupFrameStreamId /* streamId */,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- kSetupFrameSize /* totalBytesWritten */,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 0 /* batchOffset */)));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -1465,18 +1450,15 @@ TEST_F(RocketNetworkTest, ObserverIsNotifiedOnWriteSuccessRequestResponse) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *observer,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- writeSuccess(
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- _,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- WriteSuccessMatcher(
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ WriteEventMatcher(
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- kSetupFrameStreamId /* streamId */,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- kSetupFrameSize /* totalBytesWritten */,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- 0 /* batchOffset */),
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- WriteEventContextMatcher(
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- startOffsetBatch1 /* startRawByteOffset */,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- endOffsetBatch1 /* endRawByteOffset */)));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ 0 /* batchOffset */)));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- EXPECT_CALL(
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *observer,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- writeStarting(
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ writeReady(
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- _,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- WriteStartingMatcher(
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ WriteEventMatcher(
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- kSetupFrameStreamId + 1 /* streamId */,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 24 /* totalBytesWritten */,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- kSetupFrameSize /* batchOffset */)));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -1484,13 +1466,10 @@ TEST_F(RocketNetworkTest, ObserverIsNotifiedOnWriteSuccessRequestResponse) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *observer,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- writeSuccess(
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- _,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- WriteSuccessMatcher(
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ WriteEventMatcher(
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- kSetupFrameStreamId + 1 /* streamId */,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 24 /* totalBytesWritten */,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- kSetupFrameSize /* batchOffset */),
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- WriteEventContextMatcher(
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- startOffsetBatch1 /* startRawByteOffset */,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- endOffsetBatch1 /* endRawByteOffset */)));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ kSetupFrameSize /* batchOffset */)));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- client.sendRequestResponseSync(
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- Payload::makeFromMetadataAndData(kMetadata, kData),
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -1503,16 +1482,11 @@ TEST_F(RocketNetworkTest, ObserverIsNotifiedOnWriteSuccessRequestResponse) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- constexpr folly::StringPiece kNewMetadata("new_metadata");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- constexpr folly::StringPiece kNewData("new_data");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- const unsigned int startOffsetBatch2 =
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- kSetupFrameSize + 24 /* 24 is the size of the first response */;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- const unsigned int endOffsetBatch2 =
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- startOffsetBatch2 + 32 /* 32 is the size of the second response */;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- EXPECT_CALL(
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *observer,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- writeStarting(
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ writeReady(
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- _,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- WriteStartingMatcher(
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ WriteEventMatcher(
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- kSetupFrameStreamId + 3 /* streamId */,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 32 /* totalBytesWritten */,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 0 /* batchOffset */)));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -1520,13 +1494,10 @@ TEST_F(RocketNetworkTest, ObserverIsNotifiedOnWriteSuccessRequestResponse) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *observer,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- writeSuccess(
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- _,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- WriteSuccessMatcher(
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ WriteEventMatcher(
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- kSetupFrameStreamId + 3 /* streamId */,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 32 /* totalBytesWritten */,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- 0 /* batchOffset */),
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- WriteEventContextMatcher(
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- startOffsetBatch2 /* startRawByteOffset */,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- endOffsetBatch2 /* endRawByteOffset */)));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ 0 /* batchOffset */)));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- client.sendRequestResponseSync(
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- Payload::makeFromMetadataAndData(kNewMetadata, kNewData),
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -1575,14 +1546,12 @@ TEST_F(RocketNetworkTest, ObserverIsNotifiedOnWriteSuccessRequestStream) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- constexpr folly::StringPiece kMetadata("metadata");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- const auto data =
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- folly::to<std::string>("generate:", kNumRequestedPayloads);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- const unsigned int startOffsetBatch = 0;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- const unsigned int endOffsetBatch = kSetupFrameSize + 16;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- EXPECT_CALL(
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *observer,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- writeStarting(
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ writeReady(
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- _,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- WriteStartingMatcher(
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ WriteEventMatcher(
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- kSetupFrameStreamId /* streamId */,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- kSetupFrameSize /* totalBytesWritten */,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 0 /* batchOffset */)));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -1590,18 +1559,15 @@ TEST_F(RocketNetworkTest, ObserverIsNotifiedOnWriteSuccessRequestStream) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *observer,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- writeSuccess(
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- _,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- WriteSuccessMatcher(
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ WriteEventMatcher(
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- kSetupFrameStreamId /* streamId */,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- kSetupFrameSize /* totalBytesWritten */,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- 0 /* batchOffset */),
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- WriteEventContextMatcher(
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- startOffsetBatch /* startRawByteOffset */,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- endOffsetBatch /* endRawByteOffset */)));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ 0 /* batchOffset */)));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- EXPECT_CALL(
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *observer,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- writeStarting(
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ writeReady(
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- _,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- WriteStartingMatcher(
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ WriteEventMatcher(
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- kSetupFrameStreamId + 1 /* streamId */,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 16 /* totalBytesWritten */,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- kSetupFrameSize /* batchOffset */)));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -1609,13 +1575,10 @@ TEST_F(RocketNetworkTest, ObserverIsNotifiedOnWriteSuccessRequestStream) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *observer,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- writeSuccess(
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- _,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- WriteSuccessMatcher(
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ WriteEventMatcher(
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- kSetupFrameStreamId + 1 /* streamId */,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 16 /* totalBytesWritten */,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- kSetupFrameSize /* batchOffset */),
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- WriteEventContextMatcher(
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- startOffsetBatch /* startRawByteOffset */,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- endOffsetBatch /* endRawByteOffset */)));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ kSetupFrameSize /* batchOffset */)));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- auto stream = client.sendRequestStreamSync(
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- Payload::makeFromMetadataAndData(kMetadata, folly::StringPiece{data}));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-2.40.1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/devel/fbthrift/files/0003-Revert-Extract-FDs-from-otherMetadata-when-pack-make.patch b/devel/fbthrift/files/0003-Revert-Extract-FDs-from-otherMetadata-when-pack-make.patch
</span>deleted file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index e73890a98cf..00000000000
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/devel/fbthrift/files/0003-Revert-Extract-FDs-from-otherMetadata-when-pack-make.patch
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -1,476 +0,0 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-From 1c313b21a94a7769a8e69daf0e22ca2c9fc8a74e Mon Sep 17 00:00:00 2001
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-From: barracuda156 <vital.had@gmail.com>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Date: Wed, 17 May 2023 16:17:34 +0800
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Subject: [PATCH 3/4] Revert "Extract FDs from `otherMetadata` when `pack`
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- makes the payload"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-This reverts commit 68198fbee27bb8404e961015e05830f20e0bdbba.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>----
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- thrift/lib/cpp2/CMakeLists.txt | 1 -
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- thrift/lib/cpp2/async/RocketClientChannel.cpp | 13 ++---
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- thrift/lib/cpp2/async/StreamCallbacks.h | 3 -
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- .../transport/rocket/FdSocketMetadata.cpp | 51 -----------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- .../cpp2/transport/rocket/FdSocketMetadata.h | 36 ------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- .../cpp2/transport/rocket/PayloadUtils.cpp | 6 --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- .../lib/cpp2/transport/rocket/PayloadUtils.h | 39 ++-----------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- thrift/lib/cpp2/transport/rocket/Types.h | 3 -
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- .../rocket/server/RocketThriftRequests.cpp | 2 +-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- .../rocket/test/FdSocketMetadataTest.cpp | 55 -------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- .../thrift/util/ExceptionUtilTest.java | 12 ++--
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- thrift/lib/thrift/RpcMetadata.thrift | 3 -
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 12 files changed, 17 insertions(+), 207 deletions(-)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- delete mode 100644 thrift/lib/cpp2/transport/rocket/FdSocketMetadata.cpp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- delete mode 100644 thrift/lib/cpp2/transport/rocket/FdSocketMetadata.h
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- delete mode 100644 thrift/lib/cpp2/transport/rocket/test/FdSocketMetadataTest.cpp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-diff --git thrift/lib/cpp2/CMakeLists.txt thrift/lib/cpp2/CMakeLists.txt
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-index 9adf60ff54..5b15464285 100644
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---- thrift/lib/cpp2/CMakeLists.txt
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ thrift/lib/cpp2/CMakeLists.txt
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -274,7 +274,6 @@ add_library(
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- transport/core/ThriftClient.cpp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- transport/core/ThriftClientCallback.cpp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- transport/core/ThriftRequest.cpp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- transport/rocket/FdSocketMetadata.cpp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- transport/rocket/PayloadUtils.cpp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- transport/rocket/Types.cpp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- transport/rocket/client/RequestContext.cpp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-diff --git thrift/lib/cpp2/async/RocketClientChannel.cpp thrift/lib/cpp2/async/RocketClientChannel.cpp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-index c22256efb8..71dfd6ab14 100644
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---- thrift/lib/cpp2/async/RocketClientChannel.cpp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ thrift/lib/cpp2/async/RocketClientChannel.cpp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -49,7 +49,6 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #include <thrift/lib/cpp2/transport/core/RpcMetadataUtil.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #include <thrift/lib/cpp2/transport/core/ThriftClientCallback.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #include <thrift/lib/cpp2/transport/core/TryUtil.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--#include <thrift/lib/cpp2/transport/rocket/FdSocketMetadata.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #include <thrift/lib/cpp2/transport/rocket/PayloadUtils.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #include <thrift/lib/cpp2/transport/rocket/RocketException.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #include <thrift/lib/cpp2/transport/rocket/client/RocketClient.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -814,8 +813,7 @@ void RocketClientChannel::sendRequestStream(
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- auto buf = std::move(request.buffer);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- setCompression(metadata, buf->computeChainDataLength());
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- auto payload = rocket::packWithFds(
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- &metadata, std::move(buf), rocket::releaseFdsFromMetadata(metadata));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ auto payload = rocket::pack(metadata, std::move(buf));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- assert(metadata.name_ref());
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- return rocket::RocketClient::sendRequestStream(
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- std::move(payload),
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -856,8 +854,7 @@ void RocketClientChannel::sendRequestSink(
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- auto buf = std::move(request.buffer);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- setCompression(metadata, buf->computeChainDataLength());
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- auto payload = rocket::packWithFds(
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- &metadata, std::move(buf), rocket::releaseFdsFromMetadata(metadata));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ auto payload = rocket::pack(metadata, std::move(buf));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- assert(metadata.name_ref());
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- return rocket::RocketClient::sendRequestSink(
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- std::move(payload),
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -924,8 +921,7 @@ void RocketClientChannel::sendSingleRequestNoResponse(
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- RequestRpcMetadata&& metadata,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- std::unique_ptr<folly::IOBuf> buf,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- RequestClientCallback::Ptr cb) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- auto requestPayload = rocket::packWithFds(
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- &metadata, std::move(buf), rocket::releaseFdsFromMetadata(metadata));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ auto requestPayload = rocket::pack(metadata, std::move(buf));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- const bool isSync = cb->isSync();
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- SingleRequestNoResponseCallback callback(std::move(cb));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -945,8 +941,7 @@ void RocketClientChannel::sendSingleRequestSingleResponse(
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- std::unique_ptr<folly::IOBuf> buf,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- RequestClientCallback::Ptr cb) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- const auto requestSerializedSize = buf->computeChainDataLength();
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- auto requestPayload = rocket::packWithFds(
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- &metadata, std::move(buf), rocket::releaseFdsFromMetadata(metadata));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ auto requestPayload = rocket::pack(metadata, std::move(buf));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- const auto requestWireSize = requestPayload.dataSize();
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- const auto requestMetadataAndPayloadSize =
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- requestPayload.metadataAndDataSize();
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-diff --git thrift/lib/cpp2/async/StreamCallbacks.h thrift/lib/cpp2/async/StreamCallbacks.h
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-index efc2c9349d..41a3d852c1 100644
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---- thrift/lib/cpp2/async/StreamCallbacks.h
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ thrift/lib/cpp2/async/StreamCallbacks.h
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -26,7 +26,6 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #include <folly/Utility.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #include <folly/io/IOBuf.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #include <folly/io/async/EventBase.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--#include <folly/io/async/fdsock/SocketFds.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #include <thrift/lib/cpp/TApplicationException.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #include <thrift/lib/cpp/transport/THeader.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -42,7 +41,6 @@ struct FirstResponsePayload {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- std::unique_ptr<folly::IOBuf> payload;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- ResponseRpcMetadata metadata;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- folly::SocketFds fds;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- };
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- struct StreamPayload {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -74,7 +72,6 @@ struct StreamPayload {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- StreamPayloadMetadata metadata;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- // OrderedHeader is sent as a PAYLOAD frame with an empty payload
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- bool isOrderedHeader;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- folly::SocketFds fds;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- };
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- struct HeadersPayload {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-diff --git thrift/lib/cpp2/transport/rocket/FdSocketMetadata.cpp thrift/lib/cpp2/transport/rocket/FdSocketMetadata.cpp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-deleted file mode 100644
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-index fb1540e4ab..0000000000
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---- thrift/lib/cpp2/transport/rocket/FdSocketMetadata.cpp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ /dev/null
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -1,51 +0,0 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- * Copyright (c) Meta Platforms, Inc. and affiliates.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- * Licensed under the Apache License, Version 2.0 (the "License");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- * you may not use this file except in compliance with the License.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- * You may obtain a copy of the License at
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- * http://www.apache.org/licenses/LICENSE-2.0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- * Unless required by applicable law or agreed to in writing, software
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- * distributed under the License is distributed on an "AS IS" BASIS,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- * See the License for the specific language governing permissions and
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- * limitations under the License.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--#include <folly/Conv.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--#include <folly/File.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--#include <folly/String.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--#include "FdSocketMetadata.h"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--namespace apache {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--namespace thrift {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--namespace rocket {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--folly::SocketFds releaseFdsFromMetadata(RequestRpcMetadata& metadata) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- if (!metadata.otherMetadata()) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- return folly::SocketFds{};
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- auto& otherMetadata = *metadata.otherMetadata();
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- auto it = otherMetadata.find("__UNSAFE_FDS_FOR_REQUEST__");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- if (it == otherMetadata.end()) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- return folly::SocketFds{};
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- folly::SocketFds::ToSend fds;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- std::vector<folly::StringPiece> fdStrVec;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- folly::split(",", it->second, fdStrVec);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- for (const auto& fdStr : fdStrVec) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- fds.emplace_back(
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- std::make_shared<folly::File>(folly::to<int>(fdStr), /*ownsFd*/ false));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- otherMetadata.erase(it);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- return fds.size() ? folly::SocketFds{std::move(fds)} : folly::SocketFds{};
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--} // namespace rocket
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--} // namespace thrift
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--} // namespace apache
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-diff --git thrift/lib/cpp2/transport/rocket/FdSocketMetadata.h thrift/lib/cpp2/transport/rocket/FdSocketMetadata.h
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-deleted file mode 100644
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-index 41137eb3f4..0000000000
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---- thrift/lib/cpp2/transport/rocket/FdSocketMetadata.h
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ /dev/null
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -1,36 +0,0 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- * Copyright (c) Meta Platforms, Inc. and affiliates.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- * Licensed under the Apache License, Version 2.0 (the "License");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- * you may not use this file except in compliance with the License.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- * You may obtain a copy of the License at
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- * http://www.apache.org/licenses/LICENSE-2.0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- * Unless required by applicable law or agreed to in writing, software
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- * distributed under the License is distributed on an "AS IS" BASIS,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- * See the License for the specific language governing permissions and
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- * limitations under the License.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--#pragma once
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--#include <folly/io/async/fdsock/SocketFds.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--#include <thrift/lib/cpp2/transport/rocket/Types.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--#include <thrift/lib/thrift/gen-cpp2/RpcMetadata_types.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--namespace apache {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--namespace thrift {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--namespace rocket {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--// Remove the temporary proof-of-concept "plumbing key" from the headers.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--// Instead, update the metadata with the number of FDs being sent.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--//
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--// For the real deal, we will want to plumb through proper C++ objects
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--// representing FD ownership.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--folly::SocketFds releaseFdsFromMetadata(RequestRpcMetadata&);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--} // namespace rocket
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--} // namespace thrift
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--} // namespace apache
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-diff --git thrift/lib/cpp2/transport/rocket/PayloadUtils.cpp thrift/lib/cpp2/transport/rocket/PayloadUtils.cpp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-index 82a87adb1f..e172a0a1f4 100644
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---- thrift/lib/cpp2/transport/rocket/PayloadUtils.cpp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ thrift/lib/cpp2/transport/rocket/PayloadUtils.cpp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -24,12 +24,6 @@ namespace detail {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- template <class Metadata>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- Payload makePayload(
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- const Metadata& metadata, std::unique_ptr<folly::IOBuf> data) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- DCHECK(
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- !metadata.otherMetadata() ||
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- !metadata.otherMetadata()->contains("__UNSAFE_FDS_FOR_REQUEST__"))
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- << "Not implemented: attaching FDs via "
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- << "otherMetadata[__UNSAFE_FDS_FOR_REQUEST__] on this code path";
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- CompactProtocolWriter writer;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- // Default is to leave some headroom for rsocket headers
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- size_t serSize = metadata.serializedSizeZC(&writer);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-diff --git thrift/lib/cpp2/transport/rocket/PayloadUtils.h thrift/lib/cpp2/transport/rocket/PayloadUtils.h
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-index 6751a2b351..9aa0941e68 100644
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---- thrift/lib/cpp2/transport/rocket/PayloadUtils.h
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ thrift/lib/cpp2/transport/rocket/PayloadUtils.h
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -157,48 +157,21 @@ inline std::unique_ptr<folly::IOBuf> packCompact(
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- return std::move(data);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--// NB: Populates `metadata.numFds` if `fds` is nonempty.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- template <typename Payload, typename Metadata>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--rocket::Payload packWithFds(
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- Metadata* metadata, Payload&& payload, folly::SocketFds fds) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+rocket::Payload pack(const Metadata& metadata, Payload&& payload) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- auto serializedPayload = packCompact(std::forward<Payload>(payload));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- if (auto compress = metadata->compression_ref()) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ if (auto compress = metadata.compression_ref()) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- apache::thrift::rocket::detail::compressPayload(
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- serializedPayload, *compress);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- auto numFds = fds.size();
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- if (numFds) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- // When received, the request will know to retrieve this many FDs.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- //
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- // NB: The receiver could more confidently assert that the right FDs are
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- // associated with the right request if we could:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- // - Additionally store the "socket sequence number" of these FDs into
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- // the metadata here.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- // - Have `AsyncFdSocket::writeIOBufsWithFds` check, via a token
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- // object, that the sequence number chosen at parse-time matches the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- // actual write order).
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- // Unfortunately, implementing this check would require adding
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- // considerable plumbing to Rocket, so we skip it in favor of asserting
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- // we got the right # of FDs, and documenting the correct FD+data
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- // ordering invariant in the client & server code that interacts with
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- // the socket.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- metadata->numFds() = numFds;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- auto ret = apache::thrift::rocket::detail::makePayload(
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- *metadata, std::move(serializedPayload));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- if (numFds) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- ret.fds = std::move(fds.dcheckToSend());
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- return ret;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ return apache::thrift::rocket::detail::makePayload(
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ metadata, std::move(serializedPayload));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- template <class T>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- rocket::Payload pack(T&& payload) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- auto metadata = std::forward<T>(payload).metadata;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- return packWithFds(
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- &metadata,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- std::forward<T>(payload).payload,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- std::forward<T>(payload).fds);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ return pack(
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ std::forward<T>(payload).metadata, std::forward<T>(payload).payload);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- } // namespace rocket
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- } // namespace thrift
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-diff --git thrift/lib/cpp2/transport/rocket/Types.h thrift/lib/cpp2/transport/rocket/Types.h
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-index 891dbe661a..650d3537a4 100644
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---- thrift/lib/cpp2/transport/rocket/Types.h
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ thrift/lib/cpp2/transport/rocket/Types.h
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -23,7 +23,6 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #include <folly/Range.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #include <folly/io/IOBuf.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--#include <folly/io/async/fdsock/SocketFds.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- namespace apache {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- namespace thrift {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -142,8 +141,6 @@ class Payload {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- bool hasData() const { return buffer_ != nullptr; }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- folly::SocketFds fds;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- private:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- std::unique_ptr<folly::IOBuf> buffer_;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- size_t metadataSize_{0};
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-diff --git thrift/lib/cpp2/transport/rocket/server/RocketThriftRequests.cpp thrift/lib/cpp2/transport/rocket/server/RocketThriftRequests.cpp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-index 48502cf221..e99598ef77 100644
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---- thrift/lib/cpp2/transport/rocket/server/RocketThriftRequests.cpp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ thrift/lib/cpp2/transport/rocket/server/RocketThriftRequests.cpp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -470,7 +470,7 @@ void ThriftServerRequestResponse::sendThriftResponse(
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- context_.sendPayload(
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- packWithFds(&metadata, std::move(data), folly::SocketFds{}),
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ pack(metadata, std::move(data)),
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- Flags().next(true).complete(true),
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- std::move(cb));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-diff --git thrift/lib/cpp2/transport/rocket/test/FdSocketMetadataTest.cpp thrift/lib/cpp2/transport/rocket/test/FdSocketMetadataTest.cpp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-deleted file mode 100644
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-index 71fe08942d..0000000000
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---- thrift/lib/cpp2/transport/rocket/test/FdSocketMetadataTest.cpp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ /dev/null
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -1,55 +0,0 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- * Copyright (c) Meta Platforms, Inc. and affiliates.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- * Licensed under the Apache License, Version 2.0 (the "License");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- * you may not use this file except in compliance with the License.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- * You may obtain a copy of the License at
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- * http://www.apache.org/licenses/LICENSE-2.0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- * Unless required by applicable law or agreed to in writing, software
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- * distributed under the License is distributed on an "AS IS" BASIS,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- * See the License for the specific language governing permissions and
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- * limitations under the License.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--#include <folly/portability/GTest.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--#include <thrift/lib/cpp2/transport/rocket/FdSocketMetadata.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--using namespace apache::thrift;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--TEST(FdSocketMetadata, ReleaseFdsFromMetadataEmpty) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- RequestRpcMetadata emptyMeta;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- EXPECT_TRUE(rocket::releaseFdsFromMetadata(emptyMeta).empty());
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- EXPECT_EQ(RequestRpcMetadata{}, emptyMeta); // no changes
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- RequestRpcMetadata noMagicKey;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- noMagicKey.otherMetadata() = {};
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- EXPECT_TRUE(rocket::releaseFdsFromMetadata(noMagicKey).empty());
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- RequestRpcMetadata alsoNoMagicKey;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- alsoNoMagicKey.otherMetadata() = {};
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- EXPECT_EQ(alsoNoMagicKey, noMagicKey);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--TEST(FdSocketMetadata, ReleaseFdsFromMetadata) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- RequestRpcMetadata meta;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- meta.otherMetadata() = {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- {"__UNSAFE_FDS_FOR_REQUEST__", "2,0,1"},
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- {"OtherKeysAreNotDeleted", "whew"},
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- };
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- auto fds = rocket::releaseFdsFromMetadata(meta);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- RequestRpcMetadata noMagicKey;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- noMagicKey.otherMetadata() = {{"OtherKeysAreNotDeleted", "whew"}};
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- EXPECT_EQ(noMagicKey, meta);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- EXPECT_EQ(3, fds.size());
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- auto sendFds = fds.releaseToSend();
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- EXPECT_TRUE(fds.empty());
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- EXPECT_EQ(3, sendFds.size());
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- EXPECT_EQ(2, sendFds[0]->fd());
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- EXPECT_EQ(0, sendFds[1]->fd());
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- EXPECT_EQ(1, sendFds[2]->fd());
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-diff --git thrift/lib/java/runtime/src/test/java/com/facebook/thrift/util/ExceptionUtilTest.java thrift/lib/java/runtime/src/test/java/com/facebook/thrift/util/ExceptionUtilTest.java
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-index aed59b46e0..fb2240ee43 100644
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---- thrift/lib/java/runtime/src/test/java/com/facebook/thrift/util/ExceptionUtilTest.java
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ thrift/lib/java/runtime/src/test/java/com/facebook/thrift/util/ExceptionUtilTest.java
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -75,7 +75,7 @@ public class ExceptionUtilTest {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- ResponseRpcMetadata metadata =
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- new ResponseRpcMetadata(
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- Collections.singletonMap("ex", "x"), 0L, 0, null, null, null, 0, null, null);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ Collections.singletonMap("ex", "x"), 0L, 0, null, null, null, 0, null);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- ClientResponsePayload responsePayload =
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- ClientResponsePayload.createException(myExp, metadata, null, false);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -90,7 +90,7 @@ public class ExceptionUtilTest {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- ResponseRpcMetadata metadata =
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- new ResponseRpcMetadata(
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- Collections.singletonMap("ex", "3"), 0L, 0, null, null, null, 0, null, null);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ Collections.singletonMap("ex", "3"), 0L, 0, null, null, null, 0, null);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- ClientResponsePayload responsePayload =
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- ClientResponsePayload.createException(myExp, metadata, null, false);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -106,7 +106,7 @@ public class ExceptionUtilTest {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- ResponseRpcMetadata metadata =
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- new ResponseRpcMetadata(
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- Collections.singletonMap("ex", "3"), 0L, 0, null, null, null, 0, null, null);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ Collections.singletonMap("ex", "3"), 0L, 0, null, null, null, 0, null);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- ClientResponsePayload responsePayload =
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- ClientResponsePayload.createException(myExp, metadata, null, false);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -121,7 +121,7 @@ public class ExceptionUtilTest {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- ResponseRpcMetadata metadata =
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- new ResponseRpcMetadata(
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- Collections.singletonMap("ex", "4"), 0L, 0, null, null, null, 0, null, null);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ Collections.singletonMap("ex", "4"), 0L, 0, null, null, null, 0, null);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- ClientResponsePayload responsePayload =
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- ClientResponsePayload.createException(myExp, metadata, null, false);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -135,7 +135,7 @@ public class ExceptionUtilTest {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- MyException myExp = new MyException("my exception");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- ResponseRpcMetadata metadata =
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- new ResponseRpcMetadata(Collections.emptyMap(), 0L, 0, null, null, null, 0, null, null);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ new ResponseRpcMetadata(Collections.emptyMap(), 0L, 0, null, null, null, 0, null);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- ClientResponsePayload responsePayload =
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- ClientResponsePayload.createException(myExp, metadata, null, false);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -149,7 +149,7 @@ public class ExceptionUtilTest {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- ResponseRpcMetadata metadata =
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- new ResponseRpcMetadata(
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- Collections.singletonMap("ex", "5"), 0L, 0, null, null, null, 0, null, null);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ Collections.singletonMap("ex", "5"), 0L, 0, null, null, null, 0, null);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- ClientResponsePayload responsePayload =
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- ClientResponsePayload.createException(myExp, metadata, null, false);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-diff --git thrift/lib/thrift/RpcMetadata.thrift thrift/lib/thrift/RpcMetadata.thrift
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-index 35f7a7f21f..d560de2eae 100644
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---- thrift/lib/thrift/RpcMetadata.thrift
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ thrift/lib/thrift/RpcMetadata.thrift
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -187,7 +187,6 @@ struct RequestRpcMetadata {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- // Thrift is typically used within a larger framework.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- // This field is for storing framework-specific metadata.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 20: optional IOBufPtr frameworkMetadata;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- 21: optional i32 numFds; // Linux currently limits this to SCM_MAX_FD.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- struct ErrorClassification {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -285,7 +284,6 @@ struct ResponseRpcMetadata {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 9: optional i32 streamId;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- // Set on a sampled basis for tracking queueing times.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 10: optional QueueMetadata queueMetadata;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- 11: optional i32 numFds; // Linux currently limits this to SCM_MAX_FD.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- enum ResponseRpcErrorCategory {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -386,7 +384,6 @@ struct StreamPayloadMetadata {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- // Metadata describing the type of stream payload. MUST be set for protocol
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- // version 8+.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 3: optional PayloadMetadata payloadMetadata;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- 4: optional i32 numFds; // Linux currently limits this to SCM_MAX_FD.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- // Setup metadata sent from the client to the server at the time
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-2.40.1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/devel/fbthrift/files/0004-Revert-Use-AsyncFdSocket-when-accepting-Unix-socket-.patch b/devel/fbthrift/files/0004-Revert-Use-AsyncFdSocket-when-accepting-Unix-socket-.patch
</span>deleted file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 10595cc6d0e..00000000000
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/devel/fbthrift/files/0004-Revert-Use-AsyncFdSocket-when-accepting-Unix-socket-.patch
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -1,77 +0,0 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-From 872d5c59ed7a55f4f19af7b1296f014206946616 Mon Sep 17 00:00:00 2001
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-From: barracuda156 <vital.had@gmail.com>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Date: Wed, 17 May 2023 16:54:15 +0800
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Subject: [PATCH 4/4] Revert "Use `AsyncFdSocket` when accepting Unix socket
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- connections"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-This reverts commit 7631d8f859447ffc24bb9022a72f1419a4db66d3.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>----
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- thrift/lib/cpp2/server/Cpp2Worker.cpp | 18 ------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- thrift/lib/cpp2/server/Cpp2Worker.h | 5 -----
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 2 files changed, 23 deletions(-)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-diff --git thrift/lib/cpp2/server/Cpp2Worker.cpp thrift/lib/cpp2/server/Cpp2Worker.cpp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-index 24662548a7..9225600db5 100644
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---- thrift/lib/cpp2/server/Cpp2Worker.cpp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ thrift/lib/cpp2/server/Cpp2Worker.cpp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -26,11 +26,9 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #include <folly/io/async/AsyncSSLSocket.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #include <folly/io/async/AsyncSocket.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #include <folly/io/async/EventBaseLocal.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--#include <folly/io/async/fdsock/AsyncFdSocket.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #include <folly/portability/Sockets.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #include <thrift/lib/cpp/async/TAsyncSSLSocket.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #include <thrift/lib/cpp/concurrency/Util.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--#include <thrift/lib/cpp2/Flags.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #include <thrift/lib/cpp2/async/ResponseChannel.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #include <thrift/lib/cpp2/security/extensions/ThriftParametersContext.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #include <thrift/lib/cpp2/server/Cpp2Connection.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -42,10 +40,6 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #include <wangle/acceptor/SSLAcceptorHandshakeHelper.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #include <wangle/acceptor/UnencryptedAcceptorHandshakeHelper.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--// DANGER: If you disable this overly broadly, this can completely break
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--// workloads that rely on passing FDs over Unix sockets + Thrift.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--THRIFT_FLAG_DEFINE_bool(enable_server_async_fd_socket, /* default = */ true);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- namespace apache {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- namespace thrift {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -198,18 +192,6 @@ void Cpp2Worker::plaintextConnectionReady(
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- server_->getObserverShared());
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--folly::AsyncSocket::UniquePtr Cpp2Worker::makeNewAsyncSocket(
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- folly::EventBase* base, int fd, const folly::SocketAddress* peerAddress) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- if (THRIFT_FLAG(enable_server_async_fd_socket) &&
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- peerAddress->getFamily() == AF_UNIX) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- VLOG(4) << "Enabling AsyncFdSocket"; // peerAddress is always anonymous
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- // Enable passing FDs over Unix sockets, see `man cmsg`.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- return folly::AsyncSocket::UniquePtr(new folly::AsyncFdSocket(
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- base, folly::NetworkSocket::fromFd(fd), peerAddress));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- return Acceptor::makeNewAsyncSocket(base, fd, peerAddress);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- void Cpp2Worker::useExistingChannel(
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- const std::shared_ptr<HeaderServerChannel>& serverChannel) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- folly::SocketAddress address;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-diff --git thrift/lib/cpp2/server/Cpp2Worker.h thrift/lib/cpp2/server/Cpp2Worker.h
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-index 951a62019e..0275f7caed 100644
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---- thrift/lib/cpp2/server/Cpp2Worker.h
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ thrift/lib/cpp2/server/Cpp2Worker.h
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -390,11 +390,6 @@ class Cpp2Worker : public IOWorkerContext,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- mutable folly::F14NodeMap<AsyncProcessorFactory*, PerServiceMetadata>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- perServiceMetadata_;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- folly::AsyncSocket::UniquePtr makeNewAsyncSocket(
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- folly::EventBase* base,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- int fd,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- const folly::SocketAddress* peerAddress) override;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- folly::AsyncSSLSocket::UniquePtr makeNewAsyncSSLSocket(
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- const std::shared_ptr<folly::SSLContext>& ctx,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- folly::EventBase* base,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-2.40.1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span></pre><pre style='margin:0'>
</pre>