)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":1000338,"name":"Abhi Dangeti","email":"abhinav@couchbase.com","username":"abhinavdangeti","avatars":[{"url":"https://www.gravatar.com/avatar/9007099855b1bf7d96e9c1a10bc9542e.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/9007099855b1bf7d96e9c1a10bc9542e.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/9007099855b1bf7d96e9c1a10bc9542e.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/9007099855b1bf7d96e9c1a10bc9542e.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"39e30c5a89ecc09c45d764fa787c8530363790d4","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":25,"id":"478c5e1f_b334e87f","updated":"2026-02-20 22:02:22.000000000","message":"@thejas.orkombu@couchbase.com We need to think through abou training proposal..\n\n- Are individual KV calls for every sample the best way to do this, no streaming support?\n- How big a spike in resource usage do we see by collecting the vectors here?\n- I\u0027m not so sure about batch building (even if it is unique across batch workers) by reconstructing all pre-trained vectors to retrain a bigger index.\n\nCan we evaluate GSI\u0027s approach here - where we build all the samples in-memory to train just one centroid index as opposed to batch building one .. which would be must faster.\n\nAll this store checkpoint effort, incremental training and restart from last checkpoint on crashes seems over engineered. This is a time when we don\u0027t expect any search load, so we\u0027re ok to live with redoing work on account of any crash.\n\nI think we ought to drop the recoverability idea to make things a LOT more simpler and just build an in-memory index like GSI does - we can talk to Deep on how GSI handles this situation with low memory quota.","commit_id":"1a5659653ce2ad03a6570b223870f26b5e26a032"},{"author":{"_account_id":1000338,"name":"Abhi Dangeti","email":"abhinav@couchbase.com","username":"abhinavdangeti","avatars":[{"url":"https://www.gravatar.com/avatar/9007099855b1bf7d96e9c1a10bc9542e.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/9007099855b1bf7d96e9c1a10bc9542e.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/9007099855b1bf7d96e9c1a10bc9542e.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/9007099855b1bf7d96e9c1a10bc9542e.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"20f68afba9e5d7a52edaf16282629ceb2916d0d9","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":25,"id":"744e3ade_39f61014","in_reply_to":"478c5e1f_b334e87f","updated":"2026-02-20 22:10:32.000000000","message":"So it seems we\u0027ll do `batch_workers * merge operations` to build the centroid index. Let\u0027s evaluate single batch worker vs multiple batch workers to see which is better in terms of memory usage, IO and compute (for vector reconstruction).","commit_id":"1a5659653ce2ad03a6570b223870f26b5e26a032"},{"author":{"_account_id":1004804,"name":"Thejas-bhat","email":"thejas.orkombu@couchbase.com","username":"Thejas-bhat","avatars":[{"url":"https://www.gravatar.com/avatar/287cbc76d9eb75d794779bc8ce9efb8b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/287cbc76d9eb75d794779bc8ce9efb8b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/287cbc76d9eb75d794779bc8ce9efb8b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/287cbc76d9eb75d794779bc8ce9efb8b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"e1a171b52230eda684c44fbbe21dac30cfa62eb9","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":25,"id":"bd1a9370_fe3b7814","in_reply_to":"744e3ade_39f61014","updated":"2026-02-20 22:46:51.000000000","message":"We will also need to do this experiment on higher dimensions and also during low memory situations.","commit_id":"1a5659653ce2ad03a6570b223870f26b5e26a032"},{"author":{"_account_id":1000338,"name":"Abhi Dangeti","email":"abhinav@couchbase.com","username":"abhinavdangeti","avatars":[{"url":"https://www.gravatar.com/avatar/9007099855b1bf7d96e9c1a10bc9542e.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/9007099855b1bf7d96e9c1a10bc9542e.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/9007099855b1bf7d96e9c1a10bc9542e.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/9007099855b1bf7d96e9c1a10bc9542e.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"421f41ffa96687ca5cf49bd6830562718e97f9ea","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":35,"id":"26099035_ed96a4f1","updated":"2026-03-27 21:31:14.000000000","message":"Unit tests catching other issues.","commit_id":"a9c5cbea31c72e2b3cfe480d7272b692b8856f2c"},{"author":{"_account_id":1000338,"name":"Abhi Dangeti","email":"abhinav@couchbase.com","username":"abhinavdangeti","avatars":[{"url":"https://www.gravatar.com/avatar/9007099855b1bf7d96e9c1a10bc9542e.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/9007099855b1bf7d96e9c1a10bc9542e.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/9007099855b1bf7d96e9c1a10bc9542e.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/9007099855b1bf7d96e9c1a10bc9542e.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"3c8d8a7438a6b9bbcadd74b8d69cb5eebfc3a211","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":41,"id":"bd72029e_ee2c4a34","updated":"2026-03-28 00:51:52.000000000","message":"@thejas.orkombu@couchbase.com what vector index optimizations will this currently work on - all of them?","commit_id":"a7f822fcc3549eca0089dfb40b687fe2f3e05e97"},{"author":{"_account_id":1004804,"name":"Thejas-bhat","email":"thejas.orkombu@couchbase.com","username":"Thejas-bhat","avatars":[{"url":"https://www.gravatar.com/avatar/287cbc76d9eb75d794779bc8ce9efb8b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/287cbc76d9eb75d794779bc8ce9efb8b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/287cbc76d9eb75d794779bc8ce9efb8b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/287cbc76d9eb75d794779bc8ce9efb8b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"6544728f0d455a0a4d59a551597977edac95a105","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":41,"id":"5dcdaa4e_84ac401b","in_reply_to":"bd72029e_ee2c4a34","updated":"2026-03-28 01:31:15.000000000","message":"yeah thats right","commit_id":"a7f822fcc3549eca0089dfb40b687fe2f3e05e97"}],"manifest.go":[{"author":{"_account_id":1000338,"name":"Abhi Dangeti","email":"abhinav@couchbase.com","username":"abhinavdangeti","avatars":[{"url":"https://www.gravatar.com/avatar/9007099855b1bf7d96e9c1a10bc9542e.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/9007099855b1bf7d96e9c1a10bc9542e.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/9007099855b1bf7d96e9c1a10bc9542e.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/9007099855b1bf7d96e9c1a10bc9542e.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"6e3c16cfb466d703ae92e24a715d46a96a3147d3","unresolved":true,"context_lines":[{"line_number":45,"context_line":"\tLimits      map[string]map[string]int `json:\"limits\"`"},{"line_number":46,"context_line":"}"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"func (s *Scope) GetCollectionUIDs(collectionNames []string) ([]uint64, error) {"},{"line_number":49,"context_line":"\tif len(collectionNames) \u003d\u003d 0 {"},{"line_number":50,"context_line":"\t\treturn []uint64{}, nil"},{"line_number":51,"context_line":"\t}"}],"source_content_type":"text/x-go","patch_set":28,"id":"5586ce38_361d63e8","line":48,"updated":"2026-02-25 21:15:56.000000000","message":"Can we not make this APIs and the one after into a single one, which returns ScopeUID and collectionUIDs given a scope and bucket name?","commit_id":"9b7b5092123cd4a91eb89333be321a89c7cc1ab9"},{"author":{"_account_id":1004804,"name":"Thejas-bhat","email":"thejas.orkombu@couchbase.com","username":"Thejas-bhat","avatars":[{"url":"https://www.gravatar.com/avatar/287cbc76d9eb75d794779bc8ce9efb8b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/287cbc76d9eb75d794779bc8ce9efb8b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/287cbc76d9eb75d794779bc8ce9efb8b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/287cbc76d9eb75d794779bc8ce9efb8b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"2461494be8fcab4c692cbcedc4379f5234777025","unresolved":false,"context_lines":[{"line_number":45,"context_line":"\tLimits      map[string]map[string]int `json:\"limits\"`"},{"line_number":46,"context_line":"}"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"func (s *Scope) GetCollectionUIDs(collectionNames []string) ([]uint64, error) {"},{"line_number":49,"context_line":"\tif len(collectionNames) \u003d\u003d 0 {"},{"line_number":50,"context_line":"\t\treturn []uint64{}, nil"},{"line_number":51,"context_line":"\t}"}],"source_content_type":"text/x-go","patch_set":28,"id":"1868b24b_486070ff","line":48,"in_reply_to":"5586ce38_361d63e8","updated":"2026-02-26 19:55:53.000000000","message":"Done","commit_id":"9b7b5092123cd4a91eb89333be321a89c7cc1ab9"},{"author":{"_account_id":1000338,"name":"Abhi Dangeti","email":"abhinav@couchbase.com","username":"abhinavdangeti","avatars":[{"url":"https://www.gravatar.com/avatar/9007099855b1bf7d96e9c1a10bc9542e.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/9007099855b1bf7d96e9c1a10bc9542e.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/9007099855b1bf7d96e9c1a10bc9542e.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/9007099855b1bf7d96e9c1a10bc9542e.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"6e3c16cfb466d703ae92e24a715d46a96a3147d3","unresolved":true,"context_lines":[{"line_number":75,"context_line":"\tScopes []Scope `json:\"scopes\"`"},{"line_number":76,"context_line":"}"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"func (m *Manifest) GetScope(scopeName string) *Scope {"},{"line_number":79,"context_line":"\tfor _, scope :\u003d range m.Scopes {"},{"line_number":80,"context_line":"\t\tif scope.Name \u003d\u003d scopeName {"},{"line_number":81,"context_line":"\t\t\treturn \u0026scope"}],"source_content_type":"text/x-go","patch_set":28,"id":"17fde040_c33ad4f3","line":78,"updated":"2026-02-25 21:15:56.000000000","message":"Is this over a given bucket? Can scope names not be duplicated across buckets?","commit_id":"9b7b5092123cd4a91eb89333be321a89c7cc1ab9"},{"author":{"_account_id":1004804,"name":"Thejas-bhat","email":"thejas.orkombu@couchbase.com","username":"Thejas-bhat","avatars":[{"url":"https://www.gravatar.com/avatar/287cbc76d9eb75d794779bc8ce9efb8b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/287cbc76d9eb75d794779bc8ce9efb8b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/287cbc76d9eb75d794779bc8ce9efb8b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/287cbc76d9eb75d794779bc8ce9efb8b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"2461494be8fcab4c692cbcedc4379f5234777025","unresolved":true,"context_lines":[{"line_number":75,"context_line":"\tScopes []Scope `json:\"scopes\"`"},{"line_number":76,"context_line":"}"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"func (m *Manifest) GetScope(scopeName string) *Scope {"},{"line_number":79,"context_line":"\tfor _, scope :\u003d range m.Scopes {"},{"line_number":80,"context_line":"\t\tif scope.Name \u003d\u003d scopeName {"},{"line_number":81,"context_line":"\t\t\treturn \u0026scope"}],"source_content_type":"text/x-go","patch_set":28,"id":"5132ba98_f8b81c76","line":78,"in_reply_to":"17fde040_c33ad4f3","updated":"2026-02-26 19:55:53.000000000","message":"Yes, Manifest is over a bucket.","commit_id":"9b7b5092123cd4a91eb89333be321a89c7cc1ab9"},{"author":{"_account_id":1004804,"name":"Thejas-bhat","email":"thejas.orkombu@couchbase.com","username":"Thejas-bhat","avatars":[{"url":"https://www.gravatar.com/avatar/287cbc76d9eb75d794779bc8ce9efb8b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/287cbc76d9eb75d794779bc8ce9efb8b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/287cbc76d9eb75d794779bc8ce9efb8b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/287cbc76d9eb75d794779bc8ce9efb8b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"7d2ee239d77c27d3c726f9c3faeb91a22340c69e","unresolved":false,"context_lines":[{"line_number":75,"context_line":"\tScopes []Scope `json:\"scopes\"`"},{"line_number":76,"context_line":"}"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"func (m *Manifest) GetScope(scopeName string) *Scope {"},{"line_number":79,"context_line":"\tfor _, scope :\u003d range m.Scopes {"},{"line_number":80,"context_line":"\t\tif scope.Name \u003d\u003d scopeName {"},{"line_number":81,"context_line":"\t\t\treturn \u0026scope"}],"source_content_type":"text/x-go","patch_set":28,"id":"3e5363e1_a526977f","line":78,"in_reply_to":"5132ba98_f8b81c76","updated":"2026-03-23 17:45:02.000000000","message":"Done","commit_id":"9b7b5092123cd4a91eb89333be321a89c7cc1ab9"}],"pindex_bleve.go":[{"author":{"_account_id":1000338,"name":"Abhi Dangeti","email":"abhinav@couchbase.com","username":"abhinavdangeti","avatars":[{"url":"https://www.gravatar.com/avatar/9007099855b1bf7d96e9c1a10bc9542e.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/9007099855b1bf7d96e9c1a10bc9542e.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/9007099855b1bf7d96e9c1a10bc9542e.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/9007099855b1bf7d96e9c1a10bc9542e.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"6e3c16cfb466d703ae92e24a715d46a96a3147d3","unresolved":true,"context_lines":[{"line_number":405,"context_line":"// This blocks the data ingestion until the training is complete."},{"line_number":406,"context_line":"type trainer interface {"},{"line_number":407,"context_line":"\t// if necessary, start sampling docs from KV"},{"line_number":408,"context_line":"\ttrySampling()"},{"line_number":409,"context_line":"\t// a way to control the data ingestion from feeds"},{"line_number":410,"context_line":"\tawaitCompletion()"},{"line_number":411,"context_line":"\t// cleanup any resources"}],"source_content_type":"text/x-go","patch_set":28,"id":"b4db9197_76331060","line":408,"updated":"2026-02-25 21:15:56.000000000","message":"acquireSamples*()","commit_id":"9b7b5092123cd4a91eb89333be321a89c7cc1ab9"},{"author":{"_account_id":1004804,"name":"Thejas-bhat","email":"thejas.orkombu@couchbase.com","username":"Thejas-bhat","avatars":[{"url":"https://www.gravatar.com/avatar/287cbc76d9eb75d794779bc8ce9efb8b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/287cbc76d9eb75d794779bc8ce9efb8b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/287cbc76d9eb75d794779bc8ce9efb8b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/287cbc76d9eb75d794779bc8ce9efb8b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"7d2ee239d77c27d3c726f9c3faeb91a22340c69e","unresolved":false,"context_lines":[{"line_number":405,"context_line":"// This blocks the data ingestion until the training is complete."},{"line_number":406,"context_line":"type trainer interface {"},{"line_number":407,"context_line":"\t// if necessary, start sampling docs from KV"},{"line_number":408,"context_line":"\ttrySampling()"},{"line_number":409,"context_line":"\t// a way to control the data ingestion from feeds"},{"line_number":410,"context_line":"\tawaitCompletion()"},{"line_number":411,"context_line":"\t// cleanup any resources"}],"source_content_type":"text/x-go","patch_set":28,"id":"880dbcab_075f05a7","line":408,"in_reply_to":"b4db9197_76331060","updated":"2026-03-23 17:45:02.000000000","message":"Done","commit_id":"9b7b5092123cd4a91eb89333be321a89c7cc1ab9"},{"author":{"_account_id":1000338,"name":"Abhi Dangeti","email":"abhinav@couchbase.com","username":"abhinavdangeti","avatars":[{"url":"https://www.gravatar.com/avatar/9007099855b1bf7d96e9c1a10bc9542e.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/9007099855b1bf7d96e9c1a10bc9542e.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/9007099855b1bf7d96e9c1a10bc9542e.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/9007099855b1bf7d96e9c1a10bc9542e.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"6e3c16cfb466d703ae92e24a715d46a96a3147d3","unresolved":true,"context_lines":[{"line_number":407,"context_line":"\t// if necessary, start sampling docs from KV"},{"line_number":408,"context_line":"\ttrySampling()"},{"line_number":409,"context_line":"\t// a way to control the data ingestion from feeds"},{"line_number":410,"context_line":"\tawaitCompletion()"},{"line_number":411,"context_line":"\t// cleanup any resources"},{"line_number":412,"context_line":"\tclose() error"},{"line_number":413,"context_line":"}"}],"source_content_type":"text/x-go","patch_set":28,"id":"e35169bc_ca0975c9","line":410,"updated":"2026-02-25 21:15:56.000000000","message":"wait*()","commit_id":"9b7b5092123cd4a91eb89333be321a89c7cc1ab9"},{"author":{"_account_id":1004804,"name":"Thejas-bhat","email":"thejas.orkombu@couchbase.com","username":"Thejas-bhat","avatars":[{"url":"https://www.gravatar.com/avatar/287cbc76d9eb75d794779bc8ce9efb8b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/287cbc76d9eb75d794779bc8ce9efb8b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/287cbc76d9eb75d794779bc8ce9efb8b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/287cbc76d9eb75d794779bc8ce9efb8b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"7d2ee239d77c27d3c726f9c3faeb91a22340c69e","unresolved":false,"context_lines":[{"line_number":407,"context_line":"\t// if necessary, start sampling docs from KV"},{"line_number":408,"context_line":"\ttrySampling()"},{"line_number":409,"context_line":"\t// a way to control the data ingestion from feeds"},{"line_number":410,"context_line":"\tawaitCompletion()"},{"line_number":411,"context_line":"\t// cleanup any resources"},{"line_number":412,"context_line":"\tclose() error"},{"line_number":413,"context_line":"}"}],"source_content_type":"text/x-go","patch_set":28,"id":"cd092653_e533ea52","line":410,"in_reply_to":"e35169bc_ca0975c9","updated":"2026-03-23 17:45:02.000000000","message":"Done","commit_id":"9b7b5092123cd4a91eb89333be321a89c7cc1ab9"},{"author":{"_account_id":1000338,"name":"Abhi Dangeti","email":"abhinav@couchbase.com","username":"abhinavdangeti","avatars":[{"url":"https://www.gravatar.com/avatar/9007099855b1bf7d96e9c1a10bc9542e.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/9007099855b1bf7d96e9c1a10bc9542e.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/9007099855b1bf7d96e9c1a10bc9542e.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/9007099855b1bf7d96e9c1a10bc9542e.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"6e3c16cfb466d703ae92e24a715d46a96a3147d3","unresolved":true,"context_lines":[{"line_number":470,"context_line":"func (t *BleveDest) startBatchWorkers() {"},{"line_number":471,"context_line":"\tfor i :\u003d 0; i \u003c asyncBatchWorkerCount; i++ {"},{"line_number":472,"context_line":"\t\tt.batchReqChs[i] \u003d make(chan *batchRequest, 1)"},{"line_number":473,"context_line":"\t\tgo func() {"},{"line_number":474,"context_line":"\t\t\tif t.trainingSampler !\u003d nil {"},{"line_number":475,"context_line":"\t\t\t\t// wait till the training is done and allow the data ingest to"},{"line_number":476,"context_line":"\t\t\t\t// proceed only after that"}],"source_content_type":"text/x-go","patch_set":28,"id":"103332f6_4e60b9bb","line":473,"updated":"2026-02-25 21:15:56.000000000","message":"Don\u0027t quite see the reason why this has gotta be inside the for loop.\n\nCan simply situate ..\n```\nif t.trainingSampler !\u003d nil {\n    t.trainingSampler.wait() // here we will block _only_ if applicable\n}\n```\n.. before the loop and retain the for loop over go runBatchWorker as is.","commit_id":"9b7b5092123cd4a91eb89333be321a89c7cc1ab9"},{"author":{"_account_id":1004804,"name":"Thejas-bhat","email":"thejas.orkombu@couchbase.com","username":"Thejas-bhat","avatars":[{"url":"https://www.gravatar.com/avatar/287cbc76d9eb75d794779bc8ce9efb8b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/287cbc76d9eb75d794779bc8ce9efb8b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/287cbc76d9eb75d794779bc8ce9efb8b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/287cbc76d9eb75d794779bc8ce9efb8b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"2461494be8fcab4c692cbcedc4379f5234777025","unresolved":true,"context_lines":[{"line_number":470,"context_line":"func (t *BleveDest) startBatchWorkers() {"},{"line_number":471,"context_line":"\tfor i :\u003d 0; i \u003c asyncBatchWorkerCount; i++ {"},{"line_number":472,"context_line":"\t\tt.batchReqChs[i] \u003d make(chan *batchRequest, 1)"},{"line_number":473,"context_line":"\t\tgo func() {"},{"line_number":474,"context_line":"\t\t\tif t.trainingSampler !\u003d nil {"},{"line_number":475,"context_line":"\t\t\t\t// wait till the training is done and allow the data ingest to"},{"line_number":476,"context_line":"\t\t\t\t// proceed only after that"}],"source_content_type":"text/x-go","patch_set":28,"id":"c0b65359_f57501a4","line":473,"in_reply_to":"103332f6_4e60b9bb","updated":"2026-02-26 19:55:53.000000000","message":"i\u0027ll still need to situate it in an async block because I can\u0027t block startBatchWorkers - it\u0027ll fail to create PINDEX_META type files and cause errors while opening the pindex in case of a crash.","commit_id":"9b7b5092123cd4a91eb89333be321a89c7cc1ab9"},{"author":{"_account_id":1004804,"name":"Thejas-bhat","email":"thejas.orkombu@couchbase.com","username":"Thejas-bhat","avatars":[{"url":"https://www.gravatar.com/avatar/287cbc76d9eb75d794779bc8ce9efb8b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/287cbc76d9eb75d794779bc8ce9efb8b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/287cbc76d9eb75d794779bc8ce9efb8b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/287cbc76d9eb75d794779bc8ce9efb8b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"53c0d0c7966d7950f8adc7d8b677e5e47434b2f0","unresolved":true,"context_lines":[{"line_number":470,"context_line":"func (t *BleveDest) startBatchWorkers() {"},{"line_number":471,"context_line":"\tfor i :\u003d 0; i \u003c asyncBatchWorkerCount; i++ {"},{"line_number":472,"context_line":"\t\tt.batchReqChs[i] \u003d make(chan *batchRequest, 1)"},{"line_number":473,"context_line":"\t\tgo func() {"},{"line_number":474,"context_line":"\t\t\tif t.trainingSampler !\u003d nil {"},{"line_number":475,"context_line":"\t\t\t\t// wait till the training is done and allow the data ingest to"},{"line_number":476,"context_line":"\t\t\t\t// proceed only after that"}],"source_content_type":"text/x-go","patch_set":28,"id":"f6137a4a_92636eef","line":473,"in_reply_to":"c0b65359_f57501a4","updated":"2026-02-26 23:26:18.000000000","message":"Actually sorry, I think I confused myself there. I don\u0027t think the suggestion might work here.\n\nBasically, I should be able to let the startBatchWorkers() func return for the PINDEX_META and such files\u0027 creation and also the remaining janitor flow to be unblocked. we should also ensure that we don\u0027t do process any batches by using the wait(). \nthe runBatchWorker() function isn\u0027t tied to the BleveDest struct so I won\u0027t be able to wait within that func and neither in the beginning of this startBatchWrokers() func since I\u0027ll end up running the batch workers without waiting for the signal from wait().\n\nPlease let me know if that makes sense","commit_id":"9b7b5092123cd4a91eb89333be321a89c7cc1ab9"},{"author":{"_account_id":1000338,"name":"Abhi Dangeti","email":"abhinav@couchbase.com","username":"abhinavdangeti","avatars":[{"url":"https://www.gravatar.com/avatar/9007099855b1bf7d96e9c1a10bc9542e.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/9007099855b1bf7d96e9c1a10bc9542e.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/9007099855b1bf7d96e9c1a10bc9542e.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/9007099855b1bf7d96e9c1a10bc9542e.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"6e3c16cfb466d703ae92e24a715d46a96a3147d3","unresolved":true,"context_lines":[{"line_number":3049,"context_line":""},{"line_number":3050,"context_line":"func runBatchWorker(requestCh chan *batchRequest, stopCh chan struct{},"},{"line_number":3051,"context_line":"\tbindex bleve.Index, workerID int) {"},{"line_number":3052,"context_line":""},{"line_number":3053,"context_line":"\tvar targetBatch *bleve.Batch"},{"line_number":3054,"context_line":"\tbdp :\u003d make([]*BleveDestPartition, 0, 50)"},{"line_number":3055,"context_line":"\tbdpMaxSeqNums :\u003d make([]uint64, 0, 50)"}],"source_content_type":"text/x-go","patch_set":28,"id":"b64816ee_53854417","line":3052,"updated":"2026-02-25 21:15:56.000000000","message":"Remove unnecessary empty line.","commit_id":"9b7b5092123cd4a91eb89333be321a89c7cc1ab9"},{"author":{"_account_id":1000338,"name":"Abhi Dangeti","email":"abhinav@couchbase.com","username":"abhinavdangeti","avatars":[{"url":"https://www.gravatar.com/avatar/9007099855b1bf7d96e9c1a10bc9542e.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/9007099855b1bf7d96e9c1a10bc9542e.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/9007099855b1bf7d96e9c1a10bc9542e.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/9007099855b1bf7d96e9c1a10bc9542e.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"46a54effcfe3d152c0a276fdb5cd2bf0668af06b","unresolved":true,"context_lines":[{"line_number":3956,"context_line":"\t\treturn err"},{"line_number":3957,"context_line":"\t}"},{"line_number":3958,"context_line":""},{"line_number":3959,"context_line":"\tfmt.Printf(\"bucket info: %#v\\n\", string(respBuf))"},{"line_number":3960,"context_line":""},{"line_number":3961,"context_line":"\tif rv.BucketType !\u003d \"membase\" \u0026\u0026 rv.BucketType !\u003d \"ephemeral\" {"},{"line_number":3962,"context_line":"\t\treturn fmt.Errorf(\"unsupported bucket type\")"}],"source_content_type":"text/x-go","patch_set":40,"id":"f2bb3558_66fa1d61","line":3959,"updated":"2026-03-28 00:48:00.000000000","message":"Drop this.","commit_id":"cdc584050f828bad2da46379a2247803f7d4cf79"}],"trainer_noop.go":[{"author":{"_account_id":1000338,"name":"Abhi Dangeti","email":"abhinav@couchbase.com","username":"abhinavdangeti","avatars":[{"url":"https://www.gravatar.com/avatar/9007099855b1bf7d96e9c1a10bc9542e.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/9007099855b1bf7d96e9c1a10bc9542e.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/9007099855b1bf7d96e9c1a10bc9542e.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/9007099855b1bf7d96e9c1a10bc9542e.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"7f0b230f8996f3ba6b0d68892da83b052fd7bda5","unresolved":true,"context_lines":[{"line_number":16,"context_line":"type trainerNoop struct {"},{"line_number":17,"context_line":"}"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"func initTrainer(bleveDest *BleveDest, kvconfig map[string]interface{}) trainer {"},{"line_number":20,"context_line":"\treturn \u0026trainerNoop{}"},{"line_number":21,"context_line":"}"},{"line_number":22,"context_line":""}],"source_content_type":"text/x-go","patch_set":34,"id":"5f9e2d4e_ed86a972","line":19,"updated":"2026-03-27 21:18:07.000000000","message":"Move this to the top and declare all member methods for `trainerNoop` together.\n\nAlso, if this deploys the trainer interface shouldn\u0027t you only need wait, close and acquireSamples?","commit_id":"bdee2815a3561ba5fea5ef41649c3f9a86727325"},{"author":{"_account_id":1004804,"name":"Thejas-bhat","email":"thejas.orkombu@couchbase.com","username":"Thejas-bhat","avatars":[{"url":"https://www.gravatar.com/avatar/287cbc76d9eb75d794779bc8ce9efb8b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/287cbc76d9eb75d794779bc8ce9efb8b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/287cbc76d9eb75d794779bc8ce9efb8b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/287cbc76d9eb75d794779bc8ce9efb8b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"753decc13deb1819b64709c9cd044aef88f747ee","unresolved":true,"context_lines":[{"line_number":16,"context_line":"type trainerNoop struct {"},{"line_number":17,"context_line":"}"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"func initTrainer(bleveDest *BleveDest, kvconfig map[string]interface{}) trainer {"},{"line_number":20,"context_line":"\treturn \u0026trainerNoop{}"},{"line_number":21,"context_line":"}"},{"line_number":22,"context_line":""}],"source_content_type":"text/x-go","patch_set":34,"id":"55bbaa78_8b8c6966","line":19,"in_reply_to":"5f9e2d4e_ed86a972","updated":"2026-03-27 21:27:55.000000000","message":"yeah i think i\u0027ll just return nil here so that we don\u0027t create the obj itself","commit_id":"bdee2815a3561ba5fea5ef41649c3f9a86727325"},{"author":{"_account_id":1000338,"name":"Abhi Dangeti","email":"abhinav@couchbase.com","username":"abhinavdangeti","avatars":[{"url":"https://www.gravatar.com/avatar/9007099855b1bf7d96e9c1a10bc9542e.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/9007099855b1bf7d96e9c1a10bc9542e.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/9007099855b1bf7d96e9c1a10bc9542e.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/9007099855b1bf7d96e9c1a10bc9542e.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"421f41ffa96687ca5cf49bd6830562718e97f9ea","unresolved":true,"context_lines":[{"line_number":16,"context_line":""},{"line_number":17,"context_line":"func initTrainer(bleveDest *BleveDest, kvconfig map[string]interface{}) trainer {"},{"line_number":18,"context_line":"\treturn nil"},{"line_number":19,"context_line":"}"},{"line_number":20,"context_line":"func (t *trainerNoop) acquireSamples() {}"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"func (t *trainerNoop) wait() {"}],"source_content_type":"text/x-go","patch_set":35,"id":"1ad58115_26596102","line":19,"updated":"2026-03-27 21:31:14.000000000","message":"Line break.","commit_id":"a9c5cbea31c72e2b3cfe480d7272b692b8856f2c"}],"trainer_vector.go":[{"author":{"_account_id":1005412,"name":"gautham","email":"gautham.k@couchbase.com","username":"capemox","avatars":[{"url":"https://www.gravatar.com/avatar/ca995197afd5377740c0dafa7a4a7005.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/ca995197afd5377740c0dafa7a4a7005.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/ca995197afd5377740c0dafa7a4a7005.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/ca995197afd5377740c0dafa7a4a7005.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"17d75923f18c510e9fafaf80965d13d7e31d10e8","unresolved":true,"context_lines":[{"line_number":70,"context_line":"\t\t// remove the worker from registry - this signifies an index is deleted."},{"line_number":71,"context_line":"\t\t// even in case of updates, it needs to be cleared out since the collections"},{"line_number":72,"context_line":"\t\t// may have changed"},{"line_number":73,"context_line":"\t\tdelete(workerRegistry.workers, t.indexName)"},{"line_number":74,"context_line":"\t}"},{"line_number":75,"context_line":"\treturn nil"},{"line_number":76,"context_line":"}"}],"source_content_type":"text/x-go","patch_set":25,"id":"1ac9b836_17abbaac","line":73,"updated":"2026-02-23 05:47:50.000000000","message":"Wouldn\u0027t the map need to be locked for delete?","commit_id":"1a5659653ce2ad03a6570b223870f26b5e26a032"},{"author":{"_account_id":1004804,"name":"Thejas-bhat","email":"thejas.orkombu@couchbase.com","username":"Thejas-bhat","avatars":[{"url":"https://www.gravatar.com/avatar/287cbc76d9eb75d794779bc8ce9efb8b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/287cbc76d9eb75d794779bc8ce9efb8b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/287cbc76d9eb75d794779bc8ce9efb8b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/287cbc76d9eb75d794779bc8ce9efb8b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"541cf0a6180c0efef8c1502175035cbc1c290295","unresolved":false,"context_lines":[{"line_number":70,"context_line":"\t\t// remove the worker from registry - this signifies an index is deleted."},{"line_number":71,"context_line":"\t\t// even in case of updates, it needs to be cleared out since the collections"},{"line_number":72,"context_line":"\t\t// may have changed"},{"line_number":73,"context_line":"\t\tdelete(workerRegistry.workers, t.indexName)"},{"line_number":74,"context_line":"\t}"},{"line_number":75,"context_line":"\treturn nil"},{"line_number":76,"context_line":"}"}],"source_content_type":"text/x-go","patch_set":25,"id":"fd384e7b_e742e424","line":73,"in_reply_to":"1ac9b836_17abbaac","updated":"2026-02-23 18:18:55.000000000","message":"Done","commit_id":"1a5659653ce2ad03a6570b223870f26b5e26a032"},{"author":{"_account_id":1000338,"name":"Abhi Dangeti","email":"abhinav@couchbase.com","username":"abhinavdangeti","avatars":[{"url":"https://www.gravatar.com/avatar/9007099855b1bf7d96e9c1a10bc9542e.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/9007099855b1bf7d96e9c1a10bc9542e.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/9007099855b1bf7d96e9c1a10bc9542e.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/9007099855b1bf7d96e9c1a10bc9542e.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"610fa3d0d4d406b5aebf14fd01c558fba8c21005","unresolved":true,"context_lines":[{"line_number":230,"context_line":"}"},{"line_number":231,"context_line":""},{"line_number":232,"context_line":"// getTotalSourceDocCount uses gocbcore stats to get item count per collection"},{"line_number":233,"context_line":"// and returns a sample limit per collection: 4 * sqrt(docCount) * 39."},{"line_number":234,"context_line":"func getTotalSourceDocCount(agent *gocbcore.Agent, scopeName string,"},{"line_number":235,"context_line":"\tcollections []string) (rv []int, err error) {"},{"line_number":236,"context_line":"\trv \u003d make([]int, len(collections))"}],"source_content_type":"text/x-go","patch_set":25,"id":"943dc176_dc2a96d6","line":233,"updated":"2026-02-20 22:20:33.000000000","message":"At the very least we ought to divide this by number of partitions, and then again by the rough number of segments per index partitions - simply speaking we\u0027re trying to reduce the number of centroids per segment without trade off to recall.","commit_id":"1a5659653ce2ad03a6570b223870f26b5e26a032"},{"author":{"_account_id":1005412,"name":"gautham","email":"gautham.k@couchbase.com","username":"capemox","avatars":[{"url":"https://www.gravatar.com/avatar/ca995197afd5377740c0dafa7a4a7005.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/ca995197afd5377740c0dafa7a4a7005.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/ca995197afd5377740c0dafa7a4a7005.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/ca995197afd5377740c0dafa7a4a7005.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"17d75923f18c510e9fafaf80965d13d7e31d10e8","unresolved":true,"context_lines":[{"line_number":410,"context_line":"\t\tsourceName:      t.bleveDest.sourceName,"},{"line_number":411,"context_line":"\t\tcluster:         cluster,"},{"line_number":412,"context_line":"\t})"},{"line_number":413,"context_line":"\tgo cfg.worker.run()"},{"line_number":414,"context_line":""},{"line_number":415,"context_line":"\t// Fan-in from per-collection channels; multiple consumers process the same"},{"line_number":416,"context_line":"\t// stream."},{"line_number":417,"context_line":"\tvar wg sync.WaitGroup"},{"line_number":418,"context_line":"\terrCh :\u003d make(chan error)"},{"line_number":419,"context_line":"\tcloseCh :\u003d make(chan struct{})"},{"line_number":420,"context_line":"\tsampleCh :\u003d fanInCollectionsChs(cfg.worker.receiveChs)"},{"line_number":421,"context_line":"\tfor i :\u003d 0; i \u003c 4; i++ {"},{"line_number":422,"context_line":"\t\twg.Add(1)"},{"line_number":423,"context_line":"\t\tgo func(i int) {"}],"source_content_type":"text/x-go","patch_set":25,"id":"6b5aa109_593595d8","line":420,"range":{"start_line":413,"start_character":0,"end_line":420,"end_character":1},"updated":"2026-02-23 05:47:50.000000000","message":"I don\u0027t fully understand the flow here. Why does `worker.run` have to send to collection specific channels? `fanInCollectionChs` just adds the cid and streams it to a single channel. It feels like `run` could have just added the cid and sent all the samples over one channel instead.","commit_id":"1a5659653ce2ad03a6570b223870f26b5e26a032"},{"author":{"_account_id":1004804,"name":"Thejas-bhat","email":"thejas.orkombu@couchbase.com","username":"Thejas-bhat","avatars":[{"url":"https://www.gravatar.com/avatar/287cbc76d9eb75d794779bc8ce9efb8b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/287cbc76d9eb75d794779bc8ce9efb8b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/287cbc76d9eb75d794779bc8ce9efb8b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/287cbc76d9eb75d794779bc8ce9efb8b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"d823df13b44370b026cf76ebb19f5e897dc5f46b","unresolved":false,"context_lines":[{"line_number":410,"context_line":"\t\tsourceName:      t.bleveDest.sourceName,"},{"line_number":411,"context_line":"\t\tcluster:         cluster,"},{"line_number":412,"context_line":"\t})"},{"line_number":413,"context_line":"\tgo cfg.worker.run()"},{"line_number":414,"context_line":""},{"line_number":415,"context_line":"\t// Fan-in from per-collection channels; multiple consumers process the same"},{"line_number":416,"context_line":"\t// stream."},{"line_number":417,"context_line":"\tvar wg sync.WaitGroup"},{"line_number":418,"context_line":"\terrCh :\u003d make(chan error)"},{"line_number":419,"context_line":"\tcloseCh :\u003d make(chan struct{})"},{"line_number":420,"context_line":"\tsampleCh :\u003d fanInCollectionsChs(cfg.worker.receiveChs)"},{"line_number":421,"context_line":"\tfor i :\u003d 0; i \u003c 4; i++ {"},{"line_number":422,"context_line":"\t\twg.Add(1)"},{"line_number":423,"context_line":"\t\tgo func(i int) {"}],"source_content_type":"text/x-go","patch_set":25,"id":"26af8558_a44369ba","line":420,"range":{"start_line":413,"start_character":0,"end_line":420,"end_character":1},"in_reply_to":"06f8bb5f_7cd96032","updated":"2026-02-23 18:46:21.000000000","message":"Done","commit_id":"1a5659653ce2ad03a6570b223870f26b5e26a032"},{"author":{"_account_id":1004804,"name":"Thejas-bhat","email":"thejas.orkombu@couchbase.com","username":"Thejas-bhat","avatars":[{"url":"https://www.gravatar.com/avatar/287cbc76d9eb75d794779bc8ce9efb8b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/287cbc76d9eb75d794779bc8ce9efb8b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/287cbc76d9eb75d794779bc8ce9efb8b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/287cbc76d9eb75d794779bc8ce9efb8b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"541cf0a6180c0efef8c1502175035cbc1c290295","unresolved":true,"context_lines":[{"line_number":410,"context_line":"\t\tsourceName:      t.bleveDest.sourceName,"},{"line_number":411,"context_line":"\t\tcluster:         cluster,"},{"line_number":412,"context_line":"\t})"},{"line_number":413,"context_line":"\tgo cfg.worker.run()"},{"line_number":414,"context_line":""},{"line_number":415,"context_line":"\t// Fan-in from per-collection channels; multiple consumers process the same"},{"line_number":416,"context_line":"\t// stream."},{"line_number":417,"context_line":"\tvar wg sync.WaitGroup"},{"line_number":418,"context_line":"\terrCh :\u003d make(chan error)"},{"line_number":419,"context_line":"\tcloseCh :\u003d make(chan struct{})"},{"line_number":420,"context_line":"\tsampleCh :\u003d fanInCollectionsChs(cfg.worker.receiveChs)"},{"line_number":421,"context_line":"\tfor i :\u003d 0; i \u003c 4; i++ {"},{"line_number":422,"context_line":"\t\twg.Add(1)"},{"line_number":423,"context_line":"\t\tgo func(i int) {"}],"source_content_type":"text/x-go","patch_set":25,"id":"06f8bb5f_7cd96032","line":420,"range":{"start_line":413,"start_character":0,"end_line":420,"end_character":1},"in_reply_to":"6b5aa109_593595d8","updated":"2026-02-23 18:18:55.000000000","message":"oh right, yeah my initial prototypes needed some collection specific constructs and workers and after re-iterating a bunch of times a lot of it got refactored - let me remove the fan-in logic, I don\u0027t think it\u0027s needed anymore. Even parallelization of the collection specific iterator logic in the .run() func can end up sending this into a single channel. Thanks for the suggestion","commit_id":"1a5659653ce2ad03a6570b223870f26b5e26a032"},{"author":{"_account_id":1005412,"name":"gautham","email":"gautham.k@couchbase.com","username":"capemox","avatars":[{"url":"https://www.gravatar.com/avatar/ca995197afd5377740c0dafa7a4a7005.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/ca995197afd5377740c0dafa7a4a7005.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/ca995197afd5377740c0dafa7a4a7005.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/ca995197afd5377740c0dafa7a4a7005.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"17d75923f18c510e9fafaf80965d13d7e31d10e8","unresolved":true,"context_lines":[{"line_number":422,"context_line":"\t\twg.Add(1)"},{"line_number":423,"context_line":"\t\tgo func(i int) {"},{"line_number":424,"context_line":"\t\t\tdefer wg.Done()"},{"line_number":425,"context_line":"\t\t\tt.sampleVectorSamples(sampleCh, cfg.defaultType, extraOpts,"},{"line_number":426,"context_line":"\t\t\t\tcfg.vecIndex, cfg.worker.doneCh, closeCh, errCh)"},{"line_number":427,"context_line":"\t\t}(i)"},{"line_number":428,"context_line":"\t}"}],"source_content_type":"text/x-go","patch_set":25,"id":"d93dcbf4_15472bb8","line":425,"updated":"2026-02-23 05:47:50.000000000","message":"It seems like you want to run multiple goroutines of `sampleVectorSamples` to build documents concurrently. However, the function ends up building 4 different batches of data and calls `Train` 4 times as well.","commit_id":"1a5659653ce2ad03a6570b223870f26b5e26a032"},{"author":{"_account_id":1004804,"name":"Thejas-bhat","email":"thejas.orkombu@couchbase.com","username":"Thejas-bhat","avatars":[{"url":"https://www.gravatar.com/avatar/287cbc76d9eb75d794779bc8ce9efb8b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/287cbc76d9eb75d794779bc8ce9efb8b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/287cbc76d9eb75d794779bc8ce9efb8b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/287cbc76d9eb75d794779bc8ce9efb8b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"0afea63efb55868cd8911bfe701f982a694e2ae1","unresolved":true,"context_lines":[{"line_number":422,"context_line":"\t\twg.Add(1)"},{"line_number":423,"context_line":"\t\tgo func(i int) {"},{"line_number":424,"context_line":"\t\t\tdefer wg.Done()"},{"line_number":425,"context_line":"\t\t\tt.sampleVectorSamples(sampleCh, cfg.defaultType, extraOpts,"},{"line_number":426,"context_line":"\t\t\t\tcfg.vecIndex, cfg.worker.doneCh, closeCh, errCh)"},{"line_number":427,"context_line":"\t\t}(i)"},{"line_number":428,"context_line":"\t}"}],"source_content_type":"text/x-go","patch_set":25,"id":"848f2162_f4aca7c3","line":425,"in_reply_to":"1ccbff63_3a9e6f2d","updated":"2026-02-24 18:38:10.000000000","message":"\u003e Will passing 4 distinct batches work properly when training the vector index?\n\nYes it will, because its a naive merge of 4 different IVF index. The memory usage I observed in my local system (1M 768) was lower when done in batches compared to one-shot training (2GB vs 2.5GB). However the train time was faster in batch training compared to one-shot training.\n\n\u003e would there be any issues with concurrently calling Train on the same index?\n\nNope, there won\u0027t be any issue because its all merged behind a channel.","commit_id":"1a5659653ce2ad03a6570b223870f26b5e26a032"},{"author":{"_account_id":1005412,"name":"gautham","email":"gautham.k@couchbase.com","username":"capemox","avatars":[{"url":"https://www.gravatar.com/avatar/ca995197afd5377740c0dafa7a4a7005.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/ca995197afd5377740c0dafa7a4a7005.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/ca995197afd5377740c0dafa7a4a7005.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/ca995197afd5377740c0dafa7a4a7005.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"c762cf58790f6e68f566f769154363d2ea9af207","unresolved":true,"context_lines":[{"line_number":422,"context_line":"\t\twg.Add(1)"},{"line_number":423,"context_line":"\t\tgo func(i int) {"},{"line_number":424,"context_line":"\t\t\tdefer wg.Done()"},{"line_number":425,"context_line":"\t\t\tt.sampleVectorSamples(sampleCh, cfg.defaultType, extraOpts,"},{"line_number":426,"context_line":"\t\t\t\tcfg.vecIndex, cfg.worker.doneCh, closeCh, errCh)"},{"line_number":427,"context_line":"\t\t}(i)"},{"line_number":428,"context_line":"\t}"}],"source_content_type":"text/x-go","patch_set":25,"id":"1ccbff63_3a9e6f2d","line":425,"in_reply_to":"3d77dbad_a2b28fca","updated":"2026-02-24 11:32:49.000000000","message":"Huh, I thought you will have to pass all training examples in one shot. Will passing 4 distinct batches work properly when training the vector index? Also, would there be any issues with concurrently calling `Train` on the same index?","commit_id":"1a5659653ce2ad03a6570b223870f26b5e26a032"},{"author":{"_account_id":1005412,"name":"gautham","email":"gautham.k@couchbase.com","username":"capemox","avatars":[{"url":"https://www.gravatar.com/avatar/ca995197afd5377740c0dafa7a4a7005.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/ca995197afd5377740c0dafa7a4a7005.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/ca995197afd5377740c0dafa7a4a7005.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/ca995197afd5377740c0dafa7a4a7005.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"7107dc7a35945b84f668a32042428b4df4020019","unresolved":false,"context_lines":[{"line_number":422,"context_line":"\t\twg.Add(1)"},{"line_number":423,"context_line":"\t\tgo func(i int) {"},{"line_number":424,"context_line":"\t\t\tdefer wg.Done()"},{"line_number":425,"context_line":"\t\t\tt.sampleVectorSamples(sampleCh, cfg.defaultType, extraOpts,"},{"line_number":426,"context_line":"\t\t\t\tcfg.vecIndex, cfg.worker.doneCh, closeCh, errCh)"},{"line_number":427,"context_line":"\t\t}(i)"},{"line_number":428,"context_line":"\t}"}],"source_content_type":"text/x-go","patch_set":25,"id":"297b2733_ba1a07cc","line":425,"in_reply_to":"848f2162_f4aca7c3","updated":"2026-02-26 03:48:59.000000000","message":"Done","commit_id":"1a5659653ce2ad03a6570b223870f26b5e26a032"},{"author":{"_account_id":1004804,"name":"Thejas-bhat","email":"thejas.orkombu@couchbase.com","username":"Thejas-bhat","avatars":[{"url":"https://www.gravatar.com/avatar/287cbc76d9eb75d794779bc8ce9efb8b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/287cbc76d9eb75d794779bc8ce9efb8b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/287cbc76d9eb75d794779bc8ce9efb8b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/287cbc76d9eb75d794779bc8ce9efb8b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"541cf0a6180c0efef8c1502175035cbc1c290295","unresolved":true,"context_lines":[{"line_number":422,"context_line":"\t\twg.Add(1)"},{"line_number":423,"context_line":"\t\tgo func(i int) {"},{"line_number":424,"context_line":"\t\t\tdefer wg.Done()"},{"line_number":425,"context_line":"\t\t\tt.sampleVectorSamples(sampleCh, cfg.defaultType, extraOpts,"},{"line_number":426,"context_line":"\t\t\t\tcfg.vecIndex, cfg.worker.doneCh, closeCh, errCh)"},{"line_number":427,"context_line":"\t\t}(i)"},{"line_number":428,"context_line":"\t}"}],"source_content_type":"text/x-go","patch_set":25,"id":"3d77dbad_a2b28fca","line":425,"in_reply_to":"d93dcbf4_15472bb8","updated":"2026-02-23 18:18:55.000000000","message":"yeah its mainly to have some amount of parallelization while training - build a batch of docs parallely and then train on it. We\u0027re invoking the Train() 4 times on 4 different batches of data instead of doing the entire traininig in single shot. I\u0027m going to experiment with only 1 of these routines as per @abhinav@couchbase.com \u0027s suggestion.","commit_id":"1a5659653ce2ad03a6570b223870f26b5e26a032"},{"author":{"_account_id":1005412,"name":"gautham","email":"gautham.k@couchbase.com","username":"capemox","avatars":[{"url":"https://www.gravatar.com/avatar/ca995197afd5377740c0dafa7a4a7005.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/ca995197afd5377740c0dafa7a4a7005.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/ca995197afd5377740c0dafa7a4a7005.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/ca995197afd5377740c0dafa7a4a7005.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"c762cf58790f6e68f566f769154363d2ea9af207","unresolved":true,"context_lines":[{"line_number":275,"context_line":"\t\t\treturn nil, err"},{"line_number":276,"context_line":"\t\t}"},{"line_number":277,"context_line":"\t\t// Heuristic sample limit: scale with sqrt of collection size."},{"line_number":278,"context_line":"\t\trv[i] \u003d int(4 * math.Sqrt(float64(docCount)) * 39)"},{"line_number":279,"context_line":"\t}"},{"line_number":280,"context_line":"\treturn rv, nil"},{"line_number":281,"context_line":"}"}],"source_content_type":"text/x-go","patch_set":27,"id":"5eed4c08_74638e24","line":278,"updated":"2026-02-24 11:32:49.000000000","message":"My understanding is that for building an IVF index, considering `v` vectors, you need `sampleAmount(v) \u003d 4 * sqrt(v) * 39` vector samples. In your code, considering 3 collections, you take `sampleAmount(coll1) + sampleAmount(coll2) + sampleAmount(coll3)`, rather than just `sampleAmount(coll1+coll2+coll3)` which would be far lesser. Would you not be oversampling by doing this leading to longer build times?\n\nMaybe you can just take `sampleAmount(coll1+coll2+coll3)`, and from each collection you can sample it\u0027s doc count ratio to all 3 collections.","commit_id":"6960282e09c867a8c2a2b7881e628fbd9de3d58e"},{"author":{"_account_id":1004804,"name":"Thejas-bhat","email":"thejas.orkombu@couchbase.com","username":"Thejas-bhat","avatars":[{"url":"https://www.gravatar.com/avatar/287cbc76d9eb75d794779bc8ce9efb8b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/287cbc76d9eb75d794779bc8ce9efb8b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/287cbc76d9eb75d794779bc8ce9efb8b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/287cbc76d9eb75d794779bc8ce9efb8b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"0afea63efb55868cd8911bfe701f982a694e2ae1","unresolved":true,"context_lines":[{"line_number":275,"context_line":"\t\t\treturn nil, err"},{"line_number":276,"context_line":"\t\t}"},{"line_number":277,"context_line":"\t\t// Heuristic sample limit: scale with sqrt of collection size."},{"line_number":278,"context_line":"\t\trv[i] \u003d int(4 * math.Sqrt(float64(docCount)) * 39)"},{"line_number":279,"context_line":"\t}"},{"line_number":280,"context_line":"\treturn rv, nil"},{"line_number":281,"context_line":"}"}],"source_content_type":"text/x-go","patch_set":27,"id":"df2834c4_7474f843","line":278,"in_reply_to":"5eed4c08_74638e24","updated":"2026-02-24 18:38:10.000000000","message":"\u003e Would you not be oversampling by doing this leading to longer build times?\n\nLonger build times is a valid concern. The thinking over here is that since FTS can have multiple collections - so multiple sources of vectors since each collection can actually have different data distribution in it. The math formula is applicable for a dataset coming from a single data distribution and let\u0027s say we index 3 fields, each of which is under a type mapping belonging to a separate collection. This means that theoretically we\u0027ll need to apply the formula on all those collections and get that sample limit, since we don\u0027t want to undersample below the theoretical limit and mess with the recall. \n\nWe can obviously come up with our own math formula empirically based on our tests but its better to start out with the recommended theoretical formula and then converge to a better one separately.","commit_id":"6960282e09c867a8c2a2b7881e628fbd9de3d58e"},{"author":{"_account_id":1005412,"name":"gautham","email":"gautham.k@couchbase.com","username":"capemox","avatars":[{"url":"https://www.gravatar.com/avatar/ca995197afd5377740c0dafa7a4a7005.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/ca995197afd5377740c0dafa7a4a7005.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/ca995197afd5377740c0dafa7a4a7005.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/ca995197afd5377740c0dafa7a4a7005.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"7107dc7a35945b84f668a32042428b4df4020019","unresolved":false,"context_lines":[{"line_number":275,"context_line":"\t\t\treturn nil, err"},{"line_number":276,"context_line":"\t\t}"},{"line_number":277,"context_line":"\t\t// Heuristic sample limit: scale with sqrt of collection size."},{"line_number":278,"context_line":"\t\trv[i] \u003d int(4 * math.Sqrt(float64(docCount)) * 39)"},{"line_number":279,"context_line":"\t}"},{"line_number":280,"context_line":"\treturn rv, nil"},{"line_number":281,"context_line":"}"}],"source_content_type":"text/x-go","patch_set":27,"id":"d790416c_13b606a0","line":278,"in_reply_to":"df2834c4_7474f843","updated":"2026-02-26 03:48:59.000000000","message":"Done","commit_id":"6960282e09c867a8c2a2b7881e628fbd9de3d58e"},{"author":{"_account_id":1000338,"name":"Abhi Dangeti","email":"abhinav@couchbase.com","username":"abhinavdangeti","avatars":[{"url":"https://www.gravatar.com/avatar/9007099855b1bf7d96e9c1a10bc9542e.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/9007099855b1bf7d96e9c1a10bc9542e.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/9007099855b1bf7d96e9c1a10bc9542e.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/9007099855b1bf7d96e9c1a10bc9542e.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"a0d01d41ddb2220a0c0c5c5bf0495ded7bafe0ed","unresolved":true,"context_lines":[{"line_number":43,"context_line":"\t}"},{"line_number":44,"context_line":"}"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"type trainerVector struct {"},{"line_number":47,"context_line":"\tbleveDest *BleveDest"},{"line_number":48,"context_line":"\tindexName string"},{"line_number":49,"context_line":"\tdoneCh    chan struct{}"}],"source_content_type":"text/x-go","patch_set":28,"id":"868e575a_53c2f40b","line":46,"updated":"2026-02-25 21:28:09.000000000","message":"Could use a better name.","commit_id":"9b7b5092123cd4a91eb89333be321a89c7cc1ab9"},{"author":{"_account_id":1004804,"name":"Thejas-bhat","email":"thejas.orkombu@couchbase.com","username":"Thejas-bhat","avatars":[{"url":"https://www.gravatar.com/avatar/287cbc76d9eb75d794779bc8ce9efb8b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/287cbc76d9eb75d794779bc8ce9efb8b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/287cbc76d9eb75d794779bc8ce9efb8b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/287cbc76d9eb75d794779bc8ce9efb8b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"7d2ee239d77c27d3c726f9c3faeb91a22340c69e","unresolved":false,"context_lines":[{"line_number":43,"context_line":"\t}"},{"line_number":44,"context_line":"}"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"type trainerVector struct {"},{"line_number":47,"context_line":"\tbleveDest *BleveDest"},{"line_number":48,"context_line":"\tindexName string"},{"line_number":49,"context_line":"\tdoneCh    chan struct{}"}],"source_content_type":"text/x-go","patch_set":28,"id":"2e170bb0_830ec759","line":46,"in_reply_to":"868e575a_53c2f40b","updated":"2026-03-23 17:45:02.000000000","message":"Done","commit_id":"9b7b5092123cd4a91eb89333be321a89c7cc1ab9"},{"author":{"_account_id":1000338,"name":"Abhi Dangeti","email":"abhinav@couchbase.com","username":"abhinavdangeti","avatars":[{"url":"https://www.gravatar.com/avatar/9007099855b1bf7d96e9c1a10bc9542e.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/9007099855b1bf7d96e9c1a10bc9542e.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/9007099855b1bf7d96e9c1a10bc9542e.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/9007099855b1bf7d96e9c1a10bc9542e.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"a0d01d41ddb2220a0c0c5c5bf0495ded7bafe0ed","unresolved":true,"context_lines":[{"line_number":235,"context_line":""},{"line_number":236,"context_line":"// getTotalSourceDocCount uses gocbcore stats to get item count per collection"},{"line_number":237,"context_line":"// and returns a sample limit per collection: 4 * sqrt(docCount) * 39."},{"line_number":238,"context_line":"func getTotalSourceDocCount(agent *gocbcore.Agent, scopeName string,"},{"line_number":239,"context_line":"\tcollections []string) (rv []int, err error) {"},{"line_number":240,"context_line":"\trv \u003d make([]int, len(collections))"},{"line_number":241,"context_line":"\tsignal :\u003d make(chan error, 1)"}],"source_content_type":"text/x-go","patch_set":28,"id":"168de3ca_322d2ad8","line":238,"updated":"2026-02-25 21:28:09.000000000","message":"This is an incorrect name right - we\u0027re using this API to retrieve the samples based on the total doc counts in collections. Let\u0027s change the name to reflect that reality.","commit_id":"9b7b5092123cd4a91eb89333be321a89c7cc1ab9"},{"author":{"_account_id":1004804,"name":"Thejas-bhat","email":"thejas.orkombu@couchbase.com","username":"Thejas-bhat","avatars":[{"url":"https://www.gravatar.com/avatar/287cbc76d9eb75d794779bc8ce9efb8b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/287cbc76d9eb75d794779bc8ce9efb8b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/287cbc76d9eb75d794779bc8ce9efb8b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/287cbc76d9eb75d794779bc8ce9efb8b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"7d2ee239d77c27d3c726f9c3faeb91a22340c69e","unresolved":false,"context_lines":[{"line_number":235,"context_line":""},{"line_number":236,"context_line":"// getTotalSourceDocCount uses gocbcore stats to get item count per collection"},{"line_number":237,"context_line":"// and returns a sample limit per collection: 4 * sqrt(docCount) * 39."},{"line_number":238,"context_line":"func getTotalSourceDocCount(agent *gocbcore.Agent, scopeName string,"},{"line_number":239,"context_line":"\tcollections []string) (rv []int, err error) {"},{"line_number":240,"context_line":"\trv \u003d make([]int, len(collections))"},{"line_number":241,"context_line":"\tsignal :\u003d make(chan error, 1)"}],"source_content_type":"text/x-go","patch_set":28,"id":"70d8b0f9_53d8db31","line":238,"in_reply_to":"168de3ca_322d2ad8","updated":"2026-03-23 17:45:02.000000000","message":"Done","commit_id":"9b7b5092123cd4a91eb89333be321a89c7cc1ab9"},{"author":{"_account_id":1000338,"name":"Abhi Dangeti","email":"abhinav@couchbase.com","username":"abhinavdangeti","avatars":[{"url":"https://www.gravatar.com/avatar/9007099855b1bf7d96e9c1a10bc9542e.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/9007099855b1bf7d96e9c1a10bc9542e.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/9007099855b1bf7d96e9c1a10bc9542e.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/9007099855b1bf7d96e9c1a10bc9542e.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"a0d01d41ddb2220a0c0c5c5bf0495ded7bafe0ed","unresolved":true,"context_lines":[{"line_number":275,"context_line":"\t\t\treturn nil, err"},{"line_number":276,"context_line":"\t\t}"},{"line_number":277,"context_line":"\t\t// Heuristic sample limit: scale with sqrt of collection size."},{"line_number":278,"context_line":"\t\trv[i] \u003d int(4 * math.Sqrt(float64(docCount)) * 39)"},{"line_number":279,"context_line":"\t}"},{"line_number":280,"context_line":"\treturn rv, nil"},{"line_number":281,"context_line":"}"}],"source_content_type":"text/x-go","patch_set":28,"id":"4358ad0e_02c9172e","line":278,"updated":"2026-02-25 21:28:09.000000000","message":"Let\u0027s declare a constant for 39 here and comments explaining why the formula.","commit_id":"9b7b5092123cd4a91eb89333be321a89c7cc1ab9"},{"author":{"_account_id":1004804,"name":"Thejas-bhat","email":"thejas.orkombu@couchbase.com","username":"Thejas-bhat","avatars":[{"url":"https://www.gravatar.com/avatar/287cbc76d9eb75d794779bc8ce9efb8b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/287cbc76d9eb75d794779bc8ce9efb8b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/287cbc76d9eb75d794779bc8ce9efb8b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/287cbc76d9eb75d794779bc8ce9efb8b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"2461494be8fcab4c692cbcedc4379f5234777025","unresolved":false,"context_lines":[{"line_number":275,"context_line":"\t\t\treturn nil, err"},{"line_number":276,"context_line":"\t\t}"},{"line_number":277,"context_line":"\t\t// Heuristic sample limit: scale with sqrt of collection size."},{"line_number":278,"context_line":"\t\trv[i] \u003d int(4 * math.Sqrt(float64(docCount)) * 39)"},{"line_number":279,"context_line":"\t}"},{"line_number":280,"context_line":"\treturn rv, nil"},{"line_number":281,"context_line":"}"}],"source_content_type":"text/x-go","patch_set":28,"id":"21654deb_cf49837e","line":278,"in_reply_to":"4358ad0e_02c9172e","updated":"2026-02-26 19:55:53.000000000","message":"Done","commit_id":"9b7b5092123cd4a91eb89333be321a89c7cc1ab9"},{"author":{"_account_id":1000338,"name":"Abhi Dangeti","email":"abhinav@couchbase.com","username":"abhinavdangeti","avatars":[{"url":"https://www.gravatar.com/avatar/9007099855b1bf7d96e9c1a10bc9542e.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/9007099855b1bf7d96e9c1a10bc9542e.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/9007099855b1bf7d96e9c1a10bc9542e.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/9007099855b1bf7d96e9c1a10bc9542e.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"a0d01d41ddb2220a0c0c5c5bf0495ded7bafe0ed","unresolved":true,"context_lines":[{"line_number":283,"context_line":"// sampleVectorSamples consumes samples from ch, builds Bleve documents with"},{"line_number":284,"context_line":"// collection scope/UID in extras[sample.cid], indexes them into a training"},{"line_number":285,"context_line":"// batch, and calls vecIndex.Train(batch) when doneCh is closed. returns error"},{"line_number":286,"context_line":"func (t *trainerVector) sampleVectorSamples(ch chan *sample, defaultType string,"},{"line_number":287,"context_line":"\textras [][]byte, vecIndex bleve.VectorIndex, doneCh chan struct{}) error {"},{"line_number":288,"context_line":"\tbatch :\u003d vecIndex.NewBatch()"},{"line_number":289,"context_line":"\tfor {"}],"source_content_type":"text/x-go","patch_set":28,"id":"b25fe8b4_ad541fb4","line":286,"updated":"2026-02-25 21:28:09.000000000","message":"Bad name 😂","commit_id":"9b7b5092123cd4a91eb89333be321a89c7cc1ab9"},{"author":{"_account_id":1004804,"name":"Thejas-bhat","email":"thejas.orkombu@couchbase.com","username":"Thejas-bhat","avatars":[{"url":"https://www.gravatar.com/avatar/287cbc76d9eb75d794779bc8ce9efb8b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/287cbc76d9eb75d794779bc8ce9efb8b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/287cbc76d9eb75d794779bc8ce9efb8b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/287cbc76d9eb75d794779bc8ce9efb8b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"7d2ee239d77c27d3c726f9c3faeb91a22340c69e","unresolved":false,"context_lines":[{"line_number":283,"context_line":"// sampleVectorSamples consumes samples from ch, builds Bleve documents with"},{"line_number":284,"context_line":"// collection scope/UID in extras[sample.cid], indexes them into a training"},{"line_number":285,"context_line":"// batch, and calls vecIndex.Train(batch) when doneCh is closed. returns error"},{"line_number":286,"context_line":"func (t *trainerVector) sampleVectorSamples(ch chan *sample, defaultType string,"},{"line_number":287,"context_line":"\textras [][]byte, vecIndex bleve.VectorIndex, doneCh chan struct{}) error {"},{"line_number":288,"context_line":"\tbatch :\u003d vecIndex.NewBatch()"},{"line_number":289,"context_line":"\tfor {"}],"source_content_type":"text/x-go","patch_set":28,"id":"1d3f90c4_78440727","line":286,"in_reply_to":"b25fe8b4_ad541fb4","updated":"2026-03-23 17:45:02.000000000","message":"Done","commit_id":"9b7b5092123cd4a91eb89333be321a89c7cc1ab9"},{"author":{"_account_id":1000338,"name":"Abhi Dangeti","email":"abhinav@couchbase.com","username":"abhinavdangeti","avatars":[{"url":"https://www.gravatar.com/avatar/9007099855b1bf7d96e9c1a10bc9542e.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/9007099855b1bf7d96e9c1a10bc9542e.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/9007099855b1bf7d96e9c1a10bc9542e.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/9007099855b1bf7d96e9c1a10bc9542e.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"a0d01d41ddb2220a0c0c5c5bf0495ded7bafe0ed","unresolved":true,"context_lines":[{"line_number":367,"context_line":"\tcollectionUIDs, err :\u003d scope.GetCollectionUIDs(cfg.collectionNames)"},{"line_number":368,"context_line":"\tif err !\u003d nil {"},{"line_number":369,"context_line":"\t\treturn err"},{"line_number":370,"context_line":"\t}"},{"line_number":371,"context_line":""},{"line_number":372,"context_line":"\t// Encode scope UID and collection UID per collection for document building."},{"line_number":373,"context_line":"\textraOpts :\u003d make([][]byte, len(cfg.collectionNames))"}],"source_content_type":"text/x-go","patch_set":28,"id":"d81a334d_886a3b1f","line":370,"updated":"2026-02-25 21:28:09.000000000","message":"Related to comment in collection_utils.go - let\u0027s unify these 2 calls into one.","commit_id":"9b7b5092123cd4a91eb89333be321a89c7cc1ab9"},{"author":{"_account_id":1004804,"name":"Thejas-bhat","email":"thejas.orkombu@couchbase.com","username":"Thejas-bhat","avatars":[{"url":"https://www.gravatar.com/avatar/287cbc76d9eb75d794779bc8ce9efb8b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/287cbc76d9eb75d794779bc8ce9efb8b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/287cbc76d9eb75d794779bc8ce9efb8b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/287cbc76d9eb75d794779bc8ce9efb8b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"2461494be8fcab4c692cbcedc4379f5234777025","unresolved":false,"context_lines":[{"line_number":367,"context_line":"\tcollectionUIDs, err :\u003d scope.GetCollectionUIDs(cfg.collectionNames)"},{"line_number":368,"context_line":"\tif err !\u003d nil {"},{"line_number":369,"context_line":"\t\treturn err"},{"line_number":370,"context_line":"\t}"},{"line_number":371,"context_line":""},{"line_number":372,"context_line":"\t// Encode scope UID and collection UID per collection for document building."},{"line_number":373,"context_line":"\textraOpts :\u003d make([][]byte, len(cfg.collectionNames))"}],"source_content_type":"text/x-go","patch_set":28,"id":"6e00286b_90cf9227","line":370,"in_reply_to":"d81a334d_886a3b1f","updated":"2026-02-26 19:55:53.000000000","message":"Done","commit_id":"9b7b5092123cd4a91eb89333be321a89c7cc1ab9"},{"author":{"_account_id":1000338,"name":"Abhi Dangeti","email":"abhinav@couchbase.com","username":"abhinavdangeti","avatars":[{"url":"https://www.gravatar.com/avatar/9007099855b1bf7d96e9c1a10bc9542e.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/9007099855b1bf7d96e9c1a10bc9542e.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/9007099855b1bf7d96e9c1a10bc9542e.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/9007099855b1bf7d96e9c1a10bc9542e.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"a0d01d41ddb2220a0c0c5c5bf0495ded7bafe0ed","unresolved":true,"context_lines":[{"line_number":421,"context_line":"// names from the Bleve index mapping (vector type mapping only). Returns an"},{"line_number":422,"context_line":"// error if the index is not a vector index."},{"line_number":423,"context_line":"func (t *trainerVector) getIndexSourceInfo() (string, string, string, []string, error) {"},{"line_number":424,"context_line":"\tdefaultType :\u003d \"_default\""},{"line_number":425,"context_line":"\tvar collectionNames []string"},{"line_number":426,"context_line":"\tvar scopeName string"},{"line_number":427,"context_line":"\tvar err error"}],"source_content_type":"text/x-go","patch_set":28,"id":"b64ae392_0b2f5fd9","line":424,"updated":"2026-02-25 21:28:09.000000000","message":"What is this for? I don\u0027t think we support anything else other than this right?","commit_id":"9b7b5092123cd4a91eb89333be321a89c7cc1ab9"},{"author":{"_account_id":1004804,"name":"Thejas-bhat","email":"thejas.orkombu@couchbase.com","username":"Thejas-bhat","avatars":[{"url":"https://www.gravatar.com/avatar/287cbc76d9eb75d794779bc8ce9efb8b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/287cbc76d9eb75d794779bc8ce9efb8b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/287cbc76d9eb75d794779bc8ce9efb8b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/287cbc76d9eb75d794779bc8ce9efb8b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"afa05b6ec9959f10fbecc59a82594c3365550c91","unresolved":false,"context_lines":[{"line_number":421,"context_line":"// names from the Bleve index mapping (vector type mapping only). Returns an"},{"line_number":422,"context_line":"// error if the index is not a vector index."},{"line_number":423,"context_line":"func (t *trainerVector) getIndexSourceInfo() (string, string, string, []string, error) {"},{"line_number":424,"context_line":"\tdefaultType :\u003d \"_default\""},{"line_number":425,"context_line":"\tvar collectionNames []string"},{"line_number":426,"context_line":"\tvar scopeName string"},{"line_number":427,"context_line":"\tvar err error"}],"source_content_type":"text/x-go","patch_set":28,"id":"c606f754_ebdcb56d","line":424,"in_reply_to":"a2439385_145cbaaf","updated":"2026-03-27 21:10:55.000000000","message":"Done","commit_id":"9b7b5092123cd4a91eb89333be321a89c7cc1ab9"},{"author":{"_account_id":1004804,"name":"Thejas-bhat","email":"thejas.orkombu@couchbase.com","username":"Thejas-bhat","avatars":[{"url":"https://www.gravatar.com/avatar/287cbc76d9eb75d794779bc8ce9efb8b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/287cbc76d9eb75d794779bc8ce9efb8b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/287cbc76d9eb75d794779bc8ce9efb8b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/287cbc76d9eb75d794779bc8ce9efb8b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"2461494be8fcab4c692cbcedc4379f5234777025","unresolved":true,"context_lines":[{"line_number":421,"context_line":"// names from the Bleve index mapping (vector type mapping only). Returns an"},{"line_number":422,"context_line":"// error if the index is not a vector index."},{"line_number":423,"context_line":"func (t *trainerVector) getIndexSourceInfo() (string, string, string, []string, error) {"},{"line_number":424,"context_line":"\tdefaultType :\u003d \"_default\""},{"line_number":425,"context_line":"\tvar collectionNames []string"},{"line_number":426,"context_line":"\tvar scopeName string"},{"line_number":427,"context_line":"\tvar err error"}],"source_content_type":"text/x-go","patch_set":28,"id":"a2439385_145cbaaf","line":424,"in_reply_to":"b64ae392_0b2f5fd9","updated":"2026-02-26 19:55:53.000000000","message":"its the default type identifier to use while indexing document (and can changed based on whether a regex/json type field etc. was used get the identifier)","commit_id":"9b7b5092123cd4a91eb89333be321a89c7cc1ab9"},{"author":{"_account_id":1000338,"name":"Abhi Dangeti","email":"abhinav@couchbase.com","username":"abhinavdangeti","avatars":[{"url":"https://www.gravatar.com/avatar/9007099855b1bf7d96e9c1a10bc9542e.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/9007099855b1bf7d96e9c1a10bc9542e.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/9007099855b1bf7d96e9c1a10bc9542e.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/9007099855b1bf7d96e9c1a10bc9542e.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"6e3c16cfb466d703ae92e24a715d46a96a3147d3","unresolved":true,"context_lines":[{"line_number":455,"context_line":"// index\u0027s sampling worker: if this dest creates the worker (first for that"},{"line_number":456,"context_line":"// index), then create the centroid index; otherwise wait on worker.copyCh and"},{"line_number":457,"context_line":"// then copy the centroid index from the source. Always close doneCh when done."},{"line_number":458,"context_line":"func (t *trainerVector) trySampling() {"},{"line_number":459,"context_line":"\tvar err error"},{"line_number":460,"context_line":"\tdefer func() {"},{"line_number":461,"context_line":"\t\tif err !\u003d nil {"}],"source_content_type":"text/x-go","patch_set":28,"id":"5d37b765_c4e10f64","line":458,"updated":"2026-02-25 21:15:56.000000000","message":"Need to handle the case where training is not requested at all - simply close doneCh?","commit_id":"9b7b5092123cd4a91eb89333be321a89c7cc1ab9"},{"author":{"_account_id":1004804,"name":"Thejas-bhat","email":"thejas.orkombu@couchbase.com","username":"Thejas-bhat","avatars":[{"url":"https://www.gravatar.com/avatar/287cbc76d9eb75d794779bc8ce9efb8b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/287cbc76d9eb75d794779bc8ce9efb8b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/287cbc76d9eb75d794779bc8ce9efb8b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/287cbc76d9eb75d794779bc8ce9efb8b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"2461494be8fcab4c692cbcedc4379f5234777025","unresolved":true,"context_lines":[{"line_number":455,"context_line":"// index\u0027s sampling worker: if this dest creates the worker (first for that"},{"line_number":456,"context_line":"// index), then create the centroid index; otherwise wait on worker.copyCh and"},{"line_number":457,"context_line":"// then copy the centroid index from the source. Always close doneCh when done."},{"line_number":458,"context_line":"func (t *trainerVector) trySampling() {"},{"line_number":459,"context_line":"\tvar err error"},{"line_number":460,"context_line":"\tdefer func() {"},{"line_number":461,"context_line":"\t\tif err !\u003d nil {"}],"source_content_type":"text/x-go","patch_set":28,"id":"887dd9da_6015f1eb","line":458,"in_reply_to":"5d37b765_c4e10f64","updated":"2026-02-26 19:55:53.000000000","message":"if the idnex mapping says we don\u0027t want to use this feature - then the trainerVector would be nil and we don\u0027t hit this path. its there in this PR\nhttps://review.couchbase.org/c/cbft/+/240266\n\nlet me refactor that PR to have only the UI stuff in it.","commit_id":"9b7b5092123cd4a91eb89333be321a89c7cc1ab9"},{"author":{"_account_id":1004804,"name":"Thejas-bhat","email":"thejas.orkombu@couchbase.com","username":"Thejas-bhat","avatars":[{"url":"https://www.gravatar.com/avatar/287cbc76d9eb75d794779bc8ce9efb8b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/287cbc76d9eb75d794779bc8ce9efb8b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/287cbc76d9eb75d794779bc8ce9efb8b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/287cbc76d9eb75d794779bc8ce9efb8b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"7d2ee239d77c27d3c726f9c3faeb91a22340c69e","unresolved":false,"context_lines":[{"line_number":455,"context_line":"// index\u0027s sampling worker: if this dest creates the worker (first for that"},{"line_number":456,"context_line":"// index), then create the centroid index; otherwise wait on worker.copyCh and"},{"line_number":457,"context_line":"// then copy the centroid index from the source. Always close doneCh when done."},{"line_number":458,"context_line":"func (t *trainerVector) trySampling() {"},{"line_number":459,"context_line":"\tvar err error"},{"line_number":460,"context_line":"\tdefer func() {"},{"line_number":461,"context_line":"\t\tif err !\u003d nil {"}],"source_content_type":"text/x-go","patch_set":28,"id":"77a1b7f0_35467e27","line":458,"in_reply_to":"887dd9da_6015f1eb","updated":"2026-03-23 17:45:02.000000000","message":"Done","commit_id":"9b7b5092123cd4a91eb89333be321a89c7cc1ab9"}],"training_sampler.go":[{"author":{"_account_id":1000338,"name":"Abhi Dangeti","email":"abhinav@couchbase.com","username":"abhinavdangeti","avatars":[{"url":"https://www.gravatar.com/avatar/9007099855b1bf7d96e9c1a10bc9542e.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/9007099855b1bf7d96e9c1a10bc9542e.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/9007099855b1bf7d96e9c1a10bc9542e.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/9007099855b1bf7d96e9c1a10bc9542e.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"e3c3433bc811c03c98836fb4dd9962f4ad9f204b","unresolved":true,"context_lines":[{"line_number":5,"context_line":"//  in that file, in accordance with the Business Source License, use of this"},{"line_number":6,"context_line":"//  software will be governed by the Apache License, Version 2.0, included in"},{"line_number":7,"context_line":"//  the file licenses/APL2.txt."},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"package cbft"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"import ("}],"source_content_type":"text/x-go","patch_set":18,"id":"27795352_692c2f05","line":8,"updated":"2026-01-29 03:04:43.000000000","message":"`go:build vectors` ?","commit_id":"a6c6edf5f3b11bed24a4f3ce7a9bc105299181ff"},{"author":{"_account_id":1004804,"name":"Thejas-bhat","email":"thejas.orkombu@couchbase.com","username":"Thejas-bhat","avatars":[{"url":"https://www.gravatar.com/avatar/287cbc76d9eb75d794779bc8ce9efb8b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/287cbc76d9eb75d794779bc8ce9efb8b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/287cbc76d9eb75d794779bc8ce9efb8b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/287cbc76d9eb75d794779bc8ce9efb8b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"f8ee38624b23618315d47f45dc92a7ca7d43aaef","unresolved":false,"context_lines":[{"line_number":5,"context_line":"//  in that file, in accordance with the Business Source License, use of this"},{"line_number":6,"context_line":"//  software will be governed by the Apache License, Version 2.0, included in"},{"line_number":7,"context_line":"//  the file licenses/APL2.txt."},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"package cbft"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"import ("}],"source_content_type":"text/x-go","patch_set":18,"id":"d6ebf10c_f87281d4","line":8,"in_reply_to":"27795352_692c2f05","updated":"2026-01-29 22:46:15.000000000","message":"Done","commit_id":"a6c6edf5f3b11bed24a4f3ce7a9bc105299181ff"}]}
