]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
rgw: Set CURLOPT_NOBODY for HEAD request 37259/head
authorSoumya Koduri <skoduri@redhat.com>
Fri, 18 Sep 2020 17:31:12 +0000 (23:01 +0530)
committerSoumya Koduri <skoduri@redhat.com>
Mon, 18 Jan 2021 08:10:44 +0000 (13:40 +0530)
Set "CURLOPT_NOBODY" for HEAD request so that libcurl doesn't
throw error when there is no body in the response.

Signed-off-by: Soumya Koduri <skoduri@redhat.com>
src/rgw/rgw_http_client.cc
src/test/rgw/test_http_manager.cc

index 1ade7dfe8284b72c60435383f65250e1cfb42e56..06559a4790ff82d165356b0beaacb140ace068e7 100644 (file)
@@ -557,6 +557,11 @@ int RGWHTTPClient::init_request(rgw_http_req_data *_req_data)
       h = curl_slist_append(h, "Expect:");
     }
   }
+
+  if (method == "HEAD") {
+    curl_easy_setopt(easy_handle, CURLOPT_NOBODY, 1L);
+  }
+
   if (h) {
     curl_easy_setopt(easy_handle, CURLOPT_HTTPHEADER, (void *)h);
   }
index e27e1895a45c354158dc0cc194a83493dc145423..3ecd01d9f18393533f690913456e0b39bf99a21e 100644 (file)
@@ -49,6 +49,33 @@ TEST(HTTPManager, ReadTruncated)
   server.join();
 }
 
+TEST(HTTPManager, Head)
+{
+  using tcp = boost::asio::ip::tcp;
+  tcp::endpoint endpoint(tcp::v4(), 0);
+  boost::asio::io_context ioctx;
+  tcp::acceptor acceptor(ioctx);
+  acceptor.open(endpoint.protocol());
+  acceptor.bind(endpoint);
+  acceptor.listen();
+
+  std::thread server{[&] {
+    tcp::socket socket{ioctx};
+    acceptor.accept(socket);
+    std::string_view response =
+        "HTTP/1.1 200 OK\r\n"
+        "Content-Length: 1024\r\n"
+        "\r\n";
+    boost::asio::write(socket, boost::asio::buffer(response));
+  }};
+  const auto url = std::string{"http://127.0.0.1:"} + std::to_string(acceptor.local_endpoint().port());
+
+  RGWHTTPClient client{g_ceph_context, "HEAD", url};
+  EXPECT_EQ(0, RGWHTTP::process(&client, null_yield));
+
+  server.join();
+}
+
 TEST(HTTPManager, SignalThread)
 {
   auto cct = g_ceph_context;