RPM Package Manager, CVS Repository
  http://rpm5.org/cvs/
  ____________________________________________________________________________

  Server: rpm5.org                         Name:   Jeff Johnson
  Root:   /v/rpm/cvs                       Email:  [email protected]
  Module: rpm                              Date:   10-Oct-2009 15:56:27
  Branch: HEAD                             Handle: 2009101013562601

  Modified files:
    rpm/js                  rpmdbe-js.c
    rpm/lib                 fsm.c psm.c
    rpm/misc                librpmmisc.vers
    rpm/rpmdb               rpmdb.c rpmdb.h

  Log:
    - dbi: stub-in code to attempt durable orphan directories.

  Summary:
    Revision    Changes     Path
    1.17        +27 -1      rpm/js/rpmdbe-js.c
    2.187       +11 -9      rpm/lib/fsm.c
    2.380       +27 -7      rpm/lib/psm.c
    1.25        +1  -0      rpm/misc/librpmmisc.vers
    1.326       +0  -4      rpm/rpmdb/rpmdb.c
    1.110       +18 -0      rpm/rpmdb/rpmdb.h
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: rpm/js/rpmdbe-js.c
  ============================================================================
  $ cvs diff -u -r1.16 -r1.17 rpmdbe-js.c
  --- rpm/js/rpmdbe-js.c        27 Sep 2009 08:06:32 -0000      1.16
  +++ rpm/js/rpmdbe-js.c        10 Oct 2009 13:56:26 -0000      1.17
  @@ -1473,7 +1473,33 @@
       if (dbenv == NULL) goto exit;
       *rval = JSVAL_FALSE;
   
  -     /* FIXME todo++ */
  +#ifdef       NOTYET
  +    if (dbenv->app_private != NULL) {
  +     DB_PREPLIST _preplist[32];
  +     long _count = (sizeof(_preplist) / sizeof(_preplist[0]));
  +     long _got = 0;
  +     uint32_t _flags = DB_FIRST;
  +     int ret = 0;
  +     int i;
  +
  +     while (1) {
  +         ret = dbenv->txn_recover(dbenv, _preplist, _count, &_count, _flags);
  +         if (ret) {
  +             dbenv->err(dbenv, ret, "DB_ENV->txn_recover");
  +             goto exit;
  +         }
  +         if (_got == 0)
  +             break;
  +         for (i = 0; i < _got; i++) {
  +             DB_TXN * _txn = _preplist[i].txn;
  +             uint32_t _tflags = 0;
  +             (void) _txn->discard(_txn, _tflags);
  +         }
  +         _flags = DB_NEXT;
  +     }
  +     *rval = JSVAL_TRUE;
  +    }
  +#endif
   
       ok = JS_TRUE;
   
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/lib/fsm.c
  ============================================================================
  $ cvs diff -u -r2.186 -r2.187 fsm.c
  --- rpm/lib/fsm.c     11 Jul 2009 21:32:34 -0000      2.186
  +++ rpm/lib/fsm.c     10 Oct 2009 13:56:26 -0000      2.187
  @@ -7,9 +7,19 @@
   
   #include <rpmio_internal.h>  /* XXX urlPath, fdGetCpioPos */
   #include <rpmcb.h>           /* XXX fnpyKey */
  +#include "rpmsq.h"
   #include <rpmsx.h>
  +#if defined(SUPPORT_AR_PAYLOADS)
  +#include "ar.h"
  +#endif
  +#include "cpio.h"
  +#include "tar.h"
  +#include "ugid.h"            /* XXX unameToUid() and gnameToGid() */
  +
   #include <rpmtag.h>
   #include <rpmtypes.h>
  +#define      _RPMDB_INTERNAL
  +#include <rpmdb.h>
   
   #define      _RPMFI_INTERNAL
   #include "rpmfi.h"
  @@ -18,20 +28,11 @@
   #include <fsm.h>
   #define      fsmUNSAFE       fsmStage
   
  -#if defined(SUPPORT_AR_PAYLOADS)
  -#include "ar.h"
  -#endif
  -#include "cpio.h"
  -#include "tar.h"
  -
   #define      _USE_RPMTE
   #if defined(_USE_RPMTE)
   #include "rpmte.h"
   #endif
   #include "rpmts.h"
  -#include "rpmsq.h"
  -
  -#include "ugid.h"            /* XXX unameToUid() and gnameToGid() */
   
   #include "debug.h"
   
  @@ -1486,6 +1487,7 @@
                rpmfi fi = fsmGetFi(fsm);
                *te = '\0';
                st->st_mode = S_IFDIR | (fi->dperms & 07777);
  +rc = rpmlioMkdir(rpmtsGetRdb(fsmGetTs(fsm)), fsm->path, st->st_mode);
                rc = fsmNext(fsm, IOSM_MKDIR);
                if (!rc) {
                    /* XXX FIXME? only new dir will have context set. */
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/lib/psm.c
  ============================================================================
  $ cvs diff -u -r2.379 -r2.380 psm.c
  --- rpm/lib/psm.c     14 Sep 2009 21:32:21 -0000      2.379
  +++ rpm/lib/psm.c     10 Oct 2009 13:56:26 -0000      2.380
  @@ -26,6 +26,10 @@
   
   #include <rpmtag.h>
   #include <rpmtypes.h>
  +#include <pkgio.h>
  +#define      _RPMDB_INTERNAL
  +#include <rpmdb.h>           /* XXX for db_chrootDone */
  +#include "signature.h"               /* signature constants */
   #include <rpmlib.h>
   
   #define      _RPMFI_INTERNAL
  @@ -46,10 +50,7 @@
   #define      _RPMTS_INTERNAL         /* XXX ts->notify */
   #include "rpmts.h"
   
  -#include <pkgio.h>
   #include "misc.h"            /* XXX rpmMkdirPath, makeTempFile, doputenv */
  -#include "rpmdb.h"           /* XXX for db_chrootDone */
  -#include "signature.h"               /* signature constants */
   
   #include <rpmcli.h>
   
  @@ -332,14 +333,14 @@
       }
   
   #if defined(RPM_VENDOR_OPENPKG) /* switch-from-susr-to-musr-on-srpm-install 
