diff options
author | Luke Chen <luke.chen@mongodb.com> | 2023-02-14 17:28:42 +1100 |
---|---|---|
committer | Evergreen Agent <no-reply@evergreen.mongodb.com> | 2023-02-14 07:13:05 +0000 |
commit | f9310b523138aa8a79b61797a42748df006cf1b8 (patch) | |
tree | 445d2b8b257c215dad4d0804c2c5db8ba3854411 | |
parent | 454536803d1180ba9158213bb224fbe97c626bd1 (diff) | |
download | mongo-f9310b523138aa8a79b61797a42748df006cf1b8.tar.gz |
Import wiredtiger: bae8f543f197266fc0ced7b96fdb0dce39c7059e from branch mongodb-master
ref: 76565921db..bae8f543f1
for: 7.0.0-rc0
WT-10596 Implement object size() for Azure Storage Source
5 files changed, 29 insertions, 17 deletions
diff --git a/src/third_party/wiredtiger/ext/storage_sources/azure_store/azure_connection.cpp b/src/third_party/wiredtiger/ext/storage_sources/azure_store/azure_connection.cpp index dfd1934653a..4cc76df1498 100644 --- a/src/third_party/wiredtiger/ext/storage_sources/azure_store/azure_connection.cpp +++ b/src/third_party/wiredtiger/ext/storage_sources/azure_store/azure_connection.cpp @@ -170,7 +170,6 @@ azure_connection::object_exists( exists = false; std::string obj = _bucket_prefix + object_key; object_size = 0; - std::string obj = _object_prefix + object_key; auto list_blob_response = _azure_client.ListBlobs(); diff --git a/src/third_party/wiredtiger/ext/storage_sources/azure_store/azure_storage_source.cpp b/src/third_party/wiredtiger/ext/storage_sources/azure_store/azure_storage_source.cpp index 2f9d597959f..cac0ba75252 100644 --- a/src/third_party/wiredtiger/ext/storage_sources/azure_store/azure_storage_source.cpp +++ b/src/third_party/wiredtiger/ext/storage_sources/azure_store/azure_storage_source.cpp @@ -402,7 +402,8 @@ azure_file_system_exists( WT_UNUSED(session); WT_UNUSED(size); - WT_DECL_RET; + + int ret; std::cout << "azure_file_system_exists: Checking object: " << name << " exists in Azure." << std::endl; @@ -455,10 +456,21 @@ static int azure_object_size( WT_FILE_SYSTEM *file_system, WT_SESSION *session, const char *name, wt_off_t *sizep) { - WT_UNUSED(file_system); + azure_file_system *azure_fs = reinterpret_cast<azure_file_system *>(file_system); + WT_UNUSED(session); - WT_UNUSED(name); - WT_UNUSED(sizep); + + int ret; + bool exists; + size_t size = 0; + *sizep = 0; + + if ((ret = azure_fs->azure_conn->object_exists(name, exists, size)) != 0) { + std::cerr << "azure_object_size: object_exists request to Azure failed." << std::endl; + return ret; + } + + *sizep = size; return 0; } @@ -613,15 +625,13 @@ static int azure_file_size(WT_FILE_HANDLE *file_handle, WT_SESSION *session, wt_off_t *sizep) { azure_file_handle *azure_fh = reinterpret_cast<azure_file_handle *>(file_handle); - int ret; + WT_DECL_RET; bool exists; size_t size = 0; *sizep = 0; - WT_UNUSED(exists); - if ((ret = azure_fh->fs->azure_conn->object_exists(azure_fh->name, exists, size)) != 0) { - std::cerr << "azure_file_open: object_exists request to Azure failed." << std::endl; + std::cerr << "azure_file_size: object_exists request to Azure failed." << std::endl; return ret; } diff --git a/src/third_party/wiredtiger/ext/storage_sources/azure_store/test/test_azure_connection.cpp b/src/third_party/wiredtiger/ext/storage_sources/azure_store/test/test_azure_connection.cpp index 8879720572c..5ba97a23da3 100644 --- a/src/third_party/wiredtiger/ext/storage_sources/azure_store/test/test_azure_connection.cpp +++ b/src/third_party/wiredtiger/ext/storage_sources/azure_store/test/test_azure_connection.cpp @@ -107,7 +107,7 @@ TEST_CASE("Testing Azure Connection Class", "azure-connection") // Object exists so there should be 1 object. REQUIRE(conn.object_exists(object_name, exists, object_size) == 0); REQUIRE(exists == true); - auto blob_client = azure_client.GetBlockBlobClient(obj_prefix + object_name); + auto blob_client = azure_client.GetBlockBlobClient(bucket_prefix + object_name); auto blob_properties = blob_client.GetProperties(); size_t blob_size = blob_properties.Value.BlobSize; REQUIRE(object_size == blob_size); diff --git a/src/third_party/wiredtiger/import.data b/src/third_party/wiredtiger/import.data index d8c420185d7..56a02a3ae3b 100644 --- a/src/third_party/wiredtiger/import.data +++ b/src/third_party/wiredtiger/import.data @@ -2,5 +2,5 @@ "vendor": "wiredtiger", "github": "wiredtiger/wiredtiger.git", "branch": "mongodb-master", - "commit": "76565921db043f58037ebb9319545abfc99c1742" + "commit": "bae8f543f197266fc0ced7b96fdb0dce39c7059e" } diff --git a/src/third_party/wiredtiger/test/suite/test_tiered19.py b/src/third_party/wiredtiger/test/suite/test_tiered19.py index 0f72987f554..151d198543e 100644 --- a/src/third_party/wiredtiger/test/suite/test_tiered19.py +++ b/src/third_party/wiredtiger/test/suite/test_tiered19.py @@ -196,7 +196,7 @@ class test_tiered19(wttest.WiredTigerTestCase, TieredConfigMixin): self.assertEqual(ss.ss_flush_finish(session, azure_fs, 'foobar', 'foobar', None), 0) # The object exists now. - self.assertEquals(azure_fs.fs_directory_list(session, '', prefix_1), [prefix_1 + 'foobar']) + self.assertEquals(azure_fs.fs_directory_list(session, None, None), [prefix_1 + 'foobar']) try: exists = azure_fs.fs_exist(session, 'foobar') except: @@ -252,18 +252,18 @@ class test_tiered19(wttest.WiredTigerTestCase, TieredConfigMixin): self.assertEqual(ss.ss_flush_finish(session, azure_fs, 'non_existing_file', 'non_existing_file', None), 0) # Test that the no new objects exist after failed flush. - self.assertEquals(azure_fs.fs_directory_list(session, '', prefix_1), [prefix_1 + 'foobar']) + self.assertEquals(azure_fs.fs_directory_list(session, None, None), [prefix_1 + 'foobar']) err_msg = '/Exception: Operation not supported/' # Test that POSIX Remove and Rename are not supported. self.assertRaisesHavingMessage(wiredtiger.WiredTigerError, lambda: azure_fs.fs_remove(session, 'foobar', 0), err_msg) - self.assertEquals(azure_fs.fs_directory_list(session, '', prefix_1), [prefix_1 + 'foobar']) + self.assertEquals(azure_fs.fs_directory_list(session, None, None), [prefix_1 + 'foobar']) self.assertRaisesHavingMessage(wiredtiger.WiredTigerError, lambda: azure_fs.fs_rename(session, 'foobar', 'foobar2', 0), err_msg) - self.assertEquals(azure_fs.fs_directory_list(session, '', prefix_1), [prefix_1 + 'foobar']) + self.assertEquals(azure_fs.fs_directory_list(session, None, None), [prefix_1 + 'foobar']) # Flush second valid file into Azure. self.assertEqual(ss.ss_flush(session, azure_fs, 'foobar', 'foobar2', None), 0) @@ -271,10 +271,13 @@ class test_tiered19(wttest.WiredTigerTestCase, TieredConfigMixin): self.assertEqual(ss.ss_flush_finish(session, azure_fs, 'foobar', 'foobar2', None), 0) # Directory list should show 2 objects in Azure. - self.assertEquals(azure_fs.fs_directory_list(session, '', prefix_1), [prefix_1 + 'foobar', prefix_1 + 'foobar2']) + self.assertEquals(azure_fs.fs_directory_list(session, None, None), [prefix_1 + 'foobar', prefix_1 + 'foobar2']) # Directory list single should show 1 object. - self.assertEquals(azure_fs.fs_directory_list_single(session, '', prefix_1), [prefix_1 + 'foobar']) + self.assertEquals(azure_fs.fs_directory_list_single(session, None, None), [prefix_1 + 'foobar']) + + # Verify that file system size returns the size in bytes of the 'foobar' object. + self.assertEquals(azure_fs.fs_size(session, 'foobar'), len(outbytes)) # Open existing file in the cloud. Only one active file handle exists for each open file. # A reference count keeps track of open file instances so we can get a pointer to the same |