Skip to content

Commit

Permalink
ARTEMIS-1606 - Change AddressInfo RoutingType Set to use EnumSet
Browse files Browse the repository at this point in the history
Change all use from Set<RoutingType> to EnumSet<RoutingType>
Deprecating any old exposed interfaces but keeping for back compatibility.
Address info to avoid iterator on getRoutingType hotpath, like wise can be avoided where single RoutingType is passed in.
  • Loading branch information
michaelandrepearce committed Jan 13, 2018
1 parent adc0f02 commit 4bc1358
Show file tree
Hide file tree
Showing 31 changed files with 135 additions and 124 deletions.
Expand Up @@ -38,11 +38,10 @@
import java.security.PrivilegedAction;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.EnumSet;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.TreeSet;
import java.util.UUID;

Expand Down Expand Up @@ -740,7 +739,7 @@ private void bindAddress() throws Exception {
ClientSession.AddressQuery addressQuery = session.addressQuery(new SimpleString(addressName));

if (!addressQuery.isExists()) {
Set<RoutingType> set = new HashSet<>();
EnumSet<RoutingType> set = EnumSet.noneOf(RoutingType.class);
for (String routingType : ListUtil.toList(routingTypes)) {
set.add(RoutingType.valueOf(routingType));
}
Expand Down
Expand Up @@ -17,6 +17,7 @@
package org.apache.activemq.artemis.api.core.client;

import javax.transaction.xa.XAResource;
import java.util.EnumSet;
import java.util.List;
import java.util.Set;

Expand Down Expand Up @@ -216,6 +217,15 @@ public interface QueueQuery {
* @param autoCreated
* @throws ActiveMQException
*/
void createAddress(SimpleString address, EnumSet<RoutingType> routingTypes, boolean autoCreated) throws ActiveMQException;

/**
* Create Address with a single initial routing type
* @param address
* @param autoCreated
* @throws ActiveMQException
*/
@Deprecated
void createAddress(SimpleString address, Set<RoutingType> routingTypes, boolean autoCreated) throws ActiveMQException;

/**
Expand Down
Expand Up @@ -19,6 +19,7 @@
import javax.transaction.xa.XAException;
import javax.transaction.xa.XAResource;
import javax.transaction.xa.Xid;
import java.util.EnumSet;
import java.util.HashMap;
import java.util.HashSet;
import java.util.LinkedHashMap;
Expand Down Expand Up @@ -273,6 +274,11 @@ public void createSharedQueue(SimpleString address,

@Override
public void createAddress(final SimpleString address, Set<RoutingType> routingTypes, boolean autoCreated) throws ActiveMQException {
createAddress(address, EnumSet.copyOf(routingTypes), autoCreated);
}

@Override
public void createAddress(final SimpleString address, EnumSet<RoutingType> routingTypes, boolean autoCreated) throws ActiveMQException {
checkClosed();

startCall();
Expand All @@ -285,9 +291,7 @@ public void createAddress(final SimpleString address, Set<RoutingType> routingTy

@Override
public void createAddress(final SimpleString address, RoutingType routingType, boolean autoCreated) throws ActiveMQException {
Set<RoutingType> routingTypes = new HashSet<>();
routingTypes.add(routingType);
createAddress(address, routingTypes, autoCreated);
createAddress(address, EnumSet.of(routingType), autoCreated);
}

@Override
Expand Down
Expand Up @@ -21,6 +21,7 @@
import javax.transaction.xa.Xid;
import java.security.AccessController;
import java.security.PrivilegedAction;
import java.util.EnumSet;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
Expand Down Expand Up @@ -613,6 +614,13 @@ public int recoverSessionTimeout() throws ActiveMQException {
public void createAddress(SimpleString address,
Set<RoutingType> routingTypes,
final boolean autoCreated) throws ActiveMQException {
createAddress(address, EnumSet.copyOf(routingTypes), autoCreated);
}

@Override
public void createAddress(SimpleString address,
EnumSet<RoutingType> routingTypes,
final boolean autoCreated) throws ActiveMQException {
CreateAddressMessage request = new CreateAddressMessage(address, routingTypes, autoCreated, true);
if (!sessionChannel.getConnection().isVersionBeforeAddressChange()) {
sessionChannel.sendBlocking(request, PacketImpl.NULL_RESPONSE);
Expand Down
Expand Up @@ -16,8 +16,7 @@
*/
package org.apache.activemq.artemis.core.protocol.core.impl.wireformat;

import java.util.HashSet;
import java.util.Set;
import java.util.EnumSet;

import org.apache.activemq.artemis.api.core.ActiveMQBuffer;
import org.apache.activemq.artemis.api.core.SimpleString;
Expand All @@ -28,14 +27,14 @@ public class CreateAddressMessage extends PacketImpl {

private SimpleString address;

private Set<RoutingType> routingTypes;
private EnumSet<RoutingType> routingTypes;

private boolean autoCreated;

private boolean requiresResponse;

public CreateAddressMessage(final SimpleString address,
Set<RoutingType> routingTypes,
EnumSet<RoutingType> routingTypes,
final boolean autoCreated,
final boolean requiresResponse) {
this();
Expand Down Expand Up @@ -78,11 +77,11 @@ public void setAddress(SimpleString address) {
this.address = address;
}

public Set<RoutingType> getRoutingTypes() {
public EnumSet<RoutingType> getRoutingTypes() {
return routingTypes;
}

public void setRoutingTypes(Set<RoutingType> routingTypes) {
public void setRoutingTypes(EnumSet<RoutingType> routingTypes) {
this.routingTypes = routingTypes;
}

Expand All @@ -101,7 +100,7 @@ public void encodeRest(final ActiveMQBuffer buffer) {
public void decodeRest(final ActiveMQBuffer buffer) {
address = buffer.readSimpleString();
int routingTypeSetSize = buffer.readInt();
routingTypes = new HashSet<>(routingTypeSetSize);
routingTypes = EnumSet.noneOf(RoutingType.class);
for (int i = 0; i < routingTypeSetSize; i++) {
routingTypes.add(RoutingType.getType(buffer.readByte()));
}
Expand Down
Expand Up @@ -18,6 +18,7 @@

import javax.transaction.xa.XAException;
import javax.transaction.xa.Xid;
import java.util.EnumSet;
import java.util.HashMap;
import java.util.Set;
import java.util.concurrent.Executor;
Expand Down Expand Up @@ -185,8 +186,10 @@ public abstract void createSharedQueue(SimpleString address,

public abstract void deleteQueue(SimpleString queueName) throws ActiveMQException;

@Deprecated
public abstract void createAddress(SimpleString address, Set<RoutingType> routingTypes, boolean autoCreated) throws ActiveMQException;

public abstract void createAddress(SimpleString address, EnumSet<RoutingType> routingTypes, boolean autoCreated) throws ActiveMQException;

@Deprecated
public abstract void createQueue(SimpleString address,
Expand Down
Expand Up @@ -16,24 +16,21 @@
*/
package org.apache.activemq.artemis.utils;

import java.util.HashSet;
import java.util.EnumSet;
import java.util.Map;
import java.util.Set;

import org.apache.activemq.artemis.api.core.Pair;
import org.apache.activemq.artemis.api.core.SimpleString;
import org.apache.activemq.artemis.api.core.RoutingType;

public class PrefixUtil {

public static Pair<SimpleString, Set<RoutingType>> getAddressAndRoutingTypes(SimpleString address,
Set<RoutingType> defaultRoutingTypes,
Map<SimpleString, RoutingType> prefixes) {
public static Pair<SimpleString, EnumSet<RoutingType>> getAddressAndRoutingTypes(SimpleString address,
EnumSet<RoutingType> defaultRoutingTypes,
Map<SimpleString, RoutingType> prefixes) {
for (Map.Entry<SimpleString, RoutingType> entry : prefixes.entrySet()) {
if (address.startsWith(entry.getKey())) {
Set routingTypes = new HashSet<>();
routingTypes.add(entry.getValue());
return new Pair<>(removePrefix(address, entry.getKey()), routingTypes);
return new Pair<>(removePrefix(address, entry.getKey()), EnumSet.of(entry.getValue()));
}
}
return new Pair<>(address, defaultRoutingTypes);
Expand Down
Expand Up @@ -18,17 +18,16 @@

import java.io.Serializable;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.EnumSet;
import java.util.List;
import java.util.Set;

import org.apache.activemq.artemis.api.core.RoutingType;

public class CoreAddressConfiguration implements Serializable {

private String name = null;

private Set<RoutingType> routingTypes = new HashSet<>();
private EnumSet<RoutingType> routingTypes = EnumSet.noneOf(RoutingType.class);

private List<CoreQueueConfiguration> queueConfigurations = new ArrayList<>();

Expand All @@ -44,7 +43,7 @@ public CoreAddressConfiguration setName(String name) {
return this;
}

public Set<RoutingType> getRoutingTypes() {
public EnumSet<RoutingType> getRoutingTypes() {
return routingTypes;
}

Expand Down
Expand Up @@ -36,6 +36,7 @@
import java.util.Collections;
import java.util.Comparator;
import java.util.Date;
import java.util.EnumSet;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
Expand Down Expand Up @@ -630,7 +631,7 @@ private enum AddressInfoTextFormatter {
public StringBuilder format(AddressInfo addressInfo, StringBuilder output) {
output.append("Address [name=").append(addressInfo.getName());
output.append(", routingTypes={");
final Set<RoutingType> routingTypes = addressInfo.getRoutingTypes();
final EnumSet<RoutingType> routingTypes = addressInfo.getRoutingTypes();
if (!routingTypes.isEmpty()) {
for (RoutingType routingType : routingTypes) {
output.append(routingType).append(',');
Expand Down Expand Up @@ -680,7 +681,7 @@ public String createAddress(String name, String routingTypes) throws Exception {

clearIO();
try {
Set<RoutingType> set = new HashSet<>();
EnumSet<RoutingType> set = EnumSet.noneOf(RoutingType.class);
for (String routingType : ListUtil.toList(routingTypes)) {
set.add(RoutingType.valueOf(routingType));
}
Expand All @@ -701,11 +702,11 @@ public String updateAddress(String name, String routingTypes) throws Exception {

clearIO();
try {
final Set<RoutingType> routingTypeSet;
final EnumSet<RoutingType> routingTypeSet;
if (routingTypes == null) {
routingTypeSet = null;
} else {
routingTypeSet = new HashSet<>();
routingTypeSet = EnumSet.noneOf(RoutingType.class);
final String[] routingTypeNames = routingTypes.split(",");
for (String routingTypeName : routingTypeNames) {
routingTypeSet.add(RoutingType.valueOf(routingTypeName));
Expand Down
Expand Up @@ -21,6 +21,7 @@
import javax.management.MBeanOperationInfo;
import java.util.ArrayList;
import java.util.Collections;
import java.util.EnumSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
Expand Down Expand Up @@ -100,7 +101,7 @@ public String getAddress() {

@Override
public String[] getRoutingTypes() {
Set<RoutingType> routingTypes = addressInfo.getRoutingTypes();
EnumSet<RoutingType> routingTypes = addressInfo.getRoutingTypes();
String[] result = new String[routingTypes.size()];
int i = 0;
for (RoutingType routingType : routingTypes) {
Expand Down
Expand Up @@ -16,7 +16,7 @@
*/
package org.apache.activemq.artemis.core.persistence;

import java.util.Set;
import java.util.EnumSet;

import org.apache.activemq.artemis.api.core.SimpleString;
import org.apache.activemq.artemis.api.core.RoutingType;
Expand All @@ -27,5 +27,5 @@ public interface AddressBindingInfo {

SimpleString getName();

Set<RoutingType> getRoutingTypes();
EnumSet<RoutingType> getRoutingTypes();
}
Expand Up @@ -16,8 +16,7 @@
*/
package org.apache.activemq.artemis.core.persistence.impl.journal.codec;

import java.util.HashSet;
import java.util.Set;
import java.util.EnumSet;

import org.apache.activemq.artemis.api.core.ActiveMQBuffer;
import org.apache.activemq.artemis.api.core.SimpleString;
Expand All @@ -34,10 +33,10 @@ public class PersistentAddressBindingEncoding implements EncodingSupport, Addres

public boolean autoCreated;

public Set<RoutingType> routingTypes;
public EnumSet<RoutingType> routingTypes;

public PersistentAddressBindingEncoding() {
routingTypes = new HashSet<>();
routingTypes = EnumSet.noneOf(RoutingType.class);
}

@Override
Expand All @@ -57,7 +56,7 @@ public String toString() {
}

public PersistentAddressBindingEncoding(final SimpleString name,
final Set<RoutingType> routingTypes,
final EnumSet<RoutingType> routingTypes,
final boolean autoCreated) {
this.name = name;
this.routingTypes = routingTypes;
Expand All @@ -79,7 +78,7 @@ public SimpleString getName() {
}

@Override
public Set<RoutingType> getRoutingTypes() {
public EnumSet<RoutingType> getRoutingTypes() {
return routingTypes;
}

Expand Down
Expand Up @@ -16,7 +16,7 @@
*/
package org.apache.activemq.artemis.core.postoffice;

import java.util.Collection;
import java.util.EnumSet;
import java.util.Map;
import java.util.Set;

Expand Down Expand Up @@ -68,7 +68,7 @@ public interface AddressManager {

/** it will return null if there are no updates.
* it will throw an exception if the address doesn't exist */
AddressInfo updateAddressInfo(SimpleString addressName, Collection<RoutingType> routingTypes) throws Exception;
AddressInfo updateAddressInfo(SimpleString addressName, EnumSet<RoutingType> routingTypes) throws Exception;

AddressInfo removeAddressInfo(SimpleString address);

Expand Down
Expand Up @@ -16,7 +16,7 @@
*/
package org.apache.activemq.artemis.core.postoffice;

import java.util.Collection;
import java.util.EnumSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
Expand Down Expand Up @@ -59,7 +59,7 @@ default void reloadAddressInfo(AddressInfo addressInfo) throws Exception {

AddressInfo getAddressInfo(SimpleString address);

AddressInfo updateAddressInfo(SimpleString addressName, Collection<RoutingType> routingTypes) throws Exception;
AddressInfo updateAddressInfo(SimpleString addressName, EnumSet<RoutingType> routingTypes) throws Exception;

QueueBinding updateQueue(SimpleString name,
RoutingType routingType,
Expand Down

0 comments on commit 4bc1358

Please sign in to comment.