Changeset: 672208be05d0 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/672208be05d0
Modified Files:
sql/storage/bat/bat_storage.c
Branch: default
Log Message:
merge_delta is a void function.
diffs (218 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
@@ -34,7 +34,7 @@ static int tc_gc_del( sql_store Store, s
static int tc_gc_drop_col( sql_store Store, sql_change *c, ulng oldest);
static int tc_gc_drop_idx( sql_store Store, sql_change *c, ulng oldest);
-static int merge_delta( sql_delta *obat);
+static void merge_delta( sql_delta *obat);
/* valid
* !deleted && VALID_4_READ(TS, tr) existing or
newly created segment
@@ -3203,7 +3203,6 @@ log_create_col(sql_trans *tr, sql_change
static int
commit_create_col_( sql_trans *tr, sql_column *c, ulng commit_ts, ulng oldest)
{
- int ok = LOG_OK;
(void)oldest;
if(!isTempTable(c->t)) {
@@ -3212,13 +3211,13 @@ commit_create_col_( sql_trans *tr, sql_c
delta->cs.ts = commit_ts;
assert(delta->next == NULL);
- if (!delta->cs.alter && !delta->cs.merged)
- ok = merge_delta(delta);
+ if (!delta->cs.alter)
+ merge_delta(delta);
delta->cs.alter = 0;
if (!tr->parent)
c->base.new = 0;
}
- return ok;
+ return LOG_OK;
}
static int
@@ -3309,7 +3308,6 @@ log_create_idx(sql_trans *tr, sql_change
static int
commit_create_idx_( sql_trans *tr, sql_idx *i, ulng commit_ts, ulng oldest)
{
- int ok = LOG_OK;
(void)oldest;
if(!isTempTable(i->t)) {
@@ -3318,12 +3316,12 @@ commit_create_idx_( sql_trans *tr, sql_i
delta->cs.ts = commit_ts;
assert(delta->next == NULL);
- if (!delta->cs.alter && !delta->cs.merged)
- ok = merge_delta(delta);
+ if (!delta->cs.alter)
+ merge_delta(delta);
if (!tr->parent)
i->base.new = 0;
}
- return ok;
+ return LOG_OK;
}
static int
@@ -4141,16 +4139,28 @@ merge_cs( column_storage *cs)
return ok;
}
-static int
-merge_delta( sql_delta *obat)
+static inline int
+_merge_delta( sql_delta *obat)
{
int ok = LOG_OK;
- if (obat && obat->next && !obat->cs.merged && (ok =
merge_delta(obat->next)) != LOG_OK)
+ if (obat && obat->next && !obat->cs.merged && (ok =
_merge_delta(obat->next)) != LOG_OK)
return ok;
return merge_cs(&obat->cs);
}
+static void
+merge_delta( sql_delta *obat) {
+ /*
+ * _merge_delta might only fail in extreme corner cases in which
+ * merge_cs fails because of impending transgressions of memory
capacity.
+ * However this does not warrant an error from merge_delta as it is an
+ * opportunistic cleanup of the delta's which in absence does not cause
data corruption.
+ * So the wrapper merge_delta can safely return void.
+ * */
+ (void) _merge_delta(obat);
+}
+
static int
merge_storage(storage *tdb)
{
@@ -4221,8 +4231,7 @@ commit_update_col_( sql_trans *tr, sql_c
if (isTempTable(c->t)) {
if (commit_ts) { /* commit */
if (c->t->commit_action == CA_COMMIT ||
c->t->commit_action == CA_PRESERVE) {
- if (!delta->cs.merged)
- ok = merge_delta(delta);
+ merge_delta(delta);
} else if (clear_cs(tr, &delta->cs, true,
isTempTable(c->t)) == BUN_NONE) {
ok = LOG_ERR; /* CA_DELETE as CA_DROP's are
gone already (or for globals are equal to a CA_DELETE) */
}
@@ -4273,7 +4282,6 @@ tc_gc_rollbacked_storage( sql_store Stor
static int
commit_update_col( sql_trans *tr, sql_change *change, ulng commit_ts, ulng
oldest)
{
- int ok = LOG_OK;
sql_column *c = (sql_column*)change->obj;
sql_delta *delta = ATOMIC_PTR_GET(&c->data);
@@ -4282,10 +4290,11 @@ commit_update_col( sql_trans *tr, sql_ch
if (commit_ts)
delta->cs.ts = commit_ts;
if (!commit_ts) { /* rollback */
- sql_delta *d = change->data, *o = ATOMIC_PTR_GET(&c->data);
if (change->ts && c->t->base.new) /* handled by create col */
- return ok;
+ return LOG_OK;
+
+ sql_delta *d = change->data, *o = ATOMIC_PTR_GET(&c->data);
if (o != d) {
while(o && o->next != d)
o = o->next;
@@ -4295,18 +4304,18 @@ commit_update_col( sql_trans *tr, sql_ch
else
o->next = d->next;
change->cleanup = &tc_gc_rollbacked;
- } else if (ok == LOG_OK && !tr->parent) {
+ } else if (!tr->parent) {
/* merge deltas */
while (delta && delta->cs.ts > oldest)
delta = delta->next;
- if (ok == LOG_OK && delta && !delta->cs.merged && delta->cs.ts
<= oldest) {
+ if (delta && !delta->cs.merged && delta->cs.ts <= oldest) {
lock_column(tr->store, c->base.id); /* lock for
concurrent updates (appends) */
- ok = merge_delta(delta);
+ merge_delta(delta);
unlock_column(tr->store, c->base.id);
}
- } else if (ok == LOG_OK && tr->parent) /* move delta into older and
cleanup current save points */
+ } else if (tr->parent) /* move delta into older and cleanup current
save points */
ATOMIC_PTR_SET(&c->data, savepoint_commit_delta(delta,
commit_ts));
- return ok;
+ return LOG_OK;
}
static int
@@ -4333,8 +4342,7 @@ commit_update_idx_( sql_trans *tr, sql_i
if (isTempTable(i->t)) {
if (commit_ts) { /* commit */
if (i->t->commit_action == CA_COMMIT ||
i->t->commit_action == CA_PRESERVE) {
- if (!delta->cs.merged)
- ok = merge_delta(delta);
+ merge_delta(delta);
} else if (clear_cs(tr, &delta->cs, true,
isTempTable(i->t)) == BUN_NONE) {
ok = LOG_ERR; /* CA_DELETE as CA_DROP's are
gone already */
}
@@ -4354,7 +4362,6 @@ commit_update_idx_( sql_trans *tr, sql_i
static int
commit_update_idx( sql_trans *tr, sql_change *change, ulng commit_ts, ulng
oldest)
{
- int ok = LOG_OK;
sql_idx *i = (sql_idx*)change->obj;
sql_delta *delta = ATOMIC_PTR_GET(&i->data);
@@ -4366,7 +4373,7 @@ commit_update_idx( sql_trans *tr, sql_ch
sql_delta *d = change->data, *o = ATOMIC_PTR_GET(&i->data);
if (change->ts && i->t->base.new) /* handled by create col */
- return ok;
+ return LOG_OK;
if (o != d) {
while(o && o->next != d)
o = o->next;
@@ -4376,18 +4383,18 @@ commit_update_idx( sql_trans *tr, sql_ch
else
o->next = d->next;
change->cleanup = &tc_gc_rollbacked;
- } else if (ok == LOG_OK && !tr->parent) {
+ } else if (!tr->parent) {
/* merge deltas */
while (delta && delta->cs.ts > oldest)
delta = delta->next;
- if (ok == LOG_OK && delta && !delta->cs.merged && delta->cs.ts
<= oldest) {
+ if (delta && !delta->cs.merged && delta->cs.ts <= oldest) {
lock_column(tr->store, i->base.id); /* lock for
concurrent updates (appends) */
- ok = merge_delta(delta);
+ merge_delta(delta);
unlock_column(tr->store, i->base.id);
}
- } else if (ok == LOG_OK && tr->parent) /* cleanup older save points */
+ } else if (tr->parent) /* cleanup older save points */
ATOMIC_PTR_SET(&i->data, savepoint_commit_delta(delta,
commit_ts));
- return ok;
+ return LOG_OK;
}
static storage *
@@ -4528,7 +4535,7 @@ gc_col( sqlstore *store, sql_change *cha
d->next = NULL;
lock_column(store, c->base.id); /* lock for concurrent updates
(appends) */
- (void) merge_delta(d);
+ merge_delta(d);
unlock_column(store, c->base.id);
return LOG_OK;
}
@@ -4576,7 +4583,7 @@ gc_idx( sqlstore *store, sql_change *cha
d->next = NULL;
lock_column(store, i->base.id); /* lock for concurrent updates
(appends) */
- (void) merge_delta(d);
+ merge_delta(d);
unlock_column(store, i->base.id);
return LOG_OK;
}
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]