From e1f2fe75f8420e122580135fc6b523a6f8cbb159 Mon Sep 17 00:00:00 2001
From: Jeromy <jeromyj@gmail.com>
Date: Sat, 25 Oct 2014 03:36:00 -0700
Subject: [PATCH] add in dag removal

---
 blockservice/blockservice.go |  4 ++++
 exchange/bitswap/bitswap.go  |  2 +-
 merkledag/merkledag.go       | 13 +++++++++++++
 routing/dht/dht.go           |  6 +++++-
 4 files changed, 23 insertions(+), 2 deletions(-)

diff --git a/blockservice/blockservice.go b/blockservice/blockservice.go
index 51e9ad7d6..0ca533b19 100644
--- a/blockservice/blockservice.go
+++ b/blockservice/blockservice.go
@@ -76,3 +76,7 @@ func (s *BlockService) GetBlock(ctx context.Context, k u.Key) (*blocks.Block, er
 		return nil, u.ErrNotFound
 	}
 }
+
+func (s *BlockService) DeleteBlock(k u.Key) error {
+	return s.Datastore.Delete(k.DsKey())
+}
diff --git a/exchange/bitswap/bitswap.go b/exchange/bitswap/bitswap.go
index 64dcf96a8..9d3abccc2 100644
--- a/exchange/bitswap/bitswap.go
+++ b/exchange/bitswap/bitswap.go
@@ -94,7 +94,7 @@ func (bs *bitswap) Block(parent context.Context, k u.Key) (*blocks.Block, error)
 
 				response, err := bs.sender.SendRequest(ctx, p, message)
 				if err != nil {
-					log.Errorf("Error sender.SendRequest(%s)", p)
+					log.Error("Error sender.SendRequest(%s) = %s", p, err)
 					return
 				}
 				// FIXME ensure accounting is handled correctly when
diff --git a/merkledag/merkledag.go b/merkledag/merkledag.go
index a6dbc6ebf..7834677a8 100644
--- a/merkledag/merkledag.go
+++ b/merkledag/merkledag.go
@@ -215,3 +215,16 @@ func (n *DAGService) Get(k u.Key) (*Node, error) {
 
 	return Decoded(b.Data)
 }
+
+func (n *DAGService) Remove(nd *Node) error {
+	for _, l := range nd.Links {
+		if l.Node != nil {
+			n.Remove(l.Node)
+		}
+	}
+	k, err := nd.Key()
+	if err != nil {
+		return err
+	}
+	return n.Blocks.DeleteBlock(k)
+}
diff --git a/routing/dht/dht.go b/routing/dht/dht.go
index 52ae1f76c..b3ca010b7 100644
--- a/routing/dht/dht.go
+++ b/routing/dht/dht.go
@@ -540,7 +540,11 @@ func (dht *IpfsDHT) PingRoutine(t time.Duration) {
 func (dht *IpfsDHT) Bootstrap(ctx context.Context) {
 	id := make([]byte, 16)
 	rand.Read(id)
-	_, err := dht.FindPeer(ctx, peer.ID(id))
+	p, err := dht.FindPeer(ctx, peer.ID(id))
+	if err != nil {
+		log.Error("Bootstrap peer error: %s", err)
+	}
+	err = dht.dialer.DialPeer(p)
 	if err != nil {
 		log.Errorf("Bootstrap peer error: %s", err)
 	}
-- 
GitLab