| 605 | coroToFiberLatency_(std::make_unique<util::PercentileStats>()) {} |
| 606 | |
| 607 | void FlashCacheComponent::tryRecover() { |
| 608 | if (persistenceConfig_.recover()) { |
| 609 | bool recovered = false; |
| 610 | try { |
| 611 | auto metadataSize = persistenceConfig_.metadataSize(); |
| 612 | auto rr = navy::createMetadataRecordReader(*device_, metadataSize); |
| 613 | XDCHECK(rr) << "failed to create metadata reader"; |
| 614 | if (!rr->isEnd() && cache_->recover(*rr)) { |
| 615 | // If recovery is successful, invalidate the metadata |
| 616 | auto rw = createMetadataRecordWriter(*device_, metadataSize); |
| 617 | XDCHECK(rw) << "failed to create metadata writer"; |
| 618 | recovered = rw->invalidate(); |
| 619 | } |
| 620 | } catch (const std::exception& e) { |
| 621 | XLOG(WARN) << "Exception while recovering flash cache: " << e.what(); |
| 622 | recovered = false; |
| 623 | } |
| 624 | |
| 625 | if (!recovered) { |
| 626 | cache_->reset(); |
| 627 | XLOG(WARN) << "Failed to recover flash cache from device, creating a " |
| 628 | "new empty cache"; |
| 629 | } |
| 630 | } |
| 631 | } |
| 632 | |
| 633 | bool FlashCacheComponent::writeBackImpl(CacheItem& item, bool allowReplace) { |
| 634 | auto& fccItem = static_cast<FlashCacheItem&>(item); |
no test coverage detected