I am playing with the Infinispan 5.3 quick-start package to exercise my usage
of the Grouping API.  As we know the quick start package is made up of
AbstractNode.java, Node0.java, Node1.java and Node2.java (plus a
util/listener).

My ambition is to demonstrate 

1.  that any Cache<K,V>.put("DIMENSION.xxx",v) will flow through my Grouper
and "pin" that key in the Cache at @Node=0.
2.  that any Cache<K,V>.put("POSITION.xxx",v) will flow through my Grouper
and "pin" that key in the Cache at either @Node=1 or @Node=2 .

Here is my AbstractNode#createCacheManagerProgramatically() config:

private static EmbeddedCacheManager createCacheManagerProgramatically() {
                return new DefaultCacheManager(
                                
GlobalConfigurationBuilder.defaultClusteredBuilder()
                                .transport().addProperty("configurationFile", 
"jgroups.xml")
                                .build(),
                                new 
org.infinispan.configuration.cache.ConfigurationBuilder()
                                .clustering()
                                .cacheMode(CacheMode.DIST_SYNC)
                                
.hash().numOwners(1).groups().enabled(Boolean.TRUE)
                                .addGrouper(new
com.jpmorgan.ct.lri.cs.ae.test.DimensionGrouper<String>())
                                .build()
                                );
        }

And here is my Grouper<T> implementation

public class DimensionGrouper<T> implements Grouper<String> {
        public String computeGroup(String key, String group) {
                if (key.indexOf("DIMENSION.")==0) {
                        String groupPinned = "0";
                        System.out.println("Pinning Key=["+key+"] 
@Node=["+groupPinned+"]");
//node= exactly 0
                        return groupPinned;
                } else if (key.indexOf("POSITION.")==0) {
                        String groupPinned = ""+(1+ (int)(Math.random()*2));
                        System.out.println("Pinning Key=["+key+"] 
@Node=["+groupPinned+"]");
//node= {1,2}
                        return groupPinned;
                } else {
                        return null;
                }
        }

        public Class<String> getKeyType() {
                return String.class;
        }

}

The "logic" is working correctly ... i.e. when from Node2.java I call

                     for (int i = 0; i < 10; i++) {
                                cacheDP.put("DIMENSION." + i, "DimensionValue." 
+ i);
                                cacheDP.put("POSITION." + i, "PositionValue." + 
i);

                        }

My DimensionGrouper is returning "0" from computeGroup().  My question is
how in Infinispan can I map the computeGroup() return value to a physical
Node?  I.e.  How can I make it so that when computeGroup() returns "0", I
will *only* add that <K,V> entry to the Cache @Node 0?





--
View this message in context: 
http://infinispan-developer-list.980875.n3.nabble.com/Re-How-to-get-Grouper-T-computeGroup-key-return-value-to-map-to-physical-Node-tp4027134.html
Sent from the Infinispan Developer List mailing list archive at Nabble.com.
_______________________________________________
infinispan-dev mailing list
infinispan-dev@lists.jboss.org
https://lists.jboss.org/mailman/listinfo/infinispan-dev

Reply via email to