Print file number when TEST_VerifyNoObsoleteFilesCached fails (#13145)

Summary:
**Context/Summary:**

https://github.com/facebook/rocksdb/pull/13117 added check for obsolete SST files that are not cleaned up timely. It caused a infrequent stress test failure  `assertion="live_and_quar_files.find(file_number) != live_and_quar_files.end()"` that I haven't repro-ed yet.

This PR prints the file number so we can find out what happens to that file through info logs when encountering the same failure.

Pull Request resolved: https://github.com/facebook/rocksdb/pull/13145

Test Plan:
Manually fail the assertion and observe the stderr printing
```
[ RUN      ] DBBasicTest.UniqueSession
File 12 is not live nor quarantined
db_basic_test: db/db_impl/db_impl_debug.cc:384: rocksdb::DBImpl::TEST_VerifyNoObsoleteFilesCached(bool) const::<lambda(const rocksdb::Slice&, rocksdb::Cache::ObjectPtr, size_t, const rocksdb::Cache::CacheItemHelper*)>: Assertion `false' failed.
```

Reviewed By: pdillinger

Differential Revision: D66134154

Pulled By: hx235

fbshipit-source-id: 353164c373d3d674cee676b24468dfc79a1d4563
This commit is contained in:
Hui Xiao 2024-11-20 12:22:52 -08:00 committed by Facebook GitHub Bot
parent bee8d5560e
commit 0f35db55d8
1 changed files with 6 additions and 2 deletions

View File

@ -6,8 +6,8 @@
// Copyright (c) 2011 The LevelDB Authors. All rights reserved. // Copyright (c) 2011 The LevelDB Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. See the AUTHORS file for names of contributors. // found in the LICENSE file. See the AUTHORS file for names of contributors.
#ifndef NDEBUG #ifndef NDEBUG
#include <iostream>
#include "db/blob/blob_file_cache.h" #include "db/blob/blob_file_cache.h"
#include "db/column_family.h" #include "db/column_family.h"
@ -379,7 +379,11 @@ void DBImpl::TEST_VerifyNoObsoleteFilesCached(
uint64_t file_number; uint64_t file_number;
GetUnaligned(reinterpret_cast<const uint64_t*>(key.data()), &file_number); GetUnaligned(reinterpret_cast<const uint64_t*>(key.data()), &file_number);
// Assert file is in live/quarantined set // Assert file is in live/quarantined set
assert(live_and_quar_files.find(file_number) != live_and_quar_files.end()); if (live_and_quar_files.find(file_number) == live_and_quar_files.end()) {
std::cerr << "File " << file_number << " is not live nor quarantined"
<< std::endl;
assert(false);
}
}; };
table_cache_->ApplyToAllEntries(fn, {}); table_cache_->ApplyToAllEntries(fn, {});
} }