Commit 48ad1acd authored by Zardosht Kasheff's avatar Zardosht Kasheff Committed by Yoni Fogel

addresses #1923

git-svn-id: file:///svn/mysql/tokudb-engine/src@13833 c7de825b-a66e-492c-adef-691d508d4ae1
parent 1b8d0704
...@@ -1397,14 +1397,14 @@ int ha_tokudb::estimate_num_rows(DB* db, u_int64_t* num_rows) { ...@@ -1397,14 +1397,14 @@ int ha_tokudb::estimate_num_rows(DB* db, u_int64_t* num_rows) {
*num_rows = equal + greater; *num_rows = equal + greater;
error = 0; error = 0;
cleanup: cleanup:
if (do_commit) {
transaction->commit(transaction, 0);
transaction = NULL;
}
if (crsr != NULL) { if (crsr != NULL) {
crsr->c_close(crsr); crsr->c_close(crsr);
crsr = NULL; crsr = NULL;
} }
if (do_commit) {
transaction->commit(transaction, 0);
transaction = NULL;
}
return error; return error;
} }
...@@ -5392,7 +5392,7 @@ int ha_tokudb::add_index(TABLE *table_arg, KEY *key_info, uint num_of_keys) { ...@@ -5392,7 +5392,7 @@ int ha_tokudb::add_index(TABLE *table_arg, KEY *key_info, uint num_of_keys) {
// //
error = db_env->txn_begin(db_env, 0, &txn, 0); error = db_env->txn_begin(db_env, 0, &txn, 0);
assert(error == 0); if (error) { goto cleanup; }
// //
// grab some locks to make this go faster // grab some locks to make this go faster
...@@ -5407,7 +5407,7 @@ int ha_tokudb::add_index(TABLE *table_arg, KEY *key_info, uint num_of_keys) { ...@@ -5407,7 +5407,7 @@ int ha_tokudb::add_index(TABLE *table_arg, KEY *key_info, uint num_of_keys) {
share->file->dbt_pos_infty(), share->file->dbt_pos_infty(),
NULL NULL
); );
if (error) { txn->commit(txn, 0); goto cleanup; } if (error) { goto cleanup; }
// //
// now grab a table write lock for secondary tables we // now grab a table write lock for secondary tables we
...@@ -5419,7 +5419,7 @@ int ha_tokudb::add_index(TABLE *table_arg, KEY *key_info, uint num_of_keys) { ...@@ -5419,7 +5419,7 @@ int ha_tokudb::add_index(TABLE *table_arg, KEY *key_info, uint num_of_keys) {
share->key_file[curr_index], share->key_file[curr_index],
txn txn
); );
if (error) { txn->commit(txn, 0); goto cleanup; } if (error) { goto cleanup; }
} }
if ((error = share->file->cursor(share->file, txn, &tmp_cursor, 0))) { if ((error = share->file->cursor(share->file, txn, &tmp_cursor, 0))) {
...@@ -5465,13 +5465,6 @@ int ha_tokudb::add_index(TABLE *table_arg, KEY *key_info, uint num_of_keys) { ...@@ -5465,13 +5465,6 @@ int ha_tokudb::add_index(TABLE *table_arg, KEY *key_info, uint num_of_keys) {
error = share->key_file[curr_index]->put(share->key_file[curr_index], txn, &secondary_key, &current_primary_key, put_flags); error = share->key_file[curr_index]->put(share->key_file[curr_index], txn, &secondary_key, &current_primary_key, put_flags);
} }
if (error) { if (error) {
//
// in the case of any error anywhere, we can just nuke all the files created, so we dont need
// to be tricky and try to roll back changes. That is why we commit the transaction,
// which should be fast. The DB is going to go away anyway, so no pt in trying to keep
// it in a good state.
//
txn->commit(txn, 0);
// //
// found a duplicate in a no_dup DB // found a duplicate in a no_dup DB
// //
...@@ -5490,7 +5483,6 @@ int ha_tokudb::add_index(TABLE *table_arg, KEY *key_info, uint num_of_keys) { ...@@ -5490,7 +5483,6 @@ int ha_tokudb::add_index(TABLE *table_arg, KEY *key_info, uint num_of_keys) {
thd_proc_info(thd, status_msg); thd_proc_info(thd, status_msg);
if (thd->killed) { if (thd->killed) {
error = ER_ABORTING_CONNECTION; error = ER_ABORTING_CONNECTION;
txn->commit(txn, 0);
goto cleanup; goto cleanup;
} }
} }
...@@ -5520,9 +5512,6 @@ int ha_tokudb::add_index(TABLE *table_arg, KEY *key_info, uint num_of_keys) { ...@@ -5520,9 +5512,6 @@ int ha_tokudb::add_index(TABLE *table_arg, KEY *key_info, uint num_of_keys) {
while (error != DB_NOTFOUND) { while (error != DB_NOTFOUND) {
error = tmp_cursor->c_getf_next(tmp_cursor, DB_PRELOCKED, smart_dbt_do_nothing, NULL); error = tmp_cursor->c_getf_next(tmp_cursor, DB_PRELOCKED, smart_dbt_do_nothing, NULL);
if (error && error != DB_NOTFOUND) { if (error && error != DB_NOTFOUND) {
tmp_cursor->c_close(tmp_cursor);
tmp_cursor = NULL;
txn->commit(txn, 0);
goto cleanup; goto cleanup;
} }
num_processed++; num_processed++;
...@@ -5531,7 +5520,6 @@ int ha_tokudb::add_index(TABLE *table_arg, KEY *key_info, uint num_of_keys) { ...@@ -5531,7 +5520,6 @@ int ha_tokudb::add_index(TABLE *table_arg, KEY *key_info, uint num_of_keys) {
thd_proc_info(thd, status_msg); thd_proc_info(thd, status_msg);
if (thd->killed) { if (thd->killed) {
error = ER_ABORTING_CONNECTION; error = ER_ABORTING_CONNECTION;
txn->commit(txn, 0);
goto cleanup; goto cleanup;
} }
} }
...@@ -5542,6 +5530,7 @@ int ha_tokudb::add_index(TABLE *table_arg, KEY *key_info, uint num_of_keys) { ...@@ -5542,6 +5530,7 @@ int ha_tokudb::add_index(TABLE *table_arg, KEY *key_info, uint num_of_keys) {
} }
error = txn->commit(txn, 0); error = txn->commit(txn, 0);
txn = NULL;
assert(error == 0); assert(error == 0);
error = 0; error = 0;
...@@ -5551,6 +5540,15 @@ cleanup: ...@@ -5551,6 +5540,15 @@ cleanup:
tmp_cursor->c_close(tmp_cursor); tmp_cursor->c_close(tmp_cursor);
tmp_cursor = NULL; tmp_cursor = NULL;
} }
if (txn) {
//
// in the case of any error anywhere, we can just nuke all the files created, so we dont need
// to be tricky and try to roll back changes. That is why we commit the transaction,
// which should be fast. The DB is going to go away anyway, so no pt in trying to keep
// it in a good state.
//
txn->commit(txn, 0);
}
// //
// We need to delete all the files that may have been created // We need to delete all the files that may have been created
// The DB's must be closed and removed // The DB's must be closed and removed
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment