[infinispan-issues] [JBoss JIRA] (ISPN-2779) Lost data on remotecache get() after put()
Tristan Tarrant (JIRA)
jira-events at lists.jboss.org
Mon May 27 04:45:10 EDT 2013
[ https://issues.jboss.org/browse/ISPN-2779?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Tristan Tarrant updated ISPN-2779:
----------------------------------
Fix Version/s: 6.0.0.Final
(was: 5.3.0.Final)
> Lost data on remotecache get() after put()
> ------------------------------------------
>
> Key: ISPN-2779
> URL: https://issues.jboss.org/browse/ISPN-2779
> Project: Infinispan
> Issue Type: Bug
> Components: Distributed Cache, Eviction, Loaders and Stores, Server
> Affects Versions: 5.1.6.FINAL, 5.2.0.CR3
> Environment: Windows 7SP1 Pro
> JDK 7 or JRE6
> Reporter: ThienLong Hong
> Assignee: Tristan Tarrant
> Fix For: 6.0.0.Final
>
>
> I'm start server Infinispan on Ubuntu follow comand:
> {noformat}
> ./startServer.sh -r hotrod -c infinispan-distribution.xml -l 192.168.23.120 -Djgroups.bind_addr=192.168.23.120
> {noformat}
> Make sure we can open many file, /etc/security/limits.conf:
> * soft nofile 100002
> * hard nofile 100002
> Here is content of infinispan-distribution.xml:
> {code:xml}
> <infinispan xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
> xsi:schemaLocation="urn:infinispan:config:5.1 http://www.infinispan.org/schemas/infinispan-config-5.1.xsd"
> xmlns="urn:infinispan:config:5.1">
> <global>
> <transport>
> <properties>
> <property name="configurationFile" value="jgroups-tcp.xml">
> </property></properties>
> </transport>
> </global>
> <default>
> <clustering mode="distribution">
> <sync />
> <hash numOwners="2" />
> </clustering>
> </default>
> <namedCache name="myCache">
> <clustering mode="distribution">
> <sync />
> <hash numOwners="2" />
> </clustering>
> </namedCache>
> <namedCache name="evictionCache">
> <clustering mode="distribution">
> <sync />
> <hash numOwners="2" rehashEnabled="true" rehashRpcTimeout="600000" numVirtualNodes="50"/>
> </clustering>
> <eviction
> maxEntries="10000"
> strategy="LRU"
> />
> <loaders passivation="true" preload="false">
> <loader class="org.infinispan.loaders.file.FileCacheStore" fetchPersistentState="true" purgeOnStartup="false">
> <properties>
> <property name="location" value="data"/>
> </properties>
> </loader>
> </loaders>
> </namedCache>
> </infinispan>
> {code}
> I write a simple program to test benmark of infinispan but i got problem of lost data. I put many key-value but when i retrieve it return null.
> Here is my program soucecode:
> {code:java}
> package vn.vccorp.benmark.infinispan;
> import java.io.FileWriter;
> import java.io.PrintWriter;
> import java.net.URL;
> import java.util.ArrayList;
> import java.util.LinkedHashMap;
> import java.util.List;
> import java.util.Map;
> import java.util.Map.Entry;
> import java.util.Random;
> import java.util.UUID;
> import java.util.concurrent.Callable;
> import java.util.concurrent.Executor;
> import java.util.concurrent.ExecutorService;
> import java.util.concurrent.Executors;
> import java.util.concurrent.TimeUnit;
> import org.infinispan.client.hotrod.RemoteCache;
> import org.infinispan.client.hotrod.RemoteCacheManager;
> public class Benmark implements Callable<Void> {
> private static final int MAX_LENGHT = 20;
> private static final int MIN_LENGHT = 8;
> private Map<String, String> accs = new LinkedHashMap<String, String>();
> private final Random random = new Random(System.currentTimeMillis());
> private RemoteCache<String, String> rc;
> private boolean getOperator = false;
> public Benmark(RemoteCache<String, String> rc, int numAcc) {
> generateRandomAccs(numAcc);
> this.rc = rc;
> }
> /**
> * @param args
> * @throws InterruptedException
> */
> public static void main(String[] args) throws InterruptedException {
> URL resource = Thread.currentThread().getContextClassLoader()
> .getResource("hotrod-client.properties");
> RemoteCacheManager rcm = new RemoteCacheManager(resource, true);
> RemoteCache<String, String> rc = rcm.getCache("evictionCache");
> List<Benmark> bens = new ArrayList<Benmark>();
> int numThreads = Runtime.getRuntime().availableProcessors() * 2;
> int numAccsPerThread = 5000;
> for (int i = 0; i < numThreads; ++i) {
> bens.add(new Benmark(rc, numAccsPerThread));
> }
> long time = testOperator(bens);
> System.out.println("finish test Put with "
> + (numThreads * numAccsPerThread) + " records in "
> + (time) + "ns");
> for (Benmark benmark : bens) {
> benmark.setGetOperator(true);
> }
> time = testOperator(bens);
> System.out.println("finish test Get with "
> + (numThreads * numAccsPerThread) + " records in "
> + (time) + "ns");
> rcm.stop();
> saveDataTest(bens);
> }
> private static void saveDataTest(List<Benmark> bens) {
> PrintWriter writer = null;
> try {
> writer = new PrintWriter(new FileWriter("data_test.txt"));
> for (Benmark ben : bens) {
> for (Entry<String, String> entry : ben.getAccs().entrySet()) {
> writer.println(entry.getKey());
> writer.println(entry.getValue());
> }
> }
> } catch (Exception e) {
> // TODO: handle exception
> } finally {
> if (writer != null) {
> writer.close();
> }
> }
> }
> private static long testOperator(List<Benmark> bens) throws InterruptedException {
> ExecutorService pool = Executors.newCachedThreadPool();
> long time = System.nanoTime();
> pool.invokeAll(bens);
> pool.shutdown();
> while (!pool.awaitTermination(1, TimeUnit.MINUTES)) {
> }
> long end = System.nanoTime();
> return end - time;
> }
> private void generateRandomAccs(int numberAcc) {
> String user = null;
> String pass = null;
> for (int i = 0; i < numberAcc;) {
> user = randomString();
> pass = randomString();
> if (getAccs().put(user, pass) == null) {
> ++i;
> }
> }
> }
> private String randomString() {
> // int len = MIN_LENGHT + random.nextInt(MAX_LENGHT - MIN_LENGHT);
> // StringBuilder builder = new StringBuilder(len);
> // for (int i = 0; i < len; ++i) {
> // char c = (char) (32 + random.nextInt(126 - 32));
> // builder.append(c);
> // }
> // return builder.toString();
> return UUID.randomUUID().toString();
> }
> @Override
> public Void call() {
> if (!getOperator) {
> System.out.println("Start test PUT");
> long startPut = System.nanoTime();
> for (Entry<String, String> acc : getAccs().entrySet()) {
> rc.put(acc.getKey(), acc.getValue());
> }
> long endPut = System.nanoTime();
> System.out
> .println("Finish test PUT: " + (endPut - startPut) + "ns");
> } else {
> System.out.println("Start test GET");
> long startGet = System.nanoTime();
> for (Entry<String, String> acc : getAccs().entrySet()) {
> if (rc.get(acc.getKey()) == null) {
> System.err.println("Error get data");
> break;
> }
> }
> long endGet = System.nanoTime();
> System.out
> .println("Finish test GET: " + (endGet - startGet) + "ns");
> }
> return null;
> }
> public boolean isGetOperator() {
> return getOperator;
> }
> public void setGetOperator(boolean getOperator) {
> this.getOperator = getOperator;
> }
> public Map<String, String> getAccs() {
> return accs;
> }
> public void setAccs(Map<String, String> accs) {
> this.accs = accs;
> }
> }
> {code}
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira
More information about the infinispan-issues
mailing list