/** * Pushes a host back onto the queue of available hosts and attempts to launch a waiting * experiment (if any). * * @param hostNum the index of the host to push back onto the queue of available hosts */ protected synchronized void availableHost(int hostNum) { if (hostNum >= 0) { if (m_remoteHostFailureCounts[hostNum] < MAX_FAILURES) { m_remoteHostsQueue.push(new Integer(hostNum)); } else { notifyListeners( false, true, false, "Max failures exceeded for host " + ((String) m_remoteHosts.elementAt(hostNum)) + ". Removed from host list."); m_removedHosts++; } } // check for all sub exp complete or all hosts failed or failed count // exceeded if (m_failedCount == (MAX_FAILURES * m_remoteHosts.size())) { abortExperiment(); notifyListeners( false, true, true, "Experiment aborted! Max failures " + "exceeded on all remote hosts."); return; } if ((getSplitByDataSet() && (m_baseExperiment.getDatasets().size() == m_finishedCount)) || (getSplitByProperty() && (m_baseExperiment.getPropertyArrayLength() == m_finishedCount)) || (!getSplitByDataSet() && !getSplitByProperty() && (getRunUpper() - getRunLower() + 1) == m_finishedCount)) { notifyListeners(false, true, false, "Experiment completed successfully."); notifyListeners(false, true, true, postExperimentInfo()); return; } if (checkForAllFailedHosts()) { return; } if (m_experimentAborted && (m_remoteHostsQueue.size() + m_removedHosts) == m_remoteHosts.size()) { notifyListeners(false, true, true, "Experiment aborted. All remote tasks " + "finished."); } if (!m_subExpQueue.empty() && !m_experimentAborted) { if (!m_remoteHostsQueue.empty()) { int availHost, waitingExp; try { availHost = ((Integer) m_remoteHostsQueue.pop()).intValue(); waitingExp = ((Integer) m_subExpQueue.pop()).intValue(); launchNext(waitingExp, availHost); } catch (Exception ex) { ex.printStackTrace(); } } } }
/** * Output an instance after filtering and remove from the output queue. * * @return the instance that has most recently been filtered (or null if the queue is empty). * @throws NullPointerException if no output structure has been defined */ public Instance output() { if (m_OutputFormat == null) { throw new NullPointerException("No output instance format defined"); } if (m_OutputQueue.empty()) { return null; } Instance result = (Instance) m_OutputQueue.pop(); return result; }