CopyObject reverts to backend after evicting any stale cache entries
(ctx context.Context, srcBucket, srcObject, dstBucket, dstObject string, srcInfo ObjectInfo, srcOpts, dstOpts ObjectOptions)
| 468 | |
| 469 | // CopyObject reverts to backend after evicting any stale cache entries |
| 470 | func (c *cacheObjects) CopyObject(ctx context.Context, srcBucket, srcObject, dstBucket, dstObject string, srcInfo ObjectInfo, srcOpts, dstOpts ObjectOptions) (objInfo ObjectInfo, err error) { |
| 471 | copyObjectFn := c.InnerCopyObjectFn |
| 472 | if c.isCacheExclude(srcBucket, srcObject) || c.skipCache() { |
| 473 | return copyObjectFn(ctx, srcBucket, srcObject, dstBucket, dstObject, srcInfo, srcOpts, dstOpts) |
| 474 | } |
| 475 | if srcBucket != dstBucket || srcObject != dstObject { |
| 476 | return copyObjectFn(ctx, srcBucket, srcObject, dstBucket, dstObject, srcInfo, srcOpts, dstOpts) |
| 477 | } |
| 478 | // fetch diskCache if object is currently cached or nearest available cache drive |
| 479 | dcache, err := c.getCacheToLoc(ctx, srcBucket, srcObject) |
| 480 | if err != nil { |
| 481 | return copyObjectFn(ctx, srcBucket, srcObject, dstBucket, dstObject, srcInfo, srcOpts, dstOpts) |
| 482 | } |
| 483 | // if currently cached, evict old entry and revert to backend. |
| 484 | if cachedObjInfo, _, cerr := dcache.Stat(ctx, srcBucket, srcObject); cerr == nil { |
| 485 | cc := cacheControlOpts(cachedObjInfo) |
| 486 | if cc == nil || !cc.isStale(cachedObjInfo.ModTime) { |
| 487 | dcache.Delete(ctx, srcBucket, srcObject) |
| 488 | } |
| 489 | } |
| 490 | return copyObjectFn(ctx, srcBucket, srcObject, dstBucket, dstObject, srcInfo, srcOpts, dstOpts) |
| 491 | } |
| 492 | |
| 493 | // StorageInfo - returns underlying storage statistics. |
| 494 | func (c *cacheObjects) StorageInfo(ctx context.Context) (cInfo CacheStorageInfo) { |
nothing calls this directly
no test coverage detected