jakarta-jcs-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From asm...@apache.org
Subject svn commit: r449027 - in /jakarta/jcs/trunk: src/java/org/apache/jcs/auxiliary/lateral/socket/tcp/LateralTCPSender.java xdocs/changes.xml
Date Fri, 22 Sep 2006 18:09:03 GMT
Author: asmuts
Date: Fri Sep 22 11:09:03 2006
New Revision: 449027

URL: http://svn.apache.org/viewvc?view=rev&rev=449027
Log:
Fixed non thread safe OOS writes in the TCP Lateral
Sender. This was causing endless loops deep down in the
OOS code.

Modified:
    jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/lateral/socket/tcp/LateralTCPSender.java
    jakarta/jcs/trunk/xdocs/changes.xml

Modified: jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/lateral/socket/tcp/LateralTCPSender.java
URL: http://svn.apache.org/viewvc/jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/lateral/socket/tcp/LateralTCPSender.java?view=diff&rev=449027&r1=449026&r2=449027
==============================================================================
--- jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/lateral/socket/tcp/LateralTCPSender.java
(original)
+++ jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/lateral/socket/tcp/LateralTCPSender.java
Fri Sep 22 11:09:03 2006
@@ -1,14 +1,12 @@
 package org.apache.jcs.auxiliary.lateral.socket.tcp;
 
 /*
- * Copyright 2001-2004 The Apache Software Foundation. Licensed under the Apache
- * License, Version 2.0 (the "License") you may not use this file except in
- * compliance with the License. You may obtain a copy of the License at
- * http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law
- * or agreed to in writing, software distributed under the License is
- * distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the specific language
- * governing permissions and limitations under the License.
+ * Copyright 2001-2004 The Apache Software Foundation. Licensed under the Apache License,
Version
+ * 2.0 (the "License") you may not use this file except in compliance with the License. You
may
+ * obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required
by
+ * applicable law or agreed to in writing, software distributed under the License is distributed
on
+ * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See
+ * the License for the specific language governing permissions and limitations under the
License.
  */
 
 import java.io.BufferedReader;
