} return util.ToErrors(errs) } func (cbs *CachedBlobStore) SaveState(c btncrypt.Cipher) error { errs := []error{} if err := cbs.bever.SaveStateToBlobstore(c, cbs.backendbs); err != nil { errs = append(errs, err) } return util.ToErrors(errs) } var _ = blobstore.BlobStore(&CachedBlobStore{}) func (cbs *CachedBlobStore) OpenReader(blobpath string) (io.ReadCloser, error) { bh, err := cbs.Open(blobpath, fl.O_RDONLY) if err != nil { return nil, err } return &struct { blobstore.OffsetReader // for io.Reader blobstore.BlobHandle // for io.Closer }{ blobstore.OffsetReader{bh, 0}, bh, }, nil }
NumOpenReader int `json:num_open_reader` NumListBlobs int `json:num_list_blobs` NumBlobSize int `json:num_blob_size` NumRemoveBlob int `json:num_remove_blob` } type GCSBlobStore struct { projectName string bucketName string flags int tsrc oauth2.TokenSource stats GCSBlobStoreStats } var _ = blobstore.BlobStore(&GCSBlobStore{}) func NewGCSBlobStore(projectName string, bucketName string, tsrc oauth2.TokenSource, flags int) (*GCSBlobStore, error) { return &GCSBlobStore{ projectName: projectName, bucketName: bucketName, flags: flags, tsrc: tsrc, }, nil } type Writer struct { gcsw *storage.Writer } func (bs *GCSBlobStore) newAuthedContext(basectx context.Context) context.Context {