MCPcopy Create free account
hub / github.com/baidu/tera / FlashRandomAccessFile

Method FlashRandomAccessFile

src/leveldb/util/env_flash.cc:186–228  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

184
185 public:
186 FlashRandomAccessFile(FlashEnv* flash_env, const std::string& fname, uint64_t fsize,
187 const EnvOptions& options)
188 : flash_env_(flash_env),
189 dfs_file_(NULL),
190 flash_file_(NULL),
191 fname_(fname),
192 local_fname_(flash_env->FlashPath(fname) + fname),
193 fsize_(fsize),
194 flash_file_is_checking_(false),
195 flash_file_last_check_micros_(0),
196 flash_file_check_interval_micros_(kFlashFileCheckIntervalMicros),
197 read_dfs_count_(0),
198 env_opt_(options),
199 logical_sector_size_(kDefaultPageSize) {
200 // copy file to cache if force read from cache
201 if (flash_env_->ForceReadFromCache()) {
202 Status copy_status = CopyToLocal(local_fname_, flash_env_->BaseEnv(), fname, fsize,
203 flash_env_->VanishAllowed());
204 if (!copy_status.ok()) {
205 LOG(WARNING) << "[env_flash] copy to local fail [" << copy_status.ToString().c_str()
206 << "]: " << local_fname_.c_str();
207 }
208 }
209
210 // if cache file is identical with dfs file, use cache file
211 if (flash_env_->FlashFileIdentical(fname, fsize)) {
212 Status s = flash_env_->CacheEnv()->NewRandomAccessFile(local_fname_, &flash_file_, env_opt_);
213 if (s.ok()) {
214 logical_sector_size_ = flash_file_->GetRequiredBufferAlignment();
215 return;
216 }
217 LOG(WARNING) << "[env_flash] local file check pass, but open for "
218 "RandomAccess fail [" << s.ToString().c_str()
219 << "]: " << local_fname_.c_str();
220 } else {
221 LOG(WARNING) << "[env_flash] local file check fail: " << local_fname_.c_str();
222 }
223
224 // else, use dfs file
225 flash_env_->ScheduleUpdateFlash(fname, fsize, 1);
226 flash_env_->BaseEnv()->NewRandomAccessFile(fname, &dfs_file_, env_opt_);
227 flash_file_last_check_micros_ = Env::Default()->NowMicros();
228 }
229 ~FlashRandomAccessFile() {
230 delete dfs_file_;
231 delete flash_file_;

Callers

nothing calls this directly

Calls 12

CopyToLocalFunction · 0.85
ForceReadFromCacheMethod · 0.80
BaseEnvMethod · 0.80
VanishAllowedMethod · 0.80
FlashFileIdenticalMethod · 0.80
ScheduleUpdateFlashMethod · 0.80
okMethod · 0.45
ToStringMethod · 0.45
NewRandomAccessFileMethod · 0.45
CacheEnvMethod · 0.45
NowMicrosMethod · 0.45

Tested by

no test coverage detected