Author: fhanik
Date: Thu Aug  9 12:52:08 2007
New Revision: 564358

URL: http://svn.apache.org/viewvc?view=rev&rev=564358
Log:
make the backup node become the primary so that we can still expire sessions
http://issues.apache.org/bugzilla/show_bug.cgi?id=43053


Modified:
    
tomcat/trunk/java/org/apache/catalina/tribes/tipis/AbstractReplicatedMap.java

Modified: 
tomcat/trunk/java/org/apache/catalina/tribes/tipis/AbstractReplicatedMap.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/tribes/tipis/AbstractReplicatedMap.java?view=diff&rev=564358&r1=564357&r2=564358
==============================================================================
--- 
tomcat/trunk/java/org/apache/catalina/tribes/tipis/AbstractReplicatedMap.java 
(original)
+++ 
tomcat/trunk/java/org/apache/catalina/tribes/tipis/AbstractReplicatedMap.java 
Thu Aug  9 12:52:08 2007
@@ -719,13 +719,26 @@
             } else if (member.equals(entry.getPrimary())) {
                 entry.setPrimary(null);
             } //end if
-            if ( entry.getPrimary() == null && 
+            
+            if ( entry.isProxy() &&
+                 entry.getPrimary() == null && 
                  entry.getBackupNodes()!=null && 
                  entry.getBackupNodes().length == 1 &&
                  entry.getBackupNodes()[0].equals(member) ) {
                 //remove proxies that have no backup nor primaries
                 i.remove();
+            } else if ( entry.isBackup() &&
+                        entry.getBackupNodes()!=null && 
+                        entry.getBackupNodes().length == 1 &&
+                        
entry.getBackupNodes()[0].equals(channel.getLocalMember(false)) ) {
+                try {
+                    Member[] backup = publishEntryInfo(entry.getKey(), 
entry.getValue());
+                    entry.setBackupNodes(backup);
+                } catch (ChannelException x) {
+                    log.error("Unable to relocate[" + entry.getKey() + "] to a 
new backup node", x);
+                }
             }
+
         } //while
     }
 
@@ -979,7 +992,6 @@
                 Object key = e.getKey();
                 MapEntry entry = (MapEntry)super.get(key);
                 if ( entry != null && entry.isPrimary() ) 
set.add(entry.getValue());
-                else if ( entry != null && entry.getPrimary() == null && 
entry.isBackup() ) set.add(entry.getValue());
             }
             return Collections.unmodifiableSet(set);
         }
@@ -994,7 +1006,6 @@
                 Object key = e.getKey();
                 MapEntry entry = (MapEntry)super.get(key);
                 if ( entry!=null && entry.isPrimary() ) set.add(key);
-                else if ( entry != null && entry.getPrimary() == null && 
entry.isBackup() ) set.add(key);
             }
             return Collections.unmodifiableSet(set);
 
@@ -1011,7 +1022,6 @@
                 if ( e != null ) {
                     MapEntry entry = (MapEntry) super.get(e.getKey());
                     if (entry!=null && entry.isPrimary() && entry.getValue() 
!= null) counter++;
-                    else if ( entry != null && entry.getPrimary() == null && 
entry.isBackup() ) counter++;
                 }
             }
             return counter;



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

Reply via email to