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;
}