Changeset: 65dc106455c4 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/65dc106455c4
Modified Files:
sql/storage/bat/bat_storage.c
Branch: default
Log Message:
Do not merge unreachable delta's.
diffs (96 lines):
diff --git a/sql/storage/bat/bat_storage.c b/sql/storage/bat/bat_storage.c
--- a/sql/storage/bat/bat_storage.c
+++ b/sql/storage/bat/bat_storage.c
@@ -4506,18 +4506,6 @@ commit_update_del( sql_trans *tr, sql_ch
return ok;
}
-static int
-gc_delta( sql_store Store, sql_change *change, ulng oldest)
-{
- sqlstore *store = Store;
- sql_delta *n = change->data;
- (void)store;
- (void)oldest;
-
- destroy_delta(n, true);
- return 1;
-}
-
/* only rollback (content version) case for now */
static int
gc_col( sqlstore *store, sql_change *change, ulng oldest, bool cleanup)
@@ -4534,26 +4522,20 @@ gc_col( sqlstore *store, sql_change *cha
return 0;
sql_delta *d = (sql_delta*)change->data;
if (d->next) {
- int ok = LOG_OK;
assert(!cleanup);
if (d->cs.ts > oldest)
- return ok; /* cannot cleanup yet */
-
- sql_delta *n = d->next;
- if (n->cs.ucnt && !n->cs.merged) {
- lock_column(store, c->base.id); /* lock for concurrent
updates (appends) */
- ok = merge_delta(n);
- unlock_column(store, c->base.id);
- } else if (d && d->cs.ucnt && !d->cs.merged) {
- lock_column(store, c->base.id); /* lock for concurrent
updates (appends) */
- ok = merge_delta(d);
- unlock_column(store, c->base.id);
- }
+ return LOG_OK; /* cannot cleanup yet */
+
+ // d is oldest reachable delta
+ if (d->next) // Unreachable can immediately be destroyed.
+ destroy_delta(d->next, true);
+
d->next = NULL;
- change->cleanup = &gc_delta;
- change->data = n;
- return ok;
+ lock_column(store, c->base.id); /* lock for concurrent updates
(appends) */
+ (void) merge_delta(d);
+ unlock_column(store, c->base.id);
+ return LOG_OK;
}
if (cleanup)
column_destroy(store, c);
@@ -4588,26 +4570,20 @@ gc_idx( sqlstore *store, sql_change *cha
return 0;
sql_delta *d = (sql_delta*)change->data;
if (d->next) {
- int ok = LOG_OK;
assert(!cleanup);
if (d->cs.ts > oldest)
- return ok; /* cannot cleanup yet */
-
- sql_delta *n = d->next;
- if (n->cs.ucnt && !n->cs.merged) {
- lock_column(store, i->base.id); /* lock for concurrent
updates (appends) */
- ok = merge_delta(n);
- unlock_column(store, i->base.id);
- } else if (d && d->cs.ucnt && !d->cs.merged) {
- lock_column(store, i->base.id); /* lock for concurrent
updates (appends) */
- ok = merge_delta(d);
- unlock_column(store, i->base.id);
- }
+ return LOG_OK; /* cannot cleanup yet */
+
+ // d is oldest reachable delta
+ if (d->next) // Unreachable can immediately be destroyed.
+ destroy_delta(d->next, true);
+
d->next = NULL;
- change->cleanup = &gc_delta;
- change->data = n;
- return ok;
+ lock_column(store, i->base.id); /* lock for concurrent updates
(appends) */
+ (void) merge_delta(d);
+ unlock_column(store, i->base.id);
+ return LOG_OK;
}
if (cleanup)
idx_destroy(store, i);
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]