]> code.ossystems Code Review - openembedded-core.git/commitdiff
pseudo: Fixup for cache problem
authorRichard Purdie <rpurdie@linux.intel.com>
Fri, 17 Dec 2010 16:13:35 +0000 (16:13 +0000)
committerRichard Purdie <rpurdie@linux.intel.com>
Fri, 17 Dec 2010 16:14:08 +0000 (16:14 +0000)
Signed-off-by: Richard Purdie <rpurdie@linux.intel.com>
meta/recipes-devtools/pseudo/pseudo/895fa7e359e8026a608fba052c2994e42901e45f.patch [new file with mode: 0644]
meta/recipes-devtools/pseudo/pseudo_git.bb

diff --git a/meta/recipes-devtools/pseudo/pseudo/895fa7e359e8026a608fba052c2994e42901e45f.patch b/meta/recipes-devtools/pseudo/pseudo/895fa7e359e8026a608fba052c2994e42901e45f.patch
new file mode 100644 (file)
index 0000000..d8c2295
--- /dev/null
@@ -0,0 +1,235 @@
+From 895fa7e359e8026a608fba052c2994e42901e45f Mon Sep 17 00:00:00 2001
+From: Mark Hatle <mark.hatle@windriver.com>
+Date: Fri, 17 Dec 2010 01:23:47 +0000
+Subject: Revert "Add a cache of the last object found in pseudo_op"
+
+This reverts commit 49d4d35918d457b0e9206679ecad3b9c84f11e66.
+
+Conflicts:
+
+       ChangeLog.txt
+---
+diff --git a/ChangeLog.txt b/ChangeLog.txt
+index 1db8c7d..200b32e 100644
+--- a/ChangeLog.txt
++++ b/ChangeLog.txt
+@@ -9,7 +9,6 @@
+       * (mhatle) as a result of profiling, optimize inode search
+       * (mhatle) rearrange the pseudo_op file data operations to reduce
+                  the number of selects.
+-      * (mhatle) add the ability to cache the last select result
+       * (mhatle) change the indexing in pseudo_db.c
+ 2010-12-14:
+diff --git a/pseudo.c b/pseudo.c
+index 3979fd8..6b965be 100644
+--- a/pseudo.c
++++ b/pseudo.c
+@@ -425,9 +425,6 @@ pseudo_op(pseudo_msg_t *msg, const char *program, const char *tag) {
+       int found_path = 0, found_ino = 0;
+       int prefer_ino = 0;
+-      static pseudo_msg_t cache_msg = { .op = 0 };
+-      static char * cache_path = NULL;
+-
+       if (!msg)
+               return 1;
+       
+@@ -471,59 +468,7 @@ pseudo_op(pseudo_msg_t *msg, const char *program, const char *tag) {
+       /* Lookup the full path, with inode and dev if available */
+       if (msg->pathlen && msg->dev && msg->ino) {
+-              if (cache_msg.pathlen == msg->pathlen &&
+-                  cache_msg.dev == msg->dev &&
+-                  cache_msg.ino == msg->ino &&
+-                  !strcmp(cache_path, msg->path)) {
+-                      /* Found it in the cache! */
+-#ifdef NPROFILE
+-                      pseudo_diag("cache hit -- by_file_exact\n");
+-#endif
+-                      /* Change the cache to match the msg */
+-                      cache_msg.type = msg->type;
+-                      cache_msg.op = msg->op;
+-                      cache_msg.result = msg->result;
+-                      cache_msg.access = msg->access;
+-                      cache_msg.fd = msg->fd;
+-#ifdef NVALIDATE
+-                      if (!pdb_find_file_exact(msg)) {
+-                              if (cache_msg.pathlen != msg->pathlen ||
+-                                  cache_msg.dev != msg->dev ||
+-                                  cache_msg.ino != msg->ino ||
+-                                  cache_msg.uid != msg->uid ||
+-                                  cache_msg.gid != msg->gid ||
+-                                  cache_msg.mode != msg->mode ||
+-                                  cache_msg.rdev != msg->rdev ||
+-                                  cache_msg.nlink != msg->nlink ||
+-                                  cache_msg.deleting != msg->deleting) {
+-                              pseudo_diag("Cache mismatch [%s]: Database differs from cache\n"
+-                                              "     cache vs result:\n"
+-                                              "     dev (%llu,%llu) ino (%llu,%llu)\n"
+-                                              "     uid (%d,%d) gid (%d,%d) mode (0%o,0%o)\n"
+-                                              "     rdev (%llu,%llu) nlink (%d,%d) deleting (%d,%d)\n",
+-                                              msg->pathlen ? msg->path : "no path",
+-                                              (unsigned long long) cache_msg.dev, (unsigned long long) msg->dev,
+-                                              (unsigned long long) cache_msg.ino, (unsigned long long) msg->ino,
+-                                              (unsigned long long) cache_msg.uid, (unsigned int) msg->uid,
+-                                              (unsigned long long) cache_msg.gid, (unsigned int) msg->gid,
+-                                              cache_msg.mode, msg->mode,
+-                                              (unsigned long long) cache_msg.rdev, (unsigned int) msg->rdev,
+-                                              cache_msg.nlink, msg->nlink,
+-                                              cache_msg.deleting, msg->deleting);
+-                              }
+-                      } else {
+-                              pseudo_diag("Cache mismatch [%s]: Not found in DB\n",
+-                                              msg->pathlen ? msg->path : "no path");
+-                      }
+-#endif
+-
+-                      by_path = cache_msg;
+-                      by_ino = cache_msg;
+-                      /* no need to restore msg */
+-                      found_path = 1;
+-                      found_ino = 1;
+-                      path_by_ino = msg->path;
+-              } else if (!pdb_find_file_exact(msg)) {
++              if (!pdb_find_file_exact(msg)) {
+                       /* restore header contents */
+                       by_path = *msg;
+                       by_ino = *msg;
+@@ -539,51 +484,7 @@ pseudo_op(pseudo_msg_t *msg, const char *program, const char *tag) {
+               if (msg->pathlen) {
+                       /* for now, don't canonicalize paths anymore */
+                       /* used to do it here, but now doing it in client */
+-                      if (cache_msg.pathlen == msg->pathlen &&
+-                          !strcmp(cache_path, msg->path)) {
+-#ifdef NPROFILE
+-                              pseudo_diag("cache hit -- by_path\n");
+-#endif
+-                              /* Change the cache to match the msg */
+-                              cache_msg.type = msg->type;
+-                              cache_msg.op = msg->op;
+-                              cache_msg.result = msg->result;
+-                              cache_msg.access = msg->access;
+-                              cache_msg.fd = msg->fd;
+-#ifdef NVALIDATE
+-                              if (!pdb_find_file_exact(msg)) {
+-                                      if (cache_msg.pathlen != msg->pathlen ||
+-                                          cache_msg.dev != msg->dev ||
+-                                          cache_msg.ino != msg->ino ||
+-                                          cache_msg.uid != msg->uid ||
+-                                          cache_msg.gid != msg->gid ||
+-                                          cache_msg.mode != msg->mode ||
+-                                          cache_msg.rdev != msg->rdev ||
+-                                          cache_msg.nlink != msg->nlink ||
+-                                          cache_msg.deleting != msg->deleting) {
+-                                      pseudo_diag("Cache mismatch [%s]: Database differs from cache\n"
+-                                              "     cache vs result:\n"
+-                                              "     dev (%llu,%llu) ino (%llu,%llu)\n"
+-                                              "     uid (%d,%d) gid (%d,%d) mode (0%o,0%o)\n"
+-                                              "     rdev (%llu,%llu) nlink (%d,%d) deleting (%d,%d)\n",
+-                                              msg->pathlen ? msg->path : "no path",
+-                                              (unsigned long long) cache_msg.dev, (unsigned long long) msg->dev,
+-                                              (unsigned long long) cache_msg.ino, (unsigned long long) msg->ino,
+-                                              (unsigned long long) cache_msg.uid, (unsigned int) msg->uid,
+-                                              (unsigned long long) cache_msg.gid, (unsigned int) msg->gid,
+-                                              cache_msg.mode, msg->mode,
+-                                              (unsigned long long) cache_msg.rdev, (unsigned int) msg->rdev,
+-                                              cache_msg.nlink, msg->nlink,
+-                                              cache_msg.deleting, msg->deleting);
+-                                      }
+-                              } else {
+-                                      pseudo_diag("Cache mismatch [%s]: Not found in DB\n",
+-                                                      msg->pathlen ? msg->path : "no path");
+-                              }
+-#endif
+-                              by_path = cache_msg;
+-                              found_path = 1;
+-                      } else if (!pdb_find_file_path(msg)) {
++                      if (!pdb_find_file_path(msg)) {
+                               by_path = *msg;
+                               found_path = 1;
+                       } else {
+@@ -594,51 +495,7 @@ pseudo_op(pseudo_msg_t *msg, const char *program, const char *tag) {
+               }
+               /* search on original inode -- in case of mismatch */
+               if (msg->dev && msg->ino) {
+-                      if (cache_msg.dev == msg->dev &&
+-                          cache_msg.ino == msg->ino) {
+-#ifdef NPROFILE
+-                              pseudo_diag("cache hit -- by_ino\n");
+-#endif
+-                              /* Change the cache to match the msg */
+-                              cache_msg.type = msg->type;
+-                              cache_msg.op = msg->op;
+-                              cache_msg.result = msg->result;
+-                              cache_msg.access = msg->access;
+-                              cache_msg.fd = msg->fd;
+-#ifdef NVALIDATE
+-                              if (!pdb_find_file_exact(msg)) {
+-                                      if (cache_msg.pathlen != msg->pathlen ||
+-                                          cache_msg.dev != msg->dev ||
+-                                          cache_msg.ino != msg->ino ||
+-                                          cache_msg.uid != msg->uid ||
+-                                          cache_msg.gid != msg->gid ||
+-                                          cache_msg.mode != msg->mode ||
+-                                          cache_msg.rdev != msg->rdev ||
+-                                          cache_msg.nlink != msg->nlink ||
+-                                          cache_msg.deleting != msg->deleting) {
+-                                      pseudo_diag("Cache mismatch [%s]: Database differs from cache\n"
+-                                              "     cache vs result:\n"
+-                                              "     dev (%llu,%llu) ino (%llu,%llu)\n"
+-                                              "     uid (%d,%d) gid (%d,%d) mode (0%o,0%o)\n"
+-                                              "     rdev (%llu,%llu) nlink (%d,%d) deleting (%d,%d)\n",
+-                                              msg->pathlen ? msg->path : "no path",
+-                                              (unsigned long long) cache_msg.dev, (unsigned long long) msg->dev,
+-                                              (unsigned long long) cache_msg.ino, (unsigned long long) msg->ino,
+-                                              (unsigned long long) cache_msg.uid, (unsigned int) msg->uid,
+-                                              (unsigned long long) cache_msg.gid, (unsigned int) msg->gid,
+-                                              cache_msg.mode, msg->mode,
+-                                              (unsigned long long) cache_msg.rdev, (unsigned int) msg->rdev,
+-                                              cache_msg.nlink, msg->nlink,
+-                                              cache_msg.deleting, msg->deleting);
+-                                      }
+-                              } else {
+-                                      pseudo_diag("Cache mismatch [%s]: Not found in DB\n",
+-                                                      msg->pathlen ? msg->path : "no path");
+-                              }
+-#endif
+-                              found_ino = 1;
+-                              path_by_ino = cache_path;
+-                      } else  if (!pdb_find_file_dev(&by_ino)) {
++                      if (!pdb_find_file_dev(&by_ino)) {
+                               found_ino = 1;
+                               path_by_ino = pdb_get_file_path(&by_ino);
+                       }
+@@ -1016,28 +873,6 @@ pseudo_op(pseudo_msg_t *msg, const char *program, const char *tag) {
+               break;
+       }
+-      /* Cache previous values... */
+-      if (msg->op != OP_MAY_UNLINK &&
+-          msg->op != OP_DID_UNLINK &&
+-          msg->op != OP_CANCEL_UNLINK &&
+-          msg->op != OP_UNLINK) {
+-
+-              cache_msg = *msg;
+-
+-              free(cache_path);
+-
+-              if (path_by_ino)
+-                      cache_path = strdup(path_by_ino);
+-              else
+-                      cache_path = strdup(msg->path);
+-      } else {
+-              cache_msg.pathlen = 0;
+-              cache_msg.dev = 0;
+-              cache_msg.ino = 0;
+-              free(cache_path);
+-              cache_path = NULL;
+-      }
+-
+       /* in the case of an exact match, we just used the pointer
+        * rather than allocating space
+        */
+--
+cgit v0.8.3.3-89-gbf82
index 55055fa0d3c9ae5d0fefe7988ad87a6fc190ef84..f9b10f0d361308d994f7f083c2deef7cfbecec18 100644 (file)
@@ -6,10 +6,11 @@ LICENSE = "LGPL2.1"
 DEPENDS = "sqlite3"
 
 PV = "0.0+git${SRCPV}"
-PR = "r15"
+PR = "r16"
 
 SRC_URI = "git://github.com/wrpseudo/pseudo.git;protocol=git \
-           file://static_sqlite.patch"
+           file://static_sqlite.patch \
+           file://895fa7e359e8026a608fba052c2994e42901e45f.patch"
 
 FILES_${PN} = "${libdir}/libpseudo.so ${bindir}/* ${localstatedir}/pseudo"
 PROVIDES += "virtual/fakeroot"