From 3c3b3e59b3baec7341e977052642797b72dff6e9 Mon Sep 17 00:00:00 2001 From: Robert Godfrey Date: Tue, 2 Dec 2014 16:28:25 +0000 Subject: QPID-6161 : Address comments from ~kwall git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk@1642935 13f79535-47bb-0310-9956-ffa450edef68 --- .../server/virtualhostalias/HostNameAliasImpl.java | 21 +++++++++++-- .../virtualhostalias/PatternMatchingAliasImpl.java | 35 +++++++++++++++++++++- 2 files changed, 52 insertions(+), 4 deletions(-) (limited to 'qpid/java') diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhostalias/HostNameAliasImpl.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhostalias/HostNameAliasImpl.java index 9abeac5f31..e9390703c7 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhostalias/HostNameAliasImpl.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhostalias/HostNameAliasImpl.java @@ -35,6 +35,8 @@ import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; +import org.apache.log4j.Logger; + import org.apache.qpid.server.model.Broker; import org.apache.qpid.server.model.HostNameAlias; import org.apache.qpid.server.model.ManagedObjectFactoryConstructor; @@ -47,6 +49,8 @@ public class HostNameAliasImpl implements HostNameAlias { + private static final Logger LOG = Logger.getLogger(HostNameAliasImpl.class); + private final Set _localAddresses = new CopyOnWriteArraySet<>(); private final Set _localAddressNames = new CopyOnWriteArraySet<>(); private final Lock _addressLock = new ReentrantLock(); @@ -62,7 +66,12 @@ public class HostNameAliasImpl protected void onOpen() { super.onOpen(); - Thread thread = new Thread(new NetworkAddressResolver(), "Network Address Resolver"); + String bindingAddress = ((AmqpPort) getPort()).getBindingAddress(); + Thread thread = new Thread(new NetworkAddressResolver(), + "Network Address Resolver (Port: " + + (useAllAddresses(bindingAddress) ? "" : bindingAddress) + + ":" + getPort().getPort() +")"); + thread.setDaemon(true); thread.start(); } @@ -138,7 +147,7 @@ public class HostNameAliasImpl try { Collection inetAddresses; - if(bindingAddress == null || bindingAddress.trim().equals("") || bindingAddress.trim().equals("*")) + if(useAllAddresses(bindingAddress)) { inetAddresses = getAllInetAddresses(); } @@ -168,7 +177,8 @@ public class HostNameAliasImpl } catch (SocketException | UnknownHostException e) { - // ignore + LOG.error("Unable to correctly calculate host name aliases for port " + getPort().getName() + + ". This may lead to connection failures.", e); } finally { @@ -190,4 +200,9 @@ public class HostNameAliasImpl return addresses; } } + + private boolean useAllAddresses(final String bindingAddress) + { + return bindingAddress == null || bindingAddress.trim().equals("") || bindingAddress.trim().equals("*"); + } } diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhostalias/PatternMatchingAliasImpl.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhostalias/PatternMatchingAliasImpl.java index df47b1a94e..0f4399ae62 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhostalias/PatternMatchingAliasImpl.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhostalias/PatternMatchingAliasImpl.java @@ -21,11 +21,16 @@ package org.apache.qpid.server.virtualhostalias; import java.util.Map; +import java.util.Set; +import java.util.regex.Pattern; +import java.util.regex.PatternSyntaxException; +import org.apache.qpid.server.configuration.IllegalConfigurationException; +import org.apache.qpid.server.model.ConfiguredObject; import org.apache.qpid.server.model.ManagedAttributeField; import org.apache.qpid.server.model.ManagedObjectFactoryConstructor; -import org.apache.qpid.server.model.Port; import org.apache.qpid.server.model.PatternMatchingAlias; +import org.apache.qpid.server.model.Port; public final class PatternMatchingAliasImpl extends AbstractFixedVirtualHostNodeAlias @@ -46,6 +51,34 @@ public final class PatternMatchingAliasImpl return name == null ? "".matches(_pattern) : name.matches(_pattern); } + @Override + public void onValidate() + { + super.onValidate(); + validatePattern(getPattern()); + + } + + @Override + protected void validateChange(final ConfiguredObject proxyForValidation, final Set changedAttributes) + { + super.validateChange(proxyForValidation, changedAttributes); + validatePattern(((PatternMatchingAlias)proxyForValidation).getPattern()); + } + + private void validatePattern(final String pattern) + { + try + { + Pattern p = Pattern.compile(pattern); + } + catch (PatternSyntaxException e) + { + throw new IllegalConfigurationException("'"+pattern+"' is not a valid Java regex pattern", e); + } + + } + @Override public String getPattern() { -- cgit v1.2.1