https://github.com/infinispan/infinispan/commit/2d299745df1ce83c23ddc63e066ee820c184b8a7
 
<https://github.com/infinispan/infinispan/commit/2d299745df1ce83c23ddc63e066ee820c184b8a7>

> On 03 Apr 2015, at 12:38, Ales Justin <ales.jus...@gmail.com> wrote:
> 
> OK, found the culprit ...
> 
> It is this "weird" rule -- why not remove if the value class is the same?!
> 
> private boolean shouldRemove(Object value, Object previousValue) {
>    return !(value == null || previousValue == null) && 
> !value.getClass().equals(previousValue.getClass());
> }
> in
> 
> ---
> private void processPutKeyValueCommand(final PutKeyValueCommand command, 
> final InvocationContext ctx, final Object previousValue, TransactionContext 
> transactionContext) {
>    final boolean usingSkipIndexCleanupFlag = usingSkipIndexCleanup(command);
>    //whatever the new type, we might still need to cleanup for the previous 
> value (and schedule removal first!)
>    Object value = extractValue(command.getValue());
>    if (!usingSkipIndexCleanupFlag && updateKnownTypesIfNeeded(previousValue) 
> && shouldRemove(value, previousValue)) {
>       if (shouldModifyIndexes(command, ctx)) {
>          transactionContext = transactionContext == null ? 
> makeTransactionalEventContext() : transactionContext;
>          removeFromIndexes(previousValue, extractValue(command.getKey()), 
> transactionContext);
> 
> ---
> 
> -Ales
> 
>> On 03 Apr 2015, at 12:18, Ales Justin <ales.jus...@gmail.com 
>> <mailto:ales.jus...@gmail.com>> wrote:
>> 
>> I think the problem is in our SearchWorkCreator, and how HS doesn't provide 
>> old value when doing update (while doing delete).
>> 
>> * 
>> https://github.com/capedwarf/capedwarf-blue/blob/master/datastore/src/main/java/org/jboss/capedwarf/datastore/CapedwarfSearchWorkCreator.java
>>  
>> <https://github.com/capedwarf/capedwarf-blue/blob/master/datastore/src/main/java/org/jboss/capedwarf/datastore/CapedwarfSearchWorkCreator.java>
>> 
>> We "explode" original value with multiple "similar" values -- due to how 
>> projections and indexing works in GAE.
>> But since we don't get old value, we cannot fully re-construct previous 
>> "similar" values.
>> 
>> This used to work.
>> What changed in HS?
>> 
>> Or how to get old value to do proper delete?
>> e.g.
>> Grabbing the old value from cache (is it really still there? the old one 
>> that is ...), 
>> and creating proper DELETE manually, where I can then change UPDATE to ADD.
>> 
>> -Ales
>> 
>>> On 02 Apr 2015, at 21:00, Ales Justin <ales.jus...@gmail.com 
>>> <mailto:ales.jus...@gmail.com>> wrote:
>>> 
>>> When debugging, I see this -- it get "bbb" twice (old and new, where I 
>>> would actually expect stale "ccc"):
>>> 
>>> results = {java.util.ArrayList@17380}  size = 3
>>>  0 = {java.lang.Object[3]@17384} 
>>>   0 = {com.google.appengine.api.datastore.Key@17395} "test(1)"
>>>   1 = {java.lang.String@17396} "#Thu Apr 02 20:53:33 CEST 
>>> 2015\nprop=STRING\n"
>>>   2 = {java.lang.String@17397} "040:aaa"
>>>  1 = {java.lang.Object[3]@17385} 
>>>   0 = {com.google.appengine.api.datastore.Key@17391} "test(1)"
>>>   1 = {java.lang.String@17392} "#Thu Apr 02 20:51:24 CEST 
>>> 2015\nprop=STRING\n"
>>>   2 = {java.lang.String@17393} "040:bbb"
>>>  2 = {java.lang.Object[3]@17386} 
>>>   0 = {com.google.appengine.api.datastore.Key@17387} "test(1)"
>>>   1 = {java.lang.String@17388} "#Thu Apr 02 20:53:33 CEST 
>>> 2015\nprop=STRING\n"
>>>   2 = {java.lang.String@17389} "040:bbb"
>>> 
>>> 
>>> But still no idea on why dup "bbb" is there ...
>>> 
>>> -Ales
>>> 
>>>> On 01 Apr 2015, at 11:59, Ales Justin <ales.jus...@gmail.com 
>>>> <mailto:ales.jus...@gmail.com>> wrote:
>>>> 
>>>> Did entity updating changed in HS5 / Lucene4?
>>>> (aka Document updating)
>>>> 
>>>> Since this used to work for us (with HS4, Lucene3):
>>>> 
>>>> ---
>>>> @Test
>>>> public void testProjectionQueriesHandleEntityModificationProperly() throws 
>>>> Exception {
>>>>     Entity e = createEntity("test", 1)
>>>>         .withProperty("prop", Arrays.asList("aaa", "bbb", "ccc"))
>>>>         .store();
>>>> 
>>>>     Query query = new Query("test")
>>>>         .addProjection(new PropertyProjection("prop", String.class))
>>>>         .addSort("prop");
>>>> 
>>>>     assertEquals(3, service.prepare(query).asList(withDefaults()).size());
>>>> 
>>>>     e = createEntity(e.getKey())
>>>>         .withProperty("prop", Arrays.asList("aaa", "bbb"))
>>>>         .store();
>>>> 
>>>>     assertEquals(2, service.prepare(query).asList(withDefaults()).size());
>>>> 
>>>>     service.delete(e.getKey());
>>>> 
>>>>     assertEquals(0, service.prepare(query).asList(withDefaults()).size());
>>>> }
>>>> 
>>>> ---
>>>> 
>>>> Where we add each list/collection value under same field:
>>>> 
>>>> if (propertyValue instanceof Collection) {
>>>>     Collection collection = (Collection) propertyValue;
>>>>     for (Object element : collection) {
>>>>         if (PropertyUtils.isIndexedProperty(element)) {
>>>>             final Bridge inner = BridgeUtils.matchBridge(element);
>>>>             luceneOptions.addFieldToDocument(propertyName, 
>>>> inner.objectToString(element), document);
>>>>         }
>>>>     }
>>>> 
>>>> ---
>>>> 
>>>> As it looks like the update still keeps the old values around:
>>>> 
>>>> java.lang.AssertionError: expected:<2> but was:<3>
>>>>     at org.junit.Assert.fail(Assert.java:88)
>>>>     at org.junit.Assert.failNotEquals(Assert.java:743)
>>>>     at org.junit.Assert.assertEquals(Assert.java:118)
>>>>     at org.junit.Assert.assertEquals(Assert.java:555)
>>>>     at org.junit.Assert.assertEquals(Assert.java:542)
>>>>     at 
>>>> org.jboss.test.capedwarf.datastore.test.QueryOptimizationsTest.testProjectionQueriesHandleEntityModificationProperly(QueryOptimizationsTest.java:510)
>>>> 
>>>> ---
>>>> 
>>>> Any way to force / fix this?
>>>> 
>>>> -Ales
>>>> 
>>> 
>> 
> 

_______________________________________________
hibernate-dev mailing list
hibernate-dev@lists.jboss.org
https://lists.jboss.org/mailman/listinfo/hibernate-dev

Reply via email to