Changeset: 52a742e17681 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/52a742e17681
Branch: default
Log Message:
Merge with Mar2025 branch.
diffs (147 lines):
diff --git a/sql/storage/objectset.c b/sql/storage/objectset.c
--- a/sql/storage/objectset.c
+++ b/sql/storage/objectset.c
@@ -755,15 +755,17 @@ find_name(objectset *os, const char *nam
}
static objectversion*
-get_valid_object_name(sql_trans *tr, objectversion *ov)
+get_valid_object_name(sql_trans *tr, objectversion *ov, bool lock)
{
while(ov) {
if (ov->ts == tr->tid || (tr->parent &&
tr_version_of_parent(tr, ov->ts)) || ov->ts < tr->ts)
return ov;
else {
- lock_reader(ov->os);
+ if (lock)
+ lock_reader(ov->os);
objectversion* name_based_older = ov->name_based_older;
- unlock_reader(ov->os);
+ if (lock)
+ unlock_reader(ov->os);
ov = name_based_older;
}
}
@@ -771,15 +773,17 @@ get_valid_object_name(sql_trans *tr, obj
}
static objectversion*
-get_valid_object_id(sql_trans *tr, objectversion *ov)
+get_valid_object_id(sql_trans *tr, objectversion *ov, bool lock)
{
while(ov) {
if (ov->ts == tr->tid || (tr->parent &&
tr_version_of_parent(tr, ov->ts)) || ov->ts < tr->ts)
return ov;
else {
- lock_reader(ov->os);
+ if (lock)
+ lock_reader(ov->os);
objectversion* id_based_older = ov->id_based_older;
- unlock_reader(ov->os);
+ if (lock)
+ unlock_reader(ov->os);
ov = id_based_older;
}
}
@@ -797,7 +801,7 @@ os_add_name_based(objectset *os, struct
if (name_based_node) {
objectversion *co = name_based_node->ov;
- objectversion *oo = get_valid_object_name(tr, co);
+ objectversion *oo = get_valid_object_name(tr, co, true);
if (co != oo) { /* conflict ? */
TRC_WARNING(SQL_STORE, "%s" "if (co != oo) { /*
conflict ? */", __func__);
return -3;
@@ -849,7 +853,7 @@ os_add_id_based(objectset *os, struct sq
if (id_based_node) {
objectversion *co = id_based_node->ov;
- objectversion *oo = get_valid_object_id(tr, co);
+ objectversion *oo = get_valid_object_id(tr, co, true);
if (co != oo) { /* conflict ? */
TRC_WARNING(SQL_STORE, "%s" "if (co != oo) { /*
conflict ? */", __func__);
return -3;
@@ -947,7 +951,7 @@ os_del_name_based(objectset *os, struct
if (name_based_node) {
objectversion *co = name_based_node->ov;
- objectversion *oo = get_valid_object_name(tr, co);
+ objectversion *oo = get_valid_object_name(tr, co, true);
ov->name_based_head = oo->name_based_head;
if (co != oo) { /* conflict ? */
TRC_WARNING(SQL_STORE, "%s: " "if (co != oo) { /*
conflict ? */", __func__);
@@ -981,7 +985,7 @@ os_del_id_based(objectset *os, struct sq
if (id_based_node) {
objectversion *co = id_based_node->ov;
- objectversion *oo = get_valid_object_id(tr, co);
+ objectversion *oo = get_valid_object_id(tr, co, true);
ov->id_based_head = oo->id_based_head;
if (co != oo) { /* conflict ? */
TRC_WARNING(SQL_STORE, "%s" "if (co != oo) { /*
conflict ? */", __func__);
@@ -1050,7 +1054,8 @@ os_size(objectset *os, struct sql_trans
lock_reader(os);
for(versionhead *n = os->name_based_h; n; n=n->next) {
objectversion *ov = n->ov;
- if ((ov=get_valid_object_name(tr, ov)) &&
os_atmc_get_state(ov) == active)
+ assert(os == ov->os);
+ if ((ov=get_valid_object_name(tr, ov, false)) &&
os_atmc_get_state(ov) == active)
cnt++;
}
unlock_reader(os);
@@ -1086,9 +1091,9 @@ os_find_name(objectset *os, struct sql_t
versionhead *n = find_name(os, name);
if (n) {
- objectversion *ov = get_valid_object_name(tr, n->ov);
- if (ov && os_atmc_get_state(ov) == active)
- return ov->b;
+ objectversion *ov = get_valid_object_name(tr, n->ov, true);
+ if (ov && os_atmc_get_state(ov) == active)
+ return ov->b;
}
return NULL;
}
@@ -1101,9 +1106,9 @@ os_find_id(objectset *os, struct sql_tra
versionhead *n = find_id(os, id);
if (n) {
- objectversion *ov = get_valid_object_id(tr, n->ov);
- if (ov && os_atmc_get_state(ov) == active)
- return ov->b;
+ objectversion *ov = get_valid_object_id(tr, n->ov, true);
+ if (ov && os_atmc_get_state(ov) == active)
+ return ov->b;
}
return NULL;
}
@@ -1142,7 +1147,8 @@ oi_next(struct os_iter *oi)
if (n->ov->b->name && strcmp(n->ov->b->name,
oi->name) == 0) {
objectversion *ov = n->ov;
- ov = get_valid_object_name(oi->tr, ov);
+ assert(oi->os == ov->os);
+ ov = get_valid_object_name(oi->tr, ov,
false);
if (ov && os_atmc_get_state(ov) ==
active)
b = ov->b;
}
@@ -1157,7 +1163,8 @@ oi_next(struct os_iter *oi)
objectversion *ov = n->ov;
n = oi->n = n->next;
- ov = get_valid_object_name(oi->tr, ov);
+ assert(oi->os == ov->os);
+ ov = get_valid_object_name(oi->tr, ov,
false);
if (ov && os_atmc_get_state(ov) ==
active)
b = ov->b;
} else {
@@ -1174,7 +1181,8 @@ oi_next(struct os_iter *oi)
objectversion *ov = n->ov;
n = oi->n = n->next;
- ov = get_valid_object_id(oi->tr, ov);
+ assert(oi->os == ov->os);
+ ov = get_valid_object_id(oi->tr, ov, false);
if (ov && os_atmc_get_state(ov) == active)
b = ov->b;
}
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]