/** * Copyright 2019 Huawei Technologies Co., Ltd * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef DATASET_UTIL_STORAGE_MANAGER_H_ #define DATASET_UTIL_STORAGE_MANAGER_H_ #include #include #include #include #include #include "dataset/util/allocator.h" #include "dataset/util/auto_index.h" #include "dataset/util/lock.h" #include "dataset/util/memory_pool.h" #include "dataset/util/path.h" #include "dataset/util/service.h" #include "dataset/util/slice.h" #include "dataset/util/storage_container.h" using ListOfContainers = std::vector>; namespace mindspore { namespace dataset { class StorageManager : public Service { public: using storage_index = AutoIndexObj>>; using key_type = storage_index::key_type; using value_type = storage_index::value_type; explicit StorageManager(const Path &); ~StorageManager() override; StorageManager(const StorageManager &) = delete; StorageManager &operator=(const StorageManager &) = delete; Status Write(key_type *out_key, const std::vector &buf); Status Read(key_type key, WritableSlice *dest, size_t *bytesRead) const; Status DoServiceStart() override; Status DoServiceStop() noexcept override; friend std::ostream &operator<<(std::ostream &os, const StorageManager &s); private: Path root_; ListOfContainers containers_; int file_id_; RWLock rw_lock_; storage_index index_; std::string GetBaseName(const std::string &prefix, int32_t file_id); std::string ConstructFileName(const std::string &prefix, int32_t file_id, const std::string &suffix); Status AddOneContainer(); }; } // namespace dataset } // namespace mindspore #endif // DATASET_UTIL_STORAGE_MANAGER_H_