Documentation
¶
Overview ¶
Package attachcache stores attachment bytes on local disk.
Attachment bytes were proxied from Jira on every view, which contradicts the premise of the tool: everything else answers from local disk, and an issue with three screenshots re-downloaded them on every open. Bytes for a given attachment id are immutable in Jira, so they cache indefinitely and the only bound needed is total size.
A cached attachment also survives having no credential at all, which is what lets the bundled demo snapshot show real images offline.
Index ¶
- Constants
- func TooLarge(err error) bool
- type Cache
- func (c *Cache) Dir() string
- func (c *Cache) Fill(id string, fetch func() (io.ReadCloser, Meta, error)) error
- func (c *Cache) Get(id string) (io.ReadSeekCloser, Meta, error)
- func (c *Cache) Has(id string) bool
- func (c *Cache) ImportFile(id, path, contentType, filename string) error
- func (c *Cache) Stats() (files int, bytes int64)
- type Meta
Constants ¶
const DefaultMaxBytes int64 = 512 << 20
DefaultMaxBytes bounds the cache. Attachments are usually screenshots, so a few hundred megabytes holds a working set of thousands.
Variables ¶
This section is empty.
Functions ¶
Types ¶
type Cache ¶
type Cache struct {
// contains filtered or unexported fields
}
Cache is a content-addressed store under one directory. Safe for concurrent use; a miss for the same id collapses into a single fetch.
func (*Cache) Fill ¶
Fill is the single-flight write path: fetch runs at most once per id even if ten renders miss at the same moment. It returns after the bytes are on disk.
fetch must return the body, its content type, and its length (0 if unknown).
func (*Cache) Get ¶
Get returns an open reader for a cached attachment. The caller closes it. A miss returns os.ErrNotExist.
func (*Cache) ImportFile ¶
ImportFile seeds an entry from a local file. It exists for fixtures: the bundled demo snapshot ships attachment bytes so `gadak demo` shows real images with no Jira account, and a test can prime the cache without a fake server.