@@ -44,13 +44,14 @@ unique_ptr<HTTPParams> HTTPFSUtil::InitializeParameters(optional_ptr<FileOpener>
4444 // Setting lookups
4545 FileOpener::TryGetCurrentSetting (opener, " http_timeout" , result->timeout , info);
4646 FileOpener::TryGetCurrentSetting (opener, " force_download" , result->force_download , info);
47- FileOpener::TryGetCurrentSetting (opener, " auto_fallback_to_full_download" , result->auto_fallback_to_full_download , info);
47+ FileOpener::TryGetCurrentSetting (opener, " auto_fallback_to_full_download" , result->auto_fallback_to_full_download ,
48+ info);
4849 FileOpener::TryGetCurrentSetting (opener, " http_retries" , result->retries , info);
4950 FileOpener::TryGetCurrentSetting (opener, " http_retry_wait_ms" , result->retry_wait_ms , info);
5051 FileOpener::TryGetCurrentSetting (opener, " http_retry_backoff" , result->retry_backoff , info);
5152 FileOpener::TryGetCurrentSetting (opener, " http_keep_alive" , result->keep_alive , info);
52- FileOpener::TryGetCurrentSetting (opener, " enable_curl_server_cert_verification" , result-> enable_curl_server_cert_verification ,
53- info);
53+ FileOpener::TryGetCurrentSetting (opener, " enable_curl_server_cert_verification" ,
54+ result-> enable_curl_server_cert_verification , info);
5455 FileOpener::TryGetCurrentSetting (opener, " enable_server_cert_verification" , result->enable_server_cert_verification ,
5556 info);
5657 FileOpener::TryGetCurrentSetting (opener, " ca_cert_file" , result->ca_cert_file , info);
@@ -262,19 +263,23 @@ unique_ptr<HTTPResponse> HTTPFileSystem::GetRangeRequest(FileHandle &handle, str
262263 out_offset = 0 ;
263264
264265 if (!hfh.http_params .unsafe_disable_etag_checks && !hfh.etag .empty () && response.HasHeader (" ETag" )) {
265- string responseEtag = response.GetHeaderValue (" ETag" );
266-
267- if (!responseEtag.empty () && responseEtag != hfh.etag ) {
268- throw HTTPException (response, " ETag was initially %s and now it returned %s, this likely means the remote file has changed.\n Try to restart the read or close the file-handle and read the file again (e.g. `DETACH` in the file is a database file).\n You can disable checking etags via `SET unsafe_disable_etag_checks = true;`" , hfh.etag , response.GetHeaderValue (" ETag" ));
269- }
270- }
271-
272-
266+ string responseEtag = response.GetHeaderValue (" ETag" );
267+
268+ if (!responseEtag.empty () && responseEtag != hfh.etag ) {
269+ throw HTTPException (
270+ response,
271+ " ETag was initially %s and now it returned %s, this likely means the remote file has "
272+ " changed.\n Try to restart the read or close the file-handle and read the file again (e.g. "
273+ " `DETACH` in the file is a database file).\n You can disable checking etags via `SET "
274+ " unsafe_disable_etag_checks = true;`" ,
275+ hfh.etag , response.GetHeaderValue (" ETag" ));
276+ }
277+ }
273278
274279 if (response.HasHeader (" Content-Length" )) {
275280 auto content_length = stoll (response.GetHeaderValue (" Content-Length" ));
276281 if ((idx_t )content_length != buffer_out_len) {
277- RangeRequestNotSupportedException::Throw ();
282+ RangeRequestNotSupportedException::Throw ();
278283 }
279284 }
280285 }
@@ -388,31 +393,33 @@ unique_ptr<FileHandle> HTTPFileSystem::OpenFileExtended(const OpenFileInfo &file
388393 return std::move (handle);
389394}
390395
391- bool HTTPFileSystem::TryRangeRequest (FileHandle &handle, string url, HTTPHeaders header_map, idx_t file_offset, char *buffer_out, idx_t buffer_out_len) {
396+ bool HTTPFileSystem::TryRangeRequest (FileHandle &handle, string url, HTTPHeaders header_map, idx_t file_offset,
397+ char *buffer_out, idx_t buffer_out_len) {
392398 auto res = GetRangeRequest (handle, url, header_map, file_offset, buffer_out, buffer_out_len);
393399
394400 if (res) {
395401 // Request succeeded TODO: fix upstream that 206 is not considered success
396- if (res->Success () || res->status == HTTPStatusCode::PartialContent_206 || res->status == HTTPStatusCode::Accepted_202) {
402+ if (res->Success () || res->status == HTTPStatusCode::PartialContent_206 ||
403+ res->status == HTTPStatusCode::Accepted_202) {
397404 return true ;
398405 }
399406
400407 // Request failed and we have a request error
401408 if (res->HasRequestError ()) {
402- ErrorData error (res->GetRequestError ());
409+ ErrorData error (res->GetRequestError ());
403410
404411 // Special case: we can do a retry with a full file download
405- if (error.Type () == RangeRequestNotSupportedException::TYPE && error.RawMessage () == RangeRequestNotSupportedException::MESSAGE) {
412+ if (error.Type () == RangeRequestNotSupportedException::TYPE &&
413+ error.RawMessage () == RangeRequestNotSupportedException::MESSAGE) {
406414 auto &hfh = handle.Cast <HTTPFileHandle>();
407415 if (hfh.http_params .auto_fallback_to_full_download ) {
408416 return false ;
409417 }
410-
411418 }
412419 error.Throw ();
413420 }
414- throw HTTPException (*res, " Request returned HTTP %d for HTTP %s to '%s'" ,
415- static_cast < int >(res-> status ), EnumUtil::ToString (RequestType::GET_REQUEST), res->url );
421+ throw HTTPException (*res, " Request returned HTTP %d for HTTP %s to '%s'" , static_cast < int >(res-> status ),
422+ EnumUtil::ToString (RequestType::GET_REQUEST), res->url );
416423 }
417424 throw IOException (" Unknown error for HTTP %s to '%s'" , EnumUtil::ToString (RequestType::GET_REQUEST), url);
418425}
@@ -485,15 +492,17 @@ bool HTTPFileSystem::ReadInternal(FileHandle &handle, void *buffer, int64_t nr_b
485492
486493 // Bypass buffer if we read more than buffer size
487494 if (to_read > new_buffer_available) {
488- if (!TryRangeRequest (hfh, hfh.path , {}, location + buffer_offset, (char *)buffer + buffer_offset, to_read)) {
495+ if (!TryRangeRequest (hfh, hfh.path , {}, location + buffer_offset, (char *)buffer + buffer_offset,
496+ to_read)) {
489497 return false ;
490498 }
491499 hfh.buffer_available = 0 ;
492500 hfh.buffer_idx = 0 ;
493501 start_offset += to_read;
494502 break ;
495503 } else {
496- if (!TryRangeRequest (hfh, hfh.path , {}, start_offset, (char *)hfh.read_buffer .get (), new_buffer_available)) {
504+ if (!TryRangeRequest (hfh, hfh.path , {}, start_offset, (char *)hfh.read_buffer .get (),
505+ new_buffer_available)) {
497506 return false ;
498507 }
499508 hfh.buffer_available = new_buffer_available;
@@ -520,7 +529,10 @@ void HTTPFileSystem::Read(FileHandle &handle, void *buffer, int64_t nr_bytes, id
520529 // attempt to download the full file and retry.
521530
522531 if (handle.logger ) {
523- DUCKDB_LOG_WARN (handle.logger , " Falling back to full file download for file '%s': the server does not support HTTP range requests. Performance and memory usage are potentially degraded." , handle.path );
532+ DUCKDB_LOG_WARN (handle.logger ,
533+ " Falling back to full file download for file '%s': the server does not support HTTP range "
534+ " requests. Performance and memory usage are potentially degraded." ,
535+ handle.path );
524536 }
525537
526538 auto &hfh = handle.Cast <HTTPFileHandle>();
@@ -744,7 +756,6 @@ void HTTPFileHandle::LoadFileInfo() {
744756 initialized = true ;
745757}
746758
747-
748759void HTTPFileHandle::TryAddLogger (FileOpener &opener) {
749760 auto context = opener.TryGetClientContext ();
750761 if (context) {
0 commit comments