Changeset: cfa6053b6ed1 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=cfa6053b6ed1 Modified Files: sql/storage/objectset.c Branch: nospare Log Message:
Fix rollback. diffs (75 lines): diff --git a/sql/storage/objectset.c b/sql/storage/objectset.c --- a/sql/storage/objectset.c +++ b/sql/storage/objectset.c @@ -330,7 +330,7 @@ os_rollback_os_id_based_cascading(object assert(state & id_based_rollbacked); if (ov->id_based_older) { - if (1 || ov->ts != ov->id_based_older->ts || state & deleted) { + if (ov->ts != ov->id_based_older->ts) { // older is last committed state or belongs to parent transaction. // In any case, we restore versionhead pointer to that. // TODO START ATOMIC SET @@ -360,7 +360,7 @@ os_rollback_os_name_based_cascading(obje assert(state & name_based_rollbacked); if (ov->name_based_older) { - if (1 || ov->ts != ov->name_based_older->ts || state & deleted) { + if (ov->ts != ov->name_based_older->ts) { // older is last committed state or belongs to parent transaction. // In any case, we restore versionhead pointer to that. // TODO START ATOMIC SET @@ -385,9 +385,11 @@ os_rollback_os_name_based_cascading(obje } static void -os_rollback_name_based_terminal_decendant(objectversion *ov, sqlstore *store) { +os_rollback_name_based_terminal_decendant(objectversion *ov, sqlstore *store) +{ + assert(ov->ts >= TRANSACTION_ID_BASE); + bte state = os_atmc_get_state(ov); - if (state & name_based_rollbacked) { return; } @@ -402,9 +404,11 @@ os_rollback_name_based_terminal_decendan } static void -os_rollback_id_based_terminal_decendant(objectversion *ov, sqlstore *store) { +os_rollback_id_based_terminal_decendant(objectversion *ov, sqlstore *store) +{ + assert(ov->ts >= TRANSACTION_ID_BASE); + bte state = os_atmc_get_state(ov); - if (state & id_based_rollbacked) { return; } @@ -421,9 +425,11 @@ os_rollback_id_based_terminal_decendant( static int os_rollback(objectversion *ov, sqlstore *store) { - os_rollback_name_based_terminal_decendant(ov->name_based_head->ov, store); + if (ov->state & name_based_rollbacked) { + return LOG_OK; + } - // TODO: label objectversion with a latest timestamp of tid. + os_rollback_name_based_terminal_decendant(ov->name_based_head->ov, store); return LOG_OK; } @@ -941,7 +947,10 @@ os_del(objectset *os, struct sql_trans * } if (os_del_name_based(os, tr, name, ov)) { - // TODO clean up ov + bte state = os_atmc_get_state(ov); + state |= name_based_rollbacked; + os_atmc_set_state(ov, state); + os_rollback_id_based_terminal_decendant(ov, tr->store); return -1; } _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list