作者:som-snyt
项目:bazi
func (app *App) OpenKV(tx *db.Tx, storage *db.VolumeStorage) (kv.KV, error) {
var kvstores []kv.KV
c := storage.Cursor()
for item := c.First(); item != nil; item = c.Next() {
backend, err := item.Backend()
if err != nil {
return nil, err
}
s, err := app.openStorage(backend)
if err != nil {
return nil, err
}
sharingKeyName, err := item.SharingKeyName()
if err != nil {
return nil, err
}
sharingKey, err := tx.SharingKeys().Get(sharingKeyName)
if err != nil {
return nil, fmt.Errorf("getting sharing key %q: %v", sharingKeyName, err)
}
var secret [32]byte
sharingKey.Secret(&secret)
s = untrusted.New(s, &secret)
kvstores = append(kvstores, s)
}
return kvmulti.New(kvstores...), nil
}
作者:read-late
项目:bazi
func (v *Volume) bucket(tx *db.Tx) *db.Volume {
vv, err := tx.Volumes().GetByVolumeID(&v.volID)
if err != nil {
log.Printf("volume has disappeared: %v: %v", &v.volID, err)
}
return vv
}
作者:som-snyt
项目:bazi
func checkMakePeer(tx *db.Tx, pub *peer.PublicKey, id peer.ID) error {
peer, err := tx.Peers().Make(pub)
if err != nil {
return fmt.Errorf("unexpected peers.Make error: %v", err)
}
if g, e := *peer.Pub(), *pub; g != e {
return fmt.Errorf("peer pubkey came back wrong: %v != %v", g, e)
}
if g, e := peer.ID(), id; g != e {
return fmt.Errorf("wrong peer ID: %v != %v", g, e)
}
return nil
}
作者:som-snyt
项目:bazi
// caller must hold App.volumes.Mutex
func (app *App) openVolume(tx *db.Tx, id *db.VolumeID) (*fs.Volume, error) {
v, err := tx.Volumes().GetByVolumeID(id)
if err != nil {
return nil, err
}
kvstore, err := app.OpenKV(tx, v.Storage())
if err != nil {
return nil, err
}
chunkStore := kvchunks.New(kvstore)
vol, err := fs.Open(app.DB, chunkStore, id, (*peer.PublicKey)(app.Keys.Sign.Pub))
if err != nil {
return nil, err
}
return vol, nil
}