[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