Author: kkolinko
Date: Mon Jun 23 20:59:53 2014
New Revision: 1604934
URL: http://svn.apache.org/r1604934
Log:
Re-working the fix for http://issues.apache.org/bugzilla/show_bug.cgi?id=56653
I rollback addition of HostMapping class (reverting most of r1604319)
I will work on an alternative solution that should be easier to backport to
Tomcat 7.
(This revert temporarily breaks support for Aliases, per comment 2 in BZ 56653.
The alternative solution will fix it.)
Modified:
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/Mapper.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/mapper/Mapper.java?rev=1604934&r1=1604933&r2=1604934&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/mapper/Mapper.java (original)
+++ tomcat/trunk/java/org/apache/catalina/mapper/Mapper.java Mon Jun 23
20:59:53 2014
@@ -50,7 +50,7 @@ public final class Mapper {
/**
* Array containing the virtual hosts definitions.
*/
- protected HostMapping[] hosts = new HostMapping[0];
+ protected MappedHost[] hosts = new MappedHost[0];
/**
@@ -86,16 +86,14 @@ public final class Mapper {
*/
public synchronized void addHost(String name, String[] aliases,
Host host) {
- MappedHost newHost = new MappedHost(host);
- HostMapping newHostMapping = new HostMapping(name, newHost, false);
- HostMapping[] newHostMappings = new HostMapping[hosts.length + 1];
- if (insertMap(hosts, newHostMappings, newHostMapping)) {
- hosts = newHostMappings;
+ MappedHost[] newHosts = new MappedHost[hosts.length + 1];
+ MappedHost newHost = new MappedHost(name, host);
+ if (insertMap(hosts, newHosts, newHost)) {
+ hosts = newHosts;
} else {
- HostMapping duplicate = hosts[find(hosts, name)];
- String duplicateHostName = duplicate.object.host.getName();
+ MappedHost duplicate = hosts[find(hosts, name)];
log.error(sm.getString("mapper.duplicateHost", name,
- duplicateHostName));
+ duplicate.realHostName));
// Do not add aliases, as removeHost(hostName) won't be able to
remove them
return;
}
@@ -112,19 +110,19 @@ public final class Mapper {
*/
public synchronized void removeHost(String name) {
// Find and remove the old host
- HostMapping hostMapping = exactFind(hosts, name);
- if (hostMapping == null || hostMapping.isAlias()) {
+ MappedHost host = exactFind(hosts, name);
+ if (host == null || host.isAlias()) {
return;
}
- MappedHost object = hostMapping.object;
- HostMapping[] newHosts = new HostMapping[hosts.length - 1];
+ Host object = host.object;
+ MappedHost[] newHosts = new MappedHost[hosts.length - 1];
if (removeMap(hosts, newHosts, name)) {
hosts = newHosts;
- // Remove all aliases (they will map to the same HostMapping
object)
+ // Remove all aliases (they will map to the same host object)
for (int i = 0; i < newHosts.length; i++) {
if (newHosts[i].object == object) {
- HostMapping[] newHosts2 = new HostMapping[hosts.length -
1];
+ MappedHost[] newHosts2 = new MappedHost[hosts.length - 1];
if (removeMap(hosts, newHosts2, newHosts[i].name)) {
hosts = newHosts2;
}
@@ -139,31 +137,30 @@ public final class Mapper {
* @param alias The alias to add
*/
public synchronized void addHostAlias(String name, String alias) {
- HostMapping realHost = exactFind(hosts, name);
+ MappedHost realHost = exactFind(hosts, name);
if (realHost == null) {
// Should not be adding an alias for a host that doesn't exist but
// just in case...
return;
}
- addHostAliasImpl(alias, realHost.object);
+ addHostAliasImpl(alias, realHost);
}
- private void addHostAliasImpl(String alias, MappedHost mappedHost) {
- HostMapping[] newHostMappings = new HostMapping[hosts.length + 1];
- HostMapping newHostMapping = new HostMapping(alias, mappedHost, true);
- if (insertMap(hosts, newHostMappings, newHostMapping)) {
- hosts = newHostMappings;
+ private void addHostAliasImpl(String alias, MappedHost realHost) {
+ MappedHost newHost = new MappedHost(alias, realHost);
+ MappedHost[] newHosts = new MappedHost[hosts.length + 1];
+ if (insertMap(hosts, newHosts, newHost)) {
+ hosts = newHosts;
} else {
- HostMapping duplicate = hosts[find(hosts, alias)];
- if (duplicate.object == mappedHost) {
+ MappedHost duplicate = hosts[find(hosts, alias)];
+ if (duplicate.object == realHost.object) {
// A duplicate Alias for the same Host.
// A harmless redundancy. E.g.
// <Host name="localhost"><Alias>localhost</Alias></Host>
return;
}
- String duplicateHostName = duplicate.object.host.getName();
log.error(sm.getString("mapper.duplicateHostAlias", alias,
- mappedHost.host.getName(), duplicateHostName));
+ realHost.realHostName, duplicate.realHostName));
}
}
@@ -173,11 +170,11 @@ public final class Mapper {
*/
public synchronized void removeHostAlias(String alias) {
// Find and remove the alias
- HostMapping hostMapping = exactFind(hosts, alias);
+ MappedHost hostMapping = exactFind(hosts, alias);
if (hostMapping == null || !hostMapping.isAlias()) {
return;
}
- HostMapping[] newHosts = new HostMapping[hosts.length - 1];
+ MappedHost[] newHosts = new MappedHost[hosts.length - 1];
if (removeMap(hosts, newHosts, alias)) {
hosts = newHosts;
}
@@ -200,16 +197,15 @@ public final class Mapper {
String version, Context context, String[] welcomeResources,
WebResourceRoot resources) {
- HostMapping hostMapping = exactFind(hosts, hostName);
- if (hostMapping == null) {
+ MappedHost mappedHost = exactFind(hosts, hostName);
+ if (mappedHost == null) {
addHost(hostName, new String[0], host);
- hostMapping = exactFind(hosts, hostName);
- if (hostMapping == null) {
+ mappedHost = exactFind(hosts, hostName);
+ if (mappedHost == null) {
log.error("No host found: " + hostName);
return;
}
}
- MappedHost mappedHost = hostMapping.object;
int slashCount = slashCount(path);
synchronized (mappedHost) {
ContextVersion newContextVersion = new ContextVersion(version,
@@ -249,15 +245,13 @@ public final class Mapper {
contextObjectToContextVersionMap.remove(ctxt);
- HostMapping hostMapping = exactFind(hosts, hostName);
- if (hostMapping == null) {
+ MappedHost host = exactFind(hosts, hostName);
+ if (host == null) {
return;
}
- MappedHost mappedHost = hostMapping.object;
- synchronized (mappedHost) {
- MappedContext context = exactFind(mappedHost.contextList.contexts,
- path);
+ synchronized (host) {
+ MappedContext context = exactFind(host.contextList.contexts, path);
if (context == null) {
return;
}
@@ -268,8 +262,7 @@ public final class Mapper {
if (removeMap(contextVersions, newContextVersions, version)) {
if (newContextVersions.length == 0) {
// Remove the context
- mappedHost.contextList = mappedHost.contextList
- .removeContext(path);
+ host.contextList = host.contextList.removeContext(path);
} else {
context.versions = newContextVersions;
}
@@ -281,12 +274,12 @@ public final class Mapper {
public void addWrapper(String hostName, String contextPath, String version,
String path, Wrapper wrapper, boolean jspWildCard,
boolean resourceOnly) {
- HostMapping hostMapping = exactFind(hosts, hostName);
- if (hostMapping == null) {
+ MappedHost host = exactFind(hosts, hostName);
+ if (host == null) {
return;
}
- MappedContext context = exactFind(
- hostMapping.object.contextList.contexts, contextPath);
+ MappedContext context = exactFind(host.contextList.contexts,
+ contextPath);
if (context == null) {
log.error("No context found: " + contextPath );
return;
@@ -377,12 +370,12 @@ public final class Mapper {
*/
public void removeWrapper(String hostName, String contextPath,
String version, String path) {
- HostMapping hostMapping = exactFind(hosts, hostName);
- if (hostMapping == null) {
+ MappedHost host = exactFind(hosts, hostName);
+ if (host == null) {
return;
}
- MappedContext context = exactFind(
- hostMapping.object.contextList.contexts, contextPath);
+ MappedContext context = exactFind(host.contextList.contexts,
+ contextPath);
if (context == null) {
return;
}
@@ -468,12 +461,12 @@ public final class Mapper {
*/
public void addWelcomeFile(String hostName, String contextPath,
String version, String welcomeFile) {
- HostMapping hostMapping = exactFind(hosts, hostName);
- if (hostMapping == null) {
+ MappedHost host = exactFind(hosts, hostName);
+ if (host == null) {
return;
}
- MappedContext context = exactFind(
- hostMapping.object.contextList.contexts, contextPath);
+ MappedContext context = exactFind(host.contextList.contexts,
+ contextPath);
if (context == null) {
log.error("No context found: " + contextPath);
return;
@@ -501,12 +494,12 @@ public final class Mapper {
*/
public void removeWelcomeFile(String hostName, String contextPath,
String version, String welcomeFile) {
- HostMapping hostMapping = exactFind(hosts, hostName);
- if (hostMapping == null) {
+ MappedHost host = exactFind(hosts, hostName);
+ if (host == null) {
return;
}
- MappedContext context = exactFind(
- hostMapping.object.contextList.contexts, contextPath);
+ MappedContext context = exactFind(host.contextList.contexts,
+ contextPath);
if (context == null) {
log.error("No context found: " + contextPath);
return;
@@ -545,12 +538,12 @@ public final class Mapper {
*/
public void clearWelcomeFiles(String hostName, String contextPath,
String version) {
- HostMapping hostMapping = exactFind(hosts, hostName);
- if (hostMapping == null) {
+ MappedHost host = exactFind(hosts, hostName);
+ if (host == null) {
return;
}
- MappedContext context = exactFind(
- hostMapping.object.contextList.contexts, contextPath);
+ MappedContext context = exactFind(host.contextList.contexts,
+ contextPath);
if (context == null) {
log.error("No context found: " + contextPath);
return;
@@ -629,21 +622,21 @@ public final class Mapper {
uri.setLimit(-1);
// Virtual host mapping
- HostMapping[] hosts = this.hosts;
- HostMapping hostMapping = exactFindIgnoreCase(hosts, host);
- if (hostMapping == null) {
+ MappedHost[] hosts = this.hosts;
+ MappedHost mappedHost = exactFindIgnoreCase(hosts, host);
+ if (mappedHost == null) {
if (defaultHostName == null) {
return;
}
- hostMapping = exactFind(hosts, defaultHostName);
- if (hostMapping == null) {
+ mappedHost = exactFind(hosts, defaultHostName);
+ if (mappedHost == null) {
return;
}
}
- mappingData.host = hostMapping.object.host;
+ mappingData.host = mappedHost.object;
// Context mapping
- ContextList contextList = hostMapping.object.contextList;
+ ContextList contextList = mappedHost.contextList;
MappedContext[] contexts = contextList.contexts;
int pos = find(contexts, uri);
if (pos == -1) {
@@ -1417,33 +1410,31 @@ public final class Mapper {
// ------------------------------------------------------- Host Inner Class
- protected static final class HostMapping extends MapElement<MappedHost> {
- private final boolean alias;
+ protected static final class MappedHost extends MapElement<Host> {
+
+ public final String realHostName;
+ public volatile ContextList contextList;
+
/**
- * Create a HostMapping.
- * @param name The name of a Host or an Alias
- * @param host A MappedHost object, shared between Host and all Aliases
- * @param alias <code>false</code> if this is the primary mapping
- * (represents a Host), <code>true</code> if this is an Alias.
+ * Constructor used for the primary Host
*/
- public HostMapping(String name, MappedHost host, boolean alias) {
+ public MappedHost(String name, Host host) {
super(name, host);
- this.alias = alias;
- }
- public boolean isAlias() {
- return alias;
+ this.realHostName = name;
+ this.contextList = new ContextList();
}
- }
-
- protected static final class MappedHost {
-
- public final Host host;
- public volatile ContextList contextList;
+ /**
+ * Constructor used for an Alias
+ */
+ public MappedHost(String alias, MappedHost realHost) {
+ super(alias, realHost.object);
+ this.realHostName = realHost.name;
+ this.contextList = realHost.contextList;
+ }
- public MappedHost(Host host) {
- this.host = host;
- this.contextList = new ContextList();
+ public boolean isAlias() {
+ return !name.equals(realHostName);
}
}
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=1604934&r1=1604933&r2=1604934&view=diff
==============================================================================
--- tomcat/trunk/test/org/apache/catalina/mapper/TestMapper.java (original)
+++ tomcat/trunk/test/org/apache/catalina/mapper/TestMapper.java Mon Jun 23
20:59:53 2014
@@ -141,10 +141,10 @@ public class TestMapper extends LoggingB
// Make sure adding a duplicate *does not* overwrite
final int iowPos = 3;
- assertEquals("blah7", mapper.hosts[iowPos].object.host.getName());
+ assertEquals("blah7", mapper.hosts[iowPos].object.getName());
final int qwigPos = 8;
- assertEquals("blah14", mapper.hosts[qwigPos].object.host.getName());
+ assertEquals("blah14", mapper.hosts[qwigPos].object.getName());
// Check for alphabetical order of host names
String previous;
@@ -156,13 +156,13 @@ public class TestMapper extends LoggingB
}
// Check that host alias has the same data
- Mapper.HostMapping hostMapping = mapper.hosts[iowPos];
- Mapper.HostMapping aliasMapping = mapper.hosts[iowPos + 1];
- assertEquals("iowejoiejfoiew", hostMapping.name);
- assertEquals("iowejoiejfoiew_alias", aliasMapping.name);
- assertFalse(hostMapping.isAlias());
- assertTrue(aliasMapping.isAlias());
- assertEquals(hostMapping.object, aliasMapping.object);
+ Mapper.MappedHost host = mapper.hosts[iowPos];
+ Mapper.MappedHost alias = mapper.hosts[iowPos + 1];
+ assertEquals("iowejoiejfoiew", host.name);
+ assertEquals("iowejoiejfoiew_alias", alias.name);
+ assertFalse(host.isAlias());
+ assertTrue(alias.isAlias());
+ assertEquals(host.object, alias.object);
}
@Test
@@ -178,8 +178,8 @@ public class TestMapper extends LoggingB
assertEquals(16, mapper.hosts.length);
final int iowPos = 3;
- Mapper.HostMapping hostMapping = mapper.hosts[iowPos];
- Mapper.HostMapping aliasMapping = mapper.hosts[iowPos + 1];
+ Mapper.MappedHost hostMapping = mapper.hosts[iowPos];
+ Mapper.MappedHost aliasMapping = mapper.hosts[iowPos + 1];
assertEquals("iowejoiejfoiew_alias", aliasMapping.name);
assertTrue(aliasMapping.isAlias());
assertEquals(hostMapping.object, aliasMapping.object);
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]