diff options
Diffstat (limited to 'src/zenserver/storage/objectstore/objectstore.cpp')
| -rw-r--r-- | src/zenserver/storage/objectstore/objectstore.cpp | 35 |
1 files changed, 25 insertions, 10 deletions
diff --git a/src/zenserver/storage/objectstore/objectstore.cpp b/src/zenserver/storage/objectstore/objectstore.cpp index bab9df06d..1115c1cd6 100644 --- a/src/zenserver/storage/objectstore/objectstore.cpp +++ b/src/zenserver/storage/objectstore/objectstore.cpp @@ -669,24 +669,39 @@ HttpObjectStoreService::GetObject(HttpRouterRequest& Request, const std::string_ NiceBytes(FileBuf.GetSize()), NiceBytes(TotalServed)); } - else if (Ranges.size() == 1) + else { - const uint64_t TotalSize = FileBuf.GetSize(); - const uint64_t RangeEnd = (Ranges[0].End != ~uint64_t(0)) ? Ranges[0].End : TotalSize - 1; - if (RangeEnd < TotalSize && Ranges[0].Start <= RangeEnd) + const uint64_t TotalSize = FileBuf.GetSize(); + uint64_t ServedBytes = 0; + for (const HttpRange& Range : Ranges) { - const uint64_t RangeSize = 1 + (RangeEnd - Ranges[0].Start); - const uint64_t TotalServed = m_TotalBytesServed.fetch_add(RangeSize) + RangeSize; + const uint64_t RangeEnd = (Range.End != ~uint64_t(0)) ? Range.End : TotalSize - 1; + if (RangeEnd < TotalSize && Range.Start <= RangeEnd) + { + ServedBytes += 1 + (RangeEnd - Range.Start); + } + } + if (ServedBytes > 0) + { + const uint64_t TotalServed = m_TotalBytesServed.fetch_add(ServedBytes) + ServedBytes; ZEN_LOG_DEBUG(LogObj, - "GET - '{}/{}' (Range: {}-{}) ({}/{}) [OK] (Served: {})", + "GET - '{}/{}' (Ranges: {}) ({}/{}) [OK] (Served: {})", BucketName, RelativeBucketPath, - Ranges[0].Start, - RangeEnd, - NiceBytes(RangeSize), + Ranges.size(), + NiceBytes(ServedBytes), NiceBytes(TotalSize), NiceBytes(TotalServed)); } + else + { + ZEN_LOG_DEBUG(LogObj, + "GET - '{}/{}' (Ranges: {}) [416] ({})", + BucketName, + RelativeBucketPath, + Ranges.size(), + NiceBytes(TotalSize)); + } } Request.ServerRequest().WriteResponse(HttpContentType::kBinary, FileBuf, Ranges); } |