ALT Linux Team development discussions
 help / color / mirror / Atom feed
* [devel] patch for libmemcache
@ 2008-09-08 13:40 Alexey Morsov
  0 siblings, 0 replies; only message in thread
From: Alexey Morsov @ 2008-09-08 13:40 UTC (permalink / raw)
  To: ALT Devel discussion list


[-- Attachment #1.1: Type: text/plain, Size: 1019 bytes --]

Приветствую.

Господа гуру, хотелось бы что бы посмотрели вы на патч один к libmemcache.
Я тут озадачивался (собирал cmemcache себе на ALS4) и там предлагалось
данный патчик на libmemcache ставить )
http://gijsbert.org/downloads/cmemcache/libmemcache-1.4.0.rc2.readme

У меня оно вроде работает (apache2+wsgi memcached django), но сайт не разу
не нагружен потому и проверить толком не могу (ну ab2 чуть натравил да и
все).



-- 
WBR,
Alexey Morsov
программист ЗАО "ИК "Риком-Траст"
Jabber: samurai@www.fondmarket.ru
ALT Linux Team Member

[...] я не верю, что те, у кого серверы на Sisyphus, сделали
это нечаянно.  Иногда это взвешенный и оцененный риск.
		-- mike in devel@

[-- Attachment #1.2: libmemcached.patch --]
[-- Type: text/plain, Size: 3683 bytes --]

diff --git a/libmemcache/src/memcache.c b/libmemcache/src/memcache.c
index 227758d..b927b40 100644
--- a/libmemcache/src/memcache.c
+++ b/libmemcache/src/memcache.c
@@ -978,17 +978,17 @@ mcm_err(const struct memcache_ctxt *ctxt, const u_int32_t flags, const char *fun
 
 int
 mcm_err_filter_add(struct memcache_ctxt *ctxt, const u_int32_t err_mask) {
-  if ((ctxt->MCM_ERR_MASK & err_mask) == ctxt->MCM_ERR_MASK)
+  if ((ctxt->MCM_ERR_MASK & err_mask) == err_mask)
     return 0;
 
-  ctxt->MCM_ERR_MASK &= err_mask;
+  ctxt->MCM_ERR_MASK != err_mask;
   return 1;
 }
 
 
 int
 mcm_err_filter_del(struct memcache_ctxt *ctxt, const u_int32_t err_mask) {
-  if ((ctxt->MCM_ERR_MASK & err_mask) == ctxt->MCM_ERR_MASK)
+  if ((ctxt->MCM_ERR_MASK & err_mask) == 0)
     return 0;
 
   ctxt->MCM_ERR_MASK &= ~err_mask;
@@ -1131,6 +1131,9 @@ mcm_fetch_cmd(struct memcache_ctxt *ctxt, struct memcache *mc, struct memcache_r
     /* Even though we haven't sent the request, mark the response as
      * having been attempted. */
     res->_flags |= MCM_RES_ATTEMPTED;
+    /* This res might have been used before, so reset found flag */
+    res->_flags &= ~MCM_RES_FOUND;
+
 
     /* While we're looping, might as well see if we should be auto
      * deleting any of these keys. */
diff --git a/libmemcache/test/benchmark/benchmark.c b/libmemcache/test/benchmark/benchmark.c
index 259f7ca..b6e6c21 100644
--- a/libmemcache/test/benchmark/benchmark.c
+++ b/libmemcache/test/benchmark/benchmark.c
@@ -70,7 +70,7 @@ main(int argc, char *argv[]) {
     tests = strdup(argv[3]);
 
   if (tests == NULL)
-    tests = strdup("adgs");
+    tests = strdup("adgGs");
 
   if (valsize == 0)
     valsize = 50;
@@ -138,6 +138,30 @@ main(int argc, char *argv[]) {
     printf(fmt, "get", num_tests / tt(&t1, &t2), tt(&t1, &t2), tt(&t1, &t2) / num_tests);
   }
 
+  /* same get benchmark, but with overhead for each request. */
+  if (strchr(tests, (int)'G') != NULL) {
+	  /* BEGIN get request */
+	  if (gettimeofday(&t1, NULL) != 0)
+		  err(EX_OSERR, "gettimeofday(2)");
+	  
+	  for (i = 0; i < num_tests; i) {
+		  req = mc_req_new();
+		  res = mc_req_add(req, key, keylen);
+		  res->size = valsize;
+		  res->val = malloc(res->size);
+		  mc_res_free_on_delete(res, 1);
+		  
+		  mc_get(mc, req);
+		  mc_req_free(req);
+	  }
+	  
+	  if (gettimeofday(&t2, NULL) != 0)
+		  err(EX_OSERR, "gettimeofday(2)");
+	  
+	  /* END get test */
+	  printf(fmt, "fget", num_tests / tt(&t1, &t2), tt(&t1, &t2), tt(&t1, &t2) / num_tests);
+  }
+				  
 
 
   if (strchr(tests, 'a') != NULL || strchr(tests, 'd') != NULL) {
diff --git a/libmemcache/test/regress/regress.c b/libmemcache/test/regress/regress.c
index 71b4cfe..7d8df87 100644
--- a/libmemcache/test/regress/regress.c
+++ b/libmemcache/test/regress/regress.c
@@ -33,6 +33,7 @@
 #include <stdlib.h>
 #include <string.h>
 #include <unistd.h>
+#include <assert.h>
 
 #include <memcache.h>
 
@@ -70,8 +71,14 @@ main(int argc, char *argv[]) {
     num_tests = 10;
 
   mc = mc_new();
-  mc_err_filter_del(MCM_ERR_LVL_INFO);
-  mc_err_filter_del(MCM_ERR_LVL_NOTICE);
+
+  /* test filter add/del and make sure info and level are NOT filtered out */
+  assert(mc_err_filter_del(MCM_ERR_LVL_INFO) == 0);
+  assert(mc_err_filter_del(MCM_ERR_LVL_NOTICE) == 0);
+  assert(mc_err_filter_add(MCM_ERR_LVL_NOTICE) == 1);
+  assert(mc_err_filter_add(MCM_ERR_LVL_NOTICE) == 0);
+  assert(mc_err_filter_del(MCM_ERR_LVL_NOTICE) == 1);
+  assert(mc_err_filter_get() == 0);
 
   if (mc == NULL)
     err(EX_OSERR, "Unable to allocate a new memcache object");

[-- Attachment #2: Digital signature --]
[-- Type: application/pgp-signature, Size: 489 bytes --]

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2008-09-08 13:40 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2008-09-08 13:40 [devel] patch for libmemcache Alexey Morsov

ALT Linux Team development discussions

This inbox may be cloned and mirrored by anyone:

	git clone --mirror http://lore.altlinux.org/devel/0 devel/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 devel devel/ http://lore.altlinux.org/devel \
		devel@altlinux.org devel@altlinux.ru devel@lists.altlinux.org devel@lists.altlinux.ru devel@linux.iplabs.ru mandrake-russian@linuxteam.iplabs.ru sisyphus@linuxteam.iplabs.ru
	public-inbox-index devel

Example config snippet for mirrors.
Newsgroup available over NNTP:
	nntp://lore.altlinux.org/org.altlinux.lists.devel


AGPL code for this site: git clone https://public-inbox.org/public-inbox.git