[infinispan-issues] [JBoss JIRA] (ISPN-2340) AsyncStore.remove() load the bucket from store inducing performance problem
Galder Zamarreño (JIRA)
jira-events at lists.jboss.org
Wed Sep 26 05:12:35 EDT 2012
[ https://issues.jboss.org/browse/ISPN-2340?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12721740#comment-12721740 ]
Galder Zamarreño commented on ISPN-2340:
----------------------------------------
Hmm, this might be leftover from a previous attempt to solve the issue. Removing the load() call causes no issues.
> AsyncStore.remove() load the bucket from store inducing performance problem
> ---------------------------------------------------------------------------
>
> Key: ISPN-2340
> URL: https://issues.jboss.org/browse/ISPN-2340
> Project: Infinispan
> Issue Type: Bug
> Components: Loaders and Stores
> Affects Versions: 5.2.0.Alpha4
> Reporter: Christophe Domas
> Assignee: Galder Zamarreño
> Fix For: 5.2.0.CR1
>
>
> I'm currently using infinispan-5.1.5 as a local persistent cache (like a persistent map) with no eviction and write-behind for maximum performance.
> I tried the 5.2.0alpha4 version and item processing mean decreased from 4ms to 60 ms.
> So I profiled the application and discovered that the Async.remove(Object) implementation differs from 5.2 to 5.1:
> +5.1+:
> {code}
> @Override
> public boolean remove(Object key) {
> enqueue(new Remove(key));
> return true;
> }
> {code}
> +5.2+:
> {code}
> @Override
> public boolean remove(Object key) {
> try {
> InternalCacheEntry load = load(key);
> if (load != null) {
> enqueue(new Remove(key));
> return true;
> }
> return false;
> } catch (CacheLoaderException e) {
> throw new CacheException("Could not load key/value entries from cacheloader", e);
> }
> }
> {code}
> So each time I remove an entry from my cache, I pay the cost of a bucket load from the store:
> {code}
> Thread [pool-9-thread-1] (Suspended)
> ExtendedRiverUnmarshaller(RiverUnmarshaller).doReadObject(boolean) line: 209
> ExtendedRiverUnmarshaller(AbstractObjectInput).readObject() line: 37
> JBossMarshaller(AbstractJBossMarshaller).objectFromObjectStream(ObjectInput) line: 163
> VersionAwareMarshaller.objectFromObjectStream(ObjectInput) line: 190
> CacheMarshaller(AbstractDelegatingMarshaller).objectFromObjectStream(ObjectInput) line: 79
> FileCacheStore.objectFromInputStreamInReentrantMode(InputStream) line: 433
> FileCacheStore.loadBucket(File) line: 306
> FileCacheStore.loadBucket(Integer) line: 280
> FileCacheStore(BucketBasedCacheStore).loadLockSafe(Object, Integer) line: 60
> FileCacheStore(BucketBasedCacheStore).loadLockSafe(Object, Object) line: 49
> FileCacheStore(LockSupportCacheStore<L>).load(Object) line: 142
> AsyncStore(AbstractDelegatingStore).load(Object) line: 120
> AsyncStore.remove(Object) line: 163
> CacheStoreInterceptor.visitRemoveCommand(InvocationContext, RemoveCommand) line: 221
> RemoveCommand.acceptVisitor(InvocationContext, Visitor) line: 72
> CacheLoaderInterceptor(CommandInterceptor).invokeNextInterceptor(InvocationContext, VisitableCommand) line: 118
> CacheLoaderInterceptor.visitRemoveCommand(InvocationContext, RemoveCommand) line: 138
> RemoveCommand.acceptVisitor(InvocationContext, Visitor) line: 72
> EntryWrappingInterceptor(CommandInterceptor).invokeNextInterceptor(InvocationContext, VisitableCommand) line: 118
> EntryWrappingInterceptor.invokeNextAndApplyChanges(InvocationContext, FlagAffectedCommand) line: 211
> EntryWrappingInterceptor.visitRemoveCommand(InvocationContext, RemoveCommand) line: 161
> RemoveCommand.acceptVisitor(InvocationContext, Visitor) line: 72
> NonTransactionalLockingInterceptor(CommandInterceptor).invokeNextInterceptor(InvocationContext, VisitableCommand) line: 118
> NonTransactionalLockingInterceptor.visitRemoveCommand(InvocationContext, RemoveCommand) line: 104
> RemoveCommand.acceptVisitor(InvocationContext, Visitor) line: 72
> NotificationInterceptor(CommandInterceptor).invokeNextInterceptor(InvocationContext, VisitableCommand) line: 118
> NotificationInterceptor(CommandInterceptor).handleDefault(InvocationContext, VisitableCommand) line: 132
> NotificationInterceptor(AbstractVisitor).visitRemoveCommand(InvocationContext, RemoveCommand) line: 68
> RemoveCommand.acceptVisitor(InvocationContext, Visitor) line: 72
> IsMarshallableInterceptor(CommandInterceptor).invokeNextInterceptor(InvocationContext, VisitableCommand) line: 118
> IsMarshallableInterceptor(CommandInterceptor).handleDefault(InvocationContext, VisitableCommand) line: 132
> IsMarshallableInterceptor(AbstractVisitor).visitRemoveCommand(InvocationContext, RemoveCommand) line: 68
> IsMarshallableInterceptor.visitRemoveCommand(InvocationContext, RemoveCommand) line: 125
> RemoveCommand.acceptVisitor(InvocationContext, Visitor) line: 72
> InvocationContextInterceptor(CommandInterceptor).invokeNextInterceptor(InvocationContext, VisitableCommand) line: 118
> InvocationContextInterceptor.handleAll(InvocationContext, VisitableCommand) line: 129
> InvocationContextInterceptor.handleDefault(InvocationContext, VisitableCommand) line: 93
> InvocationContextInterceptor(AbstractVisitor).visitRemoveCommand(InvocationContext, RemoveCommand) line: 68
> RemoveCommand.acceptVisitor(InvocationContext, Visitor) line: 72
> InterceptorChain.invoke(InvocationContext, VisitableCommand) line: 347
> CacheImpl<K,V>.executeCommandAndCommitIfNeeded(InvocationContext, VisitableCommand) line: 999
> CacheImpl<K,V>.remove(Object, EnumSet<Flag>, ClassLoader) line: 290
> DecoratedCache<K,V>.remove(Object) line: 324
> CacheBidiMap<K,V>(AbstractDualBidiMap<K,V>).remove(Object) line: 199
> OrderCache.removePendingByClientId(String) line: 168
> OrderEventCacheManager(EventCacheManager).receiveAck(OrderId) line: 166
> OrderEventCacheManager(EventCacheManager).cacheEventNotification(IamapiEvent, OrderId) line: 101
> OrderMarketFixService.onOrderEvent(OrderEvent) line: 88
> OrderEventDispatcher.fireEvent(OrderEvent) line: 52
> OrderEventDispatcher.run() line: 67
> ThreadPoolExecutor.runWorker(ThreadPoolExecutor$Worker) line: 1110
> ThreadPoolExecutor$Worker.run() line: 603
> Thread.run() line: 722
> {code}
> My config file is:
> {code}
> <default>
> <loaders passivation="false" preload="true" shared="false">
> <loader class="org.infinispan.loaders.file.FileCacheStore">
> <properties>
> <property name="location" value="cache" />
> <property name="fsyncMode" value="perWrite" />
> </properties>
> <async enabled="true" />
> </loader>
> </loaders>
> <expiration reaperEnabled="false" />
> </default>
> {code}
> (I use perWrite for fsyncMode because we reached linux open files ulimit maximum)
> We cannot consider that as a bug, but this performance problem is a show-stopper for us to upgrade to 5.2.
> Best regards,
> Christophe
--
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