Skip to content

commit into RT table with double buffer cause wrong stats #4066

Description

@tomatolog

Bug Description:

commits into RT table large bulk of data that has multiple replaces \ documents with the same id and cause save of multiple disk chunks make word stats in some disk chunks inaccurate. That also causes differences between call keywords and matching weights.

The difference from the reference at the single node is hard to debug. However if there is a cluster with multiple nodes and commits goes into single node (node2 for example) even after commits are finished all nodes returns different stats for multiple terms

mysql -h 127.0.0.1 -P 17306 -e "select count(*) from test where match('am'); show meta"
|     7845 |
| keyword[0]     | am    |
| docs[0]        | 7876  |
| hits[0]        | 8538  |

mysql -h 127.0.0.1 -P 17406 -e "select count(*) from test where match('am'); show meta"
|     7845 |
| keyword[0]     | am    |
| docs[0]        | 7879  |
| hits[0]        | 8542  |

mysql -h 127.0.0.1 -P 17506 -e "select count(*) from test where match('am'); show meta"
|     7845 |
| keyword[0]     | am    |
| docs[0]        | 7878  |
| hits[0]        | 8541  |

even result sets data are the same returned by the select query the same difference and for call keywords. Dump of the disk chunk dictionary also shows the same difference

indextool -c n1.conf --dumpdict n{1,2,3}/test/test.11.spi
--- n1
keyword,docs,hits,offset
am,7876,8538,507207
--- n2
am,7879,8542,507347
--- n3
am,7878,8541,507335

Related data to reproduce case located at ~/bin/rpl/ref-stat/case_couble_buf.zip.

  • start 3 daemons
~/build/m_reld/src/searchd -c node1.conf
~/build/m_reld/src/searchd -c node2.conf
~/build/m_reld/src/searchd -c node3.conf
  • post initial batch of data mysql -h0 -P 32106 < test1k.sql
  • run the script bash load.sh that in loop posts data in parallel into node2 then after posting check for the call keywords output and md5sum of spi on all nodes
  • script got stopped on any spi file difference

Manticore Search Version:

master

Operating System Version:

linux

Have you tried the latest development version?

Yes

Internal Checklist:

To be completed by the assignee. Check off tasks that have been completed or are not applicable.

Details
  • Implementation completed
  • Tests developed
  • Documentation updated
  • Documentation reviewed

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Labels

Type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions