From 8d19933d27d030d6d63ba21a5ea7648ee975a433 Mon Sep 17 00:00:00 2001 From: Brian Szmyd Date: Mon, 18 Sep 2023 19:48:00 -0700 Subject: [PATCH 1/5] Some improvements to the README. --- .gitignore | 3 -- .gitmodules | 0 README.md | 62 +++++++++++++++++++++++++++++++--------- sonar-project.properties | 14 --------- 4 files changed, 49 insertions(+), 30 deletions(-) delete mode 100644 .gitmodules delete mode 100644 sonar-project.properties diff --git a/.gitignore b/.gitignore index 4a5b064b0..97b58ba32 100644 --- a/.gitignore +++ b/.gitignore @@ -105,6 +105,3 @@ cmake-*/** # Visual Studio CMakeSettings.json .vs/** - -# Ignore Flip -src/Flip/** diff --git a/.gitmodules b/.gitmodules deleted file mode 100644 index e69de29bb..000000000 diff --git a/README.md b/README.md index 264b05c5a..52b650235 100644 --- a/README.md +++ b/README.md @@ -2,22 +2,53 @@ [![Conan Build](https://github.com/eBay/HomeStore/actions/workflows/merge_build.yml/badge.svg?branch=master)](https://github.com/eBay/HomeStore/actions/workflows/merge_build.yml) [![CodeCov](https://codecov.io/gh/eBay/homestore/branch/master/graph/badge.svg)](https://codecov.io/gh/eBay/homestore) -Homestore is a generic storage engine upon which different storage solutions, like block store, key/value stores, object stores, databases can be built. This storage engine architecture is tuned towards modern storage devices and systems programming to provide ultra high performance. It has a pluggable model throughout to make it easy to extend the functionality to tune to specific use cases or data patterns. This document tries to explain what is the motivation to create another storage engine among an already impressive array of engines. +Homestore is a generic *StorageEngine* upon which different *StorageSolution*s can be built. These Solutions can model +Block, K/V, Object or Database *StorageInterface*s. -More details to follow.... +The architecture is tuned towards modern storage devices and systems programming leveraging the "run to complete" model +provide by [IOManager](https://github.com/eBay/IOManager) to provide maximum performance. Homestore has a pluggable +model throughout making it easy to extend the functionality to tune to specific use cases or data patterns. + +A reference Object *StorageSolution* can be found in [HomeObject](https://github.com/eBay/HomeObject). + +## Building Blocks +Several building blocks are provided by Homestore that should satisfy the majority cases for custom any given storage +solution. Each "service" provides a crash-resilient and persistent form of familiar data structures. + +### MetaSvc (Map) +// TODO + +### DataSvc (Heap) +// TODO + +### IndexSvc (HashMap) +// TODO + +### LogSvc (Circular Buffer) +// TODO ## Building -### prerequires +### System Pre-requisites +* CMake 3.13 or later +* conan 1.x (`pipx install conan~=1`) +* libaio-dev (assuming Ubuntu) +* uuid-dev (assuming Ubuntu) + +### Dependencies +* SISL +``` +$ git clone https://github.com/eBay/sisl +$ cd sisl & ./prepare.sh && conan export . oss/master +``` + +* IOManager ``` -camke 3.13 or later -conan 1.5x.0 (pip install --user conan==1.59.0) -libjemalloc-dev -libaio-dev -uuid-dev +$ git clone https://github.com/eBay/iomanager +$ cd iomanager & ./prepare.sh && conan export . oss/master ``` -Assuming the conan setup is already done -### build + +### Compilation ``` $ mkdir build $ cd build @@ -32,8 +63,10 @@ $ conan install -u -b missing .. # Build the libhomestore.a $ conan build .. ``` + ## Contributing to This Project -We welcome contributions. If you find any bugs, potential flaws and edge cases, improvements, new feature suggestions or discussions, please submit issues or pull requests. +We welcome contributions. If you find any bugs, potential flaws and edge cases, improvements, new feature suggestions or +discussions, please submit issues or pull requests. Contact Harihara Kadayam hkadayam@ebay.com @@ -44,6 +77,9 @@ Copyright 2021 eBay Inc. Primary Author: Harihara Kadayam Primary Developers: Harihara Kadayam, Rishabh Mittal, Yaming Kuang, Brian Szmyd -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 https://www.apache.org/licenses/LICENSE-2.0. +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 https://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 CONDITHomeStore OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. +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 CONDITHomeStore OF ANY KIND, either express or implied. See the License for the +specific language governing permissions and limitations under the License. diff --git a/sonar-project.properties b/sonar-project.properties deleted file mode 100644 index 70ae29c59..000000000 --- a/sonar-project.properties +++ /dev/null @@ -1,14 +0,0 @@ -sonar.projectKey=sds:homestore -sonar.projectName=SDS HomeStore - -sonar.coverageReportPaths=coverage.xml -sonar.scm.enabled=true -sonar.host.url=https://sonar-01-es.vip.es.ebay.com -sonar.sourceEncoding=UTF-8 -sonar.cfamily.build-wrapper-output=/tmp/sonar -sonar.cfamily.gcov.reportsPath=/home/jenkins -sonar.cfamily.threads=8 -sonar.cfamily.cache.enabled=false -sonar.verbose=false -sonar.sources=src -sonar.exclusions=src/engine/homeds/loadgen/**/*,src/engine/homeds/tests/**/*,**/*.json,**/test_*.cpp,**/*_gtest.cpp,**/*.py,**/btree_checker.cpp,**/perf_cache.cpp, src/engine/homeds/tests/*,src/homeblks/generated/*, src/engine/common/generated/*, src/homeblks/homeblks_http_server.cpp, src/engine/homeds/memory/chunk_allocator.hpp, src/engine/homeds/memory/composite_allocator.hpp, src/test_common/bits_generator.hpp, src/homeblks/volume/tests/*, src/engine/homeds/thread/threadpool/thread_safe_queue.h, src/engine/homeds/array/*, src/engine/index/indx_mgr_test.cpp, src/engin/blkstore/test_*, src/engine/blkalloc/test_*, src/engine/device/tests/*, src/engine/meta/test_*, src/homelogstore/tests/* From 3ca90e1d4c9b29803e329784fe161d71085892f9 Mon Sep 17 00:00:00 2001 From: Brian Szmyd Date: Tue, 19 Sep 2023 16:29:09 -0700 Subject: [PATCH 2/5] More text. --- README.md | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index 52b650235..6f0f71575 100644 --- a/README.md +++ b/README.md @@ -12,20 +12,24 @@ model throughout making it easy to extend the functionality to tune to specific A reference Object *StorageSolution* can be found in [HomeObject](https://github.com/eBay/HomeObject). ## Building Blocks -Several building blocks are provided by Homestore that should satisfy the majority cases for custom any given storage +Several building blocks are provided by Homestore that should satisfy the majority cases for any given storage solution. Each "service" provides a crash-resilient and persistent form of familiar data structures. -### MetaSvc (Map) -// TODO +### MetaSvc (std::map) +K/V store that avoids _torn pages_. Used to store recovery information (e.g. Superblocks) to re-initialize application +state after reboot. -### DataSvc (Heap) -// TODO +### DataSvc (new/delete) +Free flat-allocation space. Hooks are provided if a particular allocation pattern (e.g. Heap) is desirable. -### IndexSvc (HashMap) -// TODO +### IndexSvc (std::unordered_map) +A B+Tree used to optimize for *FAST* Reads. Value is typically the result of allocation from the DataSvc. -### LogSvc (Circular Buffer) -// TODO +### LogSvc (std::list) +Random Access ciruclar buffer. Typically not used directly but levaraged by other Services to provide crash-resiliency. + +### ReplicationSvc +An abstraction on DataSvc that replicates between application instances. ## Building From 43f5ff44423601321fb84a4274335fbd35981a26 Mon Sep 17 00:00:00 2001 From: Brian Szmyd Date: Tue, 19 Sep 2023 21:09:13 -0700 Subject: [PATCH 3/5] Developer links --- README.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 6f0f71575..cdb796904 100644 --- a/README.md +++ b/README.md @@ -79,7 +79,10 @@ Harihara Kadayam hkadayam@ebay.com Copyright 2021 eBay Inc. Primary Author: Harihara Kadayam -Primary Developers: Harihara Kadayam, Rishabh Mittal, Yaming Kuang, Brian Szmyd +Primary Developers: +[Harihara Kadayam](https://github.com/hkadayam), +[Yaming Kuang](https://github.com/yamingk), +[Brian Szmyd](https://github.com/szmyd) 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 https://www.apache.org/licenses/LICENSE-2.0. From 09fe9d2a43d01489d618202e52d0faf8ee08908b Mon Sep 17 00:00:00 2001 From: Brian Szmyd Date: Tue, 19 Sep 2023 21:10:17 -0700 Subject: [PATCH 4/5] Add space --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index cdb796904..acb274f2c 100644 --- a/README.md +++ b/README.md @@ -79,6 +79,7 @@ Harihara Kadayam hkadayam@ebay.com Copyright 2021 eBay Inc. Primary Author: Harihara Kadayam + Primary Developers: [Harihara Kadayam](https://github.com/hkadayam), [Yaming Kuang](https://github.com/yamingk), From b3ae4f16e9bc8639cde487b088c0430fa78fcf63 Mon Sep 17 00:00:00 2001 From: Brian Szmyd Date: Tue, 19 Sep 2023 21:15:28 -0700 Subject: [PATCH 5/5] Add diagram --- README.md | 4 ++++ docs/imgs/HomeStore.png | Bin 0 -> 50308 bytes 2 files changed, 4 insertions(+) create mode 100644 docs/imgs/HomeStore.png diff --git a/README.md b/README.md index acb274f2c..08517eb67 100644 --- a/README.md +++ b/README.md @@ -31,6 +31,10 @@ Random Access ciruclar buffer. Typically not used directly but levaraged by othe ### ReplicationSvc An abstraction on DataSvc that replicates between application instances. +## Application Diagram + +![HomeObject Overview](docs/imgs/HomeStore.png) + ## Building ### System Pre-requisites diff --git a/docs/imgs/HomeStore.png b/docs/imgs/HomeStore.png new file mode 100644 index 0000000000000000000000000000000000000000..97f0e64767b158477aa3b2155adcfadb837942ac GIT binary patch literal 50308 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