On 9-4-2017 16:07, Vlad Khorsun wrote:
> 09.04.2017 13:00, Mark Rotteveel wrote:
>> On 2-4-2017 15:23, Vlad Khorsun wrote:
>>> 02.04.2017 14:59, Mark Rotteveel wrote:
> ...
>>>> Any thoughts or ideas on this, or is it better if I just create a bug
>>>> report?
>>>
>>>     Ideally, reproducible test case needed. As simple, as possible. Also, we
>>> could log every packet related to events on server side.
>>
>> I have built a sample application that reproduces it a little bit more
>> consistently (although it still occasionally succeeds without a
>> mismatch).
>
>    Thanks. I downloaded and run it. Note, i need to change WireCrypt setting 
> to
> Enabled to make it work, but this is not so important :)

Well, that is a general Jaybird requirement ;)

>    It is almost impossible to see the mismatch at my host. Only way to see it
> once in a few runs is to set 64 threads and 5000 inserts per thread. Ok, it
> is reproduced, but...

Are you using SuperServer?

>    To verify what i see i run FlameRobin and register same two events for
> monitoring. When test failed i saved output of FlameRobin into a text file
> and convert it into LibreOffice Calc sheet. Then i evaluate sum of every
> event counters and check it for mismatch - they are equal. Also, every pair
> of "TEST_EVENT_A" and "TEST_EVENT_B" have the same number of events - it looks
> like
>
> 16:50:54  Monitoring started
> 16:50:54  TEST_EVENT_A (170)
> 16:50:54  TEST_EVENT_B (170)
> 16:50:54  TEST_EVENT_A (195)
> 16:50:54  TEST_EVENT_B (195)
> 16:50:54  TEST_EVENT_A (227)
> 16:50:54  TEST_EVENT_B (227)
> 16:50:55  TEST_EVENT_A (222)
> 16:50:55  TEST_EVENT_B (222)
>
> and so on
>
>    I.e. test app shows:
>
> Using thread count 64, number of inserts per thread 5000
> Inserts done 320000, matches expected 320000: true
> Event EVENT_NAME_A, expected 320000, actual 320000: true
> Event EVENT_NAME_B, expected 320000, actual 271541: false <================
>
> while FlameRobin received 301782 of events "TEST_EVENT_A" and same number of
> "TEST_EVENT_B". Yes, it is not 320000 as one could expect - it is because i 
> need
> some time to connect and to start event monitoring. I can't do it in advance 
> as
> test applications recreates database and fails on start if there is attachment
> exists. Anyway, 301782 is much more than 271541.
>
>
>    Then i repeat the test and results is:
>
> Using thread count 64, number of inserts per thread 5000
> Inserts done 320000, matches expected 320000: true
> Event EVENT_NAME_A, expected 320000, actual 133394: false <================
> Event EVENT_NAME_B, expected 320000, actual 320000: true
>
> while FlameRobin received 312263 events "TEST_EVENT_A" and 312263 events
> "TEST_EVENT_B".
>
> I can send you sheet with data if you wish.

Interesting. Looking through the flame robin code 
(https://github.com/mariuz/flamerobin/blob/master/src/ibpp/events.cpp), 
it looks like it queues all events it is interested in in one 
queue-event call, while Jaybird registers them individually.

This could explain the difference in behavior, maybe it works correctly 
because there is only a single event buffer with two events, instead of 
two event buffers with each one event.

> PS Every time test app show mismatsh i see that one event have expected 
> counter.
> I.e. there was no case when both counters was wrong.

That is what I usually see as well, because the notification of an event 
will re-queue that event.

Mark
-- 
Mark Rotteveel

------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
Firebird-Devel mailing list, web interface at 
https://lists.sourceforge.net/lists/listinfo/firebird-devel

Reply via email to