聊聊bluestore&rocksdb的env

env说白就是承接上层系统对文件的读写与下层操作系统交互的功能的一个组件。

先看看rocksdb的env

  std::unique_ptr<WritableFile> trace_file;
  Status s2 = rocksdb::Env::Default()->NewWritableFile("/tmp/apc",
  				 &trace_file, env_options);
  trace_file->Append("i love you ");
  trace_file->Flush();

如果代码运行完毕后,系统就会在在/tmp下生成一个名叫abc的文件,里面有个字符串 i love you。
我们具体看看逻辑。
rocksdb::Env::Default() 实现在env_posix.cc里面,最终返回的是一个静态的PosixEnv对象。
PosixEnv本身继承了CompositeEnvWrapper。
另外FileSystem::Default()返回的是PosixFileSystem。
PosixEnv的构造函数里就用PosixFileSystem 初始化了file_system_。

回到上面的代码,

  Status NewWritableFile(const std::string& f, std::unique_ptr<WritableFile>* r,
                         const EnvOptions& options) override {
    IODebugContext dbg;
    std::unique_ptr<FSWritableFile> file;
    Status status;
    status =
        file_system_->NewWritableFile(f, FileOptions(options), &file, &dbg);
    if (status.ok()) {
      r->reset(new CompositeWritableFileWrapper(file));
    }
        return status;
  }
  

在file_system_->NewWritableFile,最终的file是一个PosixWritableFile

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值