@@ -184,51 +184,34 @@ TEST_CASE_METHOD(
184184
185185TEST_CASE_METHOD (
186186 CPPMetadataFx,
187- " C++ API: Metadata write / read at timestamp smr " ,
188- " [cppapi][metadata][timestamp][smr ]" ) {
187+ " C++ API: Metadata write / read multithread " ,
188+ " [cppapi][metadata][multithread ]" ) {
189189 create_default_array_1d ();
190190 Context ctx;
191-
192- std::vector<uint64_t > a (100 );
193- std::iota (a.begin (), a.end (), 0 );
194- std::vector<uint64_t > b (1000 );
195- std::iota (b.begin (), b.end (), 0 );
196-
197- const auto tp = TemporalPolicy (TimestampStartEnd, 0 , 1 );
198- std::latch latch (2 );
199- std::string meta[]{" a" , " b" , " c" , " d" , " e" , " f" };
200- Array array1 (ctx, std::string (array_name_), TILEDB_WRITE, tp);
201- array1.put_metadata (" a" , TILEDB_UINT64, 100 , a.data ());
202- array1.close ();
203-
204- Array array (ctx, std::string (array_name_), TILEDB_WRITE, tp);
205- std::thread t1 ([&]() {
206- for (const auto & x : meta) {
207- array.put_metadata (x, TILEDB_UINT64, 1000 , b.data ());
208- }
209- latch.count_down ();
210- array.close ();
211- });
212-
213- std::thread t2 ([&]() {
214- latch.arrive_and_wait ();
215- Array read_array (ctx, std::string (array_name_), TILEDB_READ, tp);
216-
217- for (const auto & x : meta) {
191+ for (int i = 1 ; i <= 100 ; i++) {
192+ // Grow the size of metadata each write.
193+ std::vector<uint64_t > b (100 * i);
194+ std::iota (b.begin (), b.end (), 0 );
195+ std::latch get_metadata (2 );
196+ std::thread t1 ([&]() {
197+ Array array (ctx, std::string (array_name_), TILEDB_WRITE);
198+ array.put_metadata (" a" , TILEDB_UINT64, b.size (), b.data ());
199+ get_metadata.count_down ();
200+ array.close ();
201+ });
202+
203+ std::thread t2 ([&]() {
204+ get_metadata.arrive_and_wait ();
205+ Array read_array (ctx, std::string (array_name_), TILEDB_READ);
218206 tiledb_datatype_t type;
219207 uint32_t value_num = 0 ;
220208 const void * data;
221- read_array.get_metadata (x, &type, &value_num, &data);
222- std::cout << " 'value_num':" << value_num << std::endl;
223- std::cout << " '" << x << " ': " ;
224- for (size_t i = 0 ; i < value_num; ++i) {
225- std::cout << ((const uint64_t *)data)[i] << " ," ;
226- }
227- std::cout << std::endl;
228- }
229- read_array.close ();
230- });
231- t1.join (), t2.join ();
209+ read_array.get_metadata (" a" , &type, &value_num, &data);
210+ read_array.close ();
211+ });
212+
213+ t1.join (), t2.join ();
214+ }
232215}
233216
234217TEST_CASE_METHOD (
0 commit comments