Ceph的src/os 中保存了 ObjectStore代码实现。
基本概念
对象
对象存储的概念,把对象作为存储的实体。 在Ceph 文件系统里,对象的命名空间分了两层, 第一层是Collection的概念,一个Collection就是许多Object的集合,相当于其他对象存储的group的概念,用coll_t来标识。
ObjectStore 类 就代表了一个Object, 其继承关系为 FileStore 继承了 JournalingObjectStore,JournalingObjectStore继承了ObjectStore
事务
Transaction类代表了一个事务操作。所有的操作都必须通过一个transaction来执行。 一个transaction几乎实现了所有对对象和集合的操作。
ObjectMap的概念
ObjectMap, 就是一些key,value的map属性,其保存在Object里面。 在Ceph文件系统了,ObjectMap由levelDB这个google开源的KV数据库来实现。
还有一个attributes的 概念,attributes也是一些 key/value的属性值。
首先看一下对外的接口,我们可以通过src/test/filestore/store_test.cc文件来看一下其实如何运行的:
virtualvoidSetUp() {
::mkdir("store_test_temp_dir", 0777);
ObjectStore *store_ = newFileStore(string("store_test_temp_dir"), string("store_test_temp_journal"));
store.reset(store_);
store->mkfs();
store->mount();
} 首先mkdir一个目录,store_test_temp_dir, 新建一个FileStore对象,其后面的参数分别是:文件的目录和日志的目录,分别也可以是一个block device. 调用mkfs 函数和 mount 函数,后面会详细介绍。
ObjectStore::Transaction t;
t.create_collection(cid);
cerr <
r = store->a