Author: toad
Date: 2006-08-09 01:12:05 +0000 (Wed, 09 Aug 2006)
New Revision: 9978
Modified:
trunk/freenet/src/freenet/node/PeerManager.java
Log:
make reading in peers file more robust
Modified: trunk/freenet/src/freenet/node/PeerManager.java
===================================================================
--- trunk/freenet/src/freenet/node/PeerManager.java 2006-08-09 00:01:26 UTC
(rev 9977)
+++ trunk/freenet/src/freenet/node/PeerManager.java 2006-08-09 01:12:05 UTC
(rev 9978)
@@ -60,46 +60,74 @@
myPeers = new PeerNode[0];
connectedPeers = new PeerNode[0];
this.node = node;
- try {
- // Try to read the node list from disk
- FileInputStream fis = new FileInputStream(filename);
- InputStreamReader ris = new InputStreamReader(fis);
- BufferedReader br = new BufferedReader(ris);
- try { // FIXME: no better way?
- while(true) {
- // Read a single NodePeer
- SimpleFieldSet fs;
- fs = new SimpleFieldSet(br);
- PeerNode pn;
- try {
- pn = new PeerNode(fs, node, true);
- } catch (FSParseException e2) {
- Logger.error(this, "Could not parse peer:
"+e2+"\n"+fs.toString(),e2);
- continue;
- } catch (PeerParseException e2) {
- Logger.error(this, "Could not parse peer:
"+e2+"\n"+fs.toString(),e2);
- continue;
- }
- addPeer(pn);
- }
- } catch (EOFException e) {
- // End of file, fine
- } catch (IOException e1) {
- Logger.error(this, "Could not read peers file: "+e1, e1);
- return;
- } finally {
+ File peersFile = new File(filename);
+ File backupFile = new File(filename+".bak");
+ // Try to read the node list from disk
+ if(peersFile.exists()) {
+ if(readPeers(peersFile)) {
+ String msg = "Read "+myPeers.length+" peers from
"+peersFile;
+ Logger.normal(this, msg);
+ System.out.println(msg);
+ return;
+ }
+ }
+ // Try the backup
+ if(backupFile.exists()) {
+ if(readPeers(backupFile)) {
+ String msg = "Read "+myPeers.length+" peers from
"+backupFile;
+ Logger.normal(this, msg);
+ System.out.println(msg);
+ } else {
+ Logger.error(this, "No (readable) peers file with peers
in it found");
+ System.err.println("No (readable) peers file with peers
in it found");
+ }
+ }
+ }
+
+ private boolean readPeers(File peersFile) {
+ boolean gotSome = false;
+ FileInputStream fis;
+ try {
+ fis = new FileInputStream(peersFile);
+ } catch (FileNotFoundException e4) {
+ Logger.normal(this, "Peers file not found: "+peersFile);
+ return false;
+ }
+ InputStreamReader ris = new InputStreamReader(fis);
+ BufferedReader br = new BufferedReader(ris);
+ try { // FIXME: no better way?
+ while(true) {
+ // Read a single NodePeer
+ SimpleFieldSet fs;
+ fs = new SimpleFieldSet(br);
+ PeerNode pn;
try {
- br.close();
- } catch (IOException e3) {
- Logger.error(this, "Ignoring "+e3+" caught reading
"+filename, e3);
+ pn = new PeerNode(fs, node, true);
+ } catch (FSParseException e2) {
+ Logger.error(this, "Could not parse peer:
"+e2+"\n"+fs.toString(),e2);
+ continue;
+ } catch (PeerParseException e2) {
+ Logger.error(this, "Could not parse peer:
"+e2+"\n"+fs.toString(),e2);
+ continue;
}
+ addPeer(pn);
+ gotSome = true;
}
- } catch (FileNotFoundException e) {
- Logger.error(this, "Peers file not found: "+filename);
+ } catch (EOFException e) {
+ // End of file, fine
+ } catch (IOException e1) {
+ Logger.error(this, "Could not read peers file: "+e1, e1);
+ } finally {
+ try {
+ br.close();
+ } catch (IOException e3) {
+ Logger.error(this, "Ignoring "+e3+" caught reading "+filename,
e3);
+ }
+ return gotSome;
}
- }
+ }
- public boolean addPeer(PeerNode pn) {
+ public boolean addPeer(PeerNode pn) {
synchronized(this) {
for(int i=0;i<myPeers.length;i++) {
if(myPeers[i].equals(pn)) {