github.com/keybase/client/go@v0.0.0-20241007131713-f10651d043c8/kbfs/libkbfs/block_getter.go (about) 1 // Copyright 2016 Keybase Inc. All rights reserved. 2 // Use of this source code is governed by a BSD 3 // license that can be found in the LICENSE file. 4 5 package libkbfs 6 7 import ( 8 "github.com/keybase/client/go/kbfs/data" 9 "github.com/keybase/client/go/kbfs/kbfscrypto" 10 "github.com/keybase/client/go/kbfs/libkey" 11 "golang.org/x/net/context" 12 ) 13 14 // blockGetter provides the API for the block retrieval worker to obtain blocks. 15 type blockGetter interface { 16 getBlock( 17 context.Context, libkey.KeyMetadata, data.BlockPointer, data.Block, 18 DiskBlockCacheType) error 19 assembleBlock( 20 context.Context, libkey.KeyMetadata, data.BlockPointer, data.Block, 21 []byte, kbfscrypto.BlockCryptKeyServerHalf) error 22 assembleBlockLocal( 23 context.Context, libkey.KeyMetadata, data.BlockPointer, data.Block, 24 []byte, kbfscrypto.BlockCryptKeyServerHalf) error 25 } 26 27 // realBlockGetter obtains real blocks using the APIs available in Config. 28 type realBlockGetter struct { 29 config blockOpsConfig 30 } 31 32 // getBlock implements the interface for realBlockGetter. 33 func (bg *realBlockGetter) getBlock( 34 ctx context.Context, kmd libkey.KeyMetadata, blockPtr data.BlockPointer, 35 block data.Block, cacheType DiskBlockCacheType) error { 36 bserv := bg.config.BlockServer() 37 buf, blockServerHalf, err := bserv.Get( 38 ctx, kmd.TlfID(), blockPtr.ID, blockPtr.Context, cacheType) 39 if err != nil { 40 return err 41 } 42 43 if _, isLocal := bserv.(blockServerLocal); isLocal { 44 return assembleBlockLocal( 45 ctx, bg.config.keyGetter(), bg.config.Codec(), 46 bg.config.cryptoPure(), kmd, blockPtr, block, buf, blockServerHalf) 47 } 48 return assembleBlock( 49 ctx, bg.config.keyGetter(), bg.config.Codec(), bg.config.cryptoPure(), 50 kmd, blockPtr, block, buf, blockServerHalf) 51 } 52 53 func (bg *realBlockGetter) assembleBlock(ctx context.Context, 54 kmd libkey.KeyMetadata, ptr data.BlockPointer, block data.Block, buf []byte, 55 serverHalf kbfscrypto.BlockCryptKeyServerHalf) error { 56 return assembleBlock(ctx, bg.config.keyGetter(), bg.config.Codec(), 57 bg.config.cryptoPure(), kmd, ptr, block, buf, serverHalf) 58 } 59 60 func (bg *realBlockGetter) assembleBlockLocal(ctx context.Context, 61 kmd libkey.KeyMetadata, ptr data.BlockPointer, block data.Block, buf []byte, 62 serverHalf kbfscrypto.BlockCryptKeyServerHalf) error { 63 return assembleBlockLocal(ctx, bg.config.keyGetter(), bg.config.Codec(), 64 bg.config.cryptoPure(), kmd, ptr, block, buf, serverHalf) 65 }