[infinispan-issues] [JBoss JIRA] Updated: (ISPN-1179) Preloading the cache leads to duplicate (multiple) results from queries
Sanne Grinovero (JIRA)
jira-events at lists.jboss.org
Fri Jun 17 05:57:23 EDT 2011
[ https://issues.jboss.org/browse/ISPN-1179?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Sanne Grinovero updated ISPN-1179:
----------------------------------
Fix Version/s: 5.0.0.CR6
(was: 5.0.0.CR7)
Git Pull Request: https://github.com/infinispan/infinispan/pull/398 (was: https://github.com/infinispan/infinispan/pull/398)
> Preloading the cache leads to duplicate (multiple) results from queries
> -----------------------------------------------------------------------
>
> Key: ISPN-1179
> URL: https://issues.jboss.org/browse/ISPN-1179
> Project: Infinispan
> Issue Type: Bug
> Components: Loaders and Stores, Querying
> Affects Versions: 5.0.0.CR3
> Reporter: juergen roberg
> Assignee: Sanne Grinovero
> Fix For: 5.0.0.CR6
>
>
> Duplicate (multiple) results from queries.
> We are using Infinispan 5.0.0.CR3 and our cache has a JdbcStringBasedCacheStore loader with preload="true".
>
> When reaching the QueryInterceptor (see StackTrace below) entry.isCreated() returns true.
>
> ReadCommittedEntry(a44130){
> key=0eebcb5b-d581-49ec-8e49-565a8f134b4c,
> value={objectID=0eebcb5b-d581-49ec-8e49-565a8f134b4c, street=Street 66},
> oldValue=null,
> isCreated=true,
> isChanged=true,
> isRemoved=false,
> isValid=true
> }
>
> so the QueryInterceptor adds the entry to the index again instead of just updating the index.
>
> public Object visitPutKeyValueCommand(InvocationContext ctx, PutKeyValueCommand command) throws Throwable {
>
> // This method will get the put() calls on the cache and then send them into Lucene once it's successful.
> // do the actual put first.
> Object toReturn = invokeNextInterceptor(ctx, command);
>
> if (shouldModifyIndexes(ctx)) {
> // First making a check to see if the key is already in the cache or not. If it isn't we can add the key no problem,
> // otherwise we need to be updating the indexes as opposed to simply adding to the indexes.
> Object key = command.getKey();
> Object value = extractValue(command.getValue());
> updateKnownTypesIfNeeded( value );
> CacheEntry entry = ctx.lookupEntry(key);
>
> // New entry so we will add it to the indexes.
> if(entry.isCreated()) {
> log.debug("Entry is created");
> >>>> addToIndexes(value, extractValue(key));
> }
> else{
> // This means that the entry is just modified so we need to update the indexes and not add to them.
> log.debug("Entry is changed");
> updateIndexes(value, extractValue(key));
> }
> }
> return toReturn;
> }
>
>
> Thread [main] (Suspended)
> LocalQueryInterceptor(QueryInterceptor).visitPutKeyValueCommand(InvocationContext, PutKeyValueCommand) line: 98
> PutKeyValueCommand.acceptVisitor(InvocationContext, Visitor) line: 77
> LockingInterceptor(CommandInterceptor).invokeNextInterceptor(InvocationContext, VisitableCommand) line: 119
> LockingInterceptor.visitPutKeyValueCommand(InvocationContext, PutKeyValueCommand) line: 294
> PutKeyValueCommand.acceptVisitor(InvocationContext, Visitor) line: 77
> CacheStoreInterceptor(CommandInterceptor).invokeNextInterceptor(InvocationContext, VisitableCommand) line: 119
> CacheStoreInterceptor.visitPutKeyValueCommand(InvocationContext, PutKeyValueCommand) line: 204
> PutKeyValueCommand.acceptVisitor(InvocationContext, Visitor) line: 77
> CacheLoaderInterceptor(CommandInterceptor).invokeNextInterceptor(InvocationContext, VisitableCommand) line: 119
> CacheLoaderInterceptor.visitPutKeyValueCommand(InvocationContext, PutKeyValueCommand) line: 82
> PutKeyValueCommand.acceptVisitor(InvocationContext, Visitor) line: 77
> NotificationInterceptor(CommandInterceptor).invokeNextInterceptor(InvocationContext, VisitableCommand) line: 119
> NotificationInterceptor(CommandInterceptor).handleDefault(InvocationContext, VisitableCommand) line: 133
> NotificationInterceptor(AbstractVisitor).visitPutKeyValueCommand(InvocationContext, PutKeyValueCommand) line: 60
> PutKeyValueCommand.acceptVisitor(InvocationContext, Visitor) line: 77
> TxInterceptor(CommandInterceptor).invokeNextInterceptor(InvocationContext, VisitableCommand) line: 119
> TxInterceptor.enlistWriteAndInvokeNext(InvocationContext, WriteCommand) line: 204
> TxInterceptor.visitPutKeyValueCommand(InvocationContext, PutKeyValueCommand) line: 152
> PutKeyValueCommand.acceptVisitor(InvocationContext, Visitor) line: 77
> InvocationContextInterceptor(CommandInterceptor).invokeNextInterceptor(InvocationContext, VisitableCommand) line: 119
> InvocationContextInterceptor.handleAll(InvocationContext, VisitableCommand) line: 96
> InvocationContextInterceptor.handleDefault(InvocationContext, VisitableCommand) line: 63
> InvocationContextInterceptor(AbstractVisitor).visitPutKeyValueCommand(InvocationContext, PutKeyValueCommand) line: 60
> PutKeyValueCommand.acceptVisitor(InvocationContext, Visitor) line: 77
> InterceptorChain.invoke(InvocationContext, VisitableCommand) line: 274
> CacheDelegate<K,V>.put(K, V, long, TimeUnit, long, TimeUnit) line: 505
> CacheLoaderManagerImpl.preload() line: 160
> NativeMethodAccessorImpl.invoke0(Method, Object, Object[]) line: not available [native method]
> NativeMethodAccessorImpl.invoke(Object, Object[]) line: not available
> DelegatingMethodAccessorImpl.invoke(Object, Object[]) line: not available
> Method.invoke(Object, Object...) line: not available
> ReflectionUtil.invokeAccessibly(Object, Method, Object[]) line: 172
> AbstractComponentRegistry$PrioritizedMethod.invoke() line: 908
> ComponentRegistry(AbstractComponentRegistry).internalStart() line: 706
> ComponentRegistry(AbstractComponentRegistry).start() line: 608
> ComponentRegistry.start() line: 179
> CacheDelegate<K,V>.start() line: 362
> DefaultCacheManager.createCache(String) line: 548
> DefaultCacheManager.getCache(String) line: 445
> Main.main(String[]) line: 45
--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira
More information about the infinispan-issues
mailing list