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