Is your fix in cvs?

> -----Original Message-----
> From: Karl Baum [mailto:[EMAIL PROTECTED]
> Sent: Tuesday, December 02, 2003 1:30 PM
> To: [EMAIL PROTECTED]
> Subject: RE: Problem configuring Lateral TCP Cache
> 
> 
> In regards to the Lateral cache and three servers.  I noticed a bug
back
> in June in regards to having more than 2 laterally configured cache
> servers.  It is a few lines of code to fix and from what I could tell,
> three or more lateral servers will not work correctly without the fix.
> I checked the laters LateralCacheFactory from the trunk and did not
> notice the fix.  All of the information from the email is below.
> 
> 
> -----Original Message-----
> From: Baum, Karl
> To: Turbine JCS Developers List
> Sent: 6/15/2003 10:22 PM
> Subject: TCP Lateral Caching bug fix
> 
> I noticed a problem with lateral caching when configuring two or more
> TCP servers.  The problem has to do with lateral cache recovery
process
> when losing connections.  I have attached a fix.
> 
> 
> 
> 
> 
> Main Issue:
> 
> 
> 
> I have three lateral cache servers.  I start one server first.
Because
> the other lateral TCP servers are not yet running, the first server
> fails to connect to the others and begins recovery mode.  In recovery
> mode, a LateralCacheMonitor thread runs every 20 seconds trying to
> create connections to the other servers.  I noticed the thread was
only
> trying to create a connection to one of the other cache servers.  The
> result was that when I brought the other two servers up, the initial
> server only successfully connected to one out of the other two
servers.
> This was always the last of the TCP servers in the comma separated
list.
> 
> 
> 
> Cause:
> 
> 
> 
> The problem is caused by the reuse of the same LateralCacheAttributes
> object.  For each of the TCP servers, a LateralCacheManager is
created.
> Each LateralCacheManager is created with an instance of
> LateraCacheAttributes.  Before instantiating the LateralCacheManager,
> the specific TCP server is set on the LateralCacheAttributes object.
> Since the same instance of LateralCacheAttributes is used each time,
the
> call to set the TCP server overwrites the previous TCP server each
time.
> In recovery mode, the TCP server property on the
LateralCacheAttributes
> is used to reestablish the connections.  Recovery mode will always
> attempt to reestablish a connection to the last of the TCP servers
since
> this was the last server to be set in the LateralCacheAttributes
object.
> 
> 
> 
> Fix:
> 
> 
> 
> To fix this issue, I modified the class LateralCacheFactory.  Now
> LateralCacheFactory calls set TCP server on a clone of the
> LateralCacheAttributes object.  As a result, the previous TCP server
is
> not overwritten.
> 
> 
> 
> CVS diff:
> 
> 
> 
> $ cvs -d :pserver:[EMAIL PROTECTED]:/home/cvspublic diff -u
> LateralCacheFactory.java
> 
> Index: LateralCacheFactory.java
> 
> ===================================================================
> 
> RCS file:
>
/home/cvspublic/jakarta-turbine-jcs/src/java/org/apache/jcs/auxiliary/la
> teral/LateralCacheFactory.java,v
> 
> retrieving revision 1.4
> 
> diff -u -r1.4 LateralCacheFactory.java
> 
> --- LateralCacheFactory.java    7 Aug 2002 15:28:12 -0000       1.4
> 
> +++ LateralCacheFactory.java    16 Jun 2003 02:14:43 -0000
> 
> @@ -73,15 +73,16 @@
> 
>              StringTokenizer it = new StringTokenizer( lac.tcpServers,
> "," );
> 
>              while ( it.hasMoreElements() )
> 
>              {
> 
> +               LateralCacheAttributes lacClone =
> (LateralCacheAttributes)lac.copy();
> 
>                  //String server = (String)it.next();
> 
>                  String server = ( String ) it.nextElement();
> 
>                  if ( log.isDebugEnabled() )
> 
>                  {
> 
>                    log.debug( "tcp server = " +  server );
> 
>                  }
> 
> -                lac.setTcpServer( server );
> 
> -                LateralCacheManager lcm =
> LateralCacheManager.getInstance( lac );
> 
> -                ICache ic = lcm.getCache( lac.getCacheName() );
> 
> +                lacClone.setTcpServer( server );
> 
> +                LateralCacheManager lcm =
> LateralCacheManager.getInstance( lacClone );
> 
> +                ICache ic = lcm.getCache( lacClone.getCacheName() );
> 
>                  if ( ic != null )
> 
>                  {
> 
>                      noWaits.add( ic );
> 
>  <<LateralCacheFactory.java>>  <<LateralCacheAttributes.java>>
> <<LateralCacheFactory.java>>



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to