Example #1
0
  // QHandler handles incoming queries.
  public void run() {
    // hmmm.. this seems like potential bug.  I want to check that query is not in table.  But even
    // if query table contains key,
    // that does not necessarily mean it is in table, b/c two queries can have SAME HASHCODE VALUE.
    // I need to have some other means.
    // Will talk to Rusty @ this on Monday.

    if (!qt.containsKey(query)) // check that query is not already in table
    {
      Searcher.inform(query); // Give information to the Search Monitor panel
      NetworkManager.writeButOne(query.getIP(), query); /*Query is forwarded to all connected nodes
								     except one from which query came. */
      qt.put((Packet) query, query); // add query to table, indexed by its unique MessageID
      searchResult =
          SharedDirectory.search(query.getSearchString()); // check shared directory for query match
      numHits = searchResult.getSize();

      if (numHits != 0) // package a query hit to send out if there is at least one query match
      {
        queryID = query.getMessageID();
        port = Mine.getPort();
        myIP = Mine.getIPAddress();
        speed = Mine.getSpeed();
        serventID = Mine.getServentIdentifier();
        queryHit = new QueryHit(numHits, port, myIP, speed, searchResult, serventID, queryID);
        NetworkManager.writeToOne(
            query.getIP(), queryHit); // send qHit back to node that sent original query
      }
    }
  }
  /**
   * An adapter method that converts the <code>SiteInfo</code> object to <code>SiteCatalogEntry
   * </code> object.
   *
   * @param s <code>SiteInfo</code> to be converted.
   * @param logger the hande to the LogManager
   * @return the converted <code>SiteCatalogEntry</code> object.
   */
  public static SiteCatalogEntry convert(SiteInfo s, LogManager logger) {
    SiteCatalogEntry3 site = new SiteCatalogEntry3();

    /* set the handle */
    site.setSiteHandle((String) s.getInfo(SiteInfo.HANDLE));

    VDSSysInfo sysinfo = (VDSSysInfo) s.getInfo(SiteInfo.SYSINFO);
    if (sysinfo != null) {
      site.setVDSSysInfo(sysinfo);
    }

    // describe the head node filesystem
    HeadNodeFS hfs = new HeadNodeFS();

    /* set the work directory as shared scratch */
    HeadNodeScratch hscratch = new HeadNodeScratch();
    SharedDirectory hscratchShared = new SharedDirectory();
    String workDir = s.getExecMountPoint();
    for (Iterator it = ((List) s.getInfo(SiteInfo.GRIDFTP)).iterator(); it.hasNext(); ) {
      GridFTPServer g = (GridFTPServer) it.next();
      hscratchShared.addFileServer(
          new FileServer("gsiftp", (String) g.getInfo(GridFTPServer.GRIDFTP_URL), workDir));
    }
    hscratchShared.setInternalMountPoint(new InternalMountPoint(workDir));
    hscratch.setSharedDirectory(hscratchShared);
    hfs.setScratch(hscratch);

    /* set the storage directory as shared storage */
    HeadNodeStorage hstorage = new HeadNodeStorage();
    SharedDirectory hstorageShared = new SharedDirectory();
    String storageDir = null;
    for (Iterator it = ((List) s.getInfo(SiteInfo.GRIDFTP)).iterator(); it.hasNext(); ) {
      GridFTPServer g = (GridFTPServer) it.next();
      storageDir = (String) g.getInfo(GridFTPServer.STORAGE_DIR);
      hstorageShared.addFileServer(
          new FileServer("gsiftp", (String) g.getInfo(GridFTPServer.GRIDFTP_URL), storageDir));
    }
    hstorageShared.setInternalMountPoint(new InternalMountPoint(storageDir));
    hstorage.setSharedDirectory(hstorageShared);
    hfs.setStorage(hstorage);

    site.setHeadNodeFS(hfs);

    /* set the storage directory as GridGateways */
    for (Iterator it = ((List) s.getInfo(SiteInfo.JOBMANAGER)).iterator(); it.hasNext(); ) {
      JobManager jm = (JobManager) it.next();
      GridGateway gw = new GridGateway();

      String universe = (String) jm.getInfo(JobManager.UNIVERSE);
      if (universe.equals("vanilla")) {
        gw.setJobType(GridGateway.JOB_TYPE.compute);
      } else if (universe.equals("transfer")) {
        gw.setJobType(GridGateway.JOB_TYPE.auxillary);
      } else {
        throw new RuntimeException(
            "Unknown universe type " + universe + " for site " + site.getSiteHandle());
      }

      String url = (String) jm.getInfo(JobManager.URL);
      gw.setContact(url);

      if (url.endsWith("condor")) {
        gw.setScheduler(GridGateway.SCHEDULER_TYPE.Condor);
      } else if (url.endsWith("fork")) {
        gw.setScheduler(GridGateway.SCHEDULER_TYPE.Fork);
      } else if (url.endsWith("pbs")) {
        gw.setScheduler(GridGateway.SCHEDULER_TYPE.PBS);
      } else if (url.endsWith("lsf")) {
        gw.setScheduler(GridGateway.SCHEDULER_TYPE.LSF);
      } else if (url.endsWith("sge")) {
        gw.setScheduler(GridGateway.SCHEDULER_TYPE.SGE);
      }

      gw.setIdleNodes((String) jm.getInfo(JobManager.IDLE_NODES));
      gw.setTotalNodes((String) jm.getInfo(JobManager.TOTAL_NODES));

      site.addGridGateway(gw);
    }

    /* set the LRC as Replica Catalog */
    for (Iterator it = ((List) s.getInfo(SiteInfo.LRC)).iterator(); it.hasNext(); ) {
      LRC lrc = (LRC) it.next();
      ReplicaCatalog rc = new ReplicaCatalog(lrc.getURL(), "LRC");
      site.addReplicaCatalog(rc);
    }

    /* add Profiles */
    for (Iterator it = ((List) s.getInfo(SiteInfo.PROFILE)).iterator(); it.hasNext(); ) {
      site.addProfile((Profile) it.next());
    }

    // do another conversion.
    SiteCatalogEntry result = Adapter.convert(site);

    logger.log("SiteCatalogEntry object created is " + result, LogManager.DEBUG_MESSAGE_LEVEL);
    return result;
  }