need another patch foro pg_duckdb which has its own cached copy of httpfs_filesystem

This commit is contained in:
BodoBolero
2025-01-24 11:53:58 +01:00
parent aadbdf19d6
commit 76a4654424
2 changed files with 63 additions and 0 deletions
+2
View File
@@ -1118,6 +1118,7 @@ FROM build-deps AS pg-duckdb-pg-build
ARG PG_VERSION
COPY --from=pg-build /usr/local/pgsql/ /usr/local/pgsql/
COPY compute/patches/duckdb-v1-1-3.patch /duckdb-v1-1-3.patch
COPY compute/patches/pg_duckdb-0-2-0.patch /pg_duckdb-0-2-0.patch
ENV PATH="/usr/local/pgsql/bin/:$PATH"
@@ -1133,6 +1134,7 @@ RUN git clone --depth 1 --branch v0.2.0 https://github.com/duckdb/pg_duckdb.git
cd third_party/duckdb && \
patch -p1 < /duckdb-v1-1-3.patch && \
cd ../.. && \
patch -p1 < /pg_duckdb-0-2-0.patch && \
make install -j $(getconf _NPROCESSORS_ONLN) && \
echo 'trusted = true' >> /usr/local/pgsql/share/extension/pg_duckdb.control && \
file=/usr/local/pgsql/share/extension/pg_duckdb--0.1.0--0.2.0.sql && \
+61
View File
@@ -0,0 +1,61 @@
diff --git a/third_party/cached_httpfs/http_file_cache.cpp b/third_party/cached_httpfs/http_file_cache.cpp
index 813db57..c6e4c3a 100644
--- a/third_party/cached_httpfs/http_file_cache.cpp
+++ b/third_party/cached_httpfs/http_file_cache.cpp
@@ -4,20 +4,22 @@ namespace duckdb {
CachedFile::CachedFile(const string &cache_dir, FileSystem &fs, const string &key, bool cache_file) : cache_directory(cache_dir), fs(fs) {
file_name = cache_dir + "/" + key;
-
+ FileSystem::TrustedContext trusted1(fs);
GetDirectoryCacheLock(cache_dir);
FileOpenFlags flags =
FileFlags::FILE_FLAGS_READ | FileFlags::FILE_FLAGS_NULL_IF_NOT_EXISTS | FileLockType::READ_LOCK;
+ FileSystem::TrustedContext trusted2(fs);
handle = fs.OpenFile(file_name, flags);
if (handle) {
initialized = true;
size = handle->GetFileSize();
} else if (cache_file) {
flags = FileFlags::FILE_FLAGS_WRITE | FileFlags::FILE_FLAGS_FILE_CREATE | FileLockType::WRITE_LOCK;
+ FileSystem::TrustedContext trusted3(fs);
handle = fs.OpenFile(file_name, flags);
}
-
+ FileSystem::TrustedContext trusted4(fs);
ReleaseDirectoryCacheLock();
}
@@ -30,6 +32,7 @@ void CachedFile::GetDirectoryCacheLock(const string &cache_dir) {
FileOpenFlags flags = FileFlags::FILE_FLAGS_WRITE | FileFlags::FILE_FLAGS_FILE_CREATE |
FileFlags::FILE_FLAGS_EXCLUSIVE_CREATE | FileFlags::FILE_FLAGS_NULL_IF_EXISTS |
FileLockType::WRITE_LOCK;
+ FileSystem::TrustedContext trusted(fs);
directory_lock_handle = fs.OpenFile(lock_file, flags);
if (directory_lock_handle == nullptr) {
flags = FileFlags::FILE_FLAGS_WRITE | FileLockType::WRITE_LOCK;
@@ -52,6 +55,7 @@ void CachedFileHandle::WriteMetadata(const string &cache_key, const string &remo
D_ASSERT(!file->initialized);
string metadata_file_name = file->cache_directory + "/" + cache_key + ".meta";
FileOpenFlags flags = FileFlags::FILE_FLAGS_WRITE | FileFlags::FILE_FLAGS_FILE_CREATE | FileLockType::WRITE_LOCK;
+ FileSystem::TrustedContext trusted(file->fs);
auto handle = file->fs.OpenFile(metadata_file_name, flags);
auto cached_file_timestamp = std::chrono::system_clock::to_time_t(std::chrono::system_clock::now());
string metadata_info = cache_key + "," + remote_path + "," + std::to_string(total_size) + "," + std::to_string(cached_file_timestamp);
@@ -66,6 +70,7 @@ void CachedFileHandle::SetInitialized(idx_t total_size) {
file->initialized = true;
file->handle->Close();
FileOpenFlags flags = FileFlags::FILE_FLAGS_READ | FileLockType::READ_LOCK;
+ FileSystem::TrustedContext trusted(file->fs);
file->handle = file->fs.OpenFile(file->file_name, flags);
}
@@ -93,6 +98,7 @@ void CachedFileHandle::Read(void *buffer, idx_t length, idx_t offset) {
//! Get cache entry, create if not exists only if caching is enabled
shared_ptr<CachedFile> HTTPFileCache::GetCachedFile(const string &cache_dir, const string &key, bool cache_file) {
lock_guard<mutex> lock(cached_files_mutex);
+ FileSystem::TrustedContext trusted(db->GetFileSystem());
auto it = cached_files.find(key);
if (it != cached_files.end()) {
return it->second;