@@ -28,10 +26,8 @@
 import org.apache.jcs.engine.behavior.ICacheElement;
 
 /**
- * This class is based on the log4j SocketAppender class. I'm using a differnet
- * repair structure, so it is significantly different.
- * <p>
- * @version $Id$
+ * This class is based on the log4j SocketAppender class. I'm using a differnet repair structure,
so
+ * it is significantly different.
  */
 public class LateralTCPSender
 {
@@ -64,8 +60,8 @@
     private final static int RESET_FREQUENCY = 70;
 
     /**
-     * Only block for 1 second before timing out on a read. TODO: make
-     * configurable. The default 1 is way too long.
+     * Only block for 1 second before timing out on a read. TODO: make configurable. The
default 1
+     * is way too long.
      */
     private final static int timeOut = 1000;
 
@@ -209,38 +205,39 @@
 
         if ( oos != null )
         {
-            try
+            synchronized ( this.getLock )
             {
-                oos.writeObject( led );
-                oos.flush();
-                if ( ++counter >= RESET_FREQUENCY )
+                try
                 {
-                    counter = 0;
-                    // Failing to reset the object output stream every now and
-                    // then creates a serious memory leak.
-                    if ( log.isDebugEnabled() )
+                    oos.writeObject( led );
+                    oos.flush();
+                    if ( ++counter >= RESET_FREQUENCY )
                     {
-                        log.debug( "Doing oos.reset()" );
+                        counter = 0;
+                        // Failing to reset the object output stream every now and
+                        // then creates a serious memory leak.
+                        if ( log.isDebugEnabled() )
+                        {
+                            log.debug( "Doing oos.reset()" );
+                        }
+                        oos.reset();
                     }
-                    oos.reset();
                 }
-            }
-            catch ( IOException e )
-            {
-                oos = null;
-                log.error( "Detected problem with connection: " + e );
-                throw e;
+                catch ( IOException e )
+                {
+                    oos = null;
+                    log.error( "Detected problem with connection: " + e );
+                    throw e;
+                }
             }
         }
     }
 
     /**
-     * Sends commands to the lateral cache listener and gets a response. I'm
-     * afraid that we could get into a pretty bad blocking situation here. This
-     * needs work. I just wanted to get some form of get working. However, get
-     * is not recommended for performance reasons. If you have 10 laterals, then
-     * you have to make 10 failed gets to find out none of the caches have the
-     * item.
+     * Sends commands to the lateral cache listener and gets a response. I'm afraid that
we could
+     * get into a pretty bad blocking situation here. This needs work. I just wanted to get
some
+     * form of get working. However, get is not recommended for performance reasons. If you
have 10
+     * laterals, then you have to make 10 failed gets to find out none of the caches have
the item.
      * <p>
      * @param led
      * @return
@@ -294,7 +291,7 @@
                     try
                     {
                         // TODO make configurable
-                        //socket.setSoTimeout( 2000 );
+                        // socket.setSoTimeout( 2000 );
                         ObjectInputStream ois = new ObjectInputStream( socket.getInputStream()
);
                         Object obj = ois.readObject();
                         ice = (ICacheElement) obj;
@@ -307,9 +304,9 @@
                     catch ( IOException ioe )
                     {
                         String message = "Could not open ObjectInputStream to " + socket;
-                        if ( socket!= null )
+                        if ( socket != null )
                         {
-                            message += " SoTimeout [" + socket.getSoTimeout() +"]"; 
+                            message += " SoTimeout [" + socket.getSoTimeout() + "]";
                             // this is 1.4 specific -- Connected [" + socket.isConnected()
+ "]";
                         }
                         log.error( message, ioe );
@@ -337,16 +334,15 @@
                     throw e;
                 }
             }
-        } 
+        }
 
         return ice;
     }
 
     /**
-     * Closes connection used by all LateralTCPSenders for this lateral
-     * conneciton. Dispose request should come into the facade and be sent to
-     * all lateral cache sevices. The lateral cache service will then call this
-     * method.
+     * Closes connection used by all LateralTCPSenders for this lateral conneciton. Dispose
request
+     * should come into the facade and be sent to all lateral cache sevices. The lateral
cache
+     * service will then call this method.
      * <p>
      * @param cache
      * @throws IOException
@@ -363,8 +359,7 @@
     }
 
     /**
-     * @param tcpLateralCacheAttributes
-     *            The tcpLateralCacheAttributes to set.
+     * @param tcpLateralCacheAttributes The tcpLateralCacheAttributes to set.
      */
     public void setTcpLateralCacheAttributes( ITCPLateralCacheAttributes tcpLateralCacheAttributes
)
     {
@@ -380,8 +375,7 @@
     }
 
     /**
-     * @param remoteHost
-     *            The remoteHost to set.
+     * @param remoteHost The remoteHost to set.
      */
     public void setRemoteHost( String remoteHost )
     {

Modified: jakarta/jcs/trunk/xdocs/changes.xml
URL: http://svn.apache.org/viewvc/jakarta/jcs/trunk/xdocs/changes.xml?view=diff&rev=449027&r1=449026&r2=449027
==============================================================================
--- jakarta/jcs/trunk/xdocs/changes.xml (original)
+++ jakarta/jcs/trunk/xdocs/changes.xml Fri Sep 22 11:09:03 2006
@@ -13,7 +13,14 @@
 			<action dev="asmuts" type="update">
 				Added get, put, and remove counts to the lateral and
 				remote stats. Added hit count to disk cache stats.
-			</action>			
+			</action>
+			<action dev="asmuts" type="fix" issue="JCS-12"
+				due-to="John Klame">
+				Fixed non thread safe OOS writes in the TCP Lateral
+				Sender. This was causing endless loops deep down in the
+				OOS code.
+			</action>
+
 		</release>
 
 		<release version="1.2.7.9" date="in CVS">



---------------------------------------------------------------------
To unsubscribe, e-mail: jcs-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: jcs-dev-help@jakarta.apache.org


Mime
View raw message