to have a fall-back option in case that memory problems as reported in
http://forum.yacy-websuche.de/viewtopic.php?p=26901#p26901
for full-solr installation are too strong and we have to work with an
'small memory footprint' peer system.
This commit is contained in:
orbiter 2012-08-18 10:28:40 +02:00
parent 0904afe8fb
commit cc47a0876e

View File

@ -41,6 +41,7 @@ import net.yacy.cora.services.federated.solr.SolrConnector;
import net.yacy.cora.sorting.ConcurrentScoreMap; import net.yacy.cora.sorting.ConcurrentScoreMap;
import net.yacy.cora.sorting.ScoreMap; import net.yacy.cora.sorting.ScoreMap;
import net.yacy.cora.storage.HandleSet; import net.yacy.cora.storage.HandleSet;
import net.yacy.cora.util.SpaceExceededException;
import net.yacy.document.parser.html.CharacterCoding; import net.yacy.document.parser.html.CharacterCoding;
import net.yacy.kelondro.data.meta.DigestURI; import net.yacy.kelondro.data.meta.DigestURI;
import net.yacy.kelondro.data.meta.URIMetadata; import net.yacy.kelondro.data.meta.URIMetadata;
@ -263,7 +264,7 @@ public final class Fulltext implements Iterable<byte[]> {
} }
public void putMetadata(final URIMetadata entry) throws IOException { public void putMetadata(final URIMetadata entry) throws IOException {
if (!this.connectedSolr()) return; if (this.connectedSolr()) {
try { try {
SolrDocument sd = getSolr().get(ASCII.String(entry.url().hash())); SolrDocument sd = getSolr().get(ASCII.String(entry.url().hash()));
if (sd == null || !entry.isOlder(new URIMetadataNode(sd))) { if (sd == null || !entry.isOlder(new URIMetadataNode(sd))) {
@ -272,6 +273,23 @@ public final class Fulltext implements Iterable<byte[]> {
} catch (SolrException e) { } catch (SolrException e) {
throw new IOException(e.getMessage(), e); throw new IOException(e.getMessage(), e);
} }
} else if (this.urlIndexFile != null && entry instanceof URIMetadataRow) {
URIMetadata oldEntry = null;
try {
final Row.Entry oe = this.urlIndexFile.get(entry.hash(), false);
oldEntry = (oe == null) ? null : new URIMetadataRow(oe, null, 0);
} catch (final Throwable e) {
Log.logException(e);
oldEntry = null;
}
if (oldEntry == null || !entry.isOlder(oldEntry)) {
try {
this.urlIndexFile.put(((URIMetadataRow) entry).toRowEntry());
} catch (final SpaceExceededException e) {
throw new IOException("RowSpaceExceededException in " + this.urlIndexFile.filename() + ": " + e.getMessage());
}
}
}
this.statsDump = null; this.statsDump = null;
if (MemoryControl.shortStatus()) clearCache(); if (MemoryControl.shortStatus()) clearCache();
} }