Author: borg-0300
Date: 2008-02-10 16:57:52 +0100 (Sun, 10 Feb 2008)
New Revision: 4472

Modified:
   trunk/source/de/anomic/yacy/yacyCore.java
   trunk/source/de/anomic/yacy/yacySeed.java
   trunk/source/de/anomic/yacy/yacySeedDB.java
   trunk/yacy.init
Log:
better ping

Modified: trunk/source/de/anomic/yacy/yacyCore.java
===================================================================
--- trunk/source/de/anomic/yacy/yacyCore.java   2008-02-10 09:06:17 UTC (rev 
4471)
+++ trunk/source/de/anomic/yacy/yacyCore.java   2008-02-10 15:57:52 UTC (rev 
4472)
@@ -81,24 +81,23 @@
 
     // statics
     public static final ThreadGroup publishThreadGroup = new 
ThreadGroup("publishThreadGroup");
-    public static yacySeedDB seedDB = null;
-    public static yacyNewsPool newsPool = null;
-    public static final HashMap<String, String> seedUploadMethods = new 
HashMap<String, String>();
-    public static yacyPeerActions peerActions = null;
-    public static yacyDHTAction dhtAgent = null;
+    public static yacySeedDB seedDB;
+    public static yacyNewsPool newsPool;
+    public static final HashMap seedUploadMethods = new HashMap();
+    public static yacyPeerActions peerActions;
+    public static yacyDHTAction dhtAgent;
     public static serverLog log;
-    public static long lastOnlineTime = 0;
-    /** pseudo-random key derived from a time-interval while YaCy startup*/
-    public static long speedKey = 0;
+    public static long lastOnlineTime;
+    /** pseudo-random key derived from a time-interval while YaCy startup. */
+    public static long speedKey;
     public static File yacyDBPath;
-    public static final Map<String, yacyAccessible> amIAccessibleDB = 
Collections.synchronizedMap(new HashMap<String, yacyAccessible>()); // Holds 
PeerHash / yacyAccessible Relations
+    public static final Map amIAccessibleDB = Collections.synchronizedMap(new 
HashMap()); // Holds PeerHash / yacyAccessible Relations
     // constants for PeerPing behaviour
-    private static final int PING_INITIAL = 16;
-    private static final int PING_MAX_RUNNING = 8;
-    private static final int PING_MIN_RUNNING = 4;
+    private static final int PING_INITIAL = 64;
+    private static final int PING_MIN_LASTSEEN = 240000; // in milliseconds
     private static final int PING_MIN_PEERSEEN = 2; // min. accessible to 
force senior
     private static final long PING_MAX_DBAGE = 15 * 60 * 1000; // in 
milliseconds
-    
+
     // public static yacyShare shareManager = null;
     // public static boolean terminate = false;
 
@@ -372,8 +371,8 @@
             int attempts = seedDB.sizeConnected();
 
             // getting a list of peers to contact
-            if (seedDB.mySeed().get(yacySeed.PEERTYPE, 
yacySeed.PEERTYPE_VIRGIN).equals(yacySeed.PEERTYPE_VIRGIN)) {
-                if (attempts > PING_INITIAL) { attempts = PING_INITIAL; }
+            if (seedDB.mySeed().isVirgin()) {
+                attempts = Math.min(attempts, PING_INITIAL);
                 final Map<String, String> ch = 
plasmaSwitchboard.getSwitchboard().clusterhashes;
                 seeds = seedDB.seedsByAge(true, attempts - ((ch == null) ? 0 : 
ch.size())); // best for fast connection
                 // add also all peers from cluster if this is a public 
robinson cluster
@@ -395,21 +394,11 @@
                     }
                 }
             } else {
-                if (amIAccessibleDB.size() > PING_MAX_RUNNING) {
-                    attempts = PING_MAX_RUNNING;
-                } else {
-                    attempts = Math.min(attempts, PING_MIN_RUNNING);
-                }
-                seeds = seedDB.seedsByAge(false, attempts); // best for seed 
list maintenance/cleaning
+                seeds = seedDB.getOldestSeeds(attempts / 5, PING_MIN_LASTSEEN);
             }
