| 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_; |
nothing calls this directly
no test coverage detected