Lines Matching refs:indexer

97 static int build_index(DB_INDEXER *indexer);
98 static int close_indexer(DB_INDEXER *indexer);
99 static int abort_indexer(DB_INDEXER *indexer);
100 static void free_indexer_resources(DB_INDEXER *indexer);
101 static void free_indexer(DB_INDEXER *indexer);
102 static int update_estimated_rows(DB_INDEXER *indexer);
103 static int maybe_call_poll_func(DB_INDEXER *indexer, uint64_t loop_count);
106 associate_indexer_with_hot_dbs(DB_INDEXER *indexer, DB *dest_dbs[], int N) { in associate_indexer_with_hot_dbs() argument
109 result = toku_db_set_indexer(dest_dbs[i], indexer); in associate_indexer_with_hot_dbs()
122 disassociate_indexer_from_hot_dbs(DB_INDEXER *indexer) { in disassociate_indexer_from_hot_dbs() argument
123 for (int i = 0; i < indexer->i->N; i++) { in disassociate_indexer_from_hot_dbs()
124 int result = toku_db_set_indexer(indexer->i->dest_dbs[i], NULL); in disassociate_indexer_from_hot_dbs()
136 free_indexer_resources(DB_INDEXER *indexer) { in free_indexer_resources() argument
137 if ( indexer->i ) { in free_indexer_resources()
138 toku_mutex_destroy(&indexer->i->indexer_lock); in free_indexer_resources()
139 toku_mutex_destroy(&indexer->i->indexer_estimate_lock); in free_indexer_resources()
140 toku_destroy_dbt(&indexer->i->position_estimate); in free_indexer_resources()
141 if ( indexer->i->lec ) { in free_indexer_resources()
142 toku_le_cursor_close(indexer->i->lec); in free_indexer_resources()
144 if ( indexer->i->fnums ) { in free_indexer_resources()
145 toku_free(indexer->i->fnums); in free_indexer_resources()
146 indexer->i->fnums = NULL; in free_indexer_resources()
148 indexer_undo_do_destroy(indexer); in free_indexer_resources()
150 toku_free(indexer->i); in free_indexer_resources()
151 indexer->i = NULL; in free_indexer_resources()
156 free_indexer(DB_INDEXER *indexer) { in free_indexer() argument
157 if ( indexer ) { in free_indexer()
158 free_indexer_resources(indexer); in free_indexer()
159 toku_free(indexer); in free_indexer()
160 indexer = NULL; in free_indexer()
165 toku_indexer_lock(DB_INDEXER* indexer) { in toku_indexer_lock() argument
166 toku_mutex_lock(&indexer->i->indexer_lock); in toku_indexer_lock()
170 toku_indexer_unlock(DB_INDEXER* indexer) { in toku_indexer_unlock() argument
171 toku_mutex_unlock(&indexer->i->indexer_lock); in toku_indexer_unlock()
181 toku_indexer_may_insert(DB_INDEXER* indexer, const DBT* key) { in toku_indexer_may_insert() argument
183 toku_mutex_lock(&indexer->i->indexer_estimate_lock); in toku_indexer_may_insert()
186 if (indexer->i->position_estimate.data == nullptr) { in toku_indexer_may_insert()
189 DB *db = indexer->i->src_db; in toku_indexer_may_insert()
191 int c = cmp(&indexer->i->position_estimate, key); in toku_indexer_may_insert()
199 toku_mutex_unlock(&indexer->i->indexer_estimate_lock); in toku_indexer_may_insert()
204 toku_indexer_update_estimate(DB_INDEXER* indexer) { in toku_indexer_update_estimate() argument
205 toku_mutex_lock(&indexer->i->indexer_estimate_lock); in toku_indexer_update_estimate()
206 toku_le_cursor_update_estimate(indexer->i->lec, &indexer->i->position_estimate); in toku_indexer_update_estimate()
207 toku_mutex_unlock(&indexer->i->indexer_estimate_lock); in toku_indexer_update_estimate()
211 static int test_indexer_undo_do(DB_INDEXER *indexer, DB *hotdb, DBT* key, ULEHANDLE ule);
224 DB_INDEXER *indexer = 0; // set later when created in toku_indexer_create_indexer() local
229 … XCALLOC(indexer); // init to all zeroes (thus initializing the error_callback and poll_func) in toku_indexer_create_indexer()
230 if ( !indexer ) { rval = ENOMEM; goto create_exit; } in toku_indexer_create_indexer()
231 XCALLOC(indexer->i); // init to all zeroes (thus initializing all pointers to NULL) in toku_indexer_create_indexer()
232 if ( !indexer->i ) { rval = ENOMEM; goto create_exit; } in toku_indexer_create_indexer()
234 indexer->i->env = env; in toku_indexer_create_indexer()
235 indexer->i->txn = txn; in toku_indexer_create_indexer()
236 indexer->i->src_db = src_db; in toku_indexer_create_indexer()
237 indexer->i->N = N; in toku_indexer_create_indexer()
238 indexer->i->dest_dbs = dest_dbs; in toku_indexer_create_indexer()
239 indexer->i->indexer_flags = indexer_flags; in toku_indexer_create_indexer()
240 indexer->i->loop_mod = 1000; // call poll_func every 1000 rows in toku_indexer_create_indexer()
241 indexer->i->estimated_rows = 0; in toku_indexer_create_indexer()
242 indexer->i->undo_do = test_indexer_undo_do; // TEST export the undo do function in toku_indexer_create_indexer()
244 XCALLOC_N(N, indexer->i->fnums); in toku_indexer_create_indexer()
245 if ( !indexer->i->fnums ) { rval = ENOMEM; goto create_exit; } in toku_indexer_create_indexer()
246 for(int i=0;i<indexer->i->N;i++) { in toku_indexer_create_indexer()
247indexer->i->fnums[i] = toku_cachefile_filenum(db_struct_i(dest_dbs[i])->ft_handle->ft->cf); in toku_indexer_create_indexer()
249 indexer->i->filenums.num = N; in toku_indexer_create_indexer()
250 indexer->i->filenums.filenums = indexer->i->fnums; in toku_indexer_create_indexer()
251 indexer->i->test_only_flags = 0; // for test use only in toku_indexer_create_indexer()
253 indexer->set_error_callback = toku_indexer_set_error_callback; in toku_indexer_create_indexer()
254 indexer->set_poll_function = toku_indexer_set_poll_function; in toku_indexer_create_indexer()
255 indexer->build = build_index; in toku_indexer_create_indexer()
256 indexer->close = close_indexer; in toku_indexer_create_indexer()
257 indexer->abort = abort_indexer; in toku_indexer_create_indexer()
260 *indexer_i_indexer_lock_mutex_key, &indexer->i->indexer_lock, nullptr); in toku_indexer_create_indexer()
262 &indexer->i->indexer_estimate_lock, in toku_indexer_create_indexer()
264 toku_init_dbt(&indexer->i->position_estimate); in toku_indexer_create_indexer()
287 …rval = toku_le_cursor_create(&indexer->i->lec, db_struct_i(src_db)->ft_handle, db_txn_struct_i(txn… in toku_indexer_create_indexer()
288 if ( !indexer->i->lec ) { goto create_exit; } in toku_indexer_create_indexer()
295 filenums = indexer->i->filenums; in toku_indexer_create_indexer()
301 rval = associate_indexer_with_hot_dbs(indexer, dest_dbs, N); in toku_indexer_create_indexer()
306 indexer_undo_do_init(indexer); in toku_indexer_create_indexer()
308 *indexerp = indexer; in toku_indexer_create_indexer()
317 free_indexer(indexer); in toku_indexer_create_indexer()
324 toku_indexer_set_poll_function(DB_INDEXER *indexer, in toku_indexer_set_poll_function() argument
329 invariant(indexer != NULL); in toku_indexer_set_poll_function()
330 indexer->i->poll_func = poll_func; in toku_indexer_set_poll_function()
331 indexer->i->poll_extra = poll_extra; in toku_indexer_set_poll_function()
336 toku_indexer_set_error_callback(DB_INDEXER *indexer, in toku_indexer_set_error_callback() argument
342 invariant(indexer != NULL); in toku_indexer_set_error_callback()
343 indexer->i->error_callback = error_cb; in toku_indexer_set_error_callback()
344 indexer->i->error_extra = error_extra; in toku_indexer_set_error_callback()
351 toku_indexer_should_insert_key(DB_INDEXER *indexer, const DBT *key) { in toku_indexer_should_insert_key() argument
358 return toku_le_cursor_is_key_greater_or_equal(indexer->i->lec, key); in toku_indexer_should_insert_key()
397 indexer_fill_prov_info(DB_INDEXER *indexer, struct ule_prov_info *prov_info) { in indexer_fill_prov_info() argument
412 if (indexer->i->test_xid_state) { in indexer_fill_prov_info()
416 prov_states[i] = indexer->i->test_xid_state(indexer, prov_ids[i]); in indexer_fill_prov_info()
424 DB_ENV *env = indexer->i->env; in indexer_fill_prov_info()
485 DB_INDEXER *indexer; member
509 indexer_fill_prov_info(cursor_extra->indexer, prov_info); in le_cursor_callback()
518 get_next_ule_with_prov_info(DB_INDEXER *indexer, struct ule_prov_info *prov_info) { in get_next_ule_with_prov_info() argument
520 .indexer = indexer, in get_next_ule_with_prov_info()
523 int r = toku_le_cursor_next(indexer->i->lec, le_cursor_callback, &extra); in get_next_ule_with_prov_info()
528 build_index(DB_INDEXER *indexer) { in build_index() argument
534 toku_indexer_lock(indexer); in build_index()
550 result = get_next_ule_with_prov_info(indexer, &prov_info); in build_index()
562 for (int which_db = 0; (which_db < indexer->i->N) && (result == 0); which_db++) { in build_index()
563 DB *db = indexer->i->dest_dbs[which_db]; in build_index()
564 DBT_ARRAY *hot_keys = &indexer->i->hot_keys[which_db]; in build_index()
565 DBT_ARRAY *hot_vals = &indexer->i->hot_vals[which_db]; in build_index()
566 result = indexer_undo_do(indexer, db, &prov_info, hot_keys, hot_vals); in build_index()
567 if ((result != 0) && (indexer->i->error_callback != NULL)) { in build_index()
571indexer->i->error_callback(db, which_db, result, &key, NULL, indexer->i->error_extra); in build_index()
583 toku_indexer_unlock(indexer); in build_index()
587 result = maybe_call_poll_func(indexer, loop_count); in build_index()
602 DB_ENV *env = indexer->i->env; in build_index()
615 close_indexer(DB_INDEXER *indexer) { in close_indexer() argument
620 disassociate_indexer_from_hot_dbs(indexer); in close_indexer()
621 free_indexer(indexer); in close_indexer()
633 abort_indexer(DB_INDEXER *indexer) { in abort_indexer() argument
637 disassociate_indexer_from_hot_dbs(indexer); in abort_indexer()
638 free_indexer(indexer); in abort_indexer()
645 update_estimated_rows(DB_INDEXER *indexer) { in update_estimated_rows() argument
648 DB_ENV *db_env = indexer->i->env; in update_estimated_rows()
652 DB *db = indexer->i->src_db; in update_estimated_rows()
655 indexer->i->estimated_rows = stats.bt_ndata; in update_estimated_rows()
663 maybe_call_poll_func(DB_INDEXER *indexer, uint64_t loop_count) { in maybe_call_poll_func() argument
665 if ( indexer->i->poll_func != NULL && ( loop_count % indexer->i->loop_mod ) == 0 ) { in maybe_call_poll_func()
666 int r __attribute__((unused)) = update_estimated_rows(indexer); in maybe_call_poll_func()
670 if ( indexer->i->estimated_rows == 0 || loop_count > indexer->i->estimated_rows) in maybe_call_poll_func()
673 progress = (float)loop_count / (float)indexer->i->estimated_rows; in maybe_call_poll_func()
674 result = indexer->i->poll_func(indexer->i->poll_extra, progress); in maybe_call_poll_func()
682 toku_indexer_set_test_only_flags(DB_INDEXER *indexer, int flags) { in toku_indexer_set_test_only_flags() argument
683 invariant(indexer != NULL); in toku_indexer_set_test_only_flags()
684 indexer->i->test_only_flags = flags; in toku_indexer_set_test_only_flags()
690 test_indexer_undo_do(DB_INDEXER *indexer, DB *hotdb, DBT* key, ULEHANDLE ule) { in test_indexer_undo_do() argument
692 for (which_db = 0; which_db < indexer->i->N; which_db++) { in test_indexer_undo_do()
693 if (indexer->i->dest_dbs[which_db] == hotdb) { in test_indexer_undo_do()
697 if (which_db == indexer->i->N) { in test_indexer_undo_do()
704 indexer_fill_prov_info(indexer, &prov_info); in test_indexer_undo_do()
705 DBT_ARRAY *hot_keys = &indexer->i->hot_keys[which_db]; in test_indexer_undo_do()
706 DBT_ARRAY *hot_vals = &indexer->i->hot_vals[which_db]; in test_indexer_undo_do()
707 int r = indexer_undo_do(indexer, hotdb, &prov_info, hot_keys, hot_vals); in test_indexer_undo_do()
714 toku_indexer_get_src_db(DB_INDEXER *indexer) { in toku_indexer_get_src_db() argument
715 return indexer->i->src_db; in toku_indexer_get_src_db()