Skip to content

Commit 39bab37

Browse files
committed
Less magic numbers and more readability in IPFSCompat.
1 parent d7ee62c commit 39bab37

File tree

1 file changed

+57
-20
lines changed
  • contrib/storage-ipfs/src/main/java/org/apache/drill/exec/store/ipfs

1 file changed

+57
-20
lines changed

contrib/storage-ipfs/src/main/java/org/apache/drill/exec/store/ipfs/IPFSCompat.java

Lines changed: 57 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,28 @@ public Map resolve(String scheme, String path, boolean recursive) {
101101
return ret.get();
102102
}
103103

104+
/**
105+
* As defined in https://github.com/libp2p/go-libp2p-core/blob/b77fd280f2bfcce22f10a000e8e1d9ec53c47049/routing/query.go#L16
106+
*/
107+
public enum DHTQueryEventType {
108+
// Sending a query to a peer.
109+
SendingQuery,
110+
// Got a response from a peer.
111+
PeerResponse,
112+
// Found a "closest" peer (not currently used).
113+
FinalPeer,
114+
// Got an error when querying.
115+
QueryError,
116+
// Found a provider.
117+
Provider,
118+
// Found a value.
119+
Value,
120+
// Adding a peer to the query.
121+
AddingPeer,
122+
// Dialing a peer.
123+
DialingPeer;
124+
}
125+
104126
public class DHT {
105127
/**
106128
* Find internet addresses of a given peer.
@@ -117,17 +139,25 @@ public List<String> findpeerListTimeout(Multihash id, int timeout, ExecutorServi
117139
timeout,
118140
res -> {
119141
Map peer = (Map) res;
120-
if (peer != null) {
121-
if ( (int) peer.get("Type") == 2 ) {
122-
ret.set((List<String>)
123-
((Map)
124-
((List) peer.get("Responses")
125-
).get(0)
126-
).get("Addrs"));
127-
return true;
128-
}
142+
if (peer == null) {
143+
return false;
144+
}
145+
if ( (int) peer.get("Type") != DHTQueryEventType.FinalPeer.ordinal() ) {
146+
return false;
147+
}
148+
List<Map> responses = (List<Map>) peer.get("Responses");
149+
if (responses == null || responses.size() == 0) {
150+
return false;
151+
}
152+
// FinalPeer responses have exactly one response
153+
Map<String, List<String>> response = responses.get(0);
154+
if (response == null) {
155+
return false;
129156
}
130-
return false;
157+
List<String> addrs = response.get("Addrs");
158+
159+
ret.set(addrs);
160+
return true;
131161
},
132162
err -> {
133163
if (!(err instanceof TimeoutException)) {
@@ -158,17 +188,24 @@ public List<String> findprovsListTimeout(Multihash id, int maxPeers, int timeout
158188
timeout,
159189
res -> {
160190
Map peer = (Map) res;
161-
if ( peer != null ) {
162-
if ( (int) peer.get("Type") == 4 ) {
163-
ret.get().add(
164-
(String)
165-
((Map)
166-
((List) peer.get("Responses")
167-
).get(0)
168-
).get("ID")
169-
);
170-
}
191+
if ( peer == null ) {
192+
return false;
193+
}
194+
if ( (int) peer.get("Type") != DHTQueryEventType.Provider.ordinal() ) {
195+
return false;
171196
}
197+
List<Map> responses = (List<Map>) peer.get("Responses");
198+
if (responses == null || responses.size() == 0) {
199+
return false;
200+
}
201+
// One Provider message contains only one provider
202+
Map<String, String> response = responses.get(0);
203+
if (response == null) {
204+
return false;
205+
}
206+
String providerID = response.get("ID");
207+
208+
ret.get().add(providerID);
172209
return ret.get().size() >= maxPeers;
173210
},
174211
err -> {

0 commit comments

Comments
 (0)