|
From: <ian...@us...> - 2007-11-19 19:44:08
|
Revision: 591
http://ogoglio.svn.sourceforge.net/ogoglio/?rev=591&view=rev
Author: iansmith
Date: 2007-11-19 11:44:11 -0800 (Mon, 19 Nov 2007)
Log Message:
-----------
Added better debug info during shutdown, added a flush that may solve the problem of zombie avatars on EC2.
Added support for an "out of service" filter, but it's not enabled yet.
Modified Paths:
--------------
maven/trunk/ogoglio-common/src/main/java/com/ogoglio/client/SpaceClient.java
maven/trunk/ogoglio-common/src/main/java/com/ogoglio/message/SenderQueue.java
maven/trunk/ogoglio-common/src/main/java/com/ogoglio/message/TCPChannel.java
maven/trunk/ogoglio-common/src/main/java/com/ogoglio/message/proto/CometClient.java
maven/trunk/ogoglio-common/src/main/java/com/ogoglio/message/proto/CometProto.java
maven/trunk/ogoglio-common/src/main/java/com/ogoglio/util/Log.java
maven/trunk/ogoglio-server/src/main/java/com/ogoglio/sim/SimMessageHandler.java
maven/trunk/ogoglio-viewer-applet/src/main/java/com/ogoglio/viewer/applet/ViewerApplet.java
Added Paths:
-----------
maven/trunk/ogoglio-server/src/main/java/com/ogoglio/site/OutOfServiceFilter.java
Modified: maven/trunk/ogoglio-common/src/main/java/com/ogoglio/client/SpaceClient.java
===================================================================
--- maven/trunk/ogoglio-common/src/main/java/com/ogoglio/client/SpaceClient.java 2007-11-19 14:41:43 UTC (rev 590)
+++ maven/trunk/ogoglio-common/src/main/java/com/ogoglio/client/SpaceClient.java 2007-11-19 19:44:11 UTC (rev 591)
@@ -692,8 +692,11 @@
}
public void cleanup() {
+ Log.info("About to try to clean up the message channel object");
messageChannel.cleanup();
+ Log.info("Clearing all waiting messages becuse we are doing cleanup:"+waitingMessages.size());
waitingMessages.clear();
+ Log.info("Done cleaning up SpaceClient.Messenger");
}
public void heartbeat() throws IOException {
@@ -749,13 +752,18 @@
public void cleanup() {
cleanedUp = true;
try {
+ Log.info("In space client cleanup, about to send logout message:"+accountDoc.getUsername());
messageChannel.sendMessage(new Message(messageChannel.getLocalLocator(), messageChannel.getRemoteLocator(), space.getSpaceID(), new PayloadFactory.LogoutPayload(accountDoc.getUsername())));
+ Log.info("Success sending logout message");
} catch (Exception e) {
+ Log.error("Problem sending logout message:"+e.getMessage());
}
if (heartbeatTimer!=null) { //there is a race condition at startup that makes this necessary
heartbeatTimer.cancel();
}
+ Log.info("Cleaning up messenger in spaceclient...");
messenger.cleanup();
+ Log.info("Done with all spaceclient cleanup.");
}
public InputStream getPageContentStream(long thingID, long pageID) {
Modified: maven/trunk/ogoglio-common/src/main/java/com/ogoglio/message/SenderQueue.java
===================================================================
--- maven/trunk/ogoglio-common/src/main/java/com/ogoglio/message/SenderQueue.java 2007-11-19 14:41:43 UTC (rev 590)
+++ maven/trunk/ogoglio-common/src/main/java/com/ogoglio/message/SenderQueue.java 2007-11-19 19:44:11 UTC (rev 591)
@@ -47,8 +47,10 @@
public void cleanup() {
cleaned = true;
+ Log.info("About to shut down the client proto of the sender queue...");
clientProto.shutdown();
if (messageQueue != null) {
+ Log.info("About to close the message queue associated with the SenderQueue");
messageQueue.close();
}
}
Modified: maven/trunk/ogoglio-common/src/main/java/com/ogoglio/message/TCPChannel.java
===================================================================
--- maven/trunk/ogoglio-common/src/main/java/com/ogoglio/message/TCPChannel.java 2007-11-19 14:41:43 UTC (rev 590)
+++ maven/trunk/ogoglio-common/src/main/java/com/ogoglio/message/TCPChannel.java 2007-11-19 19:44:11 UTC (rev 591)
@@ -91,19 +91,23 @@
public void cleanup() {
//cleaned = true;
try {
+ Log.info("Cleaning up the TCP channel "+getLocalLocator());
if (readerThread!=null) {
+ Log.info("Reader thread about to be cleaned up...");
readerThread.cleanup();
}
} catch (Exception e) {
- Log.info("TCPChannel: Trying to cleanup to readerThread:"+(e.getClass().getName()),e);
+ Log.error("TCPChannel: Trying to cleanup to readerThread:"+(e.getClass().getName()),e);
}
try {
if (senderQueue!=null) {
+ Log.info("Sender queue about to be cleaned up...");
senderQueue.cleanup();
}
} catch (Exception e) {
- Log.info("TCPChannel: Trying to cleanup to senderQueue:"+(e.getClass().getName()),e);
+ Log.error("TCPChannel: Trying to cleanup to senderQueue:"+(e.getClass().getName()),e);
}
+ Log.info("About to tell listener that the TCP channel is now closed.");
listener.channelClosed(this);
}
Modified: maven/trunk/ogoglio-common/src/main/java/com/ogoglio/message/proto/CometClient.java
===================================================================
--- maven/trunk/ogoglio-common/src/main/java/com/ogoglio/message/proto/CometClient.java 2007-11-19 14:41:43 UTC (rev 590)
+++ maven/trunk/ogoglio-common/src/main/java/com/ogoglio/message/proto/CometClient.java 2007-11-19 19:44:11 UTC (rev 591)
@@ -136,6 +136,5 @@
}
}
-
}
Modified: maven/trunk/ogoglio-common/src/main/java/com/ogoglio/message/proto/CometProto.java
===================================================================
--- maven/trunk/ogoglio-common/src/main/java/com/ogoglio/message/proto/CometProto.java 2007-11-19 14:41:43 UTC (rev 590)
+++ maven/trunk/ogoglio-common/src/main/java/com/ogoglio/message/proto/CometProto.java 2007-11-19 19:44:11 UTC (rev 591)
@@ -92,11 +92,24 @@
}
public void shutdown() {
- //this isn't really what we'd like to do, but we would need a bunch of machinery to know
- //if it was safe to call "close" b/c that would break the comet servlet which reuses
- //these objects... the client side probably *should* call close.
-
- //how should we synchronize this?
+ Log.info("Shutting down Comet Proto, flushing...");
+ if (writer!=null) {
+ try {
+ writer.flush();
+ } catch (IOException e) {
+ Log.error("Problem attempting to flush comet proto buffers:"+e.getMessage());
+ }
+ }
+ //again, a horrible modularity break: we *know* that needs chunking implies we are on the
+ //client side
+ if (needsChunking) {
+ try {
+ Log.info("Closing client-side connection to server since we are shutting down.");
+ writer.close();
+ } catch (IOException e) {
+ Log.error("Unable to close connection to server:"+e.getMessage());
+ }
+ }
input=null;
writer=null;
}
Modified: maven/trunk/ogoglio-common/src/main/java/com/ogoglio/util/Log.java
===================================================================
--- maven/trunk/ogoglio-common/src/main/java/com/ogoglio/util/Log.java 2007-11-19 14:41:43 UTC (rev 590)
+++ maven/trunk/ogoglio-common/src/main/java/com/ogoglio/util/Log.java 2007-11-19 19:44:11 UTC (rev 591)
@@ -118,9 +118,11 @@
}
private static void useLog4jOrSimple(Object msg,Method method) {
+ faultInLogger();
useLog4jOrSimple(msg, null,method);
}
private static void useLog4jOrSimple(Object msg, Object throwable, Method method) {
+ faultInLogger();
useLog4jOrSimple(msg, reallyALogger, throwable,method);
}
@@ -150,6 +152,7 @@
}
public static void info(Object msg, Throwable t) {
+ faultInLogger();
useLog4jOrSimple(msg, t, m_info_throw);
}
@@ -164,6 +167,7 @@
}
public static void error(Object msg, Throwable t) {
+ faultInLogger();
useLog4jOrSimple(msg, t, m_error_throw);
}
Modified: maven/trunk/ogoglio-server/src/main/java/com/ogoglio/sim/SimMessageHandler.java
===================================================================
--- maven/trunk/ogoglio-server/src/main/java/com/ogoglio/sim/SimMessageHandler.java 2007-11-19 14:41:43 UTC (rev 590)
+++ maven/trunk/ogoglio-server/src/main/java/com/ogoglio/sim/SimMessageHandler.java 2007-11-19 19:44:11 UTC (rev 591)
@@ -85,7 +85,9 @@
} else if (message.getPayload() instanceof PayloadFactory.LoggedOutPayload) {
PayloadFactory.LoggedOutPayload payload = (PayloadFactory.LoggedOutPayload) message.getPayload();
+ Log.info("Client "+payload.getUsername()+" sent logged out!");
spaceSim.userLoggedOut(payload.getUsername());
+ Log.info("Sim finished telling the spacesim about the logout.");
} else {
Log.error("Sim received unknown payload in this message: " + message);
}
Added: maven/trunk/ogoglio-server/src/main/java/com/ogoglio/site/OutOfServiceFilter.java
===================================================================
--- maven/trunk/ogoglio-server/src/main/java/com/ogoglio/site/OutOfServiceFilter.java (rev 0)
+++ maven/trunk/ogoglio-server/src/main/java/com/ogoglio/site/OutOfServiceFilter.java 2007-11-19 19:44:11 UTC (rev 591)
@@ -0,0 +1,32 @@
+package com.ogoglio.site;
+
+import java.io.IOException;
+
+import javax.servlet.Filter;
+import javax.servlet.FilterChain;
+import javax.servlet.FilterConfig;
+import javax.servlet.ServletException;
+import javax.servlet.ServletRequest;
+import javax.servlet.ServletResponse;
+
+public class OutOfServiceFilter implements Filter {
+
+ private long lastTimeCheck=0L;
+ private static final long FREQUENCY_IN_MS= 15000;
+
+ public void destroy() {
+ }
+
+ public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
+ long now=System.currentTimeMillis();
+ long diff=now - lastTimeCheck;
+ if (diff<FREQUENCY_IN_MS) {
+ chain.doFilter(request, response);
+ }
+ lastTimeCheck=now;
+ }
+
+ public void init(FilterConfig config) throws ServletException {
+ }
+
+}
Modified: maven/trunk/ogoglio-viewer-applet/src/main/java/com/ogoglio/viewer/applet/ViewerApplet.java
===================================================================
--- maven/trunk/ogoglio-viewer-applet/src/main/java/com/ogoglio/viewer/applet/ViewerApplet.java 2007-11-19 14:41:43 UTC (rev 590)
+++ maven/trunk/ogoglio-viewer-applet/src/main/java/com/ogoglio/viewer/applet/ViewerApplet.java 2007-11-19 19:44:11 UTC (rev 591)
@@ -134,31 +134,26 @@
}
public void destroy() {
- System.out.println("Destroying " + this + ": " + renderer + ", " + spaceClient);
+ performAShutdown("DESTROY");
+ }
+
+ private void performAShutdown(String method) {
+
+ Log.info("Destroying " + this + ": " + renderer + ", " + spaceClient+" b/c "+method+" called on applet");
if (renderer != null) {
renderer.stopRenderer();
}
if (spaceClient != null) {
+ Log.info("Trynig to run spaceclient cleanup.");
spaceClient.cleanup();
}
System.gc();
Runtime.getRuntime().runFinalization();
- System.out.println("Destroyed " + this + ": " + renderer + ", " + spaceClient);
+ Log.info("Destroyed " + this + ": " + renderer + ", " + spaceClient);
}
public void stop() {
- System.out.println("Stopping " + this + ": " + renderer + ", " + spaceClient);
- if (renderer != null) {
- renderer.stopRenderer();
- }
- if (spaceClient != null) {
- spaceClient.cleanup();
- }
- renderer = null;
- spaceClient = null;
- System.gc();
- Runtime.getRuntime().runFinalization();
- System.out.println("Stopped " + this + ": " + renderer + ", " + spaceClient);
+ performAShutdown("STOP");
}
public boolean completedInitialLoad() {
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|