Sophie

Sophie

distrib > Fedora > 16 > x86_64 > media > updates-src > by-pkgid > e6c014e431d07d1c7ff4a7f18a20687f > files > 3

globus-rls-server-4.9-10.fc16.src.rpm

diff -ur --exclude CVS globus_rls_server-4.9/server.c globus-rls-server-B5.0/server.c
--- globus_rls_server-4.9/server.c	2009-11-13 19:17:29.000000000 +0100
+++ globus-rls-server-B5.0/server.c	2012-01-27 01:02:01.000000000 +0100
@@ -166,6 +166,7 @@
 static int		listresult(void *cv, char *s1, char *s2, char *s3,
 				   char *s4, int irc);
 static int		getreslimit(char *areslimit);
+static void		bfresize(DBH *dbh);
 
 METHOD			methods[] = {
   { "admin", rls_admin, 1, 0, 0 },
@@ -207,7 +208,7 @@
   { "lrc_rli_get_part", lrc_rli_get_part, 2, P_LRCREAD, MF_NEEDLRC },
   { "lrc_rli_info", lrc_rli_info, 1, P_LRCREAD, MF_NEEDLRC },
   { "lrc_rli_list", lrc_rli_list, 0, P_LRCREAD, MF_NEEDLRC },
-  { "rli_exists", rli_exists, 2, P_RLIREAD, MF_NEEDLRC },
+  { "rli_exists", rli_exists, 2, P_RLIREAD, MF_NEEDRLI },
   { "rli_exists_bulk", rli_exists_bulk, 0, P_RLIREAD, MF_NEEDRLI },
   { "rli_get_lrc", rli_get_lrc, 3, P_RLIREAD, MF_NEEDRLI },
   { "rli_get_lrc_bulk", rli_get_lrc_bulk, 0, P_RLIREAD, MF_NEEDRLI },
@@ -1885,7 +1886,7 @@
 			  c->errmsg)) != GLOBUS_RLS_SUCCESS) {
     rrpc_error(c, rc, "%s", c->errmsg);
     return;
-  } else if (rc == GLOBUS_RLS_SUCCESS) {
+  } else {
       if (bloomfilter.bfsize) {
         globus_mutex_lock(&bloomfilter.mtx);
         bf_addlfn(&bloomfilter, arglist[0]);
@@ -1894,21 +1895,11 @@
   }
   rrpc_success(c);
 
-  if (update_immediate)
-    doimmediate(rliop_add, lrc_rlilist, &lrc_rlilistlock, arglist[0], NULL);
-  /*
-   * If we're using bloom filters to update, and the number of lfns has
-   * doubled in the db, then resize the bloom filter.
-   */
-  if (bloomfilter.bfsize &&
-      (table[T_LRCLFN].count >= bloomfilter.startlfns * 2) &&
-      (table[T_LRCLFN].count * lrc_bloomfilter_ratio > bloomfilter.bfsize)) {
-    if (loglevel)
-      logit(LOG_DEBUG, "lrc_create: Resizing bloom filter, current %d new %d",
-	    bloomfilter.bfsize, table[T_LRCLFN].count * lrc_bloomfilter_ratio);
-    bf_free(&bloomfilter);
-    bloomfilter.startlfns = table[T_LRCLFN].count;
-    lrc_getbf(dbh->lrc);
+  if (rc == GLOBUS_RLS_SUCCESS) {
+    if (update_immediate)
+      doimmediate(rliop_add, lrc_rlilist, &lrc_rlilistlock, arglist[0], NULL);
+
+	bfresize(dbh);
   }
 }
 
@@ -1935,10 +1926,21 @@
     }
     if ((rc = db_lrc_create(dbh->lrc,lfn,pfn,c->errmsg)) != GLOBUS_RLS_SUCCESS)
       listresult(c, lfn, pfn, NULL, NULL, rc);
-    else if (update_immediate)
-      doimmediate(rliop_add, lrc_rlilist, &lrc_rlilistlock, lfn, NULL);
+	else {
+      if (bloomfilter.bfsize) {
+        globus_mutex_lock(&bloomfilter.mtx);
+        bf_addlfn(&bloomfilter, lfn);
+        globus_mutex_unlock(&bloomfilter.mtx);
+      }
+      if (update_immediate)
+        doimmediate(rliop_add, lrc_rlilist, &lrc_rlilistlock, lfn, NULL);
+    }
   }
   endstrcb(c, 0);
+
+  /* Resize bf, if needed */
+  bfresize(dbh);
+
   if (loglevel > 1)
     logit(LOG_DEBUG, "lrc_create_bulk: end");
 }
