Testing used for the following patch:

- P4, 2Ghz
- 512MB memory
- local repos
- upgrade a F7 GA chroot (866 packages, desktop install)
  to updates + updates-testing, using yum
- upgrades done on a fresh reboot (clean cache)

The attached patch shaves the run time for the full update from
22m37s to 15m19s. Even accounting for minor differences in disk
location, that's a *significant* savings.

Of course, it's a complete buzzsaw of a patch. To make this work,
we'd need:

1) define one run of this as a post-transaction tool
2) make it packaging policy that the proper symlinks always be
   shipped in the package

Opinions?

Bill
--- rpm-4.4.2/lib/psm.c.foo     2007-04-25 18:26:27.000000000 -0400
+++ rpm-4.4.2/lib/psm.c 2007-04-25 18:29:01.000000000 -0400
@@ -646,21 +646,15 @@
 
     psm->sq.reaper = 1;
 
-    /* XXX bash must have functional libtermcap.so.2 */
-    if (!strcmp(n, "libtermcap"))
-       ldconfig_done = 0;
-
     /*
      * If a successor node, and ldconfig was just run, don't bother.
      */
-    if (ldconfig_path && progArgv != NULL && psm->unorderedSuccessor) {
-       if (ldconfig_done && !strcmp(progArgv[0], ldconfig_path)) {
+    if (ldconfig_path && progArgv != NULL && !strcmp(progArgv[0], 
ldconfig_path)) {
            rpmMessage(RPMMESS_DEBUG,
                _("%s: %s(%s-%s-%s.%s) skipping redundant \"%s\".\n"),
                psm->stepName, tag2sln(psm->scriptTag), n, v, r, a,
                progArgv[0]);
            return rc;
-       }
     }
 
     rpmMessage(RPMMESS_DEBUG,
@@ -672,19 +666,16 @@
        argv = alloca(5 * sizeof(*argv));
        argv[0] = "/bin/sh";
        argc = 1;
-       ldconfig_done = 0;
     } else {
        argv = alloca((progArgc + 4) * sizeof(*argv));
        memcpy(argv, progArgv, progArgc * sizeof(*argv));
        argc = progArgc;
-       ldconfig_done = (ldconfig_path && !strcmp(argv[0], ldconfig_path)
-               ? 1 : 0);
     }
 
 #if __ia64__
     /* XXX This assumes that all interpreters are elf executables. */
     if ((a != NULL && a[0] == 'i' && a[1] != '\0' && a[2] == '8' && a[3] == 
'6')
-     && strcmp(argv[0], "/sbin/ldconfig"))
+     && strcmp(argv[0], ldconfig_path))
     {
        const char * fmt = rpmGetPath("%{?_autorelocate_path}", NULL);
        const char * errstr;
@@ -749,9 +740,6 @@
            xx = Fwrite(set_x, sizeof(set_x[0]), sizeof(set_x)-1, fd);
        }
 
-       if (ldconfig_path && strstr(script, ldconfig_path) != NULL)
-           ldconfig_done = 1;
-
        xx = Fwrite(script, sizeof(script[0]), strlen(script), fd);
        xx = Fclose(fd);
 
_______________________________________________
Rpm-maint mailing list
Rpm-maint@lists.rpm.org
https://lists.rpm.org/mailman/listinfo/rpm-maint

Reply via email to