[Groonga-commit] groonga/grnxx at 01fbb69 [master] Improve error handling.

Back to archive index

susumu.yata null+****@clear*****
Fri Jun 7 11:16:47 JST 2013


susumu.yata	2013-06-07 11:16:47 +0900 (Fri, 07 Jun 2013)

  New Revision: 01fbb69683e255322edbacb5710c9a4ea5de1797
  https://github.com/groonga/grnxx/commit/01fbb69683e255322edbacb5710c9a4ea5de1797

  Message:
    Improve error handling.

  Modified files:
    lib/grnxx/map/hash_table.cpp

  Modified: lib/grnxx/map/hash_table.cpp (+11 -6)
===================================================================
--- lib/grnxx/map/hash_table.cpp    2013-06-07 11:09:06 +0900 (c874bc2)
+++ lib/grnxx/map/hash_table.cpp    2013-06-07 11:16:47 +0900 (0d42811)
@@ -367,10 +367,6 @@ bool HashTable<T>::truncate() {
     // Nothing to do.
     return true;
   }
-  header_->max_key_id = MAP_MIN_KEY_ID - 1;
-  header_->num_keys = 0;
-  header_->num_key_ids = 0;
-  header_->latest_link = INVALID_LINK;
   std::unique_ptr<KeyIDArray> new_key_ids(
       KeyIDArray::create(storage_, storage_node_id_,
                          KeyIDArray::page_size() - 1));
@@ -379,8 +375,16 @@ bool HashTable<T>::truncate() {
     return false;
   }
   if (header_->old_key_ids_storage_node_id != STORAGE_INVALID_NODE_ID) {
-    storage_->unlink_node(header_->old_key_ids_storage_node_id);
+    if (!KeyIDArray::unlink(storage_, header_->old_key_ids_storage_node_id)) {
+      // Error.
+      KeyIDArray::unlink(storage_, new_key_ids->storage_node_id());
+      return false;
+    }
   }
+  header_->max_key_id = MAP_MIN_KEY_ID - 1;
+  header_->num_keys = 0;
+  header_->num_key_ids = 0;
+  header_->latest_link = INVALID_LINK;
   header_->old_key_ids_storage_node_id = header_->key_ids_storage_node_id;
   header_->key_ids_storage_node_id = new_key_ids->storage_node_id();
   Lock lock(&header_->mutex);
@@ -571,10 +575,11 @@ bool HashTable<T>::rebuild() {
   }
   if (key_id <= max_key_id()) {
     // Error.
+    KeyIDArray::unlink(storage_, new_key_ids->storage_node_id());
     return false;
   }
   if (header_->old_key_ids_storage_node_id != STORAGE_INVALID_NODE_ID) {
-    storage_->unlink_node(header_->old_key_ids_storage_node_id);
+    KeyIDArray::unlink(storage_, header_->old_key_ids_storage_node_id);
   }
   header_->old_key_ids_storage_node_id = header_->key_ids_storage_node_id;
   header_->key_ids_storage_node_id = new_key_ids->storage_node_id();
-------------- next part --------------
HTML����������������������������...
Download 



More information about the Groonga-commit mailing list
Back to archive index