mirror of
https://github.com/ethereum/go-ethereum.git
synced 2026-07-22 20:56:42 +00:00
fix tests
This commit is contained in:
parent
e385643f30
commit
2d5d2bdaf2
5 changed files with 32 additions and 19 deletions
|
|
@ -306,7 +306,7 @@ func (self *LazyChunkReader) ReadAt(b []byte, off int64) (read int, err error) {
|
||||||
dpaLogger.Debugf("chunk data received for %x", chunk.Key[:4])
|
dpaLogger.Debugf("chunk data received for %x", chunk.Key[:4])
|
||||||
fmt.Printf("chunk data received for %x\n", chunk.Key[:4])
|
fmt.Printf("chunk data received for %x\n", chunk.Key[:4])
|
||||||
}
|
}
|
||||||
if chunk.Data == nil {
|
if len(chunk.Data) == 0 {
|
||||||
return 0, notFound
|
return 0, notFound
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -347,10 +347,11 @@ func (self *LazyChunkReader) join(b []byte, off int64, eoff int64, depth int, tr
|
||||||
treeSize /= self.chunker.Branches
|
treeSize /= self.chunker.Branches
|
||||||
depth--
|
depth--
|
||||||
}
|
}
|
||||||
dpaLogger.Debugf("-> depth: %v, loff: %v, eoff: %v, chunk.Size: %v, treeSize: %v", depth, off, eoff, chunk.Size, treeSize)
|
fmt.Printf("-> depth: %v, loff: %v, eoff: %v, len(chunk.Data): %v, chunk.Size: %v, treeSize: %v\n", depth, off, eoff, len(chunk.Data), chunk.Size, treeSize)
|
||||||
fmt.Printf("-> depth: %v, loff: %v, eoff: %v, chunk.Size: %v, treeSize: %v\n", depth, off, eoff, chunk.Size, treeSize)
|
|
||||||
|
|
||||||
if depth == 0 {
|
if depth == 0 {
|
||||||
|
dpaLogger.Debugf("len(b): %v, off: %v, eoff: %v, chunk.Size: %v, treeSize: %v", depth, len(b), off, eoff, chunk.Size, treeSize)
|
||||||
|
|
||||||
copy(b, chunk.Data[off:eoff])
|
copy(b, chunk.Data[off:eoff])
|
||||||
return // simply give back the chunks reader for content chunks
|
return // simply give back the chunks reader for content chunks
|
||||||
}
|
}
|
||||||
|
|
@ -375,32 +376,33 @@ func (self *LazyChunkReader) join(b []byte, off int64, eoff int64, depth int, tr
|
||||||
|
|
||||||
wg.Add(1)
|
wg.Add(1)
|
||||||
go func(j int64) {
|
go func(j int64) {
|
||||||
dpaLogger.Debugf("subtree index: %v", j)
|
|
||||||
childKey := chunk.Data[j*self.chunker.hashSize : (j+1)*self.chunker.hashSize]
|
childKey := chunk.Data[j*self.chunker.hashSize : (j+1)*self.chunker.hashSize]
|
||||||
|
dpaLogger.Debugf("subtree index: %v -> %x", j, childKey[:4])
|
||||||
|
|
||||||
chunk := &Chunk{
|
ch := &Chunk{
|
||||||
Key: childKey,
|
Key: childKey,
|
||||||
C: make(chan bool, 1), // close channel to signal data delivery
|
C: make(chan bool), // close channel to signal data delivery
|
||||||
}
|
}
|
||||||
dpaLogger.Debugf("chunk data sent for %x (key interval in chunk %v-%v)", chunk.Key[:4], j*self.chunker.hashSize, (j+1)*self.chunker.hashSize)
|
dpaLogger.Debugf("chunk data sent for %x (key interval in chunk %v-%v)", ch.Key[:4], j*self.chunker.hashSize, (j+1)*self.chunker.hashSize)
|
||||||
self.chunkC <- chunk // submit retrieval request, someone should be listening on the other side (or we will time out globally)
|
fmt.Printf("chunk data sent for %x (key interval in chunk %v-%v)\n", ch.Key[:4], j*self.chunker.hashSize, (j+1)*self.chunker.hashSize)
|
||||||
|
self.chunkC <- ch // submit retrieval request, someone should be listening on the other side (or we will time out globally)
|
||||||
|
|
||||||
// waiting for the chunk retrieval
|
// waiting for the chunk retrieval
|
||||||
select {
|
select {
|
||||||
case <-self.quitC:
|
case <-self.quitC:
|
||||||
// this is how we control process leakage (quitC is closed once join is finished (after timeout))
|
// this is how we control process leakage (quitC is closed once join is finished (after timeout))
|
||||||
return
|
return
|
||||||
case <-chunk.C: // bells are ringing, data have been delivered
|
case <-ch.C: // bells are ringing, data have been delivered
|
||||||
dpaLogger.Debugf("chunk data received")
|
dpaLogger.Debugf("chunk data received")
|
||||||
}
|
}
|
||||||
if soff < off {
|
if soff < off {
|
||||||
soff = off
|
soff = off
|
||||||
}
|
}
|
||||||
if chunk.Data == nil {
|
if len(ch.Data) == 0 {
|
||||||
self.errC <- fmt.Errorf("chunk %v-%v not found", off, off+treeSize)
|
self.errC <- fmt.Errorf("chunk %v-%v not found", off, off+treeSize)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
self.join(b[soff-off:seoff-off], soff-roff, seoff-roff, depth-1, treeSize/self.chunker.Branches, chunk, &wg)
|
self.join(b[soff-off:seoff-off], soff-roff, seoff-roff, depth-1, treeSize/self.chunker.Branches, ch, &wg)
|
||||||
}(i)
|
}(i)
|
||||||
} //for
|
} //for
|
||||||
wg.Wait()
|
wg.Wait()
|
||||||
|
|
|
||||||
|
|
@ -61,8 +61,8 @@ SPLIT:
|
||||||
quit := make(chan bool)
|
quit := make(chan bool)
|
||||||
|
|
||||||
go func() {
|
go func() {
|
||||||
for chunk := range chunkC {
|
for ch := range chunkC {
|
||||||
go func() {
|
go func(chunk *Chunk) {
|
||||||
storedChunk, err := m.Get(chunk.Key)
|
storedChunk, err := m.Get(chunk.Key)
|
||||||
if err == notFound {
|
if err == notFound {
|
||||||
dpaLogger.DebugDetailf("chunk '%x' not found", chunk.Key)
|
dpaLogger.DebugDetailf("chunk '%x' not found", chunk.Key)
|
||||||
|
|
@ -72,8 +72,9 @@ SPLIT:
|
||||||
chunk.Data = storedChunk.Data
|
chunk.Data = storedChunk.Data
|
||||||
chunk.Size = storedChunk.Size
|
chunk.Size = storedChunk.Size
|
||||||
}
|
}
|
||||||
|
dpaLogger.DebugDetailf("chunk '%x' not found", chunk.Key[:4])
|
||||||
close(chunk.C)
|
close(chunk.C)
|
||||||
}()
|
}(ch)
|
||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -22,6 +22,12 @@ func testDbStore(l int64, branches int64, t *testing.T) {
|
||||||
testStore(m, l, branches, t)
|
testStore(m, l, branches, t)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestDbStore128_0x1000000(t *testing.T) {
|
||||||
|
// defer test.Testlog(t).Detach()
|
||||||
|
test.LogInit()
|
||||||
|
testDbStore(0x1000000, 128, t)
|
||||||
|
}
|
||||||
|
|
||||||
func TestDbStore128_10000(t *testing.T) {
|
func TestDbStore128_10000(t *testing.T) {
|
||||||
// defer test.Testlog(t).Detach()
|
// defer test.Testlog(t).Detach()
|
||||||
test.LogInit()
|
test.LogInit()
|
||||||
|
|
|
||||||
13
bzz/dpa.go
13
bzz/dpa.go
|
|
@ -124,9 +124,9 @@ func (self *DPA) retrieveLoop() {
|
||||||
|
|
||||||
go func() {
|
go func() {
|
||||||
RETRIEVE:
|
RETRIEVE:
|
||||||
for chunk := range self.retrieveC {
|
for ch := range self.retrieveC {
|
||||||
|
|
||||||
go func() {
|
go func(chunk *Chunk) {
|
||||||
storedChunk, err := self.ChunkStore.Get(chunk.Key)
|
storedChunk, err := self.ChunkStore.Get(chunk.Key)
|
||||||
if err == notFound {
|
if err == notFound {
|
||||||
dpaLogger.DebugDetailf("chunk '%x' not found", chunk.Key)
|
dpaLogger.DebugDetailf("chunk '%x' not found", chunk.Key)
|
||||||
|
|
@ -137,7 +137,7 @@ func (self *DPA) retrieveLoop() {
|
||||||
chunk.Size = storedChunk.Size
|
chunk.Size = storedChunk.Size
|
||||||
}
|
}
|
||||||
close(chunk.C)
|
close(chunk.C)
|
||||||
}()
|
}(ch)
|
||||||
select {
|
select {
|
||||||
case <-self.quitC:
|
case <-self.quitC:
|
||||||
break RETRIEVE
|
break RETRIEVE
|
||||||
|
|
@ -151,8 +151,11 @@ func (self *DPA) storeLoop() {
|
||||||
self.storeC = make(chan *Chunk)
|
self.storeC = make(chan *Chunk)
|
||||||
go func() {
|
go func() {
|
||||||
STORE:
|
STORE:
|
||||||
for chunk := range self.storeC {
|
for ch := range self.storeC {
|
||||||
self.ChunkStore.Put(chunk)
|
// go func(chunk *Chunk) {
|
||||||
|
self.ChunkStore.Put(ch)
|
||||||
|
// self.ChunkStore.Put(chunk)
|
||||||
|
// }(ch)
|
||||||
select {
|
select {
|
||||||
case <-self.quitC:
|
case <-self.quitC:
|
||||||
break STORE
|
break STORE
|
||||||
|
|
|
||||||
|
|
@ -14,6 +14,7 @@ func TestDPA(t *testing.T) {
|
||||||
test.LogInit()
|
test.LogInit()
|
||||||
os.RemoveAll("/tmp/bzz")
|
os.RemoveAll("/tmp/bzz")
|
||||||
dbStore, err := newDbStore("/tmp/bzz")
|
dbStore, err := newDbStore("/tmp/bzz")
|
||||||
|
// dbStore.setCapacity(50000)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Errorf("DB error: %v", err)
|
t.Errorf("DB error: %v", err)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue