public void run() {
   try {
     for (KeyCertificate c :
         downloader.downloadKeyCertificates(directory.getRequiredCertificates())) {
       directory.addCertificate(c);
     }
     directory.storeCertificates();
   } catch (DirectoryRequestFailedException e) {
     logger.warning("Failed to download key certificates: " + e.getMessage());
   } finally {
     isDownloadingCertificates = false;
   }
 }
    public void run() {
      try {
        final ConsensusDocument consensus =
            downloader.downloadCurrentConsensus(useMicrodescriptors());
        setCurrentConsensus(consensus);
        directory.addConsensusDocument(consensus, false);

      } catch (DirectoryRequestFailedException e) {
        logger.warning("Failed to download current consensus document: " + e.getMessage());
      } finally {
        isDownloadingConsensus = false;
      }
    }
 public void run() {
   try {
     if (useMicrodescriptors) {
       directory.addRouterMicrodescriptors(
           downloader.downloadRouterMicrodescriptors(fingerprints));
     } else {
       directory.addRouterDescriptors(downloader.downloadRouterDescriptors(fingerprints));
     }
   } catch (DirectoryRequestFailedException e) {
     logger.warning("Failed to download router descriptors: " + e.getMessage());
   } finally {
     outstandingDescriptorTasks.decrementAndGet();
   }
 }