*/
  -    if(createDir(fi, ts, NULL, "%{_topdir}") ||
  +    if (createDir(fi, ts, NULL, "%{_topdir}") ||
            createDir(fi, ts, NULL, "%{_builddir}") ||
            createDir(fi, ts, NULL, "%{_rpmdir}") ||
            createDir(fi, ts, NULL, "%{_srcrpmdir}") ||
            createDir(fi, ts, &_sourcedir, "%{_sourcedir}") ||
            createDir(fi, ts, &_specdir, "%{_specdir}"))
   #else
  -    if(createDir(ts, NULL, "%{_topdir}") ||
  +    if (createDir(ts, NULL, "%{_topdir}") ||
            createDir(ts, NULL, "%{_builddir}") ||
            createDir(ts, NULL, "%{_rpmdir}") ||
            createDir(ts, NULL, "%{_srcrpmdir}") ||
  @@ -2592,6 +2593,8 @@
                break;
            }
   
  +         xx = rpmtxnBegin(rpmtsGetRdb(ts));
  +
            rc = fsmSetup(fi->fsm, IOSM_PKGINSTALL, psm->payload_format, ts, fi,
                        psm->cfd, NULL, &psm->failedFile);
            (void) rpmswAdd(rpmtsOp(ts, RPMTS_OP_UNCOMPRESS),
  @@ -2610,6 +2613,11 @@
            if (!rc)
                rc = rpmpsmNext(psm, PSM_COMMIT);
   
  +         if (rc)
  +             xx = rpmtxnAbort(rpmtsGetRdb(ts));
  +         else
  +             xx = rpmtxnCommit(rpmtsGetRdb(ts));
  +
            /* XXX make sure progress is closed out */
            psm->what = RPMCALLBACK_INST_PROGRESS;
            psm->amount = (fi->archiveSize ? fi->archiveSize : 100);
  @@ -3011,6 +3019,8 @@
        if (fi->isSource)       break;  /* XXX never add SRPM's */
        if (fi->h == NULL)      break;  /* XXX can't happen */
   
  +     xx = rpmtxnBegin(rpmtsGetRdb(ts));
  +
        /* Add header to db, doing header check if requested */
        /* XXX rollback headers propagate the previous transaction id. */
        {   rpmuint32_t tid = ((rpmtsType(ts) == RPMTRANS_TYPE_ROLLBACK)
  @@ -3023,7 +3033,11 @@
            (void) rpmswExit(rpmtsOp(ts, RPMTS_OP_DBADD), 0);
        }
   
  -     if (rc != RPMRC_OK) break;
  +     if (rc != RPMRC_OK) {
  +         xx = rpmtxnAbort(rpmtsGetRdb(ts));
  +         break;
  +     } else
  +         xx = rpmtxnCommit(rpmtsGetRdb(ts));
   
   assert(psm->te != NULL);
        /* Mark non-rollback elements as installed. */
  @@ -3039,11 +3053,17 @@
        if (rpmtsFlags(ts) & RPMTRANS_FLAG_TEST)        break;
        if (rpmtsFlags(ts) & RPMTRANS_FLAG_NORPMDB)     break;
   
  +     xx = rpmtxnBegin(rpmtsGetRdb(ts));
  +
        (void) rpmswEnter(rpmtsOp(ts, RPMTS_OP_DBREMOVE), 0);
        rc = rpmdbRemove(rpmtsGetRdb(ts), rpmtsGetTid(ts), fi->record, NULL);
        (void) rpmswExit(rpmtsOp(ts, RPMTS_OP_DBREMOVE), 0);
   
  -     if (rc != RPMRC_OK) break;
  +     if (rc != RPMRC_OK) {
  +         xx = rpmtxnAbort(rpmtsGetRdb(ts));
  +         break;
  +     } else
  +         xx = rpmtxnCommit(rpmtsGetRdb(ts));
   
        /* Forget the offset of a successfully removed header. */
        if (psm->te != NULL)    /* XXX can't happen */
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/misc/librpmmisc.vers
  ============================================================================
  $ cvs diff -u -r1.24 -r1.25 librpmmisc.vers
  --- rpm/misc/librpmmisc.vers  25 Sep 2009 18:41:01 -0000      1.24
  +++ rpm/misc/librpmmisc.vers  10 Oct 2009 13:56:27 -0000      1.25
  @@ -7,6 +7,7 @@
       db_env_set_func_fsync_rpmdb;
       db_sequence_create_rpmdb;
       db_strerror_rpmdb;
  +    __db_add_recovery_rpmdb;
       ficlSystemCompileExtras;
       ficlSystemCreate;
       ficlSystemCreateVm;
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/rpmdb/rpmdb.c
  ============================================================================
  $ cvs diff -u -r1.325 -r1.326 rpmdb.c
  --- rpm/rpmdb/rpmdb.c 7 Oct 2009 18:27:33 -0000       1.325
  +++ rpm/rpmdb/rpmdb.c 10 Oct 2009 13:56:27 -0000      1.326
  @@ -3080,7 +3080,6 @@
       he->p.ptr = _free(he->p.ptr);
   
       (void) blockSignals(db, &signalMask);
  -    xx = rpmtxnBegin(db);
   
   /*...@-nullpass -nullptrarith -nullderef @*/ /* FIX: rpmvals heartburn */
       {        dbiIndexItem rec = dbiIndexNewItem(hdrNum, 0);
  @@ -3346,7 +3345,6 @@
       (void) headerFree(db->db_h);
       db->db_h = NULL;
   
  -    xx = rpmtxnCommit(db);
       (void) unblockSignals(db, &signalMask);
   
       /* XXX return ret; */
  @@ -3419,7 +3417,6 @@
       dirIndexes = he->p.ui32p;
   
       (void) blockSignals(db, &signalMask);
  -    xx = rpmtxnBegin(db);
   
       if (!db->db_rebuilding) {
        int64_t seqno = 0;
  @@ -3804,7 +3801,6 @@
       /* Unreference header used by associated secondary index callbacks. */
       (void) headerFree(db->db_h);
   
  -    xx = (!ret ? rpmtxnCommit(db) : rpmtxnAbort(db));
       (void) unblockSignals(db, &signalMask);
   
       dirIndexes = _free(dirIndexes);
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/rpmdb/rpmdb.h
  ============================================================================
  $ cvs diff -u -r1.109 -r1.110 rpmdb.h
  --- rpm/rpmdb/rpmdb.h 7 Oct 2009 18:01:04 -0000       1.109
  +++ rpm/rpmdb/rpmdb.h 10 Oct 2009 13:56:27 -0000      1.110
  @@ -1147,6 +1147,24 @@
   }
   
   /*...@unused@*/ static inline
  +int rpmlioMkdir(rpmdb rpmdb, const char * dn, mode_t mode)
  +{
  +    int rc = 0;
  +#ifdef       NOTYET
  +    extern int logio_Mkdir_log
  +        __P((DB_ENV *, DB_TXN *, DB_LSN *, uint32_t, const DBT *, mode_t));
  +    DB_ENV * dbenv = rpmdb->db_dbenv;
  +    DB_TXN * _txn = rpmdb->db_txnid;
  +    DB_LSN _lsn = {0,0};
  +    DBT DNdbt = {0};
  +    DNdbt.data = (void *)dn;
  +    DNdbt.size = strlen(dn) + 1;     /* trailing NUL too */
  +    rc = logio_Mkdir_log(dbenv, _txn, &_lsn, DB_FLUSH, &DNdbt, mode)
  +#endif
  +    return rc;
  +}
  +
  +/*...@unused@*/ static inline
   int rpmmpfSyncAll(rpmdb rpmdb)
   {
       DB_ENV * dbenv = rpmdb->db_dbenv;
  @@ .
______________________________________________________________________
RPM Package Manager                                    http://rpm5.org
CVS Sources Repository                                [email protected]

Reply via email to