Author: jflesch
Date: 2006-07-14 18:39:42 +0000 (Fri, 14 Jul 2006)
New Revision: 9604
Modified:
trunk/apps/Thaw/src/thaw/fcp/FCPClientGet.java
trunk/apps/Thaw/src/thaw/fcp/FCPClientPut.java
trunk/apps/Thaw/src/thaw/fcp/FCPConnection.java
trunk/apps/Thaw/src/thaw/fcp/FCPMessage.java
trunk/apps/Thaw/src/thaw/fcp/FCPTransferQuery.java
trunk/apps/Thaw/src/thaw/i18n/thaw.properties
trunk/apps/Thaw/src/thaw/plugins/queueWatcher/DetailPanel.java
trunk/apps/Thaw/src/thaw/plugins/queueWatcher/QueuePanel.java
Log:
Fix jdk 1.4 compatibility and FCPClientGet locking
Modified: trunk/apps/Thaw/src/thaw/fcp/FCPClientGet.java
===================================================================
--- trunk/apps/Thaw/src/thaw/fcp/FCPClientGet.java 2006-07-14 18:31:21 UTC
(rev 9603)
+++ trunk/apps/Thaw/src/thaw/fcp/FCPClientGet.java 2006-07-14 18:39:42 UTC
(rev 9604)
@@ -11,6 +11,7 @@
/**
* notify() only when progress has really changes.
+ * TODO: Put the fetchLock on FCPConnection. Not here.
*/
public class FCPClientGet extends Observable implements Observer,
FCPTransferQuery {
private final static int MAX_RETRIES = -1;
@@ -32,12 +33,14 @@
private String identifier;
private int progress; /* in pourcent */
+ private boolean progressReliable = false;
private long fileSize;
private boolean running = false;
private boolean successful = false;
private static boolean fetchLock = false;
+ private boolean fetchLockOwner = false;
/**
@@ -47,13 +50,15 @@
this.queueManager = queueManager;
setParameters(parameters);
+ progressReliable = false;
+
/* If isPersistent(), then start() won't be called, so must
relisten the
queryManager by ourself */
if(isPersistent() && identifier != null &&
!identifier.equals("")) {
this.queueManager.getQueryManager().deleteObserver(this);
this.queueManager.getQueryManager().addObserver(this);
}
-
+
}
@@ -68,6 +73,8 @@
this(key, priority, persistence, globalQueue, destinationDir);
+ progressReliable = false;
+
this.queueManager = queueManager;
this.progress = progress;
@@ -76,6 +83,7 @@
successful = true;
running = true;
+
}
@@ -92,6 +100,9 @@
if(globalQueue && persistence >= 2)
globalQueue = false; /* else protocol error */
+ progressReliable = false;
+
+
this.key = key;
this.priority = priority;
this.persistence = persistence;
@@ -220,18 +231,24 @@
Logger.debug(this, "Unknow URI ? was probably a
stop order so no problem ...");
return;
}
-
+ /*
if(message.getValue("Fatal").equals("False")) {
Logger.debug(this, "Non-fatal protocol error");
status = "Protocol warning
("+message.getValue("CodeDescription")+")";
return;
}
+ */
status = "Protocol Error
("+message.getValue("CodeDescription")+")";
progress = 100;
running = false;
successful = false;
-
+
+ if(message.getValue("Fatal") != null &&
+ message.getValue("Fatal").equals("false")) {
+ status = status + " (non-fatal)";
+ }
+
queueManager.getQueryManager().deleteObserver(this);
setChanged();
@@ -248,12 +265,6 @@
return;
}
- if(message.getValue("Fatal").equals("False")) {
- Logger.debug(this, "Non-fatal GetFailed");
- status = "Non-fatal GetFailed
("+message.getValue("CodeDescription")+")";
- return;
- }
-
//removeRequest();
int code = ((new
Integer(message.getValue("Code"))).intValue());
@@ -263,6 +274,12 @@
progress = 100;
running = false;
successful = false;
+
+ if(message.getValue("Fatal") != null &&
+ message.getValue("Fatal").equals("false")) {
+ status = status + " (non-fatal)";
+ }
+
queueManager.getQueryManager().deleteObserver(this);
} else {
status = "Retrying";
@@ -290,6 +307,11 @@
status = "Fetching";
+ if(message.getValue("FinalizedTotal") != null &&
+
message.getValue("FinalizedTotal").equals("true")) {
+ progressReliable = true;
+ }
+
setChanged();
notifyObservers();
}
@@ -320,6 +342,7 @@
}
fetchLock = false;
+ fetchLockOwner = false;
//queueManager.getQueryManager().getConnection().unlockWriting();
@@ -367,7 +390,7 @@
}
- if(!fetchLock)
+ if(!fetchLock || fetchLockOwner)
break;
}
@@ -375,7 +398,7 @@
Logger.warning(this, "UnlockWaiter.run() : Wtf
?");
}
- clientGet.saveFileTo(this.dir);
+ clientGet.continueSaveFileTo(this.dir);
return;
}
}
@@ -401,22 +424,28 @@
}
- if(fetchLock) {
+ Logger.info(this, "Waiting socket avaibility ...");
+ status = "Waiting socket avaibility ...";
- Logger.info(this, "Another file is being downloaded ...
waiting ...");
+ setChanged();
+ notifyObservers();
- Thread fork = new Thread(new UnlockWaiter(this, dir));
- fork.start();
+ Thread fork = new Thread(new UnlockWaiter(this, dir));
+ fork.start();
- return true;
- }
-
+ return true;
+ }
+
+ public synchronized boolean continueSaveFileTo(String dir) {
+ destinationDir = dir;
+
if(destinationDir == null) {
- Logger.warning(this, "saveFileTo() : Wtf ?");
+ Logger.warning(this, "saveFileTo() : Wtf ?");
}
fetchLock = true;
+ fetchLockOwner = true;
FCPMessage getRequestStatus = new FCPMessage();
@@ -584,6 +613,10 @@
return progress;
}
+ public boolean isProgressionReliable() {
+ return progressReliable;
+ }
+
public String getFileKey() {
return key;
}
Modified: trunk/apps/Thaw/src/thaw/fcp/FCPClientPut.java
===================================================================
--- trunk/apps/Thaw/src/thaw/fcp/FCPClientPut.java 2006-07-14 18:31:21 UTC
(rev 9603)
+++ trunk/apps/Thaw/src/thaw/fcp/FCPClientPut.java 2006-07-14 18:39:42 UTC
(rev 9604)
@@ -453,47 +453,32 @@
}
if(msg.getMessageName().equals("PutFailed")) {
- /*
- if(msg.getValue("Fatal") != null
- && msg.getValue("Fatal").equals("false")) {
- status = "Warning
("+msg.getValue("CodeDescription+")+")";
-
- setChanged();
- notifyObservers();
- return;
- }
- */
-
successful = false;
running = false;
finished = true;
status = "Failed
("+msg.getValue("CodeDescription")+")";
+ if(msg.getValue("Fatal") != null &&
+ msg.getValue("Fatal").equals("false"))
+ status = status + " (non-fatal)";
+
setChanged();
notifyObservers();
return;
}
if(msg.getMessageName().equals("ProtocolError")) {
- /*
- if(msg.getValue("Fatal") != null
- && msg.getValue("Fatal").equals("false")) {
- status = "Protocol warning
("+msg.getValue("CodeDescription+")+")";
- setChanged();
- notifyObservers();
-
- return;
- }
- */
-
successful = false;
running = false;
finished = true;
status = "Protocol error
("+msg.getValue("CodeDescription")+")";
+ if(msg.getValue("Fatal") != null &&
+ msg.getValue("Fatal").equals("false"))
+ status = status + " (non-fatal)";
setChanged();
notifyObservers();
@@ -526,8 +511,15 @@
if(msg.getMessageName().equals("FinishedCompression")) {
status = "Inserting";
- int rate = (int)( ((new
Long(msg.getValue("OrigSize"))).longValue() * 100) / (new
Long(msg.getValue("OrigSize"))).longValue() );
+ if(msg.getValue("OrigSize") == null
+ || msg.getValue("CompressedSize") == null) {
+ setChanged();
+ notifyObservers();
+ return;
+ }
+ int rate = (int)( ((new
Long(msg.getValue("OrigSize"))).longValue() * 100) / (new
Long(msg.getValue("CompressedSize"))).longValue() );
+
Logger.info(this, "Compression: "+ (new
Integer(rate)).intValue());
setChanged();
@@ -618,6 +610,10 @@
return progress;
}
+ public boolean isProgressionReliable() {
+ return true;
+ }
+
/**
* @return public key
*/
Modified: trunk/apps/Thaw/src/thaw/fcp/FCPConnection.java
===================================================================
--- trunk/apps/Thaw/src/thaw/fcp/FCPConnection.java 2006-07-14 18:31:21 UTC
(rev 9603)
+++ trunk/apps/Thaw/src/thaw/fcp/FCPConnection.java 2006-07-14 18:39:42 UTC
(rev 9604)
@@ -99,6 +99,8 @@
return false;
}
+ Logger.info(this, "Connection to "+nodeAddress+":"+(new
Integer(port)).toString()+"...");
+
if(socket != null && !socket.isClosed())
disconnect();
@@ -132,6 +134,8 @@
reader = new BufferedInputStream(in);
+ Logger.info(this, "Connected");
+
setChanged();
notifyObservers();
Modified: trunk/apps/Thaw/src/thaw/fcp/FCPMessage.java
===================================================================
--- trunk/apps/Thaw/src/thaw/fcp/FCPMessage.java 2006-07-14 18:31:21 UTC
(rev 9603)
+++ trunk/apps/Thaw/src/thaw/fcp/FCPMessage.java 2006-07-14 18:39:42 UTC
(rev 9604)
@@ -50,7 +50,7 @@
for(i++; i < lines.length ; i++) {
/* Empty lines are ignored. */
/* Line not containing '=' (like "Data" or
"EndMessage") are ignored */
- if(lines[i].equals("") || !lines[i].contains("="))
+ if(lines[i].equals("") || !(lines[i].indexOf("=") >= 0))
continue;
String[] affectation = lines[i].split("=");
@@ -76,7 +76,7 @@
Logger.notice(this, "Setting name to empty ? weird");
}
- if(name.contains("\n")) {
+ if(name.indexOf("\n")>=0) {
Logger.notice(this, "Name shouldn't contain '\n'");
}
Modified: trunk/apps/Thaw/src/thaw/fcp/FCPTransferQuery.java
===================================================================
--- trunk/apps/Thaw/src/thaw/fcp/FCPTransferQuery.java 2006-07-14 18:31:21 UTC
(rev 9603)
+++ trunk/apps/Thaw/src/thaw/fcp/FCPTransferQuery.java 2006-07-14 18:39:42 UTC
(rev 9604)
@@ -53,6 +53,9 @@
*/
public int getProgression();
+ public boolean isProgressionReliable();
+
+
/**
* Informal.
* Gives *public* final key only.
@@ -114,6 +117,5 @@
*/
public String getIdentifier();
-
public String getFilename();
}
Modified: trunk/apps/Thaw/src/thaw/i18n/thaw.properties
===================================================================
--- trunk/apps/Thaw/src/thaw/i18n/thaw.properties 2006-07-14 18:31:21 UTC
(rev 9603)
+++ trunk/apps/Thaw/src/thaw/i18n/thaw.properties 2006-07-14 18:39:42 UTC
(rev 9604)
@@ -50,6 +50,9 @@
thaw.common.downloadLocally=Download locally
thaw.common.unspecified=Unspecified
+thaw.common.unknown=Unknown
+thaw.common.estimation=estimation
+thaw.common.failed=FAILED
## Errors
thaw.error.idAlreadyUsed=Unable to connect. Our Id is already used by another
client connected to the node.
Modified: trunk/apps/Thaw/src/thaw/plugins/queueWatcher/DetailPanel.java
===================================================================
--- trunk/apps/Thaw/src/thaw/plugins/queueWatcher/DetailPanel.java
2006-07-14 18:31:21 UTC (rev 9603)
+++ trunk/apps/Thaw/src/thaw/plugins/queueWatcher/DetailPanel.java
2006-07-14 18:39:42 UTC (rev 9604)
@@ -128,15 +128,23 @@
public void refresh() {
if(query != null) {
progress.setValue(query.getProgression());
- if(!query.isFinished() || query.isSuccessful())
- progress.setString((new
Integer(query.getProgression())).toString() + "%");
- else
- progress.setString("FAILED");
+
+
+ if(!query.isFinished() || query.isSuccessful()) {
+ String progression = (new
Integer(query.getProgression())).toString() + "%";
+
+ if(!query.isProgressionReliable())
+ progression = progression + "
("+I18n.getMessage("thaw.common.estimation")+")";
+
+ progress.setString(progression);
+ } else
+
progress.setString(I18n.getMessage("thaw.common.failed"));
+
if(query.getFileKey() != null)
key.setText(query.getFileKey());
else
- key.setText("Unknown");
+
key.setText(I18n.getMessage("thaw.common.unknown"));
size.setText((new
Long(query.getFileSize())).toString()+" B");
@@ -150,7 +158,7 @@
if(query.getThawPriority() != -1)
priority.setText((new
Integer(query.getThawPriority())).toString());
else
- priority.setText("Unknown");
+
priority.setText(I18n.getMessage("thaw.common.unknown"));
} else {
progress.setValue(0);
@@ -173,7 +181,10 @@
file.setText(query.getFilename());
- path.setText(query.getPath());
+ if(query.getPath() != null)
+ path.setText(query.getPath());
+ else
+
path.setText(I18n.getMessage("thaw.common.unspecified"));
if(query.isGlobal())
globalQueue.setText(I18n.getMessage("thaw.common.yes"));
Modified: trunk/apps/Thaw/src/thaw/plugins/queueWatcher/QueuePanel.java
===================================================================
--- trunk/apps/Thaw/src/thaw/plugins/queueWatcher/QueuePanel.java
2006-07-14 18:31:21 UTC (rev 9603)
+++ trunk/apps/Thaw/src/thaw/plugins/queueWatcher/QueuePanel.java
2006-07-14 18:39:42 UTC (rev 9604)
@@ -201,13 +201,18 @@
/**
* @param queries Vector of FCPTransferQuery only
*/
- public void addToTable(Vector queries) {
- for(Iterator queryIt = queries.iterator();
- queryIt.hasNext();) {
-
- FCPTransferQuery query =
(FCPTransferQuery)queryIt.next();
+ public synchronized void addToTable(Vector queries) {
+ try {
+ for(Iterator queryIt = queries.iterator();
+ queryIt.hasNext();) {
+
+ FCPTransferQuery query =
(FCPTransferQuery)queryIt.next();
+
+ addToTable(query);
+ }
- addToTable(query);
+ } catch(java.util.ConcurrentModificationException e) {
+ Logger.notice(this, "Collision.");
}
}