[Glass] Help understanding a RcReadSet commit conflict
Dale Henrichs via Glass
glass at lists.gemtalksystems.com
Fri Jun 17 12:20:11 PDT 2016
Okay ... I'm interested in the TransactionError that is not a
TransactionError ... that is a bit surprising to me and I'd be
interested in addtional details ... don't think that it's related to the
current problem, but who knows :)
What does the #commitConflicts: method do?
So far I don't see anything suspicious ...
Is this problem reproducable?
It may be time to record a stack in the log and perhaps take a look at
System class>>_commitPrintingDiagnostics for logging the commit
conflicts to the log as well ... The code in System
class>>_commitPrintingDiagnostics implies that not all fields are in the
transactionConflicts dictionary are set, so that may be a red herring.
Dale
On 6/17/16 11:56 AM, Mariano Martinez Peck wrote:
>
> On Fri, Jun 17, 2016 at 3:17 PM, Dale Henrichs via Glass
> <glass at lists.gemtalksystems.com
> <mailto:glass at lists.gemtalksystems.com>> wrote:
>
> Mariano,
>
>
> It has been awhile since I've done any reduced conflict work, so
> the details of the reduced conflict mechanism need to be paged
> back in ... with a bit of poking around I believe that the
> RcReadSet is not involved directly in the actual conflict,
> especially since the #Write-Write set is empty ... from the
> information I've seen here, there shouldn't have been a conflict ...
>
>
> That was the part I didn't understand. As the rest of the keys were
> empty and the result was #failure , I couldn't understand why
> RcReadSet (the only none empty key) would make the commit to fail....
>
> Is there a reason that you are not showing the full set of fields
> in a conflictDictionary? I would expect to see fields for each of
> the following (from System class>>transactionConflicts):
>
> No. Actually, I pasted all I can see from that dictionary. So maybe
> the problem is how I am capturing and persisting this?
> Here [1] you can see how I do my best to capture the transaction
> conflicts for later analysis. Note that since this is a background
> process I cannot immediatly debug it. That's why I try to persist the
> commit conflicts together with my persistent background instance
> before I loose it
>
> Key Conflicts
> Read-Write StrongReadSet and WriteSetUnion conflicts.
> Write-Write WriteSet and WriteSetUnion conflicts.
> Write-Dependency WriteSet and DependencyChangeSetUnion conflicts.
> Write-WriteLock WriteSet and WriteLockSet conflicts.
> Write-ReadLock WriteSet and ReadLockSet conflicts.
> Rc-Write-Write Logical write-write conflict on reduced
> conflict object.
> WriteWrite_minusRcReadSet (WriteSet and WriteSetUnion conflicts)
> - RcReadSet)
>
> Both the Write-Dependency and Rc-Write-Write fields would have
> useful information if they weren't empty ...
>
> Barring additional information I suppose it might be useful to see
> the error message and any other information from the log file
> (perhaps a stack?)
>
>
> I suspect I am capturing/persisting wrongly the commit conflicts.
>
>
> Thanks in advance for any help.
>
>
> [1] http://ws.stfx.eu/JRWK7K047PUO
>
>
> Dale
>
> On 6/16/16 7:54 AM, Mariano Martinez Peck via Glass wrote:
>> Hi,
>>
>> My code that runs background jobs on a separate gem (based on
>> Otto's code...similar to ServiceVM), stores the commit conflict
>> information inside the persistent background process instance for
>> post commit conflict analysis.
>>
>> I have a job that failed today and with the following commit
>> conflict info:
>>
>> Inspect aFaBackgroundProcess/aSymbolDictionary(
>> #'WriteWrite_minusRcReadSet'->anArray( aDictionary( )),
>> #'commitResult'->#'failure', #'RcReadSet'->anArray(
>> aRcCollisionBucket( aRcKeyValueDictionary( ,........)
>> --------------------
>> . -> aSymbolDictionary(
>> #'WriteWrite_minusRcReadSet'->anArray( aDictionary( )),
>> #'commitResult'->#'failure', #'RcReadSet'->anArray( aRcCollisionB...
>> .. -> aFaBackgroundProcess
>> (class)@ -> SymbolDictionary
>> (oop)@ -> 15059544321
>> (committed)@ -> true
>> (notTranlogged)@ -> nil
>> 1@ -> #'commitResult'->#'failure'
>> 2@ -> #'RcReadSet'->anArray( aRcCollisionBucket(
>> aRcKeyValueDictionary(
>> 'siteDB-debris-gemstone'->aFaGemStoneDataStore)),
>> aRcCollisionBucket( aRcK...
>> 3@ -> #'Write-Write'->anArray( aDictionary( ))
>> 4@ -> #'WriteWrite_minusRcReadSet'->anArray(
>> aDictionary( ))
>>
>>
>> So... commitResult is #failure and the only thing set up is
>> RcReadSet. I have searched in the programming guides for
>> RcReadSet and I found nothing. I am inspecting the array of it,
>> but it is of size 973...which makes it impossible to understand
>> what it really caused the conflict.
>>
>> Is there any tip on how can analyze this better?
>>
>> Thanks,
>>
>>
>> --
>> Mariano
>> http://marianopeck.wordpress.com
>>
>>
>> _______________________________________________
>> Glass mailing list
>> Glass at lists.gemtalksystems.com
>> <mailto:Glass at lists.gemtalksystems.com>
>> http://lists.gemtalksystems.com/mailman/listinfo/glass
>
>
> _______________________________________________
> Glass mailing list
> Glass at lists.gemtalksystems.com <mailto:Glass at lists.gemtalksystems.com>
> http://lists.gemtalksystems.com/mailman/listinfo/glass
>
>
>
>
> --
> Mariano
> http://marianopeck.wordpress.com
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.gemtalksystems.com/mailman/private/glass/attachments/20160617/5099ec85/attachment-0001.html>
More information about the Glass
mailing list