Merge branch 'master' of git://github.com/f1ori/yacy

This commit is contained in:
admin 2011-11-27 18:01:04 +01:00
commit 3c875f0841
8 changed files with 94 additions and 94 deletions

View File

@ -3,7 +3,7 @@ javacSource=1.6
javacTarget=1.6
# Release Configuration
releaseVersion=0.99
releaseVersion=1.0
stdReleaseFile=yacy_v${releaseVersion}_${DSTAMP}_${releaseNr}.tar.gz
sourceReleaseFile=yacy_src_v${releaseVersion}_${DSTAMP}_${releaseNr}.tar.gz
releaseFileParentDir=yacy

View File

@ -20,7 +20,7 @@ var modifiertype = "";
function search(search, count, offset) {
var navhtml = document.getElementById("searchnavigation");
if (navhtml != null) navhtml.innerHTML = "<div>loading...</div>";
if (navhtml != null) navhtml.innerHTML = "<div>loading from local index...</div>";
query = search;
maximumRecords = count;
if (count == "") maximumRecords = 1000;

View File

@ -48,7 +48,7 @@ To see a list of all APIs, please visit the <a href="http://www.yacy-websuche.de
#%env/templates/simpleheader.template%#
#(/topmenu)#
<div>
<form class="search small" id="searchform" action="yacyinteractive.html" method="get" #(allowrealtime)#onsubmit="document.getElementById('searchnavigation').innerHTML = '<div>loading...</div>'"::onkeyup="xmlhttpPost(); return false;"#(/allowrealtime)#>
<form class="search small" id="searchform" action="yacyinteractive.html" method="get" #(allowrealtime)#onsubmit="document.getElementById('searchnavigation').innerHTML = '<div>loading from local index...</div>'"::onkeyup="xmlhttpPost(); return false;"#(/allowrealtime)#>
<h2>#[promoteSearchPageGreeting]#</h2>
<div class="yacylogo">
<a href="#[promoteSearchPageGreeting.homepage]#" class="yacylogo"><img src="#[promoteSearchPageGreeting.smallImage]#" alt="yacysearch"/></a>

View File

@ -41,10 +41,11 @@ The source code is inside the release package (see /source and /htroot).
== WHERE IS THE DOCUMENTATION? ==
Documentation can be found at:
(Home Page) http://yacy.net/
(German Forum) http://forum.yacy.de/
(Wiki:de) http://www.yacy-websuche.de/wiki/index.php/De:Start
(Wiki:en) http://www.yacy-websearch.net/wiki/index.php/En:Start
(Home Page) http://yacy.net/
(German Forum) http://forum.yacy.de/
(Wiki:de) http://www.yacy-websuche.de/wiki/index.php/De:Start
(Wiki:en) http://www.yacy-websearch.net/wiki/index.php/En:Start
(Tutorial Videos) http://yacy.net/en/Tutorials.html and http://yacy.net/de/Lehrfilme.html
Every of these locations has a (YaCy) search functionality which combines
all these locations into one search result.

View File

@ -355,7 +355,7 @@ public final class CrawlStacker {
(entry.url().getFileExtension().length() > 0 && TextParser.supports(entry.url(), null) != null)
*/) {
warning = this.nextQueue.noticeURL.push(NoticedURL.StackType.NOLOAD, entry);
if (warning != null) this.log.logWarning("CrawlStacker.stackCrawl of URL " + entry.url().toNormalform(true, false) + " - not pushed: " + warning);
//if (warning != null) this.log.logWarning("CrawlStacker.stackCrawl of URL " + entry.url().toNormalform(true, false) + " - not pushed: " + warning);
return null;
}

View File

@ -52,21 +52,21 @@ import net.yacy.kelondro.order.Base64Order;
public final class Cache {
private static final String RESPONSE_HEADER_DB_NAME = "responseHeader.heap";
private static final String FILE_DB_NAME = "file.array";
private static Map<byte[], Map<String, String>> responseHeaderDB = null;
private static Compressor fileDB = null;
private static ArrayStack fileDBunbuffered = null;
private static long maxCacheSize = Long.MAX_VALUE;
private static File cachePath = null;
private static String prefix;
public static final Log log = new Log("HTCACHE");
public static void init(final File htCachePath, final String peerSalt, final long CacheSizeMax) {
cachePath = htCachePath;
maxCacheSize = CacheSizeMax;
prefix = peerSalt;
@ -87,11 +87,11 @@ public final class Cache {
fileDBunbuffered = new ArrayStack(new File(cachePath, FILE_DB_NAME), prefix, Base64Order.enhancedCoder, 12, 1024 * 1024 * 2, false);
fileDBunbuffered.setMaxSize(maxCacheSize);
fileDB = new Compressor(fileDBunbuffered, 2 * 1024 * 1024);
} catch (IOException e) {
} catch (final IOException e) {
Log.logException(e);
}
}
/**
* clear the cache
*/
@ -99,12 +99,12 @@ public final class Cache {
responseHeaderDB.clear();
try {
fileDB.clear();
} catch (IOException e) {
} catch (final IOException e) {
Log.logException(e);
}
try {
fileDBunbuffered.clear();
} catch (IOException e) {
} catch (final IOException e) {
Log.logException(e);
}
}
@ -117,7 +117,7 @@ public final class Cache {
maxCacheSize = newCacheSize;
fileDBunbuffered.setMaxSize(maxCacheSize);
}
/**
* get the current actual cache size
* @return
@ -125,7 +125,7 @@ public final class Cache {
public static long getActualCacheSize() {
return fileDBunbuffered.length();
}
/**
* close the databases
*/
@ -135,7 +135,7 @@ public final class Cache {
}
fileDB.close(true);
}
public static void store(final DigestURI url, final ResponseHeader responseHeader, final byte[] file) throws IOException {
if (responseHeader == null) throw new IOException("Cache.store of url " + url.toString() + " not possible: responseHeader == null");
if (file == null) throw new IOException("Cache.store of url " + url.toString() + " not possible: file == null");
@ -144,12 +144,12 @@ public final class Cache {
// store the file
try {
fileDB.insert(url.hash(), file);
} catch (UnsupportedEncodingException e) {
} catch (final UnsupportedEncodingException e) {
throw new IOException("Cache.store: cannot write to fileDB (1): " + e.getMessage());
} catch (IOException e) {
} catch (final IOException e) {
throw new IOException("Cache.store: cannot write to fileDB (2): " + e.getMessage());
}
// store the response header into the header database
final HashMap<String, String> hm = new HashMap<String, String>();
hm.putAll(responseHeader);
@ -160,12 +160,12 @@ public final class Cache {
} else {
responseHeaderDB.put(url.hash(), hm);
}
} catch (Exception e) {
} catch (final Exception e) {
throw new IOException("Cache.store: cannot write to headerDB: " + e.getMessage());
}
if (log.isFine()) log.logFine("stored in cache: " + url.toNormalform(true, false));
}
/**
* check if the responseHeaderDB and the fileDB has an entry for the given url
* @param url the url of the resource
@ -188,14 +188,14 @@ public final class Cache {
} else {
responseHeaderDB.remove(url.hash());
}
} catch (IOException e) {}
} catch (final IOException e) {}
if (fileExists) try {
log.logWarning("content but not header of url " + url.toString() + " in cache; cleaned up");
//log.logWarning("content but not header of url " + url.toString() + " in cache; cleaned up");
fileDB.delete(url.hash());
} catch (IOException e) {}
} catch (final IOException e) {}
return false;
}
/**
* Returns an object containing metadata about a cached resource
* @param url the {@link URL} of the resource
@ -205,46 +205,46 @@ public final class Cache {
* @throws <b>UnsupportedProtocolException</b> if the protocol is not supported and therefore the
* info object couldn't be created
*/
public static ResponseHeader getResponseHeader(final byte[] hash) {
public static ResponseHeader getResponseHeader(final byte[] hash) {
// loading data from database
Map<String, String> hdb;
hdb = responseHeaderDB.get(hash);
if (hdb == null) return null;
return new ResponseHeader(null, hdb);
}
/**
* Returns the content of a cached resource as byte[]
* @param url the requested resource
* @return the resource content as byte[]. If no data
* is available or the cached file is not readable, <code>null</code>
* is returned.
* @throws IOException
* @throws IOException
*/
public static byte[] getContent(final byte[] hash) {
// load the url as resource from the cache
try {
byte[] b = fileDB.get(hash);
final byte[] b = fileDB.get(hash);
if (b == null) return null;
return b;
} catch (UnsupportedEncodingException e) {
} catch (final UnsupportedEncodingException e) {
Log.logException(e);
return null;
} catch (IOException e) {
} catch (final IOException e) {
Log.logException(e);
return null;
} catch (RowSpaceExceededException e) {
} catch (final RowSpaceExceededException e) {
Log.logException(e);
return null;
} catch (OutOfMemoryError e) {
} catch (final OutOfMemoryError e) {
Log.logException(e);
return null;
}
}
/**
* removed response header and cached content from the database
* @param url

View File

@ -7,7 +7,7 @@
// $LastChangedBy$
//
// LICENSE
//
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; either version 2 of the License, or
@ -33,7 +33,6 @@ import java.util.concurrent.Executors;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.TimeUnit;
import net.yacy.kelondro.logging.Log;
import net.yacy.kelondro.util.NamePrefixThreadFactory;
@ -50,9 +49,9 @@ public class WorkflowProcessor<J extends WorkflowJob> {
private final Object environment;
private final String processName, methodName, description;
private final String[] childs;
private long blockTime, execTime, passOnTime;
private long blockTime, execTime, passOnTime;
private long execCount;
public WorkflowProcessor(
final String name, final String description, final String[] childnames,
final Object env, final String jobExecMethod,
@ -71,57 +70,57 @@ public class WorkflowProcessor<J extends WorkflowJob> {
this.executor.submit(new InstantBlockingThread<J>(env, jobExecMethod, this));
}
// init statistics
blockTime = 0;
execTime = 0;
passOnTime = 0;
execCount = 0;
this.blockTime = 0;
this.execTime = 0;
this.passOnTime = 0;
this.execCount = 0;
// store this object for easy monitoring
processMonitor.add(this);
}
public int queueSize() {
return this.input.size();
}
public boolean queueIsEmpty() {
return this.input.isEmpty();
}
public int queueSizeMax() {
return this.input.size() + this.input.remainingCapacity();
}
public int concurrency() {
return this.poolsize;
}
public J take() throws InterruptedException {
// read from the input queue
if (this.input == null) return null;
long t = System.currentTimeMillis();
J j = this.input.take();
final long t = System.currentTimeMillis();
final J j = this.input.take();
this.blockTime += System.currentTimeMillis() - t;
return j;
}
public void passOn(final J next) throws InterruptedException {
// don't mix this method up with enQueue()!
// this method enqueues into the _next_ queue, not this queue!
if (this.output == null) return;
long t = System.currentTimeMillis();
final long t = System.currentTimeMillis();
this.output.enQueue(next);
this.passOnTime += System.currentTimeMillis() - t;
}
public void clear() {
if (this.input != null) this.input.clear();
}
public synchronized void relaxCapacity() {
if (this.input.isEmpty()) return;
if (this.input.remainingCapacity() > 1000) return;
BlockingQueue<J> i = new LinkedBlockingQueue<J>();
final BlockingQueue<J> i = new LinkedBlockingQueue<J>();
J e;
while (!this.input.isEmpty()) {
e = this.input.poll();
@ -130,15 +129,15 @@ public class WorkflowProcessor<J extends WorkflowJob> {
}
this.input = i;
}
@SuppressWarnings("unchecked")
public void enQueue(final J in) throws InterruptedException {
// ensure that enough job executors are running
if ((this.input == null) || (executor == null) || (executor.isShutdown()) || (executor.isTerminated())) {
if ((this.input == null) || (this.executor == null) || (this.executor.isShutdown()) || (this.executor.isTerminated())) {
// execute serialized without extra thread
Log.logWarning("PROCESSOR", "executing job " + environment.getClass().getName() + "." + methodName + " serialized");
//Log.logWarning("PROCESSOR", "executing job " + environment.getClass().getName() + "." + methodName + " serialized");
try {
final J out = (J) InstantBlockingThread.execMethod(this.environment, this.methodName).invoke(environment, new Object[]{in});
final J out = (J) InstantBlockingThread.execMethod(this.environment, this.methodName).invoke(this.environment, new Object[]{in});
if (out != null && this.output != null) this.output.enQueue(out);
} catch (final IllegalArgumentException e) {
Log.logException(e);
@ -154,41 +153,41 @@ public class WorkflowProcessor<J extends WorkflowJob> {
try {
this.input.put(in);
break;
} catch (InterruptedException e) {
try {Thread.sleep(10);} catch (InterruptedException ee) {}
} catch (final InterruptedException e) {
try {Thread.sleep(10);} catch (final InterruptedException ee) {}
}
}
}
@SuppressWarnings("unchecked")
public void announceShutdown() {
if (executor == null) return;
if (executor.isShutdown()) return;
if (this.executor == null) return;
if (this.executor.isShutdown()) return;
// before we put pills into the queue, make sure that they will take them
relaxCapacity();
// put poison pills into the queue
for (int i = 0; i < poolsize; i++) {
for (int i = 0; i < this.poolsize; i++) {
try {
Log.logInfo("serverProcessor", "putting poison pill in queue " + this.processName + ", thread " + i);
input.put((J) WorkflowJob.poisonPill); // put a poison pill into the queue which will kill the job
this.input.put((J) WorkflowJob.poisonPill); // put a poison pill into the queue which will kill the job
Log.logInfo("serverProcessor", ".. poison pill is in queue " + this.processName + ", thread " + i + ". awaiting termination");
} catch (final InterruptedException e) { }
}
}
public void awaitShutdown(final long millisTimeout) {
if (executor != null & !executor.isShutdown()) {
if (this.executor != null & !this.executor.isShutdown()) {
// wait for shutdown
try {
executor.shutdown();
executor.awaitTermination(millisTimeout, TimeUnit.MILLISECONDS);
this.executor.shutdown();
this.executor.awaitTermination(millisTimeout, TimeUnit.MILLISECONDS);
} catch (final InterruptedException e) {}
}
Log.logInfo("serverProcessor", "queue " + this.processName + ": shutdown.");
this.executor = null;
this.input = null;
// remove entry from monitor
Iterator<WorkflowProcessor<?>> i = processes();
final Iterator<WorkflowProcessor<?>> i = processes();
WorkflowProcessor<?> p;
while (i.hasNext()) {
p = i.next();
@ -198,59 +197,59 @@ public class WorkflowProcessor<J extends WorkflowJob> {
}
}
}
public static Iterator<WorkflowProcessor<?>> processes() {
return processMonitor.iterator();
}
protected void increaseJobTime(final long time) {
this.execTime += time;
this.execCount++;
}
public String getName() {
return this.processName;
}
public String getDescription() {
return this.description;
}
public String getChilds() {
StringBuilder s = new StringBuilder(this.childs.length * 40 + 1);
for (int i = 0; i < this.childs.length; i++) {
s.append(this.childs[i]);
final StringBuilder s = new StringBuilder(this.childs.length * 40 + 1);
for (final String child : this.childs) {
s.append(child);
s.append(' ');
}
return s.toString();
}
/**
* the block time is the time that a take() blocks until it gets a value
* @return
*/
public long getBlockTime() {
return blockTime;
return this.blockTime;
}
/**
* the exec time is the complete time of the execution and processing of the value from take()
* @return
*/
public long getExecTime() {
return execTime;
return this.execTime;
}
public long getExecCount() {
return execCount;
return this.execCount;
}
/**
* the passOn time is the time that a put() takes to enqueue a result value to the next queue
* in case that the target queue is limited and may be full, this value may increase
* @return
*/
public long getPassOnTime() {
return passOnTime;
return this.passOnTime;
}
}

View File

@ -315,7 +315,7 @@ public final class yacy {
//boolean properPW = (sb.getConfig("adminAccount", "").length() == 0) && (sb.getConfig(httpd.ADMIN_ACCOUNT_B64MD5, "").length() > 0);
//if (!properPW) browserPopUpPage = "ConfigBasic.html";
Browser.openBrowser((server.withSSL()?"https":"http") + "://localhost:" + serverCore.getPortNr(port) + "/" + browserPopUpPage);
} catch (final RuntimeException e) {
} catch (final Throwable e) {
// cannot open browser. This may be normal in headless environments
//Log.logException(e);
}