@ -80,7 +80,7 @@ public class yacyCore {
private static final int PING_MIN_DBSIZE = 5 ;
private static final int PING_MIN_PEERSEEN = 1 ; // 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;
@ -97,11 +97,11 @@ public class yacyCore {
this . sb = sb ;
sb . setConfig ( "yacyStatus" , "" ) ;
// create a peer news channel
final RSSFeed peernews = yacyChannel . channels ( yacyChannel . PEERNEWS ) ;
peernews . addMessage ( new RSSMessage ( "YaCy started" , "" , "" ) ) ;
// ensure that correct IP is used
final String staticIP = sb . getConfig ( "staticIP" , "" ) ;
if ( staticIP . length ( ) ! = 0 & & yacySeed . isProperIP ( staticIP ) = = null ) {
@ -124,7 +124,7 @@ public class yacyCore {
synchronized static public void triggerOnlineAction ( ) {
lastOnlineTime = System . currentTimeMillis ( ) ;
}
public final void publishSeedList ( ) {
if ( log . isFine ( ) ) log . logFine ( "yacyCore.publishSeedList: Triggered Seed Publish" ) ;
@ -137,11 +137,11 @@ public class yacyCore {
yacyCore . log . logDebug ( "***DEBUG publishSeedList: I can reach myself" ) ;
* /
if ( ( sb . peers . lastSeedUpload_myIP . equals ( sb. peers . mySeed ( ) . getIP ( ) ) ) & &
( sb . peers . lastSeedUpload_seedDBSize = = sb. peers . sizeConnected ( ) ) & &
if ( ( this . sb . peers . lastSeedUpload_myIP . equals ( this . sb. peers . mySeed ( ) . getIP ( ) ) ) & &
( this . sb . peers . lastSeedUpload_seedDBSize = = this . sb. peers . sizeConnected ( ) ) & &
( canReachMyself ( ) ) & &
( System . currentTimeMillis ( ) - sb. peers . lastSeedUpload_timeStamp < 1000 * 60 * 60 * 24 ) & &
( sb. peers . mySeed ( ) . isPrincipal ( ) )
( System . currentTimeMillis ( ) - this . sb. peers . lastSeedUpload_timeStamp < 1000 * 60 * 60 * 24 ) & &
( this . sb. peers . mySeed ( ) . isPrincipal ( ) )
) {
if ( log . isFine ( ) ) log . logFine ( "yacyCore.publishSeedList: not necessary to publish: oldIP is equal, sizeConnected is equal and I can reach myself under the old IP." ) ;
return ;
@ -164,7 +164,7 @@ public class yacyCore {
}
}
// we want to be a principal...
saveSeedList ( sb) ;
saveSeedList ( this . sb) ;
} else {
if ( seedUploadMethod . equals ( "" ) ) {
this . sb . setConfig ( "seedUploadMethod" , "none" ) ;
@ -175,7 +175,7 @@ public class yacyCore {
}
public final void peerPing ( ) {
if ( ( sb . isRobinsonMode ( ) ) & & ( sb. getConfig ( "cluster.mode" , "" ) . equals ( "privatepeer" ) ) ) {
if ( ( this . sb . isRobinsonMode ( ) ) & & ( this . sb. getConfig ( "cluster.mode" , "" ) . equals ( "privatepeer" ) ) ) {
// in case this peer is a privat peer we omit the peer ping
// all other robinson peer types do a peer ping:
// the privatecluster does the ping to the other cluster members
@ -185,34 +185,34 @@ public class yacyCore {
}
// before publishing, update some seed data
sb. updateMySeed ( ) ;
this . sb. updateMySeed ( ) ;
// publish own seed to other peer, this can every peer, but makes only sense for senior peers
if ( sb. peers . sizeConnected ( ) = = 0 ) {
if ( this . sb. peers . sizeConnected ( ) = = 0 ) {
// reload the seed lists
sb. loadSeedLists ( ) ;
log . logInfo ( "re-initialized seed list. received " + sb. peers . sizeConnected ( ) + " new peer(s)" ) ;
this . sb. loadSeedLists ( ) ;
log . logInfo ( "re-initialized seed list. received " + this . sb. peers . sizeConnected ( ) + " new peer(s)" ) ;
}
final int newSeeds = publishMySeed ( false ) ;
if ( newSeeds > 0 ) {
log . logInfo ( "received " + newSeeds + " new peer(s), know a total of " + sb. peers . sizeConnected ( ) + " different peers" ) ;
log . logInfo ( "received " + newSeeds + " new peer(s), know a total of " + this . sb. peers . sizeConnected ( ) + " different peers" ) ;
}
}
private boolean canReachMyself ( ) { // TODO: check if this method is necessary - depending on the used router it will not work
// returns true if we can reach ourself under our known peer address
// if we cannot reach ourself, we call a forced publishMySeed and return false
final long [ ] callback = yacyClient . queryUrlCount ( sb. peers . mySeed ( ) ) ;
final long [ ] callback = yacyClient . queryUrlCount ( this . sb. peers . mySeed ( ) ) ;
if ( callback [ 0 ] > = 0 & & callback [ 1 ] = = magic ) {
sb. peers . mySeed ( ) . setLastSeenUTC ( ) ;
this . sb. peers . mySeed ( ) . setLastSeenUTC ( ) ;
return true ;
}
log . logInfo ( "re-connect own seed" ) ;
final String oldAddress = sb. peers . mySeed ( ) . getPublicAddress ( ) ;
final String oldAddress = this . sb. peers . mySeed ( ) . getPublicAddress ( ) ;
/*final int newSeeds =*/ publishMySeed ( true ) ;
return ( oldAddress ! = null & & oldAddress . equals ( sb. peers . mySeed ( ) . getPublicAddress ( ) ) ) ;
return ( oldAddress ! = null & & oldAddress . equals ( this . sb. peers . mySeed ( ) . getPublicAddress ( ) ) ) ;
}
// use our own formatter to prevent concurrency locks with other processes
private final static GenericFormatter my_SHORT_SECOND_FORMATTER = new GenericFormatter ( GenericFormatter . FORMAT_SHORT_SECOND , GenericFormatter . time_second ) ;
@ -236,24 +236,24 @@ public class yacyCore {
public final void run ( ) {
try {
this . added = yacyClient . hello ( sb. peers . mySeed ( ) , sb. peers . peerActions , seed . getClusterAddress ( ) , seed . hash ) ;
this . added = yacyClient . hello ( yacyCore. this . sb. peers . mySeed ( ) , yacyCore. this . sb. peers . peerActions , this . seed . getClusterAddress ( ) , this . seed . hash , this . seed . getName ( ) ) ;
if ( this . added < 0 ) {
// no or wrong response, delete that address
final String cause = "peer ping to peer resulted in error response (added < 0)" ;
log . logInfo ( "publish: disconnected " + this . seed . get ( yacySeed . PEERTYPE , yacySeed . PEERTYPE_SENIOR ) + " peer '" + this . seed . getName ( ) + "' from " + this . seed . getPublicAddress ( ) + ": " + cause ) ;
sb. peers . peerActions . peerDeparture ( this . seed , cause ) ;
yacyCore. this . sb. peers . peerActions . peerDeparture ( this . seed , cause ) ;
} else {
// success! we have published our peer to a senior peer
// update latest news from the other peer
log . logInfo ( "publish: handshaked " + this . seed . get ( yacySeed . PEERTYPE , yacySeed . PEERTYPE_SENIOR ) + " peer '" + this . seed . getName ( ) + "' at " + this . seed . getPublicAddress ( ) ) ;
// check if seed's lastSeen has been updated
final yacySeed newSeed = sb. peers . getConnected ( this . seed . hash ) ;
final yacySeed newSeed = yacyCore. this . sb. peers . getConnected ( this . seed . hash ) ;
if ( newSeed ! = null ) {
if ( ! newSeed . isOnline ( ) ) {
if ( log . isFine ( ) ) log . logFine ( "publish: recently handshaked " + this . seed . get ( yacySeed . PEERTYPE , yacySeed . PEERTYPE_SENIOR ) +
" peer '" + this . seed . getName ( ) + "' at " + this . seed . getPublicAddress ( ) + " is not online." +
" Removing Peer from connected" ) ;
sb. peers . peerActions . peerDeparture ( newSeed , "peer not online" ) ;
yacyCore. this . sb. peers . peerActions . peerDeparture ( newSeed , "peer not online" ) ;
} else
if ( newSeed . getLastSeenUTC ( ) < ( System . currentTimeMillis ( ) - 10000 ) ) {
// update last seed date
@ -262,14 +262,14 @@ public class yacyCore {
" peer '" + this . seed . getName ( ) + "' at " + this . seed . getPublicAddress ( ) + " with old LastSeen: '" +
my_SHORT_SECOND_FORMATTER . format ( new Date ( newSeed . getLastSeenUTC ( ) ) ) + "'" ) ;
newSeed . setLastSeenUTC ( ) ;
sb. peers . peerActions . peerArrival ( newSeed , true ) ;
yacyCore. this . sb. peers . peerActions . peerArrival ( newSeed , true ) ;
} else {
if ( log . isFine ( ) ) log . logFine ( "publish: recently handshaked " + this . seed . get ( yacySeed . PEERTYPE , yacySeed . PEERTYPE_SENIOR ) +
" peer '" + this . seed . getName ( ) + "' at " + this . seed . getPublicAddress ( ) + " with old LastSeen: '" +
my_SHORT_SECOND_FORMATTER . format ( new Date ( newSeed . getLastSeenUTC ( ) ) ) + "', this is more recent: '" +
my_SHORT_SECOND_FORMATTER . format ( new Date ( this . seed . getLastSeenUTC ( ) ) ) + "'" ) ;
this . seed . setLastSeenUTC ( ) ;
sb. peers . peerActions . peerArrival ( this . seed , true ) ;
yacyCore. this . sb. peers . peerActions . peerArrival ( this . seed , true ) ;
}
}
} else {
@ -277,7 +277,7 @@ public class yacyCore {
}
}
} catch ( final Exception e ) {
log . logSevere ( "publishThread: error with target seed " + seed. toString ( ) + ": " + e . getMessage ( ) , e ) ;
log . logSevere ( "publishThread: error with target seed " + this . seed. toString ( ) + ": " + e . getMessage ( ) , e ) ;
} finally {
this . syncList . add ( this ) ;
this . sync . release ( ) ;
@ -306,13 +306,13 @@ public class yacyCore {
// init yacyHello-process
Map < String , yacySeed > seeds ; // hash/yacySeed relation
int attempts = sb. peers . sizeConnected ( ) ;
int attempts = this . sb. peers . sizeConnected ( ) ;
// getting a list of peers to contact
if ( sb. peers . mySeed ( ) . get ( yacySeed . PEERTYPE , yacySeed . PEERTYPE_VIRGIN ) . equals ( yacySeed . PEERTYPE_VIRGIN ) ) {
if ( this . sb. peers . mySeed ( ) . get ( yacySeed . PEERTYPE , yacySeed . PEERTYPE_VIRGIN ) . equals ( yacySeed . PEERTYPE_VIRGIN ) ) {
if ( attempts > PING_INITIAL ) { attempts = PING_INITIAL ; }
final Map < byte [ ] , String > ch = Switchboard . getSwitchboard ( ) . clusterhashes ;
seeds = PeerSelection . seedsByAge ( sb. peers , true , attempts - ( ( ch = = null ) ? 0 : ch . size ( ) ) ) ; // best for fast connection
seeds = PeerSelection . seedsByAge ( this . sb. peers , true , attempts - ( ( ch = = null ) ? 0 : ch . size ( ) ) ) ; // best for fast connection
// add also all peers from cluster if this is a public robinson cluster
if ( ch ! = null ) {
final Iterator < Map . Entry < byte [ ] , String > > i = ch . entrySet ( ) . iterator ( ) ;
@ -324,7 +324,7 @@ public class yacyCore {
hash = ASCII . String ( entry . getKey ( ) ) ;
seed = seeds . get ( hash ) ;
if ( seed = = null ) {
seed = sb. peers . get ( hash ) ;
seed = this . sb. peers . get ( hash ) ;
if ( seed = = null ) continue ;
}
seed . setAlternativeAddress ( entry . getValue ( ) ) ;
@ -339,7 +339,7 @@ public class yacyCore {
} else {
if ( attempts > PING_MIN_RUNNING ) { attempts = PING_MIN_RUNNING ; }
}
seeds = PeerSelection . seedsByAge ( sb. peers , false , attempts ) ; // best for seed list maintenance/cleaning
seeds = PeerSelection . seedsByAge ( this . sb. peers , false , attempts ) ; // best for seed list maintenance/cleaning
}
if ( seeds = = null | | seeds . isEmpty ( ) ) { return 0 ; }
@ -351,16 +351,16 @@ public class yacyCore {
// include a YaCyNews record to my seed
try {
final yacyNewsDB . Record record = sb. peers . newsPool . myPublication ( ) ;
final yacyNewsDB . Record record = this . sb. peers . newsPool . myPublication ( ) ;
if ( record = = null ) {
sb. peers . mySeed ( ) . put ( "news" , "" ) ;
this . sb. peers . mySeed ( ) . put ( "news" , "" ) ;
} else {
sb. peers . mySeed ( ) . put ( "news" , de . anomic . tools . crypt . simpleEncode ( record . toString ( ) ) ) ;
this . sb. peers . mySeed ( ) . put ( "news" , de . anomic . tools . crypt . simpleEncode ( record . toString ( ) ) ) ;
}
} catch ( final Exception e ) {
log . logSevere ( "publishMySeed: problem with news encoding" , e ) ;
}
sb. peers . mySeed ( ) . setUnusedFlags ( ) ;
this . sb. peers . mySeed ( ) . setUnusedFlags ( ) ;
int newSeeds = - 1 ;
//if (seeds.length > 1) {
// holding a reference to all started threads
@ -383,7 +383,7 @@ public class yacyCore {
final String seederror = seed . isProper ( false ) ;
if ( ( address = = null ) | | ( seederror ! = null ) ) {
// we don't like that address, delete it
sb. peers . peerActions . peerDeparture ( seed , "peer ping to peer resulted in address = " + address + "; seederror = " + seederror ) ;
this . sb. peers . peerActions . peerDeparture ( seed , "peer ping to peer resulted in address = " + address + "; seederror = " + seederror ) ;
sync . acquire ( ) ;
} else {
// starting a new publisher thread
@ -448,7 +448,7 @@ public class yacyCore {
if ( ( accessible > = PING_MIN_PEERSEEN ) | |
( accessible > = notaccessible ) ) {
// We can be reached from a majority of other Peers
if ( sb. peers . mySeed ( ) . isPrincipal ( ) ) {
if ( this . sb. peers . mySeed ( ) . isPrincipal ( ) ) {
newPeerType = yacySeed . PEERTYPE_PRINCIPAL ;
} else {
newPeerType = yacySeed . PEERTYPE_SENIOR ;
@ -457,38 +457,38 @@ public class yacyCore {
// We cannot be reached from the outside
newPeerType = yacySeed . PEERTYPE_JUNIOR ;
}
if ( sb. peers . mySeed ( ) . orVirgin ( ) . equals ( newPeerType ) ) {
log . logInfo ( "PeerPing: myType is " + sb. peers . mySeed ( ) . orVirgin ( ) ) ;
if ( this . sb. peers . mySeed ( ) . orVirgin ( ) . equals ( newPeerType ) ) {
log . logInfo ( "PeerPing: myType is " + this . sb. peers . mySeed ( ) . orVirgin ( ) ) ;
} else {
log . logInfo ( "PeerPing: changing myType from '" + sb. peers . mySeed ( ) . orVirgin ( ) + "' to '" + newPeerType + "'" ) ;
sb. peers . mySeed ( ) . put ( yacySeed . PEERTYPE , newPeerType ) ;
log . logInfo ( "PeerPing: changing myType from '" + this . sb. peers . mySeed ( ) . orVirgin ( ) + "' to '" + newPeerType + "'" ) ;
this . sb. peers . mySeed ( ) . put ( yacySeed . PEERTYPE , newPeerType ) ;
}
} else {
log . logInfo ( "PeerPing: No data, staying at myType: " + sb. peers . mySeed ( ) . orVirgin ( ) ) ;
log . logInfo ( "PeerPing: No data, staying at myType: " + this . sb. peers . mySeed ( ) . orVirgin ( ) ) ;
}
// success! we have published our peer to a senior peer
// update latest news from the other peer
// log.logInfo("publish: handshaked " + t.seed.get(yacySeed.PEERTYPE, yacySeed.PEERTYPE_SENIOR) + " peer '" + t.seed.getName() + "' at " + t.seed.getAddress());
sb. peers . saveMySeed ( ) ;
this . sb. peers . saveMySeed ( ) ;
// if we have an address, we do nothing
if ( sb. peers . mySeed ( ) . isProper ( true ) = = null & & ! force ) { return 0 ; }
if ( this . sb. peers . mySeed ( ) . isProper ( true ) = = null & & ! force ) { return 0 ; }
if ( newSeeds > 0 ) return newSeeds ;
// still no success: ask own NAT or internet responder
//final boolean DI604use = switchboard.getConfig("DI604use", "false").equals("true");
//final String DI604pw = switchboard.getConfig("DI604pw", "");
final String ip = sb. getConfig ( "staticIP" , "" ) ;
final String ip = this . sb. getConfig ( "staticIP" , "" ) ;
//if (ip.equals("")) ip = natLib.retrieveIP(DI604use, DI604pw);
// yacyCore.log.logDebug("DEBUG: new IP=" + ip);
if ( yacySeed . isProperIP ( ip ) = = null ) sb. peers . mySeed ( ) . setIP ( ip ) ;
if ( sb. peers . mySeed ( ) . get ( yacySeed . PEERTYPE , yacySeed . PEERTYPE_JUNIOR ) . equals ( yacySeed . PEERTYPE_JUNIOR ) ) // ???????????????
sb. peers . mySeed ( ) . put ( yacySeed . PEERTYPE , yacySeed . PEERTYPE_SENIOR ) ; // to start bootstraping, we need to be recognised as PEERTYPE_SENIOR peer
if ( yacySeed . isProperIP ( ip ) = = null ) this . sb. peers . mySeed ( ) . setIP ( ip ) ;
if ( this . sb. peers . mySeed ( ) . get ( yacySeed . PEERTYPE , yacySeed . PEERTYPE_JUNIOR ) . equals ( yacySeed . PEERTYPE_JUNIOR ) ) // ???????????????
this . sb. peers . mySeed ( ) . put ( yacySeed . PEERTYPE , yacySeed . PEERTYPE_SENIOR ) ; // to start bootstraping, we need to be recognised as PEERTYPE_SENIOR peer
log . logInfo ( "publish: no recipient found, our address is " +
( ( sb. peers . mySeed ( ) . getPublicAddress ( ) = = null ) ? "unknown" : sb. peers . mySeed ( ) . getPublicAddress ( ) ) ) ;
sb. peers . saveMySeed ( ) ;
( ( this . sb. peers . mySeed ( ) . getPublicAddress ( ) = = null ) ? "unknown" : this . sb. peers . mySeed ( ) . getPublicAddress ( ) ) ) ;
this . sb. peers . saveMySeed ( ) ;
return 0 ;
} catch ( final InterruptedException e ) {
try {