OVDB patch
Heath Kehoe
heath.kehoe at intermec.com
Thu Mar 30 00:11:04 UTC 2000
This is a patch to storage/ovdb/ovdb.c in the current branch (2.3).
Whoever checks it in please mail me when you do so I know it was
received. Thanks.
-heath
*** ovdb.c.dist Thu Feb 17 12:46:28 2000
--- ovdb.c Wed Mar 29 18:06:11 2000
***************
*** 2,7 ****
--- 2,10 ----
* ovdb.c
* Overview storage using BerkeleyDB 2.x/3.x
*
+ * 2000-03-29 : Add DB_RMW flag to the 'get' of get-modify-put sequences
+ * 2000-02-17 : Update expire behavior to be consistent with current
+ * ov3 and buffindexed
* 2000-01-13 : Fix to make compatible with unmodified nnrpd/article.c
* 2000-01-04 : Added data versioning
* 1999-12-20 : Added BerkeleyDB 3.x compatibility
***************
*** 870,876 ****
val.ulen = sizeof gs;
val.flags = DB_DBT_USERMEM;
! switch(ret = groupstats->get(groupstats, tid, &key, &val, 0)) {
case 0:
if(val.size != sizeof gs) /* invalid size; rewrite groupstats */
new = 1;
--- 873,879 ----
val.ulen = sizeof gs;
val.flags = DB_DBT_USERMEM;
! switch(ret = groupstats->get(groupstats, tid, &key, &val, DB_RMW)) {
case 0:
if(val.size != sizeof gs) /* invalid size; rewrite groupstats */
new = 1;
***************
*** 1055,1061 ****
val.ulen = sizeof gs;
val.flags = DB_DBT_USERMEM;
! switch(ret = groupstats->get(groupstats, tid, &key, &val, 0)) {
case 0:
break;
case DB_NOTFOUND:
--- 1058,1064 ----
val.ulen = sizeof gs;
val.flags = DB_DBT_USERMEM;
! switch(ret = groupstats->get(groupstats, tid, &key, &val, DB_RMW)) {
case 0:
break;
case DB_NOTFOUND:
***************
*** 1390,1401 ****
key.data = &dk;
key.size = sizeof dk;
- if(! innconf->groupbaseexpiry) {
- /* we only need to retrieve tokens */
- val.flags = DB_DBT_PARTIAL;
- val.dlen = sizeof(struct ovdata);
- }
-
switch(ret = cursor->c_get(cursor, &key, &val, DB_SET_RANGE)) {
case 0:
case DB_NOTFOUND:
--- 1393,1398 ----
***************
*** 1431,1437 ****
val.ulen = sizeof gs;
val.flags = DB_DBT_USERMEM;
! switch(ret = groupstats->get(groupstats, tid, &key, &val, 0)) {
case 0:
break;
case DB_NOTFOUND:
--- 1428,1434 ----
val.ulen = sizeof gs;
val.flags = DB_DBT_USERMEM;
! switch(ret = groupstats->get(groupstats, tid, &key, &val, DB_RMW)) {
case 0:
break;
case DB_NOTFOUND:
***************
*** 1487,1507 ****
} else {
memcpy(&ovd, val.data, sizeof ovd);
! if((ah = SMretrieve(ovd.token, RETR_STAT)) == NULL) {
! delete = 1;
} else {
SMfreearticle(ah);
! if (innconf->groupbaseexpiry &&
OVgroupbasedexpire(ovd.token, group,
(char *)val.data + sizeof(ovd),
val.size - sizeof(ovd),
ovd.arrived, ovd.expires)) {
! delete = 1;
! } else {
! newcount++;
! if(newlo == 0 || artnum < newlo)
! newlo = artnum;
! }
}
}
--- 1484,1508 ----
} else {
memcpy(&ovd, val.data, sizeof ovd);
! ah = NULL;
! if (SMprobe(SELFEXPIRE, &ovd.token, NULL)) {
! if((ah = SMretrieve(ovd.token, RETR_STAT)) == NULL) {
! delete = 1;
! }
} else {
+ if (!innconf->groupbaseexpiry
+ && !OVhisthasmsgid((char *)val.data + sizeof(ovd))) {
+ delete = 1;
+ }
+ }
+ if(ah)
SMfreearticle(ah);
! if (!delete && innconf->groupbaseexpiry &&
OVgroupbasedexpire(ovd.token, group,
(char *)val.data + sizeof(ovd),
val.size - sizeof(ovd),
ovd.arrived, ovd.expires)) {
! delete = 1;
}
}
***************
*** 1516,1521 ****
--- 1517,1526 ----
syslog(L_ERROR, "OVDB: expiregroup: c_del: %s", db_strerror(ret));
return FALSE;
}
+ } else {
+ newcount++;
+ if(newlo == 0 || artnum < newlo)
+ newlo = artnum;
}
/* go to the next record */
More information about the inn-patches
mailing list