func (c *KvHaveCache) NoteBlobExists(br blob.Ref, size uint32) { if !br.Valid() { return } if size < 0 { log.Fatalf("Got a negative blob size to note in have cache for %v", br) } binBr, _ := br.MarshalBinary() binVal := []byte(strconv.Itoa(int(size))) cachelog.Printf("Adding to have cache %v: %q", br, binVal) if err := c.db.Put(binBr, binVal, nil); err != nil { log.Fatalf("Could not write %v in have cache: %v", br, err) } }
func (c *KvHaveCache) StatBlobCache(br blob.Ref) (size int64, ok bool) { if !br.Valid() { return } binBr, _ := br.MarshalBinary() binVal, err := c.db.Get(nil, binBr) if err != nil { log.Fatalf("Could not query have cache %v for %v: %v", c.filename, br, err) } if binVal == nil { cachelog.Printf("have cache MISS on %v", br) return } val, err := strconv.Atoi(string(binVal)) if err != nil { log.Fatalf("Could not decode have cache binary value for %v: %v", br, err) } cachelog.Printf("have cache HIT on %v", br) return int64(val), true }
func (c *KvHaveCache) NoteBlobExists(br blob.Ref, size int64) { if !br.Valid() { return } if size < 0 { log.Fatalf("Got a negative blob size to note in have cache for %v", br) } binBr, _ := br.MarshalBinary() binVal := []byte(strconv.Itoa(int(size))) cachelog.Printf("Adding to have cache %v: %q", br, binVal) _, _, err := c.db.Put(nil, binBr, func(binBr, old []byte) ([]byte, bool, error) { // We do not overwrite dups if old != nil { return nil, false, nil } return binVal, true, nil }) if err != nil { log.Fatalf("Could not write %v in have cache: %v", br, err) } }
func (c *KvHaveCache) StatBlobCache(br blob.Ref) (size uint32, ok bool) { if !br.Valid() { return } binBr, _ := br.MarshalBinary() binVal, err := c.db.Get(binBr, nil) if err != nil { if err == leveldb.ErrNotFound { cachelog.Printf("have cache MISS on %v", br) return } log.Fatalf("Could not query have cache %v for %v: %v", c.filename, br, err) } val, err := strconv.ParseUint(string(binVal), 10, 32) if err != nil { log.Fatalf("Could not decode have cache binary value for %v: %v", br, err) } if val < 0 { log.Fatalf("Error decoding have cache binary value for %v: size=%d", br, val) } cachelog.Printf("have cache HIT on %v", br) return uint32(val), true }