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