mirror of
https://github.com/ethereum/go-ethereum.git
synced 2026-07-21 20:26:41 +00:00
chunker and root key fix
- chunker panics if root key buffer is not allocated or have proper length - rename HashSize->KeySize and add it to Chunker interface
This commit is contained in:
parent
3f328c20b2
commit
22249ac2b9
2 changed files with 15 additions and 9 deletions
|
|
@ -26,7 +26,7 @@ func main() {
|
|||
sr := io.NewSectionReader(f, 0, stat.Size())
|
||||
chunker := &bzz.TreeChunker{}
|
||||
chunker.Init()
|
||||
hash := make([]byte, chunker.HashSize())
|
||||
hash := make([]byte, chunker.KeySize())
|
||||
errC := chunker.Split(hash, sr, nil)
|
||||
err, ok := <-errC
|
||||
if err != nil {
|
||||
|
|
|
|||
|
|
@ -72,6 +72,9 @@ type Chunker interface {
|
|||
Lifecycle of the reader can be modified with SetTimeout()
|
||||
*/
|
||||
Join(key Key, chunkC chan *Chunk) (LazySectionReader, chan error)
|
||||
|
||||
// returns the key length
|
||||
KeySize() int64
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
@ -111,7 +114,7 @@ func (self *TreeChunker) Init() {
|
|||
|
||||
}
|
||||
|
||||
func (self *TreeChunker) HashSize() int64 {
|
||||
func (self *TreeChunker) KeySize() int64 {
|
||||
return self.hashSize
|
||||
}
|
||||
|
||||
|
|
@ -143,13 +146,20 @@ func (self *TreeChunker) Hash(size int64, input SectionReader) []byte {
|
|||
}
|
||||
|
||||
func (self *TreeChunker) Split(key Key, data SectionReader, chunkC chan *Chunk) (errC chan error) {
|
||||
|
||||
if self.chunkSize <= 0 {
|
||||
panic("chunker must be initialised")
|
||||
}
|
||||
|
||||
if int64(len(key)) != self.hashSize {
|
||||
panic(fmt.Sprintf("root key buffer must be allocated byte slice of length %d", self.hashSize))
|
||||
}
|
||||
|
||||
wg := &sync.WaitGroup{}
|
||||
errC = make(chan error)
|
||||
rerrC := make(chan error)
|
||||
timeout := time.After(self.SplitTimeout)
|
||||
if key == nil {
|
||||
key = make([]byte, self.hashSize)
|
||||
}
|
||||
|
||||
wg.Add(1)
|
||||
go func() {
|
||||
|
||||
|
|
@ -159,10 +169,6 @@ func (self *TreeChunker) Split(key Key, data SectionReader, chunkC chan *Chunk)
|
|||
// takes lowest depth such that chunksize*HashCount^(depth+1) > size
|
||||
// power series, will find the order of magnitude of the data size in base hashCount or numbers of levels of branching in the resulting tree.
|
||||
|
||||
if self.Branches <= 1 || self.chunkSize <= 0 {
|
||||
panic("chunker must be initialised")
|
||||
}
|
||||
|
||||
for ; treeSize < size; treeSize *= self.Branches {
|
||||
depth++
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue