|
I take back what I said in my previous comment. When compaction is blocked by checkpoint, compaction is retried internally. However, EBUSY can still be returned for other reasons. If EBUSY is actually because of cache eviction pressure, WiredTiger would print it out.
|
|
The error message is Compaction interrupted on table:collection-1906--5767142732412023233 due to cache eviction pressure which comes from the storage layer:
Status WiredTigerIndexUtil::compact(OperationContext* opCtx, const std::string& uri) {
|
...
|
if (ret == EBUSY) {
|
return Status(ErrorCodes::Interrupted,
|
str::stream() << "Compaction interrupted on " << uri.c_str()
|
<< " due to cache eviction pressure");
|
}
|
Or
Status WiredTigerRecordStore::doCompact(OperationContext* opCtx) {
|
...
|
if (ret == EBUSY) {
|
return Status(ErrorCodes::Interrupted,
|
str::stream() << "Compaction interrupted on " << getURI().c_str()
|
<< " due to cache eviction pressure");
|
}
|
This surprises me, EBUSY does not necessarily mean the cache is full. For example, compaction performs checkpoints that can return EBUSY for various reasons.
|