| 1443 | } |
| 1444 | |
| 1445 | void DBImpl::GetApproximateSizes(const Range* range, int n, uint64_t* sizes) { |
| 1446 | // TODO(opt): better implementation |
| 1447 | MutexLock l(&mutex_); |
| 1448 | Version* v = versions_->current(); |
| 1449 | v->Ref(); |
| 1450 | |
| 1451 | for (int i = 0; i < n; i++) { |
| 1452 | // Convert user_key into a corresponding internal key. |
| 1453 | InternalKey k1(range[i].start, kMaxSequenceNumber, kValueTypeForSeek); |
| 1454 | InternalKey k2(range[i].limit, kMaxSequenceNumber, kValueTypeForSeek); |
| 1455 | uint64_t start = versions_->ApproximateOffsetOf(v, k1); |
| 1456 | uint64_t limit = versions_->ApproximateOffsetOf(v, k2); |
| 1457 | sizes[i] = (limit >= start ? limit - start : 0); |
| 1458 | } |
| 1459 | |
| 1460 | v->Unref(); |
| 1461 | } |
| 1462 | |
| 1463 | // Default implementations of convenience methods that subclasses of DB |
| 1464 | // can call if they wish |