[infinispan-issues] [JBoss JIRA] (ISPN-9455) When underlying store becomes available, the queued modifications are not been written

Ryan Emerson (Jira) issues at jboss.org
Mon Oct 22 10:06:01 EDT 2018


     [ https://issues.jboss.org/browse/ISPN-9455?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Ryan Emerson resolved ISPN-9455.
--------------------------------
    Resolution: Explained


> When underlying store becomes available, the queued modifications are not been written
> --------------------------------------------------------------------------------------
>
>                 Key: ISPN-9455
>                 URL: https://issues.jboss.org/browse/ISPN-9455
>             Project: Infinispan
>          Issue Type: Bug
>            Reporter: Diego Lovison
>            Assignee: Ryan Emerson
>            Priority: Critical
>
> In order to reproduce this issue, you will need to do the following.
> 1) Start a remote Infinispan server using: ./standalone.sh -c clustered.xml
> 2) Add a breakpoint in AsynCacheWriter line 423. The line is: "retryWork(configuration.connectionAttempts());" into the "run" method
> 3) Run the application
> 4) When the breakpoint stops in AsynCacheWriter::423, kill the remote server and then resume.
> 5) Wait for the message in the log: "ISPN000053: Unable to process some async modifications after 5 retries!"
> 6) After the message, start again the remote server. 
> 7) After 120 seconds we will double check in the remote store if the data is available. It will fail. There is no data in the remote store. Based on https://issues.jboss.org/browse/JDG-1051 "Once the underlying store becomes available, the queued modifications should be written and then the cache should become available."
> Application
> {code:java}
> public class ConfigurationJdbcStoreFileCacheExample {
>    public static void main(String[] args) throws InterruptedException, IOException, SQLException {
>       EmbeddedCacheManager cacheManager = new DefaultCacheManager("cache-store.xml");
>       ExecutorService executorService = Executors.newFixedThreadPool(10);
>       try {
>          Cache<String, String> cache = cacheManager.getCache("myCache");
>          List<Future<String>> keys = new ArrayList<>();
>          for (int i = 0; i < 10; i++) {
>             keys.add(executorService.submit(() -> {
>                String key = UUID.randomUUID().toString();
>                try {
>                   cache.put(key, key);
>                   System.out.println("Done: " + key);
>                } catch (Throwable e) {
>                   e.printStackTrace();
>                }
>                return key;
>             }));
>          }
>          TimeUnit.SECONDS.sleep(120);
>          RemoteCacheManager remoteCacheManager = new RemoteCacheManager(new ConfigurationBuilder()
>                .addServer()
>                .host("localhost")
>                .port(11222)
>                .build());
>          RemoteCache<String, String> remoteCache =
>                remoteCacheManager.administration().getOrCreateCache("default", (String) null);
>          keys.forEach(f -> {
>             try {
>                String key = f.get();
>                Assert.assertNotNull(remoteCache.get(key));
>             } catch (InterruptedException e) {
>                throw new IllegalStateException(e);
>             } catch (ExecutionException e) {
>                throw new IllegalStateException(e);
>             }
>          });
>       } finally {
>          cacheManager.stop();
>          executorService.shutdownNow();
>       }
>    }
> }
> {code}
> Configuration
> {code:xml}
> <?xml version="1.0" ?>
> <infinispan>
>     <jgroups>
>         <stack-file name="external-file" path="default-jgroups-tcp.xml"/>
>     </jgroups>
>     <cache-container name="myCacheContainer" default-cache="myCache" statistics="true">
>         <transport cluster="WeatherApp" stack="external-file" />
>         <distributed-cache owners="2" mode="SYNC" remote-timeout="15000" name="myCache">
>             <transaction mode="NONE"/>
>             <persistence availability-interval="1000" connection-attempts="5" connection-interval="1000">
>                 <remote-store cache="default" raw-values="true">
>                     <remote-server host="localhost" port="11222" />
>                     <write-behind modification-queue-size="100" thread-pool-size="20" fail-silently="true"/>
>                 </remote-store>
>             </persistence>
>         </distributed-cache>
>     </cache-container>
> </infinispan>
> {code}



--
This message was sent by Atlassian Jira
(v7.12.1#712002)


More information about the infinispan-issues mailing list