Author: kkolinko
Date: Tue Jul 15 00:45:55 2014
New Revision: 1610564

URL: http://svn.apache.org/r1610564
Log:
Fix https://issues.apache.org/bugzilla/show_bug.cgi?id=56717
Allow repeated Mapper.addHost() calls for the same host. E.g. if the host has 
been implicitly added by addContextVersion() call.

Modified:
    tomcat/trunk/java/org/apache/catalina/mapper/LocalStrings.properties
    tomcat/trunk/java/org/apache/catalina/mapper/Mapper.java
    tomcat/trunk/test/org/apache/catalina/mapper/TestMapper.java

Modified: tomcat/trunk/java/org/apache/catalina/mapper/LocalStrings.properties
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/mapper/LocalStrings.properties?rev=1610564&r1=1610563&r2=1610564&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/mapper/LocalStrings.properties 
(original)
+++ tomcat/trunk/java/org/apache/catalina/mapper/LocalStrings.properties Tue 
Jul 15 00:45:55 2014
@@ -13,6 +13,10 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
+mapper.addHost.success=Registered host [{0}]
+mapper.addHost.sameHost=Duplicate registration of the same host [{0}]. Ignored.
+mapper.addHostAlias.success=Registered alias [{0}] for host [{1}]
+mapper.addHostAlias.sameHost=Duplicate registration of alias [{0}] for the 
same host [{1}]. Ignored.
 mapper.removeWrapper=Removing wrapper from Context [{0}] with path [{1}]
 mapper.duplicateHost=Duplicate Host [{0}]. The name is already used by Host 
[{1}]. This Host will be ignored.
 mapper.duplicateHostAlias=Duplicate host Alias [{0}] in Host [{1}]. The name 
is already used by Host [{2}]. This Alias will be ignored.

Modified: tomcat/trunk/java/org/apache/catalina/mapper/Mapper.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/mapper/Mapper.java?rev=1610564&r1=1610563&r2=1610564&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/mapper/Mapper.java (original)
+++ tomcat/trunk/java/org/apache/catalina/mapper/Mapper.java Tue Jul 15 
00:45:55 2014
@@ -96,12 +96,25 @@ public final class Mapper {
         MappedHost newHost = new MappedHost(name, host);
         if (insertMap(hosts, newHosts, newHost)) {
             hosts = newHosts;
+            if (log.isDebugEnabled()) {
+                log.debug(sm.getString("mapper.addHost.success", name));
+            }
         } else {
             MappedHost duplicate = hosts[find(hosts, name)];
-            log.error(sm.getString("mapper.duplicateHost", name,
-                    duplicate.getRealHostName()));
-            // Do not add aliases, as removeHost(hostName) won't be able to 
remove them
-            return;
+            if (duplicate.object == host) {
+                // The host is already registered in the mapper.
+                // E.g. it might have been added by addContextVersion()
+                if (log.isDebugEnabled()) {
+                    log.debug(sm.getString("mapper.addHost.sameHost", name));
+                }
+                newHost = duplicate;
+            } else {
+                log.error(sm.getString("mapper.duplicateHost", name,
+                        duplicate.getRealHostName()));
+                // Do not add aliases, as removeHost(hostName) won't be able to
+                // remove them
+                return;
+            }
         }
         List<MappedHost> newAliases = new ArrayList<>(aliases.length);
         for (String alias : aliases) {
@@ -158,6 +171,10 @@ public final class Mapper {
         MappedHost[] newHosts = new MappedHost[hosts.length + 1];
         if (insertMap(hosts, newHosts, newAlias)) {
             hosts = newHosts;
+            if (log.isDebugEnabled()) {
+                log.debug(sm.getString("mapper.addHostAlias.success",
+                        newAlias.name, newAlias.getRealHostName()));
+            }
             return true;
         } else {
             MappedHost duplicate = hosts[find(hosts, newAlias.name)];
@@ -165,6 +182,10 @@ public final class Mapper {
                 // A duplicate Alias for the same Host.
                 // A harmless redundancy. E.g.
                 // <Host name="localhost"><Alias>localhost</Alias></Host>
+                if (log.isDebugEnabled()) {
+                    log.debug(sm.getString("mapper.addHostAlias.sameHost",
+                            newAlias.name, newAlias.getRealHostName()));
+                }
                 return false;
             }
             log.error(sm.getString("mapper.duplicateHostAlias", newAlias.name,

Modified: tomcat/trunk/test/org/apache/catalina/mapper/TestMapper.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/test/org/apache/catalina/mapper/TestMapper.java?rev=1610564&r1=1610563&r2=1610564&view=diff
==============================================================================
--- tomcat/trunk/test/org/apache/catalina/mapper/TestMapper.java (original)
+++ tomcat/trunk/test/org/apache/catalina/mapper/TestMapper.java Tue Jul 15 
00:45:55 2014
@@ -175,6 +175,28 @@ public class TestMapper extends LoggingB
         assertFalse(host.isAlias());
         assertTrue(alias.isAlias());
         assertEquals(host.object, alias.object);
+
+        // Test addContextVersion() followed by addHost()
+        Host hostZ = createHost("zzzz");
+        Context contextZ = createContext("contextZ");
+
+        assertEquals(16, mapper.hosts.length);
+        mapper.addContextVersion("zzzz", hostZ, "/", "", contextZ, null, null,
+                null);
+        assertEquals(17, mapper.hosts.length);
+
+        mapper.addHost("zzzz", new String[] { "zzzz_alias1", "zzzz_alias2" },
+                hostZ);
+        assertEquals(19, mapper.hosts.length);
+
+        assertEquals("zzzz", mapper.hosts[16].name);
+        assertEquals("zzzz_alias1", mapper.hosts[17].name);
+        assertEquals("zzzz_alias2", mapper.hosts[18].name);
+        assertEquals(2, mapper.hosts[16].getAliases().size());
+        assertSame(contextZ,
+                mapper.hosts[16].contextList.contexts[0].versions[0].object);
+        assertSame(contextZ,
+                mapper.hosts[18].contextList.contexts[0].versions[0].object);
     }
 
     @Test



---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org

Reply via email to