@@ -337,42 +337,42 @@ std::string_view InMemoryCatalog::name() const { return catalog_name_; }
337337
338338Status InMemoryCatalog::CreateNamespace (
339339 const Namespace& ns, const std::unordered_map<std::string, std::string>& properties) {
340- std::lock_guard guard (mutex_);
340+ std::unique_lock lock (mutex_);
341341 return root_namespace_->CreateNamespace (ns, properties);
342342}
343343
344344Result<std::unordered_map<std::string, std::string>>
345345InMemoryCatalog::GetNamespaceProperties (const Namespace& ns) const {
346- std::lock_guard guard (mutex_);
346+ std::shared_lock lock (mutex_);
347347 return root_namespace_->GetProperties (ns);
348348}
349349
350350Result<std::vector<Namespace>> InMemoryCatalog::ListNamespaces (
351351 const Namespace& ns) const {
352- std::lock_guard guard (mutex_);
352+ std::shared_lock lock (mutex_);
353353 return root_namespace_->ListNamespaces (ns);
354354}
355355
356356Status InMemoryCatalog::DropNamespace (const Namespace& ns) {
357- std::lock_guard guard (mutex_);
357+ std::unique_lock lock (mutex_);
358358 return root_namespace_->DropNamespace (ns);
359359}
360360
361361Result<bool > InMemoryCatalog::NamespaceExists (const Namespace& ns) const {
362- std::lock_guard guard (mutex_);
362+ std::shared_lock lock (mutex_);
363363 return root_namespace_->NamespaceExists (ns);
364364}
365365
366366Status InMemoryCatalog::UpdateNamespaceProperties (
367367 const Namespace& ns, const std::unordered_map<std::string, std::string>& updates,
368368 const std::unordered_set<std::string>& removals) {
369- std::lock_guard guard (mutex_);
369+ std::unique_lock lock (mutex_);
370370 return root_namespace_->UpdateNamespaceProperties (ns, updates, removals);
371371}
372372
373373Result<std::vector<TableIdentifier>> InMemoryCatalog::ListTables (
374374 const Namespace& ns) const {
375- std::lock_guard guard (mutex_);
375+ std::shared_lock lock (mutex_);
376376 const auto & table_names = root_namespace_->ListTables (ns);
377377 ICEBERG_RETURN_UNEXPECTED (table_names);
378378 std::vector<TableIdentifier> table_idents;
@@ -387,36 +387,40 @@ Result<std::unique_ptr<Table>> InMemoryCatalog::CreateTable(
387387 const TableIdentifier& identifier, const Schema& schema, const PartitionSpec& spec,
388388 const std::string& location,
389389 const std::unordered_map<std::string, std::string>& properties) {
390+ std::unique_lock lock (mutex_);
390391 return NotImplemented (" create table" );
391392}
392393
393394Result<std::unique_ptr<Table>> InMemoryCatalog::UpdateTable (
394395 const TableIdentifier& identifier,
395396 const std::vector<std::unique_ptr<TableRequirement>>& requirements,
396397 const std::vector<std::unique_ptr<TableUpdate>>& updates) {
398+ std::unique_lock lock (mutex_);
397399 return NotImplemented (" update table" );
398400}
399401
400402Result<std::shared_ptr<Transaction>> InMemoryCatalog::StageCreateTable (
401403 const TableIdentifier& identifier, const Schema& schema, const PartitionSpec& spec,
402404 const std::string& location,
403405 const std::unordered_map<std::string, std::string>& properties) {
406+ std::unique_lock lock (mutex_);
404407 return NotImplemented (" stage create table" );
405408}
406409
407410Result<bool > InMemoryCatalog::TableExists (const TableIdentifier& identifier) const {
408- std::lock_guard guard (mutex_);
411+ std::shared_lock lock (mutex_);
409412 return root_namespace_->TableExists (identifier);
410413}
411414
412415Status InMemoryCatalog::DropTable (const TableIdentifier& identifier, bool purge) {
413- std::lock_guard guard (mutex_);
416+ std::unique_lock lock (mutex_);
414417 // TODO(Guotao): Delete all metadata files if purge is true.
415418 return root_namespace_->UnregisterTable (identifier);
416419}
417420
418421Status InMemoryCatalog::RenameTable (const TableIdentifier& from,
419422 const TableIdentifier& to) {
423+ std::unique_lock lock (mutex_);
420424 return NotImplemented (" rename table" );
421425}
422426
@@ -428,7 +432,7 @@ Result<std::unique_ptr<Table>> InMemoryCatalog::LoadTable(
428432
429433 Result<std::string> metadata_location;
430434 {
431- std::lock_guard guard (mutex_);
435+ std::shared_lock lock (mutex_);
432436 ICEBERG_ASSIGN_OR_RAISE (metadata_location,
433437 root_namespace_->GetTableMetadataLocation (identifier));
434438 }
@@ -443,7 +447,7 @@ Result<std::unique_ptr<Table>> InMemoryCatalog::LoadTable(
443447
444448Result<std::shared_ptr<Table>> InMemoryCatalog::RegisterTable (
445449 const TableIdentifier& identifier, const std::string& metadata_file_location) {
446- std::lock_guard guard (mutex_);
450+ std::unique_lock lock (mutex_);
447451 if (!root_namespace_->NamespaceExists (identifier.ns )) {
448452 return NoSuchNamespace (" table namespace does not exist." );
449453 }
0 commit comments