[tor-commits] [metrics-lib/master] Fix the logic what descriptors are left to download.
karsten at torproject.org
karsten at torproject.org
Mon Jan 23 18:43:20 UTC 2012
commit c0656d16ac5eabf4a75a9b9e51929b6e7b8d7d01
Author: Karsten Loesing <karsten.loesing at gmx.net>
Date: Mon Jan 23 19:38:10 2012 +0100
Fix the logic what descriptors are left to download.
---
.../descriptor/impl/DownloadCoordinatorImpl.java | 34 ++++++++++++++------
1 files changed, 24 insertions(+), 10 deletions(-)
diff --git a/src/org/torproject/descriptor/impl/DownloadCoordinatorImpl.java b/src/org/torproject/descriptor/impl/DownloadCoordinatorImpl.java
index 273655e..e91fd8b 100644
--- a/src/org/torproject/descriptor/impl/DownloadCoordinatorImpl.java
+++ b/src/org/torproject/descriptor/impl/DownloadCoordinatorImpl.java
@@ -229,16 +229,30 @@ public class DownloadCoordinatorImpl implements DownloadCoordinator {
if (response.getRequestEnd() != 0L) {
this.descriptorQueue.add(response);
}
- if ((!this.missingConsensus ||
- (this.downloadConsensusFromAllAuthorities &&
- this.requestedConsensuses.containsAll(
- this.directoryAuthorities.keySet()) &&
- this.requestingConsensuses.isEmpty())) &&
- this.missingVotes.isEmpty() &&
- this.requestingVotes.isEmpty()) {
- /* TODO This logic may be somewhat broken. We don't wait for all
- * consensus requests to complete or fail, which results in adding
- * (failed) requests to the queue when we think we're done. */
+ boolean doneDownloading = true;
+ if ((this.missingConsensus ||
+ this.downloadConsensusFromAllAuthorities) &&
+ (!this.requestedConsensuses.containsAll(
+ this.directoryAuthorities.keySet()) ||
+ !this.requestingConsensuses.isEmpty())) {
+ doneDownloading = false;
+ }
+ if (!this.missingVotes.isEmpty()) {
+ if (!this.requestingVotes.isEmpty() ||
+ !this.requestedVotes.keySet().containsAll(
+ this.directoryAuthorities.keySet())) {
+ doneDownloading = false;
+ } else {
+ for (String missingVote : this.missingVotes) {
+ for (Set<String> reqVotes : this.requestedVotes.values()) {
+ if (!reqVotes.contains(missingVote)) {
+ doneDownloading = false;
+ }
+ }
+ }
+ }
+ }
+ if (doneDownloading) {
this.hasFinishedDownloading = true;
this.globalTimerThread.interrupt();
this.descriptorQueue.setOutOfDescriptors();
More information about the tor-commits
mailing list