@@ -1948,7 +1950,7 @@
 
 {
   int	rc;
-  int	lfndeleted;
+  int	lfndeleted		= 0;
 
   if (!arglist[0] || !arglist[1]) {
     rrpc_error(c, GLOBUS_RLS_BADARG, "");
@@ -1958,7 +1960,7 @@
 			  &lfndeleted, c->errmsg)) != GLOBUS_RLS_SUCCESS) {
     rrpc_error(c, rc, "%s", c->errmsg);
     return;
-  } else if (lfndeleted && rc == GLOBUS_RLS_SUCCESS) {
+  } else if (lfndeleted) {
       if (bloomfilter.bfsize) {
         globus_mutex_lock(&bloomfilter.mtx);
         bf_deletelfn(&bloomfilter, arglist[0]);
@@ -1978,7 +1980,7 @@
   int	rc;
   char	lfn[BUFLEN];
   char	pfn[BUFLEN];
-  int	lfndeleted;
+  int	lfndeleted		= 0;
 
   if (loglevel > 1)
     logit(LOG_DEBUG, "lrc_delete_bulk:");
@@ -1996,8 +1998,15 @@
     if ((rc = db_lrc_delete(dbh->lrc, lfn, pfn, &lfndeleted,
 			    c->errmsg)) != GLOBUS_RLS_SUCCESS)
       listresult(c, lfn, pfn, NULL, NULL, rc);
-    else if (update_immediate && lfndeleted)
-      doimmediate(rliop_delete, lrc_rlilist, &lrc_rlilistlock, lfn, NULL);
+	else if (lfndeleted) {
+      if (bloomfilter.bfsize) {
+        globus_mutex_lock(&bloomfilter.mtx);
+        bf_deletelfn(&bloomfilter, lfn);
+        globus_mutex_unlock(&bloomfilter.mtx);
+      }
+      if (update_immediate)
+        doimmediate(rliop_delete, lrc_rlilist, &lrc_rlilistlock, lfn, NULL);
+    }
   }
   endstrcb(c, 0);
   if (loglevel > 1)
@@ -2298,10 +2307,18 @@
     }
     if ((rc = db_lrc_renamelfn(dbh->lrc,oldname,newname,c->errmsg)) != GLOBUS_RLS_SUCCESS)
       listresult(c, oldname, newname, NULL, NULL, rc);
-    else if (update_immediate) {
-      doimmediate(rliop_delete, lrc_rlilist, &lrc_rlilistlock, oldname, NULL);
-      doimmediate(rliop_add, lrc_rlilist, &lrc_rlilistlock, newname, NULL);
-    }
+    else {
+	  if (bloomfilter.bfsize) {
+        globus_mutex_lock(&bloomfilter.mtx);
+        bf_deletelfn(&bloomfilter, oldname);
+        bf_addlfn(&bloomfilter, newname);
+        globus_mutex_unlock(&bloomfilter.mtx);
+      }
+	  if (update_immediate) {
+        doimmediate(rliop_delete, lrc_rlilist, &lrc_rlilistlock, oldname, NULL);
+        doimmediate(rliop_add, lrc_rlilist, &lrc_rlilistlock, newname, NULL);
+      }
+	}
   }
   endstrcb(c, 0);
   if (loglevel > 1)
@@ -2527,8 +2544,10 @@
 	  break;
       }
     rls_lock_release(&senderlistlock, readlock);
-    if (!sender)
+    if (!sender) {
       rrpc_error(c, nferr, "%s", arglist[0]);
+      return;
+    }
   } else {
     if ((rc = db_exists(dbh->rli, arglist[0], objtype,
 			c->errmsg)) != GLOBUS_RLS_SUCCESS) {
@@ -3513,6 +3532,26 @@
 }
 
 /*
+ * If we're using bloom filters to update, and the number of lfns has
+ * doubled in the db, then resize the bloom filter.
+ */
+static void
+bfresize(DBH *dbh)
+{
+  if (bloomfilter.bfsize &&
+      (table[T_LRCLFN].count >= bloomfilter.startlfns * 2) &&
+      (table[T_LRCLFN].count * lrc_bloomfilter_ratio > bloomfilter.bfsize)) {
+    if (loglevel)
+      logit(LOG_DEBUG, "bfresize: Resizing bloom filter, current %d new %d",
+	    bloomfilter.bfsize, table[T_LRCLFN].count * lrc_bloomfilter_ratio);
+    bf_free(&bloomfilter);
+    bloomfilter.startlfns = table[T_LRCLFN].count;
+    lrc_getbf(dbh->lrc);
+  }
+  return;
+}
+
+/*
  * Start up thread to process requests.
  */
 static int