mirror of
https://github.com/minio/minio.git
synced 2025-04-03 19:30:29 -04:00
Fix cache metadata update for range GET (#9636)
This was inadvertently deleting cached ranges because HTTPRangeSpec was not being passed down fixes #9597
This commit is contained in:
parent
6de410a0aa
commit
3202f78f0f
@ -87,14 +87,14 @@ type cacheObjects struct {
|
|||||||
CopyObjectFn func(ctx context.Context, srcBucket, srcObject, destBucket, destObject string, srcInfo ObjectInfo, srcOpts, dstOpts ObjectOptions) (objInfo ObjectInfo, err error)
|
CopyObjectFn func(ctx context.Context, srcBucket, srcObject, destBucket, destObject string, srcInfo ObjectInfo, srcOpts, dstOpts ObjectOptions) (objInfo ObjectInfo, err error)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *cacheObjects) incHitsToMeta(ctx context.Context, dcache *diskCache, bucket, object string, size int64, eTag string) error {
|
func (c *cacheObjects) incHitsToMeta(ctx context.Context, dcache *diskCache, bucket, object string, size int64, eTag string, rs *HTTPRangeSpec) error {
|
||||||
metadata := make(map[string]string)
|
metadata := make(map[string]string)
|
||||||
metadata["etag"] = eTag
|
metadata["etag"] = eTag
|
||||||
return dcache.SaveMetadata(ctx, bucket, object, metadata, size, nil, "", true)
|
return dcache.SaveMetadata(ctx, bucket, object, metadata, size, rs, "", true)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Backend metadata could have changed through server side copy - reset cache metadata if that is the case
|
// Backend metadata could have changed through server side copy - reset cache metadata if that is the case
|
||||||
func (c *cacheObjects) updateMetadataIfChanged(ctx context.Context, dcache *diskCache, bucket, object string, bkObjectInfo, cacheObjInfo ObjectInfo) error {
|
func (c *cacheObjects) updateMetadataIfChanged(ctx context.Context, dcache *diskCache, bucket, object string, bkObjectInfo, cacheObjInfo ObjectInfo, rs *HTTPRangeSpec) error {
|
||||||
|
|
||||||
bkMeta := make(map[string]string)
|
bkMeta := make(map[string]string)
|
||||||
cacheMeta := make(map[string]string)
|
cacheMeta := make(map[string]string)
|
||||||
@ -119,7 +119,7 @@ func (c *cacheObjects) updateMetadataIfChanged(ctx context.Context, dcache *disk
|
|||||||
!bkObjectInfo.Expires.Equal(cacheObjInfo.Expires) {
|
!bkObjectInfo.Expires.Equal(cacheObjInfo.Expires) {
|
||||||
return dcache.SaveMetadata(ctx, bucket, object, getMetadata(bkObjectInfo), bkObjectInfo.Size, nil, "", false)
|
return dcache.SaveMetadata(ctx, bucket, object, getMetadata(bkObjectInfo), bkObjectInfo.Size, nil, "", false)
|
||||||
}
|
}
|
||||||
return c.incHitsToMeta(ctx, dcache, bucket, object, cacheObjInfo.Size, cacheObjInfo.ETag)
|
return c.incHitsToMeta(ctx, dcache, bucket, object, cacheObjInfo.Size, cacheObjInfo.ETag, rs)
|
||||||
}
|
}
|
||||||
|
|
||||||
// DeleteObject clears cache entry if backend delete operation succeeds
|
// DeleteObject clears cache entry if backend delete operation succeeds
|
||||||
@ -203,7 +203,7 @@ func (c *cacheObjects) GetObjectNInfo(ctx context.Context, bucket, object string
|
|||||||
}
|
}
|
||||||
c.cacheStats.incHit()
|
c.cacheStats.incHit()
|
||||||
c.cacheStats.incBytesServed(bytesServed)
|
c.cacheStats.incBytesServed(bytesServed)
|
||||||
c.incHitsToMeta(ctx, dcache, bucket, object, cacheReader.ObjInfo.Size, cacheReader.ObjInfo.ETag)
|
c.incHitsToMeta(ctx, dcache, bucket, object, cacheReader.ObjInfo.Size, cacheReader.ObjInfo.ETag, rs)
|
||||||
return cacheReader, nil
|
return cacheReader, nil
|
||||||
}
|
}
|
||||||
if cc != nil && cc.noStore {
|
if cc != nil && cc.noStore {
|
||||||
@ -256,7 +256,7 @@ func (c *cacheObjects) GetObjectNInfo(ctx context.Context, bucket, object string
|
|||||||
// if ETag matches for stale cache entry, serve from cache
|
// if ETag matches for stale cache entry, serve from cache
|
||||||
if cacheReader.ObjInfo.ETag == objInfo.ETag {
|
if cacheReader.ObjInfo.ETag == objInfo.ETag {
|
||||||
// Update metadata in case server-side copy might have changed object metadata
|
// Update metadata in case server-side copy might have changed object metadata
|
||||||
c.updateMetadataIfChanged(ctx, dcache, bucket, object, objInfo, cacheReader.ObjInfo)
|
c.updateMetadataIfChanged(ctx, dcache, bucket, object, objInfo, cacheReader.ObjInfo, rs)
|
||||||
c.incCacheStats(cacheObjSize)
|
c.incCacheStats(cacheObjSize)
|
||||||
return cacheReader, nil
|
return cacheReader, nil
|
||||||
}
|
}
|
||||||
@ -281,7 +281,7 @@ func (c *cacheObjects) GetObjectNInfo(ctx context.Context, bucket, object string
|
|||||||
// If object has less hits than configured cache after, just increment the hit counter
|
// If object has less hits than configured cache after, just increment the hit counter
|
||||||
// but do not cache it.
|
// but do not cache it.
|
||||||
if numCacheHits < c.after {
|
if numCacheHits < c.after {
|
||||||
c.incHitsToMeta(ctx, dcache, bucket, object, objInfo.Size, objInfo.ETag)
|
c.incHitsToMeta(ctx, dcache, bucket, object, objInfo.Size, objInfo.ETag, rs)
|
||||||
return bkReader, bkErr
|
return bkReader, bkErr
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user