Merge branch 'master' of ssh://git@gitorious.org/yacy/rc1.git

pull/1/head
orbiter 11 years ago
commit fd4abc0565

@ -260,7 +260,7 @@ public class Crawler_p {
final int crawlingDomMaxPages = (crawlingDomMaxCheck) ? post.getInt("crawlingDomMaxPages", -1) : -1;
env.setConfig("crawlingDomMaxPages", Integer.toString(crawlingDomMaxPages));
boolean crawlingQ = "on".equals(post.get("crawlingQ", "on"));
boolean crawlingQ = "on".equals(post.get("crawlingQ", "off")); // on unchecked checkbox "crawlingQ" not contained in post
env.setConfig("crawlingQ", crawlingQ);
boolean followFrames = "on".equals(post.get("followFrames", "on"));

@ -104,6 +104,7 @@ public class DHTSelection {
if (seed == null) continue;
if (omit != null && omit.contains(seed)) continue; // sort out peers that are target for DHT
if (seed.isLastSeenTimeout(3600000)) continue; // do not ask peers that had not been seen more than one hour (happens during a startup situation)
if (!seed.getFlagSolrAvailable()) continue; // extra peers always use solr direct, skip if solr interface is not available
if (!seed.getFlagAcceptRemoteIndex() && seed.matchPeerTags(wordhashes)) seedSelection.dec(seed, r.nextInt(10) + 2); // robinson peers with matching peer tags
if (seed.getFlagRootNode()) seedSelection.dec(seed, r.nextInt(30) + 6); // root nodes (fast peers)
if (seed.getAge() < minage) seedSelection.dec(seed, r.nextInt(15) + 3); // young peers (with fresh info)

@ -1048,6 +1048,10 @@ public final class Protocol {
} else {
try {
final boolean myseed = target == event.peers.mySeed();
if (!myseed && !target.getFlagSolrAvailable()) { // skip if peer.dna has flag that last try resulted in error
Network.log.info("SEARCH skip (solr), remote Solr interface not accessible, peer=" + target.getName());
return -1;
}
final String address = myseed ? "localhost:" + target.getPort() : target.getPublicAddress();
final int solrtimeout = Switchboard.getSwitchboard().getConfigInt(SwitchboardConstants.FEDERATED_SERVICE_SOLR_INDEXING_TIMEOUT, 6000);
Thread remoteRequest = new Thread() {
@ -1073,17 +1077,20 @@ public final class Protocol {
if (remoteRequest.isAlive()) {
try {remoteRequest.interrupt();} catch (Throwable e) {}
Network.log.info("SEARCH failed (solr), remote Peer: " + target.getName() + "/" + target.getPublicAddress() + " does not answer (time-out)");
target.setFlagSolrAvailable(false || myseed);
return -1; // give up, leave remoteRequest abandoned.
}
// no need to close this here because that sends a commit to remote solr which is not wanted here
} catch (final Throwable e) {
Network.log.info("SEARCH failed (solr), remote Peer: " + target.getName() + "/" + target.getPublicAddress() + " (" + e.getMessage() + ")");
target.setFlagSolrAvailable(false || localsearch);
return -1;
}
}
if (rsp[0] == null || docList[0] == null) {
Network.log.info("SEARCH failed (solr), remote Peer: " + target.getName() + "/" + target.getPublicAddress() + " returned null");
target.setFlagSolrAvailable(false || localsearch);
return -1;
}

@ -211,10 +211,10 @@ public class RemoteSearch extends Thread {
if (!Switchboard.getSwitchboard().getConfigBool(SwitchboardConstants.DEBUG_SEARCH_REMOTE_SOLR_OFF, false)) {
final SolrQuery solrQuery = event.query.solrQuery(event.getQuery().contentdom, start == 0, event.excludeintext_image);
for (Seed s: robinsonPeers) {
Thread t = solrRemoteSearch(event, solrQuery, start, count, s, targets, blacklist);
event.nodeSearchThreads.add(t);
Thread t = solrRemoteSearch(event, solrQuery, start, count, s, targets, blacklist);
event.nodeSearchThreads.add(t);
}
}
}
// start search to YaCy DHT peers
if (!Switchboard.getSwitchboard().getConfigBool(SwitchboardConstants.DEBUG_SEARCH_REMOTE_DHT_OFF, false)) {
@ -309,7 +309,10 @@ public class RemoteSearch extends Thread {
// check own peer status
if (event.peers.mySeed() == null || event.peers.mySeed().getPublicAddress() == null) { return null; }
// prepare seed targets and threads
if (targetPeer != null && targetPeer.hash != null && event.preselectedPeerHashes != null) targetPeer.setAlternativeAddress(event.preselectedPeerHashes.get(ASCII.getBytes(targetPeer.hash)));
if (targetPeer != null && targetPeer.hash != null && event.preselectedPeerHashes != null) {
if (!targetPeer.getFlagSolrAvailable()) return null; // solr interface not avail.
targetPeer.setAlternativeAddress(event.preselectedPeerHashes.get(ASCII.getBytes(targetPeer.hash)));
}
Thread solr = new Thread() {
@Override
public void run() {

@ -171,6 +171,7 @@ public class Seed implements Cloneable, Comparable<Seed>, Comparator<Seed>
public static final String SEEDLISTURL = "seedURL";
public static final String NEWS = "news"; // news attachment
public static final String DCT = "dct"; // disconnect time
public static final String SOLRAVAILABLE ="SorlAvail"; // field to remember if remotePeer solr interface is avail.
/** zero-value */
private static final String ZERO = "0";
@ -837,6 +838,31 @@ public class Seed implements Cloneable, Comparable<Seed>, Comparator<Seed>
return getFlag(FLAG_SSL_AVAILABLE);
}
/**
* remembers status of remote Solr interface dynamicly
* should not be used for the local peer
* @param value
*/
public final void setFlagSolrAvailable(final boolean value) {
if (value)
this.dna.put(Seed.SOLRAVAILABLE, "OK");
else
this.dna.put(Seed.SOLRAVAILABLE, "NA");
}
/**
* gets the last set result for remote solr status
*
* @return if status unknown it returns true
*/
public final boolean getFlagSolrAvailable() {
// field is indented to deal with 3 states
// null = never checked, "OK" and "NA" for not available
String solravail = this.dna.get(Seed.SOLRAVAILABLE);
boolean my = (solravail != null) && ("NA".equals(solravail));
return !my;
}
public final void setUnusedFlags() {
for ( int i = 4; i < 20; i++ ) {
setFlag(i, false);

Loading…
Cancel
Save