@@ -91,7 +91,7 @@ func NewMessageRetriever(cfg MRConfig) *MessageRetriever {
91
91
WaitGroup : new (sync.WaitGroup ),
92
92
}
93
93
94
- mr .Add (1 )
94
+ mr .Add (2 )
95
95
return & mr
96
96
}
97
97
@@ -100,57 +100,61 @@ func (m *MessageRetriever) Run() {
100
100
peers := time .NewTicker (time .Minute * 10 )
101
101
defer dht .Stop ()
102
102
defer peers .Stop ()
103
- go m .fetchPointers (true )
103
+ go m .fetchPointersFromDHT ()
104
+ go m .fetchPointersFromPushNodes ()
104
105
for {
105
106
select {
106
107
case <- dht .C :
107
108
m .Add (1 )
108
- go m .fetchPointers ( true )
109
+ go m .fetchPointersFromDHT ( )
109
110
case <- peers .C :
110
111
m .Add (1 )
111
- go m .fetchPointers ( false )
112
+ go m .fetchPointersFromPushNodes ( )
112
113
}
113
114
}
114
115
}
115
116
116
117
// RunOnce - used to fetch messages only once
117
118
func (m * MessageRetriever ) RunOnce () {
118
119
m .Add (1 )
119
- go m .fetchPointers ( true )
120
+ go m .fetchPointersFromDHT ( )
120
121
m .Add (1 )
121
- go m .fetchPointers ( false )
122
+ go m .fetchPointersFromPushNodes ( )
122
123
}
123
124
124
- func (m * MessageRetriever ) fetchPointers ( useDHT bool ) {
125
+ func (m * MessageRetriever ) fetchPointersFromDHT ( ) {
125
126
ctx , cancel := context .WithCancel (context .Background ())
126
127
defer cancel ()
127
- wg := new (sync.WaitGroup )
128
- downloaded := 0
129
128
mh , _ := multihash .FromB58String (m .node .Identity .Pretty ())
130
129
peerOut := make (chan ps.PeerInfo )
131
130
go func (c chan ps.PeerInfo ) {
132
- pwg := new (sync.WaitGroup )
133
- pwg .Add (1 )
134
- go func (c chan ps.PeerInfo ) {
135
- out := m .getPointersDataPeers ()
136
- for p := range out {
137
- c <- p
138
- }
139
- pwg .Done ()
140
- }(c )
141
- if useDHT {
142
- pwg .Add (1 )
143
- go func (c chan ps.PeerInfo ) {
144
- iout := ipfs .FindPointersAsync (m .routing , ctx , mh , m .prefixLen )
145
- for p := range iout {
146
- c <- p
147
- }
148
- pwg .Done ()
149
- }(c )
131
+ iout := ipfs .FindPointersAsync (m .routing , ctx , mh , m .prefixLen )
132
+ for p := range iout {
133
+ c <- p
134
+ }
135
+ close (c )
136
+
137
+ }(peerOut )
138
+
139
+ m .downloadMessages (peerOut )
140
+ }
141
+
142
+ func (m * MessageRetriever ) fetchPointersFromPushNodes () {
143
+ peerOut := make (chan ps.PeerInfo )
144
+ go func (c chan ps.PeerInfo ) {
145
+ out := m .getPointersDataPeers ()
146
+ for p := range out {
147
+ c <- p
150
148
}
151
- pwg .Wait ()
152
149
close (c )
150
+
153
151
}(peerOut )
152
+ m .downloadMessages (peerOut )
153
+ }
154
+
155
+ func (m * MessageRetriever ) downloadMessages (peerOut chan ps.PeerInfo ) {
156
+ wg := new (sync.WaitGroup )
157
+ downloaded := 0
154
158
155
159
inFlight := make (map [string ]bool )
156
160
// Iterate over the pointers, adding 1 to the waitgroup for each pointer found
0 commit comments