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