Commit d183ae75 authored by Jeromy's avatar Jeromy Committed by Jakub Sztandera

Add more info to bitswap stat

License: MIT
Signed-off-by: default avatarJeromy <jeromyj@gmail.com>
parent 2712d298
...@@ -157,6 +157,9 @@ type Bitswap struct { ...@@ -157,6 +157,9 @@ type Bitswap struct {
blocksRecvd int blocksRecvd int
dupBlocksRecvd int dupBlocksRecvd int
dupDataRecvd uint64 dupDataRecvd uint64
blocksSent int
dataSent uint64
dataRecvd uint64
// Metrics interface metrics // Metrics interface metrics
dupMetric metrics.Histogram dupMetric metrics.Histogram
...@@ -401,6 +404,7 @@ func (bs *Bitswap) updateReceiveCounters(b blocks.Block) { ...@@ -401,6 +404,7 @@ func (bs *Bitswap) updateReceiveCounters(b blocks.Block) {
defer bs.counterLk.Unlock() defer bs.counterLk.Unlock()
bs.blocksRecvd++ bs.blocksRecvd++
bs.dataRecvd += uint64(len(b.RawData()))
if has { if has {
bs.dupBlocksRecvd++ bs.dupBlocksRecvd++
bs.dupDataRecvd += uint64(blkLen) bs.dupDataRecvd += uint64(blkLen)
......
...@@ -3,6 +3,7 @@ package bitswap ...@@ -3,6 +3,7 @@ package bitswap
import ( import (
"bytes" "bytes"
"context" "context"
"fmt"
"sync" "sync"
"testing" "testing"
"time" "time"
...@@ -299,6 +300,25 @@ func TestEmptyKey(t *testing.T) { ...@@ -299,6 +300,25 @@ func TestEmptyKey(t *testing.T) {
} }
} }
func assertStat(st *Stat, sblks, rblks int, sdata, rdata uint64) error {
if sblks != st.BlocksSent {
return fmt.Errorf("mismatch in blocks sent: %d vs %d", sblks, st.BlocksSent)
}
if rblks != st.BlocksReceived {
return fmt.Errorf("mismatch in blocks recvd: %d vs %d", rblks, st.BlocksReceived)
}
if sdata != st.DataSent {
return fmt.Errorf("mismatch in data sent: %d vs %d", sdata, st.DataSent)
}
if rdata != st.DataReceived {
return fmt.Errorf("mismatch in data recvd: %d vs %d", rdata, st.DataReceived)
}
return nil
}
func TestBasicBitswap(t *testing.T) { func TestBasicBitswap(t *testing.T) {
net := tn.VirtualNetwork(mockrouting.NewServer(), delay.Fixed(kNetworkDelay)) net := tn.VirtualNetwork(mockrouting.NewServer(), delay.Fixed(kNetworkDelay))
sg := NewTestSessionGenerator(net) sg := NewTestSessionGenerator(net)
...@@ -321,6 +341,24 @@ func TestBasicBitswap(t *testing.T) { ...@@ -321,6 +341,24 @@ func TestBasicBitswap(t *testing.T) {
t.Fatal(err) t.Fatal(err)
} }
st0, err := instances[0].Exchange.Stat()
if err != nil {
t.Fatal(err)
}
st1, err := instances[1].Exchange.Stat()
if err != nil {
t.Fatal(err)
}
if err := assertStat(st0, 1, 0, 1, 0); err != nil {
t.Fatal(err)
}
if err := assertStat(st1, 0, 1, 0, 1); err != nil {
t.Fatal(err)
}
t.Log(blk) t.Log(blk)
for _, inst := range instances { for _, inst := range instances {
err := inst.Exchange.Close() err := inst.Exchange.Close()
......
...@@ -11,6 +11,9 @@ type Stat struct { ...@@ -11,6 +11,9 @@ type Stat struct {
Wantlist []*cid.Cid Wantlist []*cid.Cid
Peers []string Peers []string
BlocksReceived int BlocksReceived int
DataReceived uint64
BlocksSent int
DataSent uint64
DupBlksReceived int DupBlksReceived int
DupDataReceived uint64 DupDataReceived uint64
} }
...@@ -23,6 +26,9 @@ func (bs *Bitswap) Stat() (*Stat, error) { ...@@ -23,6 +26,9 @@ func (bs *Bitswap) Stat() (*Stat, error) {
st.BlocksReceived = bs.blocksRecvd st.BlocksReceived = bs.blocksRecvd
st.DupBlksReceived = bs.dupBlocksRecvd st.DupBlksReceived = bs.dupBlocksRecvd
st.DupDataReceived = bs.dupDataRecvd st.DupDataReceived = bs.dupDataRecvd
st.BlocksSent = bs.blocksSent
st.DataSent = bs.dataSent
st.DataReceived = bs.dataRecvd
bs.counterLk.Unlock() bs.counterLk.Unlock()
for _, p := range bs.engine.Peers() { for _, p := range bs.engine.Peers() {
......
...@@ -64,6 +64,10 @@ func (bs *Bitswap) taskWorker(ctx context.Context, id int) { ...@@ -64,6 +64,10 @@ func (bs *Bitswap) taskWorker(ctx context.Context, id int) {
}) })
bs.wm.SendBlock(ctx, envelope) bs.wm.SendBlock(ctx, envelope)
bs.counterLk.Lock()
bs.blocksSent++
bs.dataSent += uint64(len(envelope.Block.RawData()))
bs.counterLk.Unlock()
case <-ctx.Done(): case <-ctx.Done():
return return
} }
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment