| 347 | } // namespace |
| 348 | |
| 349 | std::unique_ptr<navy::Device> createDevice( |
| 350 | const navy::NavyConfig& config, |
| 351 | std::shared_ptr<navy::DeviceEncryptor> encryptor) { |
| 352 | auto blockSize = config.getBlockSize(); |
| 353 | auto maxDeviceWriteSize = config.getDeviceMaxWriteSize(); |
| 354 | if (config.usesRaidFiles() || config.usesSimpleFile()) { |
| 355 | auto stripeSize = 0; |
| 356 | auto fileSize = config.getFileSize(); |
| 357 | std::vector<std::string> filePaths; |
| 358 | if (config.usesSimpleFile()) { |
| 359 | filePaths.emplace_back(config.getFileName()); |
| 360 | } else { |
| 361 | stripeSize = getRegionSize(config); |
| 362 | filePaths = config.getRaidPaths(); |
| 363 | fileSize = alignDown(fileSize, stripeSize); |
| 364 | } |
| 365 | |
| 366 | return navy::createFileDevice( |
| 367 | filePaths, |
| 368 | fileSize, |
| 369 | config.getTruncateFile(), |
| 370 | blockSize, |
| 371 | stripeSize, |
| 372 | maxDeviceWriteSize > 0 ? alignDown(maxDeviceWriteSize, blockSize) : 0, |
| 373 | config.getIoEngine(), |
| 374 | config.getQDepth(), |
| 375 | config.isFDPEnabled(), |
| 376 | std::move(encryptor), |
| 377 | config.getExclusiveOwner()); |
| 378 | } else { |
| 379 | return navy::createMemoryDevice(config.getFileSize(), std::move(encryptor), |
| 380 | blockSize); |
| 381 | } |
| 382 | } |
| 383 | |
| 384 | std::unique_ptr<navy::AbstractCache> createNavyCache( |
| 385 | const navy::NavyConfig& config, |