Repository: incubator-ratis Updated Branches: refs/heads/master 466fc2c3a -> a5b84af2d
RATIS-92. Move the basic getClassByName methods from RaftProperties to ReflectionUtils. Project: http://git-wip-us.apache.org/repos/asf/incubator-ratis/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-ratis/commit/a5b84af2 Tree: http://git-wip-us.apache.org/repos/asf/incubator-ratis/tree/a5b84af2 Diff: http://git-wip-us.apache.org/repos/asf/incubator-ratis/diff/a5b84af2 Branch: refs/heads/master Commit: a5b84af2de1e3311e96ebdf81f2a1155976cace4 Parents: 466fc2c Author: Tsz-Wo Nicholas Sze <[email protected]> Authored: Fri Jun 23 11:32:22 2017 +0800 Committer: Tsz-Wo Nicholas Sze <[email protected]> Committed: Fri Jun 23 11:32:22 2017 +0800 ---------------------------------------------------------------------- .../ratis/client/impl/RaftClientImpl.java | 3 +- .../java/org/apache/ratis/RaftConfigKeys.java | 11 +- .../org/apache/ratis/conf/RaftProperties.java | 117 +------------ .../main/java/org/apache/ratis/rpc/RpcType.java | 34 +++- .../org/apache/ratis/rpc/SupportedRpcType.java | 4 +- .../org/apache/ratis/util/CollectionUtils.java | 11 +- .../org/apache/ratis/util/ReflectionUtils.java | 165 ++++++++++++++----- .../ratis/server/impl/RaftServerProxy.java | 2 +- .../java/org/apache/ratis/MiniRaftCluster.java | 2 +- .../ratis/server/simulation/SimulatedRpc.java | 3 +- 10 files changed, 178 insertions(+), 174 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-ratis/blob/a5b84af2/ratis-client/src/main/java/org/apache/ratis/client/impl/RaftClientImpl.java ---------------------------------------------------------------------- diff --git a/ratis-client/src/main/java/org/apache/ratis/client/impl/RaftClientImpl.java b/ratis-client/src/main/java/org/apache/ratis/client/impl/RaftClientImpl.java index c6571ae..fbecb90 100644 --- a/ratis-client/src/main/java/org/apache/ratis/client/impl/RaftClientImpl.java +++ b/ratis-client/src/main/java/org/apache/ratis/client/impl/RaftClientImpl.java @@ -56,7 +56,8 @@ final class RaftClientImpl implements RaftClient { this.clientRpc = clientRpc; this.peers = new ArrayList<>(group.getPeers()); this.groupId = group.getGroupId(); - this.leaderId = leaderId != null? leaderId : peers.iterator().next().getId(); + this.leaderId = leaderId != null? leaderId + : !peers.isEmpty()? peers.iterator().next().getId(): null; this.retryInterval = retryInterval; clientRpc.addServers(peers); http://git-wip-us.apache.org/repos/asf/incubator-ratis/blob/a5b84af2/ratis-common/src/main/java/org/apache/ratis/RaftConfigKeys.java ---------------------------------------------------------------------- diff --git a/ratis-common/src/main/java/org/apache/ratis/RaftConfigKeys.java b/ratis-common/src/main/java/org/apache/ratis/RaftConfigKeys.java index 665a7f5..3de95ab 100644 --- a/ratis-common/src/main/java/org/apache/ratis/RaftConfigKeys.java +++ b/ratis-common/src/main/java/org/apache/ratis/RaftConfigKeys.java @@ -24,7 +24,6 @@ import static org.apache.ratis.conf.ConfUtils.set; import org.apache.ratis.conf.RaftProperties; import org.apache.ratis.rpc.RpcType; import org.apache.ratis.rpc.SupportedRpcType; -import org.apache.ratis.util.ReflectionUtils; public interface RaftConfigKeys { String PREFIX = "raft"; @@ -37,15 +36,7 @@ public interface RaftConfigKeys { static RpcType type(RaftProperties properties) { final String t = get(properties::get, TYPE_KEY, TYPE_DEFAULT); - - try { // Try parsing it as a SupportedRpcType - return SupportedRpcType.valueOfIgnoreCase(t); - } catch(IllegalArgumentException iae) { - } - - // Try using it as a class name - return ReflectionUtils.newInstance( - ReflectionUtils.getClass(t, properties, RpcType.class)); + return RpcType.valueOf(t); } static void setType(RaftProperties properties, RpcType type) { http://git-wip-us.apache.org/repos/asf/incubator-ratis/blob/a5b84af2/ratis-common/src/main/java/org/apache/ratis/conf/RaftProperties.java ---------------------------------------------------------------------- diff --git a/ratis-common/src/main/java/org/apache/ratis/conf/RaftProperties.java b/ratis-common/src/main/java/org/apache/ratis/conf/RaftProperties.java index f8d0bdb..a8dbd39 100644 --- a/ratis-common/src/main/java/org/apache/ratis/conf/RaftProperties.java +++ b/ratis-common/src/main/java/org/apache/ratis/conf/RaftProperties.java @@ -18,6 +18,7 @@ package org.apache.ratis.conf; +import org.apache.ratis.util.ReflectionUtils; import org.apache.ratis.util.SizeInBytes; import org.apache.ratis.util.StringUtils; import org.apache.ratis.util.TimeDuration; @@ -35,7 +36,6 @@ import javax.xml.transform.TransformerFactory; import javax.xml.transform.dom.DOMSource; import javax.xml.transform.stream.StreamResult; import java.io.*; -import java.lang.ref.WeakReference; import java.net.JarURLConnection; import java.net.URL; import java.net.URLConnection; @@ -122,13 +122,6 @@ public class RaftProperties { private Properties properties; private Properties overlay; - private ClassLoader classLoader; - { - classLoader = Thread.currentThread().getContextClassLoader(); - if (classLoader == null) { - classLoader = RaftProperties.class.getClassLoader(); - } - } /** A new configuration. */ public RaftProperties() { @@ -176,7 +169,6 @@ public class RaftProperties { synchronized(RaftProperties.class) { REGISTRY.put(this, null); } - this.classLoader = other.classLoader; this.loadDefaults = other.loadDefaults; } @@ -1034,74 +1026,7 @@ public class RaftProperties { return StringUtils.getTrimmedStrings(valueString); } - /** - * Load a class by name. - * - * @param name the class name. - * @return the class object. - * @throws ClassNotFoundException if the class is not found. - */ - public Class<?> getClassByName(String name) throws ClassNotFoundException { - Class<?> ret = getClassByNameOrNull(name); - if (ret == null) { - throw new ClassNotFoundException("Class " + name + " not found"); - } - return ret; - } - - private static final Map<ClassLoader, Map<String, WeakReference<Class<?>>>> - CACHE_CLASSES = new WeakHashMap<>(); - - /** - * Sentinel value to store negative cache results in {@link #CACHE_CLASSES}. - */ - private static final Class<?> NEGATIVE_CACHE_SENTINEL = - NegativeCacheSentinel.class; - - /** - * Load a class by name, returning null rather than throwing an exception - * if it couldn't be loaded. This is to avoid the overhead of creating - * an exception. - * - * @param name the class name - * @return the class object, or null if it could not be found. - */ - public Class<?> getClassByNameOrNull(String name) { - Map<String, WeakReference<Class<?>>> map; - - synchronized (CACHE_CLASSES) { - map = CACHE_CLASSES.get(classLoader); - if (map == null) { - map = Collections.synchronizedMap( - new WeakHashMap<String, WeakReference<Class<?>>>()); - CACHE_CLASSES.put(classLoader, map); - } - } - - Class<?> clazz = null; - WeakReference<Class<?>> ref = map.get(name); - if (ref != null) { - clazz = ref.get(); - } - if (clazz == null) { - try { - clazz = Class.forName(name, true, classLoader); - } catch (ClassNotFoundException e) { - // Leave a marker that the class isn't found - map.put(name, new WeakReference<>(NEGATIVE_CACHE_SENTINEL)); - return null; - } - // two putters can race here, but they'll put the same class - map.put(name, new WeakReference<>(clazz)); - return clazz; - } else if (clazz == NEGATIVE_CACHE_SENTINEL) { - return null; // not found - } else { - // cache hit - return clazz; - } - } /** * Get the value of the <code>name</code> property @@ -1124,7 +1049,7 @@ public class RaftProperties { try { Class<?>[] classes = new Class<?>[classnames.length]; for(int i = 0; i < classnames.length; i++) { - classes[i] = getClassByName(classnames[i]); + classes[i] = ReflectionUtils.getClassByName(classnames[i]); } return classes; } catch (ClassNotFoundException e) { @@ -1147,7 +1072,7 @@ public class RaftProperties { if (valueString == null) return defaultValue; try { - return getClassByName(valueString); + return ReflectionUtils.getClassByName(valueString); } catch (ClassNotFoundException e) { throw new RuntimeException(e); } @@ -1201,16 +1126,6 @@ public class RaftProperties { set(name, theClass.getName()); } - /** - * Get the {@link URL} for the named resource. - * - * @param name resource name. - * @return the url for the named resource. - */ - public URL getResource(String name) { - return classLoader.getResource(name); - } - protected synchronized Properties getProps() { if (properties == null) { properties = new Properties(); @@ -1324,7 +1239,7 @@ public class RaftProperties { if (resource instanceof URL) { // an URL resource doc = parse(builder, (URL) resource); } else if (resource instanceof String) { // a CLASSPATH resource - URL url = getResource((String) resource); + URL url = ReflectionUtils.getClassLoader().getResource((String)resource); doc = parse(builder, url); } else if (resource instanceof InputStream) { doc = parse(builder, (InputStream) resource, null); @@ -1526,24 +1441,6 @@ public class RaftProperties { return doc; } - /** - * Get the {@link ClassLoader} for this job. - * - * @return the correct class loader. - */ - public ClassLoader getClassLoader() { - return classLoader; - } - - /** - * Set the class loader that will be used to load the various objects. - * - * @param classLoader the new class loader. - */ - public void setClassLoader(ClassLoader classLoader) { - this.classLoader = classLoader; - } - @Override public String toString() { StringBuilder sb = new StringBuilder(); @@ -1590,10 +1487,4 @@ public class RaftProperties { } return result; } - - /** - * A unique class which is used as a sentinel value in the caching - * for getClassByName. {@link RaftProperties#getClassByNameOrNull(String)} - */ - private static abstract class NegativeCacheSentinel {} } http://git-wip-us.apache.org/repos/asf/incubator-ratis/blob/a5b84af2/ratis-common/src/main/java/org/apache/ratis/rpc/RpcType.java ---------------------------------------------------------------------- diff --git a/ratis-common/src/main/java/org/apache/ratis/rpc/RpcType.java b/ratis-common/src/main/java/org/apache/ratis/rpc/RpcType.java index 701e979..79b08b6 100644 --- a/ratis-common/src/main/java/org/apache/ratis/rpc/RpcType.java +++ b/ratis-common/src/main/java/org/apache/ratis/rpc/RpcType.java @@ -18,15 +18,45 @@ package org.apache.ratis.rpc; import org.apache.ratis.conf.Parameters; -import org.apache.ratis.conf.RaftProperties; +import org.apache.ratis.util.ReflectionUtils; /** The type of RPC implementations. */ public interface RpcType { + /** + * Parse the given string as a {@link SupportedRpcType} + * or a user-defined {@link RpcType}. + * + * @param rpcType The string representation of an {@link RpcType}. + * @return a {@link SupportedRpcType} or a user-defined {@link RpcType}. + */ + static RpcType valueOf(String rpcType) { + final Throwable fromSupportedRpcType; + try { // Try parsing it as a SupportedRpcType + return SupportedRpcType.valueOfIgnoreCase(rpcType); + } catch (Throwable t) { + fromSupportedRpcType = t; + } + + try { + // Try using it as a class name + return ReflectionUtils.newInstance( + ReflectionUtils.getClass(rpcType, RpcType.class)); + } catch(Throwable t) { + final IllegalArgumentException iae = new IllegalArgumentException( + "Invalid " + RpcType.class.getSimpleName() + ": \"" + rpcType + "\" " + + " cannot be used as a user-defined " + RpcType.class.getSimpleName() + + " and it is not a " + SupportedRpcType.class.getSimpleName() + "."); + iae.addSuppressed(t); + iae.addSuppressed(fromSupportedRpcType); + throw iae; + } + } + /** @return the name of the rpc type. */ String name(); /** @return a new factory created using the given properties and parameters. */ - RpcFactory newFactory(RaftProperties properties, Parameters parameters); + RpcFactory newFactory(Parameters parameters); /** An interface to get {@link RpcType}. */ interface Get { http://git-wip-us.apache.org/repos/asf/incubator-ratis/blob/a5b84af2/ratis-common/src/main/java/org/apache/ratis/rpc/SupportedRpcType.java ---------------------------------------------------------------------- diff --git a/ratis-common/src/main/java/org/apache/ratis/rpc/SupportedRpcType.java b/ratis-common/src/main/java/org/apache/ratis/rpc/SupportedRpcType.java index 92f70f6..bd4a795 100644 --- a/ratis-common/src/main/java/org/apache/ratis/rpc/SupportedRpcType.java +++ b/ratis-common/src/main/java/org/apache/ratis/rpc/SupportedRpcType.java @@ -41,9 +41,9 @@ public enum SupportedRpcType implements RpcType { } @Override - public RpcFactory newFactory(RaftProperties properties, Parameters parameters) { + public RpcFactory newFactory(Parameters parameters) { final Class<? extends RpcFactory> clazz = ReflectionUtils.getClass( - factoryClassName, properties, RpcFactory.class); + factoryClassName, RpcFactory.class); return ReflectionUtils.newInstance(clazz, ARG_CLASSES, parameters); } } http://git-wip-us.apache.org/repos/asf/incubator-ratis/blob/a5b84af2/ratis-common/src/main/java/org/apache/ratis/util/CollectionUtils.java ---------------------------------------------------------------------- diff --git a/ratis-common/src/main/java/org/apache/ratis/util/CollectionUtils.java b/ratis-common/src/main/java/org/apache/ratis/util/CollectionUtils.java index 5f68d47..d50d6ce 100644 --- a/ratis-common/src/main/java/org/apache/ratis/util/CollectionUtils.java +++ b/ratis-common/src/main/java/org/apache/ratis/util/CollectionUtils.java @@ -20,11 +20,7 @@ package org.apache.ratis.util; -import java.util.Collection; -import java.util.Iterator; -import java.util.List; -import java.util.Objects; -import java.util.Random; +import java.util.*; import java.util.function.Function; public interface CollectionUtils { @@ -84,4 +80,9 @@ public interface CollectionUtils { } }; } + + static <INPUT, OUTPUT> Iterable<OUTPUT> as( + INPUT[] array, Function<INPUT, OUTPUT> converter) { + return as(Arrays.asList(array), converter); + } } http://git-wip-us.apache.org/repos/asf/incubator-ratis/blob/a5b84af2/ratis-common/src/main/java/org/apache/ratis/util/ReflectionUtils.java ---------------------------------------------------------------------- diff --git a/ratis-common/src/main/java/org/apache/ratis/util/ReflectionUtils.java b/ratis-common/src/main/java/org/apache/ratis/util/ReflectionUtils.java index d0762c3..700965f 100644 --- a/ratis-common/src/main/java/org/apache/ratis/util/ReflectionUtils.java +++ b/ratis-common/src/main/java/org/apache/ratis/util/ReflectionUtils.java @@ -21,40 +21,141 @@ package org.apache.ratis.util; +import java.lang.ref.WeakReference; import java.lang.reflect.Constructor; import java.lang.reflect.InvocationTargetException; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; -import java.util.Map; -import java.util.Objects; +import java.util.*; import java.util.concurrent.ConcurrentHashMap; -import org.apache.ratis.conf.RaftProperties; - /** * Reflection related utility methods. */ -public class ReflectionUtils { +public interface ReflectionUtils { + final class Constructors { + private Constructors() {} + + /** + * Cache of constructors for each class. Pins the classes so they + * can't be garbage collected until ReflectionUtils can be collected. + */ + private static final Map<List<Class<?>>, Constructor<?>> CONSTRUCTORS + = new ConcurrentHashMap<>(); + + private static <T> Constructor<T> get(Class<T> clazz, Class<?>[] argClasses) + throws NoSuchMethodException { + Objects.requireNonNull(clazz, "clazz == null"); + + final List<Class<?>> key = new ArrayList<>(argClasses.length + 1); + key.add(clazz); + key.addAll(Arrays.asList(argClasses)); - private ReflectionUtils() { - // Utility class, cannot instantiate + @SuppressWarnings("unchecked") + Constructor<T> ctor = (Constructor<T>) CONSTRUCTORS.get(key); + if (ctor == null) { + ctor = clazz.getDeclaredConstructor(argClasses); + ctor.setAccessible(true); + CONSTRUCTORS.put(key, ctor); + } + return ctor; + } } - private static final Class<?>[] EMPTY_CLASSES = {}; + final class Classes { + private static Class<?>[] EMPTY_ARRAY = {}; + + private static final Map<ClassLoader, Map<String, WeakReference<Class<?>>>> + CLASSES = new WeakHashMap<>(); + + /** Sentinel value to store negative cache results in {@link #CLASSES}. */ + private static final Class<?> NEGATIVE_CACHE_SENTINEL = NegativeCacheSentinel.class; + + /** + * A unique class which is used as a sentinel value in the caching + * for getClassByName. {@link #getClassByNameOrNull(String)} + */ + private static final class NegativeCacheSentinel {} + + private static ClassLoader CLASS_LOADER; + static { + CLASS_LOADER = Thread.currentThread().getContextClassLoader(); + if (CLASS_LOADER == null) { + CLASS_LOADER = ReflectionUtils.class.getClassLoader(); + } + } + + private static Map<String, WeakReference<Class<?>>> getClassMap() { + Map<String, WeakReference<Class<?>>> map; + synchronized (CLASSES) { + map = CLASSES.get(CLASS_LOADER); + if (map == null) { + map = Collections.synchronizedMap(new WeakHashMap<>()); + CLASSES.put(CLASS_LOADER, map); + } + } + return map; + } + } + + static ClassLoader getClassLoader() { + return Classes.CLASS_LOADER; + } + + /** + * Load a class by name, returning null rather than throwing an exception + * if it couldn't be loaded. This is to avoid the overhead of creating + * an exception. + * + * @param name the class name + * @return the class object, or null if it could not be found. + */ + static Class<?> getClassByNameOrNull(String name) { + final Map<String, WeakReference<Class<?>>> map = Classes.getClassMap(); + + Class<?> clazz = null; + WeakReference<Class<?>> ref = map.get(name); + if (ref != null) { + clazz = ref.get(); + } + + if (clazz == null) { + try { + clazz = Class.forName(name, true, Classes.CLASS_LOADER); + } catch (ClassNotFoundException e) { + // Leave a marker that the class isn't found + map.put(name, new WeakReference<>(Classes.NEGATIVE_CACHE_SENTINEL)); + return null; + } + // two putters can race here, but they'll put the same class + map.put(name, new WeakReference<>(clazz)); + return clazz; + } else if (clazz == Classes.NEGATIVE_CACHE_SENTINEL) { + return null; // not found + } else { + // cache hit + return clazz; + } + } /** - * Cache of constructors for each class. Pins the classes so they - * can't be garbage collected until ReflectionUtils can be collected. + * Load a class by name. + * + * @param name the class name. + * @return the class object. + * @throws ClassNotFoundException if the class is not found. */ - private static final Map<List<Class<?>>, Constructor<?>> CONSTRUCTOR_CACHE - = new ConcurrentHashMap<>(); + static Class<?> getClassByName(String name) throws ClassNotFoundException { + Class<?> ret = getClassByNameOrNull(name); + if (ret == null) { + throw new ClassNotFoundException("Class " + name + " not found"); + } + return ret; + } /** * Create an object for the given class using its default constructor. */ - public static <T> T newInstance(Class<T> clazz) { - return newInstance(clazz, EMPTY_CLASSES); + static <T> T newInstance(Class<T> clazz) { + return newInstance(clazz, Classes.EMPTY_ARRAY); } /** @@ -66,28 +167,18 @@ public class ReflectionUtils { * @param <T> class type of clazz * @return a new object */ - public static <T> T newInstance(Class<T> clazz, Class<?>[] argClasses, Object... args) { - Objects.requireNonNull(clazz, "clazz == null"); + static <T> T newInstance(Class<T> clazz, Class<?>[] argClasses, Object... args) { + final Constructor<T> ctor; try { - final List<Class<?>> key = new ArrayList<>(); - key.add(clazz); - key.addAll(Arrays.asList(argClasses)); - - @SuppressWarnings("unchecked") - Constructor<T> ctor = (Constructor<T>) CONSTRUCTOR_CACHE.get(key); - if (ctor == null) { - ctor = clazz.getDeclaredConstructor(argClasses); - ctor.setAccessible(true); - CONSTRUCTOR_CACHE.put(key, ctor); - } - return instantiate(clazz.getName(), ctor, args); + ctor = Constructors.get(clazz, argClasses); } catch (NoSuchMethodException e) { throw new UnsupportedOperationException( "Unable to find suitable constructor for class " + clazz.getName(), e); } + return instantiate(clazz.getName(), ctor, args); } - private static <T> T instantiate(final String className, Constructor<T> ctor, Object[] ctorArgs) { + static <T> T instantiate(final String className, Constructor<T> ctor, Object[] ctorArgs) { try { ctor.setAccessible(true); return ctor.newInstance(ctorArgs); @@ -104,7 +195,7 @@ public class ReflectionUtils { } /** Is the given object an instance of one of the given classes? */ - public static boolean isInstance(Object obj, Class<?>... classes) { + static boolean isInstance(Object obj, Class<?>... classes) { for(Class<?> c : classes) { if (c.isInstance(obj)) { return true; @@ -113,17 +204,17 @@ public class ReflectionUtils { return false; } - public static <BASE> Class<? extends BASE> getClass( - String subClassName, RaftProperties properties, Class<BASE> base) { + static <BASE> Class<? extends BASE> getClass( + String subClassName, Class<BASE> base) { try { - return properties.getClassByName(subClassName).asSubclass(base); + return getClassByName(subClassName).asSubclass(base); } catch (ClassNotFoundException e) { throw new IllegalArgumentException("Failed to get class " + subClassName + " as a subclass of " + base, e); } } - public static Exception instantiateException(Class<? extends Exception> cls, + static Exception instantiateException(Class<? extends Exception> cls, String message, Exception from) throws Exception { Constructor<? extends Exception> cn = cls.getConstructor(String.class); cn.setAccessible(true); http://git-wip-us.apache.org/repos/asf/incubator-ratis/blob/a5b84af2/ratis-server/src/main/java/org/apache/ratis/server/impl/RaftServerProxy.java ---------------------------------------------------------------------- diff --git a/ratis-server/src/main/java/org/apache/ratis/server/impl/RaftServerProxy.java b/ratis-server/src/main/java/org/apache/ratis/server/impl/RaftServerProxy.java index 366a74c..4b3b9f5 100644 --- a/ratis-server/src/main/java/org/apache/ratis/server/impl/RaftServerProxy.java +++ b/ratis-server/src/main/java/org/apache/ratis/server/impl/RaftServerProxy.java @@ -57,7 +57,7 @@ public class RaftServerProxy implements RaftServer { this.stateMachine = stateMachine; final RpcType rpcType = RaftConfigKeys.Rpc.type(properties); - this.factory = ServerFactory.cast(rpcType.newFactory(properties, parameters)); + this.factory = ServerFactory.cast(rpcType.newFactory(parameters)); this.impl = CompletableFuture.completedFuture(initImpl(group)); this.serverRpc = initRaftServerRpc(factory, this, group); http://git-wip-us.apache.org/repos/asf/incubator-ratis/blob/a5b84af2/ratis-server/src/test/java/org/apache/ratis/MiniRaftCluster.java ---------------------------------------------------------------------- diff --git a/ratis-server/src/test/java/org/apache/ratis/MiniRaftCluster.java b/ratis-server/src/test/java/org/apache/ratis/MiniRaftCluster.java index 0ef7439..577ae16 100644 --- a/ratis-server/src/test/java/org/apache/ratis/MiniRaftCluster.java +++ b/ratis-server/src/test/java/org/apache/ratis/MiniRaftCluster.java @@ -140,7 +140,7 @@ public abstract class MiniRaftCluster { final RpcType rpcType = RaftConfigKeys.Rpc.type(properties); this.clientFactory = ClientFactory.cast( - rpcType.newFactory(properties, parameters)); + rpcType.newFactory(parameters)); this.testBaseDir = getBaseDirectory(); ExitUtils.disableSystemExit(); http://git-wip-us.apache.org/repos/asf/incubator-ratis/blob/a5b84af2/ratis-server/src/test/java/org/apache/ratis/server/simulation/SimulatedRpc.java ---------------------------------------------------------------------- diff --git a/ratis-server/src/test/java/org/apache/ratis/server/simulation/SimulatedRpc.java b/ratis-server/src/test/java/org/apache/ratis/server/simulation/SimulatedRpc.java index f8a32d9..abdc8cf 100644 --- a/ratis-server/src/test/java/org/apache/ratis/server/simulation/SimulatedRpc.java +++ b/ratis-server/src/test/java/org/apache/ratis/server/simulation/SimulatedRpc.java @@ -19,7 +19,6 @@ package org.apache.ratis.server.simulation; import org.apache.ratis.client.ClientFactory; import org.apache.ratis.conf.Parameters; -import org.apache.ratis.conf.RaftProperties; import org.apache.ratis.rpc.RpcType; import org.apache.ratis.server.RaftServer; import org.apache.ratis.server.impl.ServerFactory; @@ -35,7 +34,7 @@ class SimulatedRpc implements RpcType { } @Override - public Factory newFactory(RaftProperties properties, Parameters parameters) { + public Factory newFactory(Parameters parameters) { return new Factory(parameters); }
