[JBoss JIRA] (ISPN-4972) Two concurrent replaceWithVersions may both succeed
by RH Bugzilla Integration (JIRA)
[ https://issues.jboss.org/browse/ISPN-4972?page=com.atlassian.jira.plugin.... ]
RH Bugzilla Integration updated ISPN-4972:
------------------------------------------
Bugzilla Update: Perform
Bugzilla References: https://bugzilla.redhat.com/show_bug.cgi?id=1163103
> Two concurrent replaceWithVersions may both succeed
> ---------------------------------------------------
>
> Key: ISPN-4972
> URL: https://issues.jboss.org/browse/ISPN-4972
> Project: Infinispan
> Issue Type: Bug
> Components: Remote Protocols
> Affects Versions: 7.0.0.Final
> Reporter: Radim Vansa
>
> Cache contains entry {{K = V}}. Two concurrent threads, that execute:
> {code}
> long version = cache.getVersioned(K).getVersion();
> boolean succeeded = cache.replaceWithVersion(K, V, version);
> {code}
> Both of these threads can get {{succeeded = true}}.
> Reason:
> When the server receives the operation ReplaceIfUnmodified=replaceWithVersion, it retrieves the entry (key + value + metadata) from the cache and checks that the version stored (in metadata) is the same as the version in the request. If so, it creates conditional ReplaceCommand which contains the value (retrieved atomically with version from the cache) and executes this one. Therefore, as the value is in both requests identical (and is not changed by the replace), two concurrent ReplaceCommands can both succeed, and this value is returned to the HotRod client.
--
This message was sent by Atlassian JIRA
(v6.3.8#6338)
11 years, 5 months
[JBoss JIRA] (ISPN-4972) Two concurrent replaceWithVersions may both succeed
by Radim Vansa (JIRA)
Radim Vansa created ISPN-4972:
---------------------------------
Summary: Two concurrent replaceWithVersions may both succeed
Key: ISPN-4972
URL: https://issues.jboss.org/browse/ISPN-4972
Project: Infinispan
Issue Type: Bug
Components: Remote Protocols
Affects Versions: 7.0.0.Final
Reporter: Radim Vansa
Cache contains entry {{K = V}}. Two concurrent threads, that execute:
{code}
long version = cache.getVersioned(K).getVersion();
boolean succeeded = cache.replaceWithVersion(K, V, version);
{code}
Both of these threads can get {{succeeded = true}}.
Reason:
When the server receives the operation ReplaceIfUnmodified=replaceWithVersion, it retrieves the entry (key + value + metadata) from the cache and checks that the version stored (in metadata) is the same as the version in the request. If so, it creates conditional ReplaceCommand which contains the value (retrieved atomically with version from the cache) and executes this one. Therefore, as the value is in both requests identical (and is not changed by the replace), two concurrent ReplaceCommands can both succeed, and this value is returned to the HotRod client.
--
This message was sent by Atlassian JIRA
(v6.3.8#6338)
11 years, 5 months
[JBoss JIRA] (ISPN-4837) @CacheEntryActivated events received for keys not matching KeyFilter
by RH Bugzilla Integration (JIRA)
[ https://issues.jboss.org/browse/ISPN-4837?page=com.atlassian.jira.plugin.... ]
RH Bugzilla Integration commented on ISPN-4837:
-----------------------------------------------
Martin Gencur <mgencur(a)redhat.com> changed the Status of [bug 1155107|https://bugzilla.redhat.com/show_bug.cgi?id=1155107] from ON_QA to VERIFIED
> @CacheEntryActivated events received for keys not matching KeyFilter
> --------------------------------------------------------------------
>
> Key: ISPN-4837
> URL: https://issues.jboss.org/browse/ISPN-4837
> Project: Infinispan
> Issue Type: Bug
> Components: Listeners
> Affects Versions: 7.0.0.CR1
> Reporter: Paul Ferraro
> Assignee: William Burns
> Priority: Critical
> Fix For: 7.0.0.CR2
>
>
> I have a local-mode Cache<Object, ?>, for which I register a cache listener using the following KeyFilter:
> {noformat}
> class MyFIlter implements KeyFilter<Object> {
> @Override
> public boolean accept(Object key) {
> return key instanceof String;
> }
> }
> {noformat}
> However, my listener method still receives events for keys that does not match the filter with which my listener was registered.
> e.g.
> {noformat}
> @CacheEntryActivated
> public void activated(CacheEntryActivatedEvent<String, ?> event) {
> String id = event.getKey(); // Throws a ClassCastException
> // ...
> }
> {noformat}
> I have not validated which other event types might exhibit the same issue.
> Since this is a behavior regression, I'm filing this as critical.
--
This message was sent by Atlassian JIRA
(v6.3.8#6338)
11 years, 5 months
[JBoss JIRA] (ISPN-4971) CDI uses default EmbeddedCacheManager producer from infinispan-cdi.jar instead of custom one
by RH Bugzilla Integration (JIRA)
[ https://issues.jboss.org/browse/ISPN-4971?page=com.atlassian.jira.plugin.... ]
RH Bugzilla Integration updated ISPN-4971:
------------------------------------------
Bugzilla Update: Perform
Bugzilla References: https://bugzilla.redhat.com/show_bug.cgi?id=1163040
> CDI uses default EmbeddedCacheManager producer from infinispan-cdi.jar instead of custom one
> --------------------------------------------------------------------------------------------
>
> Key: ISPN-4971
> URL: https://issues.jboss.org/browse/ISPN-4971
> Project: Infinispan
> Issue Type: Bug
> Components: CDI Integration
> Affects Versions: 7.0.0.CR1, 7.0.0.CR2, 7.0.0.Final
> Reporter: Vitalii Chepeliuk
> Assignee: Sebastian Łaskawiec
>
> Custom producer has allowDuplicateDomains set to true look following code
> {code}
> public class EmbeddedCacheManagerProducer {
> /**
> * Produces the default embedded cache manager.
> *
> * @param providedDefaultEmbeddedCacheManager the provided default embedded cache manager.
> * @param defaultConfiguration the default configuration produced by the {@link EmbeddedCacheManagerProducer}.
> * @return the default embedded cache manager used by the application.
> */
> @Produces
> @ApplicationScoped
> public EmbeddedCacheManager getDefaultEmbeddedCacheManager(@OverrideDefault Instance<EmbeddedCacheManager> providedDefaultEmbeddedCacheManager, Configuration defaultConfiguration) {
> GlobalConfiguration globalConfiguration = new GlobalConfigurationBuilder().globalJmxStatistics().allowDuplicateDomains(true).build();
> ConfigurationBuilder builder = new ConfigurationBuilder();
> builder.read(defaultConfiguration);
> return new DefaultCacheManager(globalConfiguration, builder.build());
> }
> /**
> * Stops the default embedded cache manager when the corresponding instance is released.
> *
> * @param defaultEmbeddedCacheManager the default embedded cache manager.
> */
> private void stopCacheManager(@Disposes EmbeddedCacheManager defaultEmbeddedCacheManager) {
> defaultEmbeddedCacheManager.stop();
> }
> }
> {code}
> And default ones from infinispan-cdi.jar is
> {code}
> public class DefaultEmbeddedCacheManagerProducer {
> private static final Log log = LogFactory.getLog(DefaultEmbeddedCacheManagerProducer.class, Log.class);
> /**
> * Produces the default embedded cache manager.
> *
> * @param providedDefaultEmbeddedCacheManager the provided default embedded cache manager.
> * @param defaultConfiguration the default configuration produced by the {@link DefaultEmbeddedCacheConfigurationProducer}.
> * @return the default embedded cache manager used by the application.
> */
> @Produces
> @ApplicationScoped
> @DefaultBean(EmbeddedCacheManager.class)
> public EmbeddedCacheManager getDefaultEmbeddedCacheManager(@OverrideDefault Instance<EmbeddedCacheManager> providedDefaultEmbeddedCacheManager, Configuration defaultConfiguration) {
> if (!providedDefaultEmbeddedCacheManager.isUnsatisfied()) {
> log.tracef("Default embedded cache manager overridden by '%s'", providedDefaultEmbeddedCacheManager);
> return providedDefaultEmbeddedCacheManager.get();
> }
> return new DefaultCacheManager(defaultConfiguration);
> }
> /**
> * Stops the default embedded cache manager when the corresponding instance is released.
> *
> * @param defaultEmbeddedCacheManager the default embedded cache manager.
> */
> private void stopCacheManager(@Disposes EmbeddedCacheManager defaultEmbeddedCacheManager) {
> defaultEmbeddedCacheManager.stop();
> }
> }
> {code}
> When tests are deployed to APP server then following ERROR occurs
> 10:19:58,494 ERROR [org.infinispan.jmx.JmxUtil] (http-localhost.localdomain/127.0.0.1:8080-1) ISPN000034: There's already an cache manager instance registered under 'org.infinispan' JMX domain. If you want to allow multiple instances configured with same JMX domain enable 'allowDuplicateDomains' attribute in 'globalJmxStatistics' config element
> 10:19:58,526 ERROR [org.infinispan.jmx.JmxUtil] (http-localhost.localdomain/127.0.0.1:8080-1) ISPN000034: There's already an cache manager instance registered under 'org.infinispan' JMX domain. If you want to allow multiple instances configured with same JMX domain enable 'allowDuplicateDomains' attribute in 'globalJmxStatistics' config element
> 10:19:58,598 ERROR [org.infinispan.jmx.JmxUtil] (http-localhost.localdomain/127.0.0.1:8080-1) ISPN000034: There's already an cache manager instance registered under 'org.infinispan' JMX domain. If you want to allow multiple instances configured with same JMX domain enable 'allowDuplicateDomains' attribute in 'globalJmxStatistics' config element
> What means that out custom producer is sometimes not used and does not override default produced EmbeddedCacheManager
--
This message was sent by Atlassian JIRA
(v6.3.8#6338)
11 years, 5 months