Skip to content

Commit 4436dbd

Browse files
hanidamlajmeta-codesync[bot]
authored andcommitted
remove SettingsId::ENABLE_EX_HEADERS
Summary: incremental stack of diffs [1/n] to remove ex_transactions from the codebase; this is fully deprecated and following up with code deletion Reviewed By: jbeshay Differential Revision: D90792711 fbshipit-source-id: 7d29629f3f3743c53a825894dec7292ec5c96366
1 parent 4ca9b3a commit 4436dbd

File tree

11 files changed

+8
-811
lines changed

11 files changed

+8
-811
lines changed

proxygen/httpserver/HTTPServerAcceptor.cpp

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -31,10 +31,6 @@ std::shared_ptr<const AcceptorConfiguration> HTTPServerAcceptor::makeConfig(
3131
conf->acceptBacklog = opts.listenBacklog;
3232
conf->maxConcurrentIncomingStreams = opts.maxConcurrentIncomingStreams;
3333

34-
if (opts.enableExHeaders) {
35-
conf->egressSettings.emplace_back(SettingsId::ENABLE_EX_HEADERS, 1);
36-
}
37-
3834
if (ipConfig.protocol == HTTPServer::Protocol::HTTP2) {
3935
conf->plaintextProtocol = http2::kProtocolCleartextString;
4036
}

proxygen/lib/http/codec/HTTP2Codec.cpp

Lines changed: 2 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -210,12 +210,8 @@ ErrorCode HTTP2Codec::parseFrame(folly::io::Cursor& cursor) {
210210
case http2::FrameType::PUSH_PROMISE:
211211
return parsePushPromise(cursor);
212212
case http2::FrameType::EX_HEADERS:
213-
if (ingressSettings_.getSetting(SettingsId::ENABLE_EX_HEADERS, 0)) {
214-
return parseExHeaders(cursor);
215-
} else {
216-
VLOG(2) << "EX_HEADERS not enabled, ignoring the frame";
217-
break;
218-
}
213+
VLOG(2) << "EX_HEADERS not enabled, ignoring the frame";
214+
break;
219215
case http2::FrameType::PING:
220216
return parsePing(cursor);
221217
case http2::FrameType::GOAWAY:
@@ -849,27 +845,6 @@ ErrorCode HTTP2Codec::handleSettings(const std::deque<SettingPair>& settings) {
849845
break;
850846
case SettingsId::MAX_HEADER_LIST_SIZE:
851847
break;
852-
case SettingsId::ENABLE_EX_HEADERS: {
853-
auto ptr = egressSettings_.getSetting(SettingsId::ENABLE_EX_HEADERS);
854-
if (ptr && ptr->value > 0) {
855-
VLOG(4) << getTransportDirectionString(getTransportDirection())
856-
<< " got ENABLE_EX_HEADERS=" << setting.second;
857-
if (setting.second != 0 && setting.second != 1) {
858-
goawayErrorMessage_ =
859-
folly::to<string>("GOAWAY error: invalid ENABLE_EX_HEADERS=",
860-
setting.second,
861-
" for streamID=",
862-
curHeader_.stream);
863-
VLOG(4) << goawayErrorMessage_;
864-
return ErrorCode::PROTOCOL_ERROR;
865-
}
866-
break;
867-
} else {
868-
// egress ENABLE_EX_HEADERS is disabled, consider the ingress
869-
// ENABLE_EX_HEADERS as unknown setting, and ignore it.
870-
continue;
871-
}
872-
}
873848
case SettingsId::ENABLE_CONNECT_PROTOCOL:
874849
if (setting.second > 1) {
875850
goawayErrorMessage_ = folly::to<string>(
@@ -1650,14 +1625,6 @@ size_t HTTP2Codec::generateSettings(folly::IOBufQueue& writeBuf) {
16501625
case SettingsId::MAX_HEADER_LIST_SIZE:
16511626
headerCodec_.setMaxUncompressed(setting.value);
16521627
break;
1653-
case SettingsId::ENABLE_EX_HEADERS:
1654-
CHECK(setting.value == 0 || setting.value == 1);
1655-
if (setting.value == 0) {
1656-
continue; // just skip the experimental setting if disabled
1657-
} else {
1658-
VLOG(4) << "generating ENABLE_EX_HEADERS=" << setting.value;
1659-
}
1660-
break;
16611628
case SettingsId::ENABLE_CONNECT_PROTOCOL:
16621629
if (setting.value == 0) {
16631630
continue;

proxygen/lib/http/codec/HTTP2Codec.h

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -133,8 +133,7 @@ class HTTP2Codec
133133
return ingressSettings_.getSetting(SettingsId::ENABLE_CONNECT_PROTOCOL);
134134
}
135135
bool supportsExTransactions() const override {
136-
return ingressSettings_.getSetting(SettingsId::ENABLE_EX_HEADERS, 0) &&
137-
egressSettings_.getSetting(SettingsId::ENABLE_EX_HEADERS, 0);
136+
return false;
138137
}
139138
void setHeaderCodecStats(HeaderCodec::Stats* hcStats) override {
140139
headerCodec_.setStats(hcStats);

proxygen/lib/http/codec/SettingsId.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,6 @@ enum class SettingsId : uint64_t {
2929
THRIFT_CHANNEL_ID_DEPRECATED = 100,
3030

3131
// 0xf000 and 0xffff being reserved for Experimental Use
32-
ENABLE_EX_HEADERS = 0xfbfb,
3332
THRIFT_CHANNEL_ID = 0xf100,
3433

3534
// For secondary authentication in HTTP/2

proxygen/lib/http/codec/test/HTTP2CodecTest.cpp

Lines changed: 0 additions & 211 deletions
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,6 @@ class HTTP2CodecTestOmitParsePreface : public HTTP2CodecTest {
110110
};
111111

112112
TEST_F(HTTP2CodecTest, NoExHeaders) {
113-
// do not emit ENABLE_EX_HEADERS setting, if disabled
114113
SetUpUpstreamTest();
115114

116115
EXPECT_EQ(callbacks_.settings, 0);
@@ -125,98 +124,6 @@ TEST_F(HTTP2CodecTest, NoExHeaders) {
125124
EXPECT_EQ(false, downstreamCodec_.supportsExTransactions());
126125
}
127126

128-
TEST_F(HTTP2CodecTest, IgnoreExHeadersSetting) {
129-
// disable EX_HEADERS on egress
130-
downstreamCodec_.getEgressSettings()->setSetting(
131-
SettingsId::ENABLE_EX_HEADERS, 0);
132-
auto ptr = downstreamCodec_.getEgressSettings()->getSetting(
133-
SettingsId::ENABLE_EX_HEADERS);
134-
EXPECT_EQ(0, ptr->value);
135-
136-
ptr = downstreamCodec_.getIngressSettings()->getSetting(
137-
SettingsId::ENABLE_EX_HEADERS);
138-
EXPECT_EQ(nullptr, ptr);
139-
EXPECT_EQ(false, downstreamCodec_.supportsExTransactions());
140-
141-
// attempt to enable EX_HEADERS on ingress
142-
http2::writeSettings(output_,
143-
{SettingPair(SettingsId::ENABLE_EX_HEADERS, 1)});
144-
parse();
145-
146-
EXPECT_EQ(callbacks_.settings, 1);
147-
EXPECT_EQ(callbacks_.sessionErrors, 0);
148-
ptr = downstreamCodec_.getIngressSettings()->getSetting(
149-
SettingsId::ENABLE_EX_HEADERS);
150-
EXPECT_EQ(nullptr, ptr);
151-
EXPECT_EQ(false, downstreamCodec_.supportsExTransactions());
152-
153-
// attempt to disable EX_HEADERS on ingress
154-
callbacks_.reset();
155-
http2::writeSettings(output_,
156-
{SettingPair(SettingsId::ENABLE_EX_HEADERS, 0)});
157-
parse();
158-
159-
EXPECT_EQ(callbacks_.settings, 1);
160-
EXPECT_EQ(callbacks_.sessionErrors, 0);
161-
ptr = downstreamCodec_.getIngressSettings()->getSetting(
162-
SettingsId::ENABLE_EX_HEADERS);
163-
EXPECT_EQ(nullptr, ptr);
164-
EXPECT_EQ(false, downstreamCodec_.supportsExTransactions());
165-
}
166-
167-
TEST_F(HTTP2CodecTest, EnableExHeadersSetting) {
168-
// enable EX_HEADERS on egress
169-
downstreamCodec_.getEgressSettings()->setSetting(
170-
SettingsId::ENABLE_EX_HEADERS, 1);
171-
172-
auto ptr = downstreamCodec_.getEgressSettings()->getSetting(
173-
SettingsId::ENABLE_EX_HEADERS);
174-
EXPECT_EQ(1, ptr->value);
175-
176-
ptr = downstreamCodec_.getIngressSettings()->getSetting(
177-
SettingsId::ENABLE_EX_HEADERS);
178-
EXPECT_EQ(nullptr, ptr);
179-
EXPECT_EQ(false, downstreamCodec_.supportsExTransactions());
180-
181-
// attempt to enable EX_HEADERS on ingress
182-
http2::writeSettings(output_,
183-
{SettingPair(SettingsId::ENABLE_EX_HEADERS, 1)});
184-
parse();
185-
186-
EXPECT_EQ(callbacks_.settings, 1);
187-
EXPECT_EQ(callbacks_.sessionErrors, 0);
188-
ptr = downstreamCodec_.getIngressSettings()->getSetting(
189-
SettingsId::ENABLE_EX_HEADERS);
190-
EXPECT_EQ(1, ptr->value);
191-
EXPECT_EQ(true, downstreamCodec_.supportsExTransactions());
192-
193-
// attempt to disable EX_HEADERS on ingress
194-
callbacks_.reset();
195-
http2::writeSettings(output_,
196-
{SettingPair(SettingsId::ENABLE_EX_HEADERS, 0)});
197-
parse();
198-
199-
EXPECT_EQ(callbacks_.settings, 1);
200-
EXPECT_EQ(callbacks_.sessionErrors, 0);
201-
ptr = downstreamCodec_.getIngressSettings()->getSetting(
202-
SettingsId::ENABLE_EX_HEADERS);
203-
EXPECT_EQ(0, ptr->value);
204-
EXPECT_EQ(false, downstreamCodec_.supportsExTransactions());
205-
}
206-
207-
TEST_F(HTTP2CodecTest, InvalidExHeadersSetting) {
208-
// enable EX_HEADERS on egress
209-
downstreamCodec_.getEgressSettings()->setSetting(
210-
SettingsId::ENABLE_EX_HEADERS, 1);
211-
212-
// attempt to set a invalid ENABLE_EX_HEADERS value
213-
http2::writeSettings(output_,
214-
{SettingPair(SettingsId::ENABLE_EX_HEADERS, 110)});
215-
parse();
216-
217-
EXPECT_EQ(callbacks_.sessionErrors, 1);
218-
}
219-
220127
TEST_F(HTTP2CodecTest, BasicHeader) {
221128
HTTPMessage req = getGetRequest("/guacamole");
222129
req.getHeaders().add(HTTP_HEADER_USER_AGENT, "coolio");
@@ -257,38 +164,6 @@ TEST_F(HTTP2CodecTest, GenerateExtraHeaders) {
257164
EXPECT_EQ("u=0", headers.getSingleOrEmpty(HTTP_HEADER_PRIORITY));
258165
}
259166

260-
TEST_F(HTTP2CodecTest, RequestFromServer) {
261-
// this is to test EX_HEADERS frame, which carrys the HTTP request initiated
262-
// by server side
263-
upstreamCodec_.getEgressSettings()->setSetting(SettingsId::ENABLE_EX_HEADERS,
264-
1);
265-
SetUpUpstreamTest();
266-
proxygen::http2::writeSettings(
267-
output_, {{proxygen::SettingsId::ENABLE_EX_HEADERS, 1}});
268-
269-
HTTPMessage req = getGetRequest("/guacamole");
270-
req.getHeaders().add(HTTP_HEADER_USER_AGENT, "coolio");
271-
req.getHeaders().add("tab-hdr", "coolio\tv2");
272-
// Connection header will get dropped
273-
req.getHeaders().add(HTTP_HEADER_CONNECTION, "Love");
274-
req.setSecure(true);
275-
276-
HTTPCodec::StreamID stream = folly::Random::rand32(10, 1024) * 2;
277-
HTTPCodec::StreamID controlStream = folly::Random::rand32(10, 1024) * 2 + 1;
278-
upstreamCodec_.generateExHeader(
279-
output_, stream, req, HTTPCodec::ExAttributes(controlStream, true), true);
280-
281-
parseUpstream();
282-
EXPECT_EQ(controlStream, callbacks_.controlStreamId);
283-
EXPECT_TRUE(callbacks_.isUnidirectional);
284-
callbacks_.expectMessage(true, 3, "/guacamole");
285-
EXPECT_TRUE(callbacks_.msg->isSecure());
286-
const auto& headers = callbacks_.msg->getHeaders();
287-
EXPECT_EQ("coolio", headers.getSingleOrEmpty(HTTP_HEADER_USER_AGENT));
288-
EXPECT_EQ("coolio\tv2", headers.getSingleOrEmpty("tab-hdr"));
289-
EXPECT_EQ("www.foo.com", headers.getSingleOrEmpty(HTTP_HEADER_HOST));
290-
}
291-
292167
TEST_F(HTTP2CodecTestOmitParsePreface, OmitSettingsAfterConnPrefaceError) {
293168
HTTPMessage req = getGetRequest("/test");
294169
req.getHeaders().add(HTTP_HEADER_USER_AGENT, "rand-user");
@@ -304,86 +179,6 @@ TEST_F(HTTP2CodecTestOmitParsePreface, OmitSettingsAfterConnPrefaceError) {
304179
ErrorCode::PROTOCOL_ERROR);
305180
}
306181

307-
TEST_F(HTTP2CodecTest, ResponseFromClient) {
308-
// this is to test EX_HEADERS frame, which carrys the HTTP response replied by
309-
// client side
310-
downstreamCodec_.getEgressSettings()->setSetting(
311-
SettingsId::ENABLE_EX_HEADERS, 1);
312-
proxygen::http2::writeSettings(
313-
output_, {{proxygen::SettingsId::ENABLE_EX_HEADERS, 1}});
314-
315-
HTTPMessage resp;
316-
resp.setStatusCode(200);
317-
resp.setStatusMessage("nifty-nice");
318-
resp.getHeaders().add(HTTP_HEADER_CONTENT_TYPE, "x-coolio");
319-
320-
HTTPCodec::StreamID stream = folly::Random::rand32(10, 1024) * 2;
321-
HTTPCodec::StreamID controlStream = folly::Random::rand32(10, 1024) * 2 + 1;
322-
downstreamCodec_.generateExHeader(
323-
output_,
324-
stream,
325-
resp,
326-
HTTPCodec::ExAttributes(controlStream, true),
327-
true);
328-
329-
parse();
330-
EXPECT_EQ(controlStream, callbacks_.controlStreamId);
331-
EXPECT_TRUE(callbacks_.isUnidirectional);
332-
EXPECT_EQ("OK", callbacks_.msg->getStatusMessage());
333-
callbacks_.expectMessage(true, 2, 200);
334-
const auto& headers = callbacks_.msg->getHeaders();
335-
EXPECT_EQ("OK", callbacks_.msg->getStatusMessage());
336-
EXPECT_TRUE(callbacks_.msg->getHeaders().exists(HTTP_HEADER_DATE));
337-
EXPECT_EQ("x-coolio", headers.getSingleOrEmpty(HTTP_HEADER_CONTENT_TYPE));
338-
}
339-
340-
TEST_F(HTTP2CodecTest, ExHeadersWithPriority) {
341-
downstreamCodec_.getEgressSettings()->setSetting(
342-
SettingsId::ENABLE_EX_HEADERS, 1);
343-
proxygen::http2::writeSettings(
344-
output_, {{proxygen::SettingsId::ENABLE_EX_HEADERS, 1}});
345-
346-
auto req = getGetRequest();
347-
// Test empty path
348-
req.setURL("");
349-
upstreamCodec_.generateExHeader(
350-
output_, 3, req, HTTPCodec::ExAttributes(1, true));
351-
352-
parse();
353-
EXPECT_EQ(callbacks_.streamErrors, 0);
354-
EXPECT_EQ(callbacks_.sessionErrors, 0);
355-
}
356-
357-
TEST_F(HTTP2CodecTest, DuplicateExHeaders) {
358-
downstreamCodec_.getEgressSettings()->setSetting(
359-
SettingsId::ENABLE_EX_HEADERS, 1);
360-
proxygen::http2::writeSettings(
361-
output_, {{proxygen::SettingsId::ENABLE_EX_HEADERS, 1}});
362-
363-
auto req = getGetRequest();
364-
upstreamCodec_.generateExHeader(
365-
output_, 3, req, HTTPCodec::ExAttributes(1, true), /*eom=*/false);
366-
upstreamCodec_.generateExHeader(
367-
output_, 3, req, HTTPCodec::ExAttributes(1, true), /*eom=*/true);
368-
369-
parse();
370-
EXPECT_EQ(callbacks_.streamErrors, 0);
371-
EXPECT_EQ(callbacks_.sessionErrors, 1);
372-
}
373-
374-
TEST_F(HTTP2CodecTest, IgnoreExHeadersIfNotEnabled) {
375-
downstreamCodec_.getEgressSettings()->setSetting(
376-
SettingsId::ENABLE_EX_HEADERS, 0);
377-
378-
HTTPMessage req = getGetRequest("/guacamole");
379-
downstreamCodec_.generateExHeader(
380-
output_, 3, req, HTTPCodec::ExAttributes(1, true));
381-
382-
parse();
383-
EXPECT_EQ(callbacks_.streamErrors, 0);
384-
EXPECT_EQ(callbacks_.sessionErrors, 0);
385-
}
386-
387182
TEST_F(HTTP2CodecTest, BadHeaders) {
388183
static const std::string v1("GET");
389184
static const std::string v2("/");
@@ -2289,7 +2084,6 @@ TEST_F(HTTP2CodecTest, TestAllEgressFrameTypeCallbacks) {
22892084
http2::FrameType::GOAWAY,
22902085
http2::FrameType::WINDOW_UPDATE,
22912086
http2::FrameType::CONTINUATION,
2292-
http2::FrameType::EX_HEADERS,
22932087
};
22942088

22952089
for (http2::FrameType type : expectedTypes) {
@@ -2333,11 +2127,6 @@ TEST_F(HTTP2CodecTest, TestAllEgressFrameTypeCallbacks) {
23332127

23342128
upstreamCodec_.generateWindowUpdate(output_, 0, 10);
23352129

2336-
HTTPCodec::StreamID stream = folly::Random::rand32(10, 1024) * 2;
2337-
HTTPCodec::StreamID controlStream = folly::Random::rand32(10, 1024) * 2 + 1;
2338-
downstreamCodec_.generateExHeader(
2339-
output_, stream, req, HTTPCodec::ExAttributes(controlStream, true));
2340-
23412130
// Tests the continuation frame
23422131
req = getBigGetRequest();
23432132
upstreamCodec_.generateHeader(output_, id, req, true /* eom */);

proxygen/lib/http/session/HTTPDownstreamSession.cpp

Lines changed: 2 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -23,27 +23,16 @@ void HTTPDownstreamSession::startNow() {
2323
void HTTPDownstreamSession::setupOnHeadersComplete(HTTPTransaction* txn,
2424
HTTPMessage* msg) {
2525
VLOG(5) << "setupOnHeadersComplete txn=" << txn << ", id=" << txn->getID()
26-
<< ", handlder=" << txn->getHandler() << ", msg=" << msg;
27-
if (txn->getHandler()) {
28-
// handler is installed before setupOnHeadersComplete callback. It must be
29-
// an EX_HEADERS from client side, and ENABLE_EX_HEADERS == 1
30-
const auto* settings = codec_->getIngressSettings();
31-
CHECK(settings && settings->getSetting(SettingsId::ENABLE_EX_HEADERS, 0));
32-
CHECK(txn->getControlStream());
33-
return;
34-
}
35-
26+
<< ", handler=" << txn->getHandler() << ", msg=" << msg;
3627
// We need to find a Handler to process the transaction.
3728
// Note: The handler is responsible for freeing itself
3829
// when it has finished processing the transaction. The
3930
// transaction is responsible for freeing itself when both the
4031
// ingress and egress messages have completed (or failed).
41-
HTTPTransaction::Handler* handler = nullptr;
4232

4333
// In the general case, delegate to the handler factory to generate
4434
// a handler for the transaction.
45-
handler = getController()->getRequestHandler(*txn, msg);
46-
CHECK(handler);
35+
auto* handler = CHECK_NOTNULL(getController()->getRequestHandler(*txn, msg));
4736

4837
DestructorGuard dg(this);
4938
txn->setHandler(handler);

0 commit comments

Comments
 (0)