1
0
mirror of https://github.com/ipfs/kubo.git synced 2025-08-06 19:44:01 +08:00

Made routing code pass golint.

This commit is contained in:
Chas Leichner
2014-08-16 23:48:03 -07:00
committed by Juan Batiz-Benet
parent 87bfdbc599
commit a6851fa55b
7 changed files with 39 additions and 34 deletions

View File

@ -180,7 +180,7 @@ func TestProvides(t *testing.T) {
t.Fatal(err) t.Fatal(err)
} }
err = dhts[3].PutLocal(u.Key("hello"), []byte("world")) err = dhts[3].putLocal(u.Key("hello"), []byte("world"))
if err != nil { if err != nil {
t.Fatal(err) t.Fatal(err)
} }
@ -225,7 +225,7 @@ func TestLayeredGet(t *testing.T) {
t.Fatal(err) t.Fatal(err)
} }
err = dhts[3].PutLocal(u.Key("hello"), []byte("world")) err = dhts[3].putLocal(u.Key("hello"), []byte("world"))
if err != nil { if err != nil {
t.Fatal(err) t.Fatal(err)
} }

View File

@ -36,7 +36,7 @@ func (dht *IpfsDHT) getDiagInfo() *diagInfo {
di.LifeSpan = time.Since(dht.birth) di.LifeSpan = time.Since(dht.birth)
di.Keys = nil // Currently no way to query datastore di.Keys = nil // Currently no way to query datastore
for _, p := range dht.routingTables[0].Listpeers() { for _, p := range dht.routingTables[0].ListPeers() {
di.Connections = append(di.Connections, connDiagInfo{p.GetLatency(), p.ID}) di.Connections = append(di.Connections, connDiagInfo{p.GetLatency(), p.ID})
} }
return di return di

View File

@ -105,9 +105,9 @@ func TestGetFailures(t *testing.T) {
t.Fatal(err) t.Fatal(err)
} }
resp := DHTMessage{ resp := Message{
Type: pmes.GetType(), Type: pmes.GetType(),
Id: pmes.GetId(), ID: pmes.GetId(),
Response: true, Response: true,
Success: false, Success: false,
} }
@ -140,10 +140,10 @@ func TestGetFailures(t *testing.T) {
}) })
// Now we test this DHT's handleGetValue failure // Now we test this DHT's handleGetValue failure
req := DHTMessage{ req := Message{
Type: PBDHTMessage_GET_VALUE, Type: PBDHTMessage_GET_VALUE,
Key: "hello", Key: "hello",
Id: GenerateMessageID(), ID: GenerateMessageID(),
Value: []byte{0}, Value: []byte{0},
} }
fn.Chan.Incoming <- swarm.NewMessage(other, req.ToProtobuf()) fn.Chan.Incoming <- swarm.NewMessage(other, req.ToProtobuf())

View File

@ -68,7 +68,7 @@ func (b *Bucket) Split(cpl int, target ID) *Bucket {
newbuck.list = out newbuck.list = out
e := b.list.Front() e := b.list.Front()
for e != nil { for e != nil {
peerID := convertPeerID(e.Value.(*peer.Peer).ID) peerID := ConvertPeerID(e.Value.(*peer.Peer).ID)
peerCPL := prefLen(peerID, target) peerCPL := prefLen(peerID, target)
if peerCPL > cpl { if peerCPL > cpl {
cur := e cur := e

View File

@ -28,7 +28,8 @@ type RoutingTable struct {
bucketsize int bucketsize int
} }
func newRoutingTable(bucketsize int, localID ID, latency time.Duration) *RoutingTable { // NewRoutingTable creates a new routing table with a given bucketsize, local ID, and latency tolerance.
func NewRoutingTable(bucketsize int, localID ID, latency time.Duration) *RoutingTable {
rt := new(RoutingTable) rt := new(RoutingTable)
rt.Buckets = []*Bucket{newBucket()} rt.Buckets = []*Bucket{newBucket()}
rt.bucketsize = bucketsize rt.bucketsize = bucketsize
@ -42,7 +43,7 @@ func newRoutingTable(bucketsize int, localID ID, latency time.Duration) *Routing
func (rt *RoutingTable) Update(p *peer.Peer) *peer.Peer { func (rt *RoutingTable) Update(p *peer.Peer) *peer.Peer {
rt.tabLock.Lock() rt.tabLock.Lock()
defer rt.tabLock.Unlock() defer rt.tabLock.Unlock()
peerID := convertPeerID(p.ID) peerID := ConvertPeerID(p.ID)
cpl := xor(peerID, rt.local).commonPrefixLen() cpl := xor(peerID, rt.local).commonPrefixLen()
bucketID := cpl bucketID := cpl
@ -108,7 +109,7 @@ func (p peerSorterArr) Less(a, b int) bool {
func copyPeersFromList(target ID, peerArr peerSorterArr, peerList *list.List) peerSorterArr { func copyPeersFromList(target ID, peerArr peerSorterArr, peerList *list.List) peerSorterArr {
for e := peerList.Front(); e != nil; e = e.Next() { for e := peerList.Front(); e != nil; e = e.Next() {
p := e.Value.(*peer.Peer) p := e.Value.(*peer.Peer)
pID := convertPeerID(p.ID) pID := ConvertPeerID(p.ID)
pd := peerDistance{ pd := peerDistance{
p: p, p: p,
distance: xor(target, pID), distance: xor(target, pID),
@ -124,7 +125,7 @@ func copyPeersFromList(target ID, peerArr peerSorterArr, peerList *list.List) pe
// Find a specific peer by ID or return nil // Find a specific peer by ID or return nil
func (rt *RoutingTable) Find(id peer.ID) *peer.Peer { func (rt *RoutingTable) Find(id peer.ID) *peer.Peer {
srch := rt.NearestPeers(convertPeerID(id), 1) srch := rt.NearestPeers(ConvertPeerID(id), 1)
if len(srch) == 0 || !srch[0].ID.Equal(id) { if len(srch) == 0 || !srch[0].ID.Equal(id) {
return nil return nil
} }
@ -190,8 +191,9 @@ func (rt *RoutingTable) Size() int {
return tot return tot
} }
// ListPeers takes a RoutingTable and returns a list of all peers from all buckets in the table.
// NOTE: This is potentially unsafe... use at your own risk // NOTE: This is potentially unsafe... use at your own risk
func (rt *RoutingTable) listPeers() []*peer.Peer { func (rt *RoutingTable) ListPeers() []*peer.Peer {
var peers []*peer.Peer var peers []*peer.Peer
for _, buck := range rt.Buckets { for _, buck := range rt.Buckets {
for e := buck.getIter(); e != nil; e = e.Next() { for e := buck.getIter(); e != nil; e = e.Next() {
@ -201,10 +203,11 @@ func (rt *RoutingTable) listPeers() []*peer.Peer {
return peers return peers
} }
func (rt *RoutingTable) print() { // Print prints a descriptive statement about the provided RoutingTable
func (rt *RoutingTable) Print() {
fmt.Printf("Routing Table, bs = %d, Max latency = %d\n", rt.bucketsize, rt.maxLatency) fmt.Printf("Routing Table, bs = %d, Max latency = %d\n", rt.bucketsize, rt.maxLatency)
rt.tabLock.RLock() rt.tabLock.RLock()
peers := rt.listPeers() peers := rt.ListPeers()
for i, p := range peers { for i, p := range peers {
fmt.Printf("%d) %s %s\n", i, p.ID.Pretty(), p.GetLatency().String()) fmt.Printf("%d) %s %s\n", i, p.ID.Pretty(), p.GetLatency().String())
} }

View File

@ -36,7 +36,7 @@ func TestBucket(t *testing.T) {
} }
local := _randPeer() local := _randPeer()
localID := convertPeerID(local.ID) localID := ConvertPeerID(local.ID)
i := rand.Intn(len(peers)) i := rand.Intn(len(peers))
e := b.find(peers[i].ID) e := b.find(peers[i].ID)
@ -44,10 +44,10 @@ func TestBucket(t *testing.T) {
t.Errorf("Failed to find peer: %v", peers[i]) t.Errorf("Failed to find peer: %v", peers[i])
} }
spl := b.Split(0, convertPeerID(local.ID)) spl := b.Split(0, ConvertPeerID(local.ID))
llist := b.list llist := b.list
for e := llist.Front(); e != nil; e = e.Next() { for e := llist.Front(); e != nil; e = e.Next() {
p := convertPeerID(e.Value.(*peer.Peer).ID) p := ConvertPeerID(e.Value.(*peer.Peer).ID)
cpl := xor(p, localID).commonPrefixLen() cpl := xor(p, localID).commonPrefixLen()
if cpl > 0 { if cpl > 0 {
t.Fatalf("Split failed. found id with cpl > 0 in 0 bucket") t.Fatalf("Split failed. found id with cpl > 0 in 0 bucket")
@ -56,7 +56,7 @@ func TestBucket(t *testing.T) {
rlist := spl.list rlist := spl.list
for e := rlist.Front(); e != nil; e = e.Next() { for e := rlist.Front(); e != nil; e = e.Next() {
p := convertPeerID(e.Value.(*peer.Peer).ID) p := ConvertPeerID(e.Value.(*peer.Peer).ID)
cpl := xor(p, localID).commonPrefixLen() cpl := xor(p, localID).commonPrefixLen()
if cpl == 0 { if cpl == 0 {
t.Fatalf("Split failed. found id with cpl == 0 in non 0 bucket") t.Fatalf("Split failed. found id with cpl == 0 in non 0 bucket")
@ -67,7 +67,7 @@ func TestBucket(t *testing.T) {
// Right now, this just makes sure that it doesnt hang or crash // Right now, this just makes sure that it doesnt hang or crash
func TestTableUpdate(t *testing.T) { func TestTableUpdate(t *testing.T) {
local := _randPeer() local := _randPeer()
rt := newRoutingTable(10, convertPeerID(local.ID), time.Hour) rt := NewRoutingTable(10, ConvertPeerID(local.ID), time.Hour)
peers := make([]*peer.Peer, 100) peers := make([]*peer.Peer, 100)
for i := 0; i < 100; i++ { for i := 0; i < 100; i++ {
@ -93,7 +93,7 @@ func TestTableUpdate(t *testing.T) {
func TestTableFind(t *testing.T) { func TestTableFind(t *testing.T) {
local := _randPeer() local := _randPeer()
rt := newRoutingTable(10, convertPeerID(local.ID), time.Hour) rt := NewRoutingTable(10, ConvertPeerID(local.ID), time.Hour)
peers := make([]*peer.Peer, 100) peers := make([]*peer.Peer, 100)
for i := 0; i < 5; i++ { for i := 0; i < 5; i++ {
@ -102,7 +102,7 @@ func TestTableFind(t *testing.T) {
} }
t.Logf("Searching for peer: '%s'", peers[2].ID.Pretty()) t.Logf("Searching for peer: '%s'", peers[2].ID.Pretty())
found := rt.NearestPeer(convertPeerID(peers[2].ID)) found := rt.NearestPeer(ConvertPeerID(peers[2].ID))
if !found.ID.Equal(peers[2].ID) { if !found.ID.Equal(peers[2].ID) {
t.Fatalf("Failed to lookup known node...") t.Fatalf("Failed to lookup known node...")
} }
@ -110,7 +110,7 @@ func TestTableFind(t *testing.T) {
func TestTableFindMultiple(t *testing.T) { func TestTableFindMultiple(t *testing.T) {
local := _randPeer() local := _randPeer()
rt := newRoutingTable(20, convertPeerID(local.ID), time.Hour) rt := NewRoutingTable(20, ConvertPeerID(local.ID), time.Hour)
peers := make([]*peer.Peer, 100) peers := make([]*peer.Peer, 100)
for i := 0; i < 18; i++ { for i := 0; i < 18; i++ {
@ -119,7 +119,7 @@ func TestTableFindMultiple(t *testing.T) {
} }
t.Logf("Searching for peer: '%s'", peers[2].ID.Pretty()) t.Logf("Searching for peer: '%s'", peers[2].ID.Pretty())
found := rt.NearestPeers(convertPeerID(peers[2].ID), 15) found := rt.NearestPeers(ConvertPeerID(peers[2].ID), 15)
if len(found) != 15 { if len(found) != 15 {
t.Fatalf("Got back different number of peers than we expected.") t.Fatalf("Got back different number of peers than we expected.")
} }
@ -130,7 +130,7 @@ func TestTableFindMultiple(t *testing.T) {
// and set GOMAXPROCS above 1 // and set GOMAXPROCS above 1
func TestTableMultithreaded(t *testing.T) { func TestTableMultithreaded(t *testing.T) {
local := peer.ID("localPeer") local := peer.ID("localPeer")
tab := newRoutingTable(20, convertPeerID(local), time.Hour) tab := NewRoutingTable(20, ConvertPeerID(local), time.Hour)
var peers []*peer.Peer var peers []*peer.Peer
for i := 0; i < 500; i++ { for i := 0; i < 500; i++ {
peers = append(peers, _randPeer()) peers = append(peers, _randPeer())
@ -167,8 +167,8 @@ func TestTableMultithreaded(t *testing.T) {
func BenchmarkUpdates(b *testing.B) { func BenchmarkUpdates(b *testing.B) {
b.StopTimer() b.StopTimer()
local := convertKey("localKey") local := ConvertKey("localKey")
tab := newRoutingTable(20, local, time.Hour) tab := NewRoutingTable(20, local, time.Hour)
var peers []*peer.Peer var peers []*peer.Peer
for i := 0; i < b.N; i++ { for i := 0; i < b.N; i++ {
@ -183,8 +183,8 @@ func BenchmarkUpdates(b *testing.B) {
func BenchmarkFinds(b *testing.B) { func BenchmarkFinds(b *testing.B) {
b.StopTimer() b.StopTimer()
local := convertKey("localKey") local := ConvertKey("localKey")
tab := newRoutingTable(20, local, time.Hour) tab := NewRoutingTable(20, local, time.Hour)
var peers []*peer.Peer var peers []*peer.Peer
for i := 0; i < b.N; i++ { for i := 0; i < b.N; i++ {

View File

@ -76,21 +76,23 @@ func equalizeSizes(a, b ID) (ID, ID) {
return a, b return a, b
} }
func convertPeerID(id peer.ID) ID { // ConvertPeerID creates a DHT ID by hashing a Peer ID (Multihash)
func ConvertPeerID(id peer.ID) ID {
hash := sha256.Sum256(id) hash := sha256.Sum256(id)
return hash[:] return hash[:]
} }
func convertKey(id u.Key) ID { // ConvertKey creates a DHT ID by hashing a local key (String)
func ConvertKey(id u.Key) ID {
hash := sha256.Sum256([]byte(id)) hash := sha256.Sum256([]byte(id))
return hash[:] return hash[:]
} }
// Closer returns true if a is closer to key than b is // Closer returns true if a is closer to key than b is
func Closer(a, b peer.ID, key u.Key) bool { func Closer(a, b peer.ID, key u.Key) bool {
aid := convertPeerID(a) aid := ConvertPeerID(a)
bid := convertPeerID(b) bid := ConvertPeerID(b)
tgt := convertKey(key) tgt := ConvertKey(key)
adist := xor(aid, tgt) adist := xor(aid, tgt)
bdist := xor(bid, tgt) bdist := xor(bid, tgt)