In our 50/50 read/write KV throughput tests that use collections, we have been seeing very large regressions with LCB 3.2.3 and also LCB 3.2.4. For example: http://showfast.sc.couchbase.com/#/runs/kv_max_ops_balanced_512_1000s_1000c_ares/7.1.0-1695
Some testing confirms that it is a regression introduced with LCB 3.2.0, and is different to the regression that led to CCBC-1515 (which was fixed in LCB 3.2.4). The following three runs demonstrate this:
|LCB Version||Throughput||Jenkins build|
It would appear that the issue is similar to that in CCBC-1515, wherein we are using std::stringstream somewhat unnecessarily. This time it looks like the culprit is in collection_qualifier.hh:
Changing the construction of spec_ to use simple string appending instead of a stringstream would help, given that the collection_qualifier is used for every KV operation when using collections. This quickbench link demonstrates that it would be worth doing this:
I fully understand this is something I should have found when investigating CCBC-1515, so I apologise that this can now only be fixed for LCB 3.2.5.