check / check (push) Canceled after 0s
A source is now one source_content row and one file named by its SourceKey, the SHA-256 of its host, path and query, made as the variant key is. A store writes the file, then upserts the row, and removes the file when the row cannot be written; an eviction deletes the row, then the file, with no lock. source_metadata, the JSON files under cache/metadata/, MetadataStorage, the content lock, the eviction transaction and its test hook are gone, as is the reconciliation pass that dropped a source row whose file is missing. Two source URLs serving the same bytes store them twice. Model: opus-5-5
27 lines
656 B
Go
27 lines
656 B
Go
package imagerequest
|
|
|
|
import (
|
|
"crypto/sha256"
|
|
"encoding/hex"
|
|
"fmt"
|
|
)
|
|
|
|
// SourceKey is a SHA256 hash identifying a cached source image (hex-encoded).
|
|
type SourceKey string
|
|
|
|
// Key returns the key the source is cached under, made as CacheKey makes a
|
|
// variant key.
|
|
// Format: sha256(host:path:query)
|
|
// The path and query go through escapePercentAndColon, so that a ":" in
|
|
// either cannot be taken for the one between them.
|
|
func (s Source) Key() SourceKey {
|
|
data := fmt.Sprintf("%s:%s:%s",
|
|
s.Host,
|
|
escapePercentAndColon(s.Path),
|
|
escapePercentAndColon(s.Query),
|
|
)
|
|
h := sha256.Sum256([]byte(data))
|
|
|
|
return SourceKey(hex.EncodeToString(h[:]))
|
|
}
|