some fixes to new container merger

and some code cleanup

git-svn-id: https://svn.berlios.de/svnroot/repos/yacy/trunk@2336 6c8d7289-2bf4-0310-a012-ef5d649a1542
pull/1/head
orbiter 19 years ago
parent d7e8e7da1e
commit 8b77afd72c

@ -53,10 +53,8 @@ import de.anomic.plasma.plasmaParser;
import de.anomic.plasma.plasmaParserConfig;
import de.anomic.plasma.plasmaSwitchboard;
import de.anomic.plasma.parser.ParserInfo;
import de.anomic.server.serverCore;
import de.anomic.server.serverObjects;
import de.anomic.server.serverSwitch;
import de.anomic.server.portForwarding.serverPortForwarding;
import de.anomic.yacy.yacyCore;
import de.anomic.yacy.yacySeedUploader;
@ -129,7 +127,7 @@ public final class Settings_p {
for (int i=0; i < forwardingMethods.length; i++) {
try {
Class forwarder = Class.forName(env.getConfig("portForwarding." + forwardingMethods[i],""));
Class forwarder = Class.forName(env.getConfig("portForwarding." + forwardingMethods[i],"")); // FIXME: why is forwarder declared, but never used?
prop.put("forwardingMethods_" + methodCount + "_name",forwardingMethods[i]);
prop.put("forwardingMethods_" + methodCount + "_selected", forwardingMethods[i].equals(currentForwarder)?1:0);
methodCount++;

@ -25,7 +25,6 @@
//note: this isn't useful, yet.
//this is only a basic demonstration, what can be done with the supertemplates.
import de.anomic.http.httpHeader;
import de.anomic.plasma.plasmaSwitchboard;
import de.anomic.server.serverObjects;
import de.anomic.server.serverSwitch;

@ -55,7 +55,7 @@ public class indexCollectionRI extends indexAbstractRI implements indexRI {
return 0;
}
}
public Iterator wordContainers(String startWordHash, boolean rot) {
return new wordContainersIterator(startWordHash, rot);
}

@ -275,7 +275,7 @@ public final class indexRAMCacheRI extends indexAbstractRI implements indexRI {
public Iterator wordContainers(String startWordHash, boolean rot) {
if (rot) throw new UnsupportedOperationException("plasmaWordIndexCache cannot rotate wordContainers");
return wCache.tailMap(startWordHash).values().iterator(); // FIXME: check if iteration is in order of keys
return wCache.tailMap(startWordHash).values().iterator(); // The collection's iterator will return the values in the order that their corresponding keys appear in the tree.
}
public void shiftK2W() {

@ -26,6 +26,7 @@
package de.anomic.index;
import java.lang.reflect.Method;
import java.util.Iterator;
import de.anomic.kelondro.kelondroRow;
@ -102,6 +103,27 @@ public class indexRowSetContainer extends kelondroRowSet implements indexContain
return null;
}
public static Method containerMergeMethod = null;
static {
try {
Class c = Class.forName("de.anomic.index.indexRowSetContainer");
containerMergeMethod = c.getMethod("containerMerge", new Class[]{Object.class, Object.class});
} catch (SecurityException e) {
System.out.println("Error while initializing containerMerge: " + e.getMessage());
containerMergeMethod = null;
} catch (ClassNotFoundException e) {
System.out.println("Error while initializing containerMerge: " + e.getMessage());
containerMergeMethod = null;
} catch (NoSuchMethodException e) {
System.out.println("Error while initializing containerMerge: " + e.getMessage());
containerMergeMethod = null;
}
}
public static Object containerMerge(Object a, Object b) {
indexContainer c = (indexContainer) a;
c.add((indexContainer) b, -1);
return c;
}
}

@ -41,6 +41,8 @@
package de.anomic.kelondro;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.Comparator;
import java.util.Iterator;
import java.util.Set;
@ -51,14 +53,16 @@ public class kelondroMergeIterator implements Iterator {
Comparator comp;
Iterator a, b;
Object na, nb;
Method merger;
boolean up;
public kelondroMergeIterator(Iterator a, Iterator b, Comparator c, boolean up) {
public kelondroMergeIterator(Iterator a, Iterator b, Comparator c, Method m, boolean up) {
// this works currently only for String-type key iterations
this.a = a;
this.b = b;
this.up = up;
this.comp = c;
this.merger = m;
nexta();
nextb();
}
@ -106,7 +110,20 @@ public class kelondroMergeIterator implements Iterator {
// compare the Objects
int c = comp.compare(na, nb);
if (c == 0) {
s = na;
try {
//System.out.print("MERGE OF " + na.toString() + " AND " + nb.toString() + ": ");
s = this.merger.invoke(null, new Object[]{na, nb});
//System.out.println("RESULT IS " + s.toString());
} catch (IllegalArgumentException e) {
e.printStackTrace();
s = null;
} catch (IllegalAccessException e) {
e.printStackTrace();
s = null;
} catch (InvocationTargetException e) {
e.printStackTrace();
s = null;
}
nexta();
nextb();
return s;
@ -125,19 +142,41 @@ public class kelondroMergeIterator implements Iterator {
throw new java.lang.UnsupportedOperationException("merge does not support remove");
}
public static Iterator cascade(Set /*of*/ iterators, Comparator c,boolean up) {
public static Iterator cascade(Set /*of*/ iterators, Comparator c, Method merger, boolean up) {
// this extends the ability to combine two iterators
// to the abiliy of combining a set of iterators
if (iterators == null) return null;
if (iterators.size() == 0) return null;
return cascade(iterators.iterator(), c, up);
return cascade(iterators.iterator(), c, merger, up);
}
private static Iterator cascade(Iterator /*of*/ iiterators, Comparator c, boolean up) {
private static Iterator cascade(Iterator /*of*/ iiterators, Comparator c, Method merger, boolean up) {
if (iiterators == null) return null;
if (!(iiterators.hasNext())) return null;
Iterator one = (Iterator) iiterators.next();
if (!(iiterators.hasNext())) return one;
return new kelondroMergeIterator(one, cascade(iiterators, c, up), c, up);
return new kelondroMergeIterator(one, cascade(iiterators, c, merger, up), c, merger, up);
}
public static Method simpleMerge = null;
static {
try {
Class c = Class.forName("de.anomic.kelondro.kelondroMergeIterator");
simpleMerge = c.getMethod("mergeEqualByReplace", new Class[]{Object.class, Object.class});
} catch (SecurityException e) {
System.out.println("Error while initializing simpleMerge: " + e.getMessage());
simpleMerge = null;
} catch (ClassNotFoundException e) {
System.out.println("Error while initializing simpleMerge: " + e.getMessage());
simpleMerge = null;
} catch (NoSuchMethodException e) {
System.out.println("Error while initializing simpleMerge: " + e.getMessage());
simpleMerge = null;
}
}
public static Object mergeEqualByReplace(Object a, Object b) {
return a;
}
}

@ -65,6 +65,7 @@ import de.anomic.index.indexEntryAttribute;
import de.anomic.index.indexRAMCacheRI;
import de.anomic.index.indexRI;
import de.anomic.index.indexAbstractRI;
import de.anomic.index.indexRowSetContainer;
import de.anomic.index.indexTreeMapContainer;
import de.anomic.index.indexURLEntry;
import de.anomic.kelondro.kelondroBase64Order;
@ -450,6 +451,7 @@ public final class plasmaWordIndex extends indexAbstractRI implements indexRI {
ramCache.wordContainers(startWordHash, false),
assortmentCluster.wordContainers(startWordHash, true, false),
new indexContainerOrder(kelondroNaturalOrder.naturalOrder),
indexRowSetContainer.containerMergeMethod,
true);
}
if (resourceLevel == plasmaWordIndex.RL_WORDFILES) {
@ -458,9 +460,11 @@ public final class plasmaWordIndex extends indexAbstractRI implements indexRI {
ramCache.wordContainers(startWordHash, false),
assortmentCluster.wordContainers(startWordHash, true, false),
new indexContainerOrder(kelondroNaturalOrder.naturalOrder),
indexRowSetContainer.containerMergeMethod,
true),
backend.wordContainers(startWordHash, false),
new indexContainerOrder(kelondroNaturalOrder.naturalOrder),
indexRowSetContainer.containerMergeMethod,
true);
}
return null;

@ -55,6 +55,7 @@ import de.anomic.index.indexContainer;
import de.anomic.index.indexContainerOrder;
import de.anomic.index.indexRI;
import de.anomic.index.indexAbstractRI;
import de.anomic.index.indexRowSetContainer;
import de.anomic.index.indexTreeMapContainer;
import de.anomic.index.indexURLEntry;
import de.anomic.kelondro.kelondroNaturalOrder;
@ -287,7 +288,7 @@ public final class plasmaWordIndexAssortmentCluster extends indexAbstractRI impl
// iterates indexContainer - Objects
HashSet containerIterators = new HashSet();
for (int i = 0; i < clusterCount; i++) containerIterators.add(assortments[i].containers(startWordHash, up, rot));
return kelondroMergeIterator.cascade(containerIterators, new indexContainerOrder(kelondroNaturalOrder.naturalOrder), up);
return kelondroMergeIterator.cascade(containerIterators, new indexContainerOrder(kelondroNaturalOrder.naturalOrder), indexRowSetContainer.containerMergeMethod, up);
}
public int size() {

@ -46,7 +46,6 @@ import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.HashSet;
import java.util.Iterator;
import java.util.TreeSet;
@ -76,6 +75,39 @@ public class plasmaWordIndexFileCluster extends indexAbstractRI implements index
return size;
}
public Iterator wordContainers(String startHash, boolean rot) {
return new containerIterator(wordHashes(startHash, rot));
}
public class containerIterator implements Iterator {
// this is a highly inefficient class that is here for the
// only case to support a compatible interface until the
// new database structure is in place and makes the
// plasmaWordIndexFileCluster class superfluous
private Iterator wordIterator;
public containerIterator(Iterator wordIterator) {
this.wordIterator = wordIterator;
}
public boolean hasNext() {
return wordIterator.hasNext();
}
public Object next() {
return getContainer((String) wordIterator.next(), true, 100);
}
public void remove() {
wordIterator.remove();
}
}
public Iterator wordHashes(String startHash, boolean rot) {
// outdated method: to be replaced by wordContainers
return wordHashes(startHash, true, rot);
@ -86,11 +118,6 @@ public class plasmaWordIndexFileCluster extends indexAbstractRI implements index
return new iterateFiles(startHash, up);
}
public Iterator wordContainers(String startHash, boolean rot) {
// wordContainers is not supported ** FIXME **
return new HashSet().iterator();
}
public class iterateFiles implements Iterator {
private final ArrayList hierarchy; // contains TreeSet elements, earch TreeSet contains File Entries

@ -58,8 +58,6 @@ import de.anomic.server.portForwarding.serverPortForwarding;
public class serverPortForwardingUpnp implements serverPortForwarding {
private InternetGatewayDevice gateway;
private serverSwitch switchboard;
private String localHost;
private int localHostPort;
@ -164,7 +162,6 @@ public class serverPortForwardingUpnp implements serverPortForwarding {
throws Exception {
try {
this.log.logFine("Initializing port forwarding via UPnP ...");
this.switchboard = switchboard;
if (localHost.equals("0.0.0.0")) {
this.localHost = InetAddress.getLocalHost().getHostAddress();

Loading…
Cancel
Save