[infinispan-commits] Infinispan SVN: r1831 - in trunk/core/src/main/java/org/infinispan: affinity and 1 other directory.
infinispan-commits at lists.jboss.org
infinispan-commits at lists.jboss.org
Mon May 24 06:09:26 EDT 2010
Author: mircea.markus
Date: 2010-05-24 06:09:24 -0400 (Mon, 24 May 2010)
New Revision: 1831
Added:
trunk/core/src/main/java/org/infinispan/affinity/
trunk/core/src/main/java/org/infinispan/affinity/KeyAffinityService.java
trunk/core/src/main/java/org/infinispan/affinity/KeyAffinityServiceFactory.java
trunk/core/src/main/java/org/infinispan/affinity/KeyAffinityServiceImpl.java
trunk/core/src/main/java/org/infinispan/affinity/KeyProvider.java
trunk/core/src/main/java/org/infinispan/affinity/RndKeyProvider.java
Log:
design for ISPN-232
Added: trunk/core/src/main/java/org/infinispan/affinity/KeyAffinityService.java
===================================================================
--- trunk/core/src/main/java/org/infinispan/affinity/KeyAffinityService.java (rev 0)
+++ trunk/core/src/main/java/org/infinispan/affinity/KeyAffinityService.java 2010-05-24 10:09:24 UTC (rev 1831)
@@ -0,0 +1,18 @@
+package org.infinispan.affinity;
+
+import org.infinispan.remoting.transport.Address;
+
+import java.util.concurrent.Executor;
+
+/**
+ *
+ *
+ * @author Mircea.Markus at jboss.com
+ * @since 4.1
+ */
+public interface KeyAffinityService<K> {
+
+ public K getKeyForAddress(Address address);
+
+ public K getCollocatedKey(K otherKey);
+}
Added: trunk/core/src/main/java/org/infinispan/affinity/KeyAffinityServiceFactory.java
===================================================================
--- trunk/core/src/main/java/org/infinispan/affinity/KeyAffinityServiceFactory.java (rev 0)
+++ trunk/core/src/main/java/org/infinispan/affinity/KeyAffinityServiceFactory.java 2010-05-24 10:09:24 UTC (rev 1831)
@@ -0,0 +1,53 @@
+package org.infinispan.affinity;
+
+import org.infinispan.Cache;
+import org.infinispan.executors.ExecutorFactory;
+
+import java.util.Properties;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+
+/**
+ * // TODO: Document this
+ *
+ * @author Mircea.Markus at jboss.com
+ * @since 4.1
+ */
+public class KeyAffinityServiceFactory {
+
+ /**
+ * Creates an {@link org.infinispan.affinity.KeyAffinityService} instance.
+ *
+ * @param cache the distributed cache for which this service runs
+ * @param ex used for obtaining a thread that async generates keys.
+ * @param keyProvider allows one to control how the generated keys look like.
+ * @param keyBufferSize the number of generated keys per {@link org.infinispan.remoting.transport.Address}.
+ * @return an {@link org.infinispan.affinity.KeyAffinityService} implementation.
+ * @throws IllegalStateException if the supplied cache is not DIST.
+ */
+ public static <K,V> KeyAffinityService<K> newKeyAffinityService(Cache<K,V> cache, ExecutorFactory ex, KeyProvider keyProvider, int keyBufferSize) {
+ return null;
+ }
+
+ /**
+ * Same as {@link #newKeyAffinityService(org.infinispan.Cache,org.infinispan.executors.ExecutorFactory,
+ * KeyProvider,int)} with the an {@link org.infinispan.affinity.RndKeyProvider}.
+ */
+ public static <K,V> KeyAffinityService newKeyAffinityService(Cache<K,V> cache, ExecutorFactory ex, int keyBufferSize) {
+ return newKeyAffinityService(cache, ex, new RndKeyProvider(), keyBufferSize);
+ }
+
+ /**
+ * Same as {@link #newKeyAffinityService(org.infinispan.Cache,org.infinispan.executors.ExecutorFactory,
+ * KeyProvider,int)} with the an {@link org.infinispan.affinity.RndKeyProvider} and an
+ * {@link java.util.concurrent.Executors#newSingleThreadExecutor()} executor.
+ */
+ public static <K,V> KeyAffinityService newKeyAffinityService(Cache<K,V> cache, int keyBufferSize) {
+ return newKeyAffinityService(cache, new ExecutorFactory() {
+ @Override
+ public ExecutorService getExecutor(Properties p) {
+ return Executors.newSingleThreadExecutor();
+ }
+ }, new RndKeyProvider(), keyBufferSize);
+ }
+}
Added: trunk/core/src/main/java/org/infinispan/affinity/KeyAffinityServiceImpl.java
===================================================================
--- trunk/core/src/main/java/org/infinispan/affinity/KeyAffinityServiceImpl.java (rev 0)
+++ trunk/core/src/main/java/org/infinispan/affinity/KeyAffinityServiceImpl.java 2010-05-24 10:09:24 UTC (rev 1831)
@@ -0,0 +1,22 @@
+package org.infinispan.affinity;
+
+import org.infinispan.remoting.transport.Address;
+
+/**
+ * // TODO: Document this
+ *
+ * @author Mircea.Markus at jboss.com
+ * @since 4.1
+ */
+public class KeyAffinityServiceImpl implements KeyAffinityService {
+
+ @Override
+ public Object getCollocatedKey(Object otherKey) {
+ return null; // TODO: Customise this generated block
+ }
+
+ @Override
+ public Object getKeyForAddress(Address address) {
+ return null; // TODO: Customise this generated block
+ }
+}
Added: trunk/core/src/main/java/org/infinispan/affinity/KeyProvider.java
===================================================================
--- trunk/core/src/main/java/org/infinispan/affinity/KeyProvider.java (rev 0)
+++ trunk/core/src/main/java/org/infinispan/affinity/KeyProvider.java 2010-05-24 10:09:24 UTC (rev 1831)
@@ -0,0 +1,12 @@
+package org.infinispan.affinity;
+
+/**
+ * Used for generating keys; used by {@link org.infinispan.affinity.KeyAffinityService} to generate the affinity keys.
+ * It offers the possibility to generate keys in a particular format.
+ *
+ * @author Mircea.Markus at jboss.com
+ * @since 4.1
+ */
+public interface KeyProvider {
+ public Object getKey();
+}
Added: trunk/core/src/main/java/org/infinispan/affinity/RndKeyProvider.java
===================================================================
--- trunk/core/src/main/java/org/infinispan/affinity/RndKeyProvider.java (rev 0)
+++ trunk/core/src/main/java/org/infinispan/affinity/RndKeyProvider.java 2010-05-24 10:09:24 UTC (rev 1831)
@@ -0,0 +1,20 @@
+package org.infinispan.affinity;
+
+import java.util.Random;
+
+/**
+ * Key provider that relies on {@link java.util.Random}'s distribution to generate keys.
+ * It doesn't offer any guarantee that the keys are unique.
+ *
+ * @author Mircea.Markus at jboss.com
+ * @since 4.1
+ */
+public class RndKeyProvider implements KeyProvider {
+
+ public static final Random rnd = new Random();
+
+ @Override
+ public Object getKey() {
+ return rnd.nextLong();
+ }
+}
More information about the infinispan-commits
mailing list