-
             if (seeds == null || seeds.size() == 0) { return 0; }
-            if (seeds.size() < attempts) { attempts = seeds.size(); }
+            attempts = seeds.size();
 
-            // This will try to get Peers that are not currently in 
amIAccessibleDB
-            Iterator<yacySeed> si = seeds.values().iterator();
-            yacySeed seed;
-
             // include a YaCyNews record to my seed
             try {
                 final yacyNewsRecord record = newsPool.myPublication();
@@ -433,10 +422,14 @@
             final List<Thread> syncList = Collections.synchronizedList(new 
LinkedList<Thread>()); // memory for threads
             final serverSemaphore sync = new serverSemaphore(attempts);
 
+            // This will try to get Peers that are not currently in 
amIAccessibleDB
+            Iterator<yacySeed> si = seeds.values().iterator();
+            yacySeed seed;
+
             // going through the peer list and starting a new publisher thread 
for each peer
             int i = 0;
             while (si.hasNext()) {
-                seed = (yacySeed) si.next();
+                seed = si.next();
                 if (seed == null) {
                     sync.P();
                     continue;
@@ -445,8 +438,8 @@
 
                 final String address = seed.getClusterAddress();
                 log.logFine("HELLO #" + i + " to peer '" + 
seed.get(yacySeed.NAME, "") + "' at " + address); // debug
-                String seederror = seed.isProper();
-                if ((address == null) || (seederror != null)) {
+                final String seederror = seed.isProper();
+                if (address == null || seederror != null) {
                     // we don't like that address, delete it
                     peerActions.peerDeparture(seed, "peer ping to peer 
resulted in address = " + address + "; seederror = " + seederror);
                     sync.P();
@@ -489,9 +482,9 @@
             final int dbSize;
             synchronized (amIAccessibleDB) {
                 dbSize = amIAccessibleDB.size();
-                Iterator<String> ai = amIAccessibleDB.keySet().iterator();
+                final Iterator<String> ai = 
amIAccessibleDB.keySet().iterator();
                 while (ai.hasNext()) {
-                    yacyAccessible ya = (yacyAccessible) 
amIAccessibleDB.get(ai.next());
+                    final yacyAccessible ya = (yacyAccessible) 
amIAccessibleDB.get(ai.next());
                     if (ya.lastUpdated < cutofftime) {
                         ai.remove();
                     } else {
@@ -507,11 +500,11 @@
             log.logInfo("PeerPing: I am accessible for " + accessible +
                 " peer(s), not accessible for " + notaccessible + " peer(s).");
 
-            if ((accessible + notaccessible) > 0) {
+            if (accessible + notaccessible > 0) {
                 final String newPeerType;
                 // At least one other Peer told us our type
-                if ((accessible >= PING_MIN_PEERSEEN) ||
-                    (accessible >= notaccessible)) {
+                if (accessible >= PING_MIN_PEERSEEN ||
+                    accessible >= notaccessible) {
                     // We can be reached from a majority of other Peers
                     if (yacyCore.seedDB.mySeed().isPrincipal()) {
                         newPeerType = yacySeed.PEERTYPE_PRINCIPAL;
@@ -522,11 +515,11 @@
                     // We cannot be reached from the outside
                     newPeerType = yacySeed.PEERTYPE_JUNIOR;
                 }
-                if (yacyCore.seedDB.mySeed().orVirgin().equals(newPeerType)) {
+                if (yacyCore.seedDB.mySeed().isType(newPeerType)) {
                     log.logInfo("PeerPing: myType is " + 
yacyCore.seedDB.mySeed().orVirgin());
                 } else {
                     log.logInfo("PeerPing: changing myType from '" + 
yacyCore.seedDB.mySeed().orVirgin() + "' to '" + newPeerType + "'");
-                    yacyCore.seedDB.mySeed().put(yacySeed.PEERTYPE, 
newPeerType);
+                    yacyCore.seedDB.mySeed().setType(newPeerType);
                 }
             } else {
                 log.logInfo("PeerPing: No data, staying at myType: " + 
yacyCore.seedDB.mySeed().orVirgin());

Modified: trunk/source/de/anomic/yacy/yacySeed.java
===================================================================
--- trunk/source/de/anomic/yacy/yacySeed.java   2008-02-10 09:06:17 UTC (rev 
4471)
+++ trunk/source/de/anomic/yacy/yacySeed.java   2008-02-10 15:57:52 UTC (rev 
4472)
@@ -84,7 +84,7 @@
 
 public class yacySeed {
 
-       public static final int maxsize = 4096;
+    public static final int maxsize = 4096;
     /**
      * <b>substance</b> "sI" (send index/words)
      */
@@ -281,9 +281,9 @@
      * that is used instead the address stored in the seed DNA
      */
     public void setAlternativeAddress(String ipport) {
-       if (ipport == null) return;
-       int p = ipport.indexOf(':');
-       if (p < 0) this.alternativeIP = ipport; else this.alternativeIP = 
ipport.substring(0, p);
+        if (ipport == null) return;
+        int p = ipport.indexOf(':');
+        if (p < 0) this.alternativeIP = ipport; else this.alternativeIP = 
ipport.substring(0, p);
     }
 
     /**
@@ -298,7 +298,7 @@
     public final String getPeerType() { return get(yacySeed.PEERTYPE, ""); }
     /**
      * try to get the peertype<br>
-     * @return the peertype or "Virgin"
+     * @return the peertype or "virgin"
      */
     public final String orVirgin() { return get(yacySeed.PEERTYPE, 
yacySeed.PEERTYPE_VIRGIN); }
     /**
@@ -342,14 +342,14 @@
         } else return dflt;
     }
 
-    public final void setIP()                    { dna.put(yacySeed.IP, ""); }
-    public final void setIP(final String ip)     { dna.put(yacySeed.IP, ip); }
-    public final void setPort(final String port) { dna.put(yacySeed.PORT, 
port); }
-    public final void setJunior()                { dna.put(yacySeed.PEERTYPE, 
yacySeed.PEERTYPE_JUNIOR); }
-    public final void setSenior()                { dna.put(yacySeed.PEERTYPE, 
yacySeed.PEERTYPE_SENIOR); }
-    public final void setPrincipal()             { dna.put(yacySeed.PEERTYPE, 
yacySeed.PEERTYPE_PRINCIPAL); }
-    
-    
+    public final void setIP()              { dna.put(yacySeed.IP, ""); }
+    public final void setIP(String ip)     { dna.put(yacySeed.IP, ip); }
+    public final void setPort(String port) { dna.put(yacySeed.PORT, port); }
+    public final void setType(String type) { dna.put(yacySeed.PEERTYPE, type); 
}
+    public final void setJunior()          { dna.put(yacySeed.PEERTYPE, 
yacySeed.PEERTYPE_JUNIOR); }
+    public final void setSenior()          { dna.put(yacySeed.PEERTYPE, 
yacySeed.PEERTYPE_SENIOR); }
+    public final void setPrincipal()       { dna.put(yacySeed.PEERTYPE, 
yacySeed.PEERTYPE_PRINCIPAL); }
+
     public final void put(String key, String value) {
         synchronized (this.dna) {
             this.dna.put(key, value);
@@ -643,8 +643,8 @@
     public final void setUnusedFlags() {
         for (int i = 4; i < 24; i++) { setFlag(i, true); }
     }
-    public final boolean isPotential() {
-        return isVirgin() || isJunior();
+    public final boolean isType(String type) {
+        return get(yacySeed.PEERTYPE, "").equals(type);
     }
     public final boolean isVirgin() {
         return get(yacySeed.PEERTYPE, "").equals(yacySeed.PEERTYPE_VIRGIN);
@@ -652,22 +652,25 @@
     public final boolean isJunior() {
         return get(yacySeed.PEERTYPE, "").equals(yacySeed.PEERTYPE_JUNIOR);
     }
-    public final boolean isActive() {
-        return isSenior() || isPrincipal();
-    }
     public final boolean isSenior() {
         return get(yacySeed.PEERTYPE, "").equals(yacySeed.PEERTYPE_SENIOR);
     }
     public final boolean isPrincipal() {
         return get(yacySeed.PEERTYPE, "").equals(yacySeed.PEERTYPE_PRINCIPAL);
     }
+    public final boolean isPotential() {
+        return isVirgin() || isJunior();
+    }
+    public final boolean isActive() {
+        return isSenior() || isPrincipal();
+    }
     public final boolean isOnline() {
         return isSenior() || isPrincipal();
     }
     public final boolean isOnline(final String type) {
         return type.equals(yacySeed.PEERTYPE_SENIOR) || 
type.equals(yacySeed.PEERTYPE_PRINCIPAL);
     }
-    
+
     public static final long minDHTNumber   = 
kelondroBase64Order.enhancedCoder.cardinal(kelondroBase64Order.zero(12));
     public static final long maxDHTDistance = Long.MAX_VALUE;
 

Modified: trunk/source/de/anomic/yacy/yacySeedDB.java
===================================================================
--- trunk/source/de/anomic/yacy/yacySeedDB.java 2008-02-10 09:06:17 UTC (rev 
4471)
+++ trunk/source/de/anomic/yacy/yacySeedDB.java 2008-02-10 15:57:52 UTC (rev 
4472)
@@ -381,6 +381,40 @@
         }
     }
 
+    public HashMap<String, yacySeed> getOldestSeeds(int count, int minage) {
+        // returns a peerhash/yacySeed relation
+        try {
+            final kelondroMScoreCluster seedScore = new 
kelondroMScoreCluster();
+            final Iterator<yacySeed> s = seedsConnected(true, false, null, 
(float) 0.0);
+            yacySeed ys;
+            int age;
+            int searchcount = 1000;
+            while (s.hasNext() && searchcount-- > 0) {
+                ys = s.next();
+                if (ys == null) { continue; }
+                age = (int) Math.abs(System.currentTimeMillis() + 
serverDate.dayMillis - ys.getLastSeenUTC());
+                if (age < minage) { continue; }
+                seedScore.addScore(ys.hash, age); // the higher age, the older 
is the peer
+            }
+            if (seedScore.size() == 0) { return null; }
+
+            // result is now in the score object; create a result vector
+            final HashMap<String, yacySeed> result = new HashMap<String, 
yacySeed>();
+            final Iterator<String> it = seedScore.scores(false);
+            searchcount = Math.min(count, seedScore.size());
+            int c = 0;
+            while (c++ < searchcount && it.hasNext()) {
+                ys = getConnected(it.next());
+                if (ys != null && ys.hash != null) { result.put(ys.hash, ys); }
+            }
+            return result;
+        } catch (kelondroException e) {
+            seedActiveDB = resetSeedTable(seedActiveDB, seedActiveDBFile);
+            yacyCore.log.logFine("Internal Error at yacySeedDB.seedsByAge: " + 
e.getMessage(), e);
+            return null;
+        }
+    }
+
     public int sizeConnected() {
     return seedActiveDB.size();
         /*

Modified: trunk/yacy.init
===================================================================
--- trunk/yacy.init     2008-02-10 09:06:17 UTC (rev 4471)
+++ trunk/yacy.init     2008-02-10 15:57:52 UTC (rev 4472)
@@ -546,8 +546,8 @@
 20_dhtdistribution_idlesleep=30000
 20_dhtdistribution_busysleep=10000
 20_dhtdistribution_memprereq=6291456
-30_peerping_idlesleep=90000
-30_peerping_busysleep=90000
+30_peerping_idlesleep=120000
+30_peerping_busysleep=120000
 30_peerping_memprereq=1048576
 40_peerseedcycle_idlesleep=1800000
 40_peerseedcycle_busysleep=1200000

_______________________________________________
YaCy-svn mailing list
YaCy-svn@lists.berlios.de
https://lists.berlios.de/mailman/listinfo/yacy-svn

Antwort per Email an