mirror of https://github.com/perkeep/perkeep.git
6f5a718ad1
When fetching shared blobs, we rely on the share chain to verify if a blob can be reached. This chain is updated whenever we fetch an additional link of the chain, by updating the Client.via map. However, when some blobs of the chain are already cached in camget's DiskCache, because we get them from the cache, we don't fetch them with Client.FetchVia, which means the Client.via map isn't updated. And thus the chain is broken. This change adds Client.UpdateShareChain, and sets it as a hook to be called by the CachingFetcher in the event of a cache hit. That way, we ensure that the share chain is updated even when we get blobs from the cache (instead of from the Client). We also add a mutex to guard Client.via, because it is accessed by concurrent smartFetch calls in case of a static-set. As FetchVia was undocumented and not used by anyone, I made it unexported. We can always export it again later when needed. Fixes #856 Change-Id: I767cbec4b6f382cbccc25c0b97782b2a7472deb8 |
||
---|---|---|
.. | ||
cacher.go |