susumu.yata
null+****@clear*****
Wed Jul 10 18:36:55 JST 2013
susumu.yata 2013-07-10 18:36:55 +0900 (Wed, 10 Jul 2013) New Revision: 434f659e447aa63be649322e2abf89e308cf8645 https://github.com/groonga/grnxx/commit/434f659e447aa63be649322e2abf89e308cf8645 Message: Update grnxx::Storage::unlink(). Throw an exception on failure. Modified files: lib/grnxx/storage.cpp lib/grnxx/storage.hpp lib/grnxx/storage/storage_impl.cpp lib/grnxx/storage/storage_impl.hpp test/test_storage.cpp Modified: lib/grnxx/storage.cpp (+2 -2) =================================================================== --- lib/grnxx/storage.cpp 2013-07-10 18:13:34 +0900 (6e99095) +++ lib/grnxx/storage.cpp 2013-07-10 18:36:55 +0900 (07daccf) @@ -158,8 +158,8 @@ bool Storage::exists(const char *path) { return storage::StorageImpl::exists(path); } -bool Storage::unlink(const char *path) { - return storage::StorageImpl::unlink(path); +void Storage::unlink(const char *path) { + storage::StorageImpl::unlink(path); } } // namespace grnxx Modified: lib/grnxx/storage.hpp (+2 -2) =================================================================== --- lib/grnxx/storage.hpp 2013-07-10 18:13:34 +0900 (64dbb31) +++ lib/grnxx/storage.hpp 2013-07-10 18:36:55 +0900 (49003e7) @@ -148,8 +148,8 @@ class Storage { // Return true iff "path" refers to a valid storage. static bool exists(const char *path); - // Remove a storage and return true on success. - static bool unlink(const char *path); + // Remove a storage. + static void unlink(const char *path); // Create a node of at least "size" bytes under the specified parent node. virtual StorageNode create_node(uint32_t parent_node_id, uint64_t size) = 0; Modified: lib/grnxx/storage/storage_impl.cpp (+3 -11) =================================================================== --- lib/grnxx/storage/storage_impl.cpp 2013-07-10 18:13:34 +0900 (5a2b648) +++ lib/grnxx/storage/storage_impl.cpp 2013-07-10 18:36:55 +0900 (6c7b949) @@ -156,16 +156,13 @@ bool StorageImpl::exists(const char *path) { return true; } -bool StorageImpl::unlink(const char *path) { +void StorageImpl::unlink(const char *path) { if (!path) { GRNXX_ERROR() << "invalid argument: path = nullptr"; throw LogicError(); } - if (!File::exists(path)) { - return false; - } std::unique_ptr<StorageImpl> storage(open(path, STORAGE_READ_ONLY)); - return storage->unlink_storage(); + storage->unlink_storage(); } StorageNode StorageImpl::create_node(uint32_t parent_node_id, uint64_t size) { @@ -474,11 +471,7 @@ void StorageImpl::open_or_create_storage(const char *path, StorageFlags flags, } } -bool StorageImpl::unlink_storage() { - if (flags_ & (STORAGE_ANONYMOUS | STORAGE_TEMPORARY)) { - // Nothing to do. - return false; - } +void StorageImpl::unlink_storage() { const uint16_t max_file_id = static_cast<uint16_t>( header_->total_size / header_->max_file_size); File::unlink(path_.get()); @@ -487,7 +480,6 @@ bool StorageImpl::unlink_storage() { std::unique_ptr<char[]> numbered_path(generate_path(i)); File::unlink(numbered_path.get()); } - return true; } void StorageImpl::prepare_pointers() { Modified: lib/grnxx/storage/storage_impl.hpp (+2 -2) =================================================================== --- lib/grnxx/storage/storage_impl.hpp 2013-07-10 18:13:34 +0900 (8ed0910) +++ lib/grnxx/storage/storage_impl.hpp 2013-07-10 18:36:55 +0900 (9987e97) @@ -52,7 +52,7 @@ class StorageImpl : public Storage { const StorageOptions &options); static bool exists(const char *path); - static bool unlink(const char *path); + static void unlink(const char *path); StorageNode create_node(uint32_t parent_node_id, uint64_t size); StorageNode open_node(uint32_t node_id); @@ -91,7 +91,7 @@ class StorageImpl : public Storage { void open_storage(const char *path, StorageFlags flags); void open_or_create_storage(const char *path, StorageFlags flags, const StorageOptions &options); - bool unlink_storage(); + void unlink_storage(); void prepare_pointers(); void prepare_indexes(); Modified: test/test_storage.cpp (+21 -16) =================================================================== --- test/test_storage.cpp 2013-07-10 18:13:34 +0900 (9f7690f) +++ test/test_storage.cpp 2013-07-10 18:36:55 +0900 (a521233) @@ -324,9 +324,15 @@ void test_chunk_size() { assert(chunk->size() == (1 << 20)); } +void unlink_storage_if_exists(const char *path) { + if (grnxx::Storage::exists(path)) { + grnxx::Storage::unlink(path); + } +} + void test_storage_create() { const char FILE_PATH[] = "temp.grn"; - grnxx::Storage::unlink(FILE_PATH); + unlink_storage_if_exists(FILE_PATH); std::unique_ptr<grnxx::Storage> storage; storage.reset(grnxx::Storage::create(FILE_PATH)); @@ -336,24 +342,24 @@ void test_storage_create() { storage.reset(grnxx::Storage::create(nullptr, grnxx::STORAGE_TEMPORARY)); storage.reset(); - assert(grnxx::Storage::unlink(FILE_PATH)); + grnxx::Storage::unlink(FILE_PATH); } void test_storage_open() { const char FILE_PATH[] = "temp.grn"; - grnxx::Storage::unlink(FILE_PATH); + unlink_storage_if_exists(FILE_PATH); std::unique_ptr<grnxx::Storage> storage; storage.reset(grnxx::Storage::create(FILE_PATH)); storage.reset(grnxx::Storage::open(FILE_PATH)); storage.reset(); - assert(grnxx::Storage::unlink(FILE_PATH)); + grnxx::Storage::unlink(FILE_PATH); } void test_storage_open_or_create() { const char FILE_PATH[] = "temp.grn"; - grnxx::Storage::unlink(FILE_PATH); + unlink_storage_if_exists(FILE_PATH); std::unique_ptr<grnxx::Storage> storage; storage.reset(grnxx::Storage::open_or_create(FILE_PATH)); @@ -365,19 +371,18 @@ void test_storage_open_or_create() { void test_storage_exists_and_unlink() { const char FILE_PATH[] = "temp.grn"; - grnxx::Storage::unlink(FILE_PATH); + unlink_storage_if_exists(FILE_PATH); std::unique_ptr<grnxx::Storage> storage(grnxx::Storage::create(FILE_PATH)); storage.reset(); assert(grnxx::Storage::exists(FILE_PATH)); - assert(grnxx::Storage::unlink(FILE_PATH)); - assert(!grnxx::Storage::unlink(FILE_PATH)); + grnxx::Storage::unlink(FILE_PATH); assert(!grnxx::Storage::exists(FILE_PATH)); } void test_storage_create_node() { const char FILE_PATH[] = "temp.grn"; - grnxx::Storage::unlink(FILE_PATH); + unlink_storage_if_exists(FILE_PATH); std::unique_ptr<grnxx::Storage> storage; grnxx::StorageNode node; @@ -411,12 +416,12 @@ void test_storage_create_node() { // node = storage->create_node(-1, 1 << 16); // node = storage->create_node(grnxx::STORAGE_ROOT_NODE_ID, -1); - assert(grnxx::Storage::unlink(FILE_PATH)); + grnxx::Storage::unlink(FILE_PATH); } void test_storage_open_node() { const char FILE_PATH[] = "temp.grn"; - grnxx::Storage::unlink(FILE_PATH); + unlink_storage_if_exists(FILE_PATH); std::unique_ptr<grnxx::Storage> storage; grnxx::StorageNode node; std::uint32_t node_id_1, node_id_2; @@ -442,7 +447,7 @@ void test_storage_open_node() { assert(node.size() == (1 << 24)); storage.reset(); - assert(grnxx::Storage::unlink(FILE_PATH)); + grnxx::Storage::unlink(FILE_PATH); } void test_storage_unlink_node() { @@ -494,7 +499,7 @@ void test_storage_sweep() { void test_storage_path() { const char FILE_PATH[] = "temp.grn"; - grnxx::Storage::unlink(FILE_PATH); + unlink_storage_if_exists(FILE_PATH); std::unique_ptr<grnxx::Storage> storage; storage.reset(grnxx::Storage::create(FILE_PATH)); @@ -503,12 +508,12 @@ void test_storage_path() { storage.reset(grnxx::Storage::create(FILE_PATH, grnxx::STORAGE_TEMPORARY)); assert(std::strcmp(storage->path(), FILE_PATH) == 0); - assert(grnxx::Storage::unlink(FILE_PATH)); + grnxx::Storage::unlink(FILE_PATH); } void test_storage_flags() { const char FILE_PATH[] = "temp.grn"; - grnxx::Storage::unlink(FILE_PATH); + unlink_storage_if_exists(FILE_PATH); std::unique_ptr<grnxx::Storage> storage; storage.reset(grnxx::Storage::create(FILE_PATH)); @@ -520,7 +525,7 @@ void test_storage_flags() { storage.reset(grnxx::Storage::create(FILE_PATH, grnxx::STORAGE_TEMPORARY)); assert(storage->flags() == grnxx::STORAGE_TEMPORARY); - assert(grnxx::Storage::unlink(FILE_PATH)); + grnxx::Storage::unlink(FILE_PATH); } void test_storage_max_file_size() { -------------- next part -------------- HTML����������������������������...Download