std::set<storage::TileGroupHeader *> WriteBehindFrontendLogger::ToggleCommitMarks( std::vector<txn_id_t> committed_txn_list) { // Headers modified std::set<storage::TileGroupHeader *> tile_group_headers; // Toggle commit marks for (txn_id_t txn_id : committed_txn_list) { auto txn_log_list = global_peloton_log_record_pool.SearchLogRecordList(txn_id); if (txn_log_list == nullptr) { continue; } for (size_t txn_log_list_itr = 0; txn_log_list_itr < txn_log_list->size(); txn_log_list_itr++) { // Get the log record TupleRecord *record = txn_log_list->at(txn_log_list_itr); cid_t current_commit_id = INVALID_CID; auto record_type = record->GetType(); switch (record_type) { case LOGRECORD_TYPE_WBL_TUPLE_INSERT: { // Set insert commit mark auto insert_location = record->GetInsertLocation(); auto info = SetInsertCommitMark(insert_location); current_commit_id = info.first; tile_group_headers.insert(info.second); } break; case LOGRECORD_TYPE_WBL_TUPLE_DELETE: { // Set delete commit mark auto delete_location = record->GetDeleteLocation(); auto info = SetDeleteCommitMark(delete_location); current_commit_id = info.first; tile_group_headers.insert(info.second); } break; case LOGRECORD_TYPE_WBL_TUPLE_UPDATE: { // Set delete commit mark auto delete_location = record->GetDeleteLocation(); auto info = SetDeleteCommitMark(delete_location); current_commit_id = info.first; tile_group_headers.insert(info.second); // Set insert commit mark auto insert_location = record->GetInsertLocation(); info = SetInsertCommitMark(insert_location); current_commit_id = info.first; tile_group_headers.insert(info.second); } break; default: break; } // Update latest commit id if (latest_commit_id < current_commit_id) { latest_commit_id = current_commit_id; } } // TODO: All records are committed, its safe to remove them now global_peloton_log_record_pool.RemoveTransactionLogList(txn_id); } return tile_group_headers; }