[CVS] RPM: rpm/rpmdb/ db3.c rpmdb.c
RPM Package Manager, CVS Repository http://rpm5.org/cvs/ Server: rpm5.org Name: Jeff Johnson Root: /v/rpm/cvs Email: j...@rpm5.org Module: rpm Date: 17-Dec-2009 04:50:00 Branch: HEAD Handle: 2009121703495900 Modified files: rpm/rpmdb db3.c rpmdb.c Log: - rpmdb: tune the rpmbf parameters to a given {n,e}. Summary: RevisionChanges Path 1.142 +6 -4 rpm/rpmdb/db3.c 1.375 +7 -4 rpm/rpmdb/rpmdb.c patch -p0 '@@ .' Index: rpm/rpmdb/db3.c $ cvs diff -u -r1.141 -r1.142 db3.c --- rpm/rpmdb/db3.c 15 Dec 2009 21:10:23 - 1.141 +++ rpm/rpmdb/db3.c 17 Dec 2009 03:49:59 - 1.142 @@ -1878,10 +1878,12 @@ if (ns 0) /* No empty keys please. */ (void) loadDBT(_r, he-tag, s, ns); } else { - size_t _jiggery = 2;/* XXX todo: Bloom filter tuning? */ - size_t _k = _jiggery * 8; - size_t _m = _jiggery * (3 * he-c * _k) / 2; - rpmbf bf = rpmbfNew(_m, _k, 0); + static double e = 1.0e-4; + size_t m = 0; + size_t k = 0; + rpmbf bf; + rpmbfParams(he-c, e, m, k); + bf = rpmbfNew(m, k, 0); _r-flags = DB_DBT_MULTIPLE | DB_DBT_APPMALLOC; _r-data = A = xcalloc(he-c, sizeof(*A)); @@ . patch -p0 '@@ .' Index: rpm/rpmdb/rpmdb.c $ cvs diff -u -r1.374 -r1.375 rpmdb.c --- rpm/rpmdb/rpmdb.c 15 Dec 2009 21:11:26 - 1.374 +++ rpm/rpmdb/rpmdb.c 17 Dec 2009 03:49:59 - 1.375 @@ -2277,10 +2277,13 @@ if (!rc) { int i; if (mi-mi_bf == NULL) { - size_t _jiggery = 2;/* XXX todo: Bloom filter tuning? */ - size_t _k = _jiggery * 8; - size_t _m = _jiggery * (3 * nHdrNums * _k) / 2; - mi-mi_bf = rpmbfNew(_m, _k, 0); + static size_t nRemoves = 8192; /* XXX population estimate */ + static double e = 1.0e-4; + size_t m = 0; + size_t k = 0; + rpmbf bf; + rpmbfParams(nRemoves, e, m, k); + mi-mi_bf = rpmbfNew(m, k, 0); } for (i = 0; i nHdrNums; i++) { uint32_t mi_offset = _hton_ui(hdrNums[i]); @@ . __ RPM Package Managerhttp://rpm5.org CVS Sources Repositoryrpm-cvs@rpm5.org
[CVS] RPM: rpm/rpmdb/ db3.c rpmdb.c
RPM Package Manager, CVS Repository http://rpm5.org/cvs/ Server: rpm5.org Name: Jeff Johnson Root: /v/rpm/cvs Email: j...@rpm5.org Module: rpm Date: 08-Dec-2009 19:30:02 Branch: HEAD Handle: 2009120818300200 Modified files: rpm/rpmdb db3.c rpmdb.c Log: - rpmdb: cruft up the usual swabbing prior to making integer indices big endian. Summary: RevisionChanges Path 1.130 +63 -0 rpm/rpmdb/db3.c 1.350 +64 -26 rpm/rpmdb/rpmdb.c patch -p0 '@@ .' Index: rpm/rpmdb/db3.c $ cvs diff -u -r1.129 -r1.130 db3.c --- rpm/rpmdb/db3.c 8 Dec 2009 17:46:40 - 1.129 +++ rpm/rpmdb/db3.c 8 Dec 2009 18:30:02 - 1.130 @@ -43,6 +43,69 @@ /*...@access dbiIndex @*/ /*...@access dbiIndexSet @*/ +union _dbswap { +uint64_t ul; +uint32_t ui; +uint16_t us; +uint8_t uc[8]; +}; +static union _dbswap _endian = { .ui = 0x11223344 }; + +static inline uint64_t _ntoh_ul(uint64_t ul) + /*...@*/ +{ +union _dbswap _a; +_a.ul = ul; +if (_endian.uc[0] == 0x44) { + uint8_t _b, *_c = _a.uc; \ + _b = _c[7]; _c[7] = _c[0]; _c[0] = _b; \ + _b = _c[6]; _c[6] = _c[1]; _c[1] = _b; \ + _b = _c[5]; _c[5] = _c[2]; _c[2] = _b; \ + _b = _c[4]; _c[4] = _c[3]; _c[3] = _b; \ +} +return _a.ul; +} +static inline uint64_t _hton_ul(uint64_t ul) + /*...@*/ +{ +return _ntoh_ul(ul); +} + +static inline uint32_t _ntoh_ui(uint32_t ui) + /*...@*/ +{ +union _dbswap _a; +_a.ui = ui; +if (_endian.uc[0] == 0x44) { + uint8_t _b, *_c = _a.uc; \ + _b = _c[3]; _c[3] = _c[0]; _c[0] = _b; \ + _b = _c[2]; _c[2] = _c[1]; _c[1] = _b; \ +} +return _a.ui; +} +static inline uint32_t _hton_ui(uint32_t ui) + /*...@*/ +{ +return _ntoh_ui(ui); +} + +static inline uint16_t _ntoh_us(uint16_t us) + /*...@*/ +{ +union _dbswap _a; +_a.us = us; +if (_endian.uc[0] == 0x44) { + uint8_t _b, *_c = _a.uc; \ + _b = _c[1]; _c[1] = _c[0]; _c[0] = _b; \ +} +return _a.us; +} +static inline uint16_t _hton_us(uint16_t us) + /*...@*/ +{ +return _ntoh_us(us); +} + #ifdef NOTNOW static const char * bfstring(unsigned int x, const char * xbf) { @@ . patch -p0 '@@ .' Index: rpm/rpmdb/rpmdb.c $ cvs diff -u -r1.349 -r1.350 rpmdb.c --- rpm/rpmdb/rpmdb.c 8 Dec 2009 15:37:24 - 1.349 +++ rpm/rpmdb/rpmdb.c 8 Dec 2009 18:30:02 - 1.350 @@ -321,34 +321,72 @@ } union _dbswap { -rpmuint32_t ui; -unsigned char uc[4]; +uint64_t ul; +uint32_t ui; +uint16_t us; +uint8_t uc[8]; }; static union _dbswap _endian = { .ui = 0x11223344 }; -#define _DBSWAP(_a) \ - { unsigned char _b, *_c = (_a).uc; \ -_b = _c[3]; _c[3] = _c[0]; _c[0] = _b; \ -_b = _c[2]; _c[2] = _c[1]; _c[1] = _b; \ - } - -static inline uint32_t _ntohl(uint32_t ui) -{ -union _dbswap mi_offset; -mi_offset.ui = ui; -if (_endian.uc[0] == 0x44) - _DBSWAP(mi_offset); -return mi_offset.ui; +static inline uint64_t _ntoh_ul(uint64_t ul) + /*...@*/ +{ +union _dbswap _a; +_a.ul = ul; +if (_endian.uc[0] == 0x44) { + uint8_t _b, *_c = _a.uc; \ + _b = _c[7]; _c[7] = _c[0]; _c[0] = _b; \ + _b = _c[6]; _c[6] = _c[1]; _c[1] = _b; \ + _b = _c[5]; _c[5] = _c[2]; _c[2] = _b; \ + _b = _c[4]; _c[4] = _c[3]; _c[3] = _b; \ +} +return _a.ul; +} +static inline uint64_t _hton_ul(uint64_t ul) + /*...@*/ +{ +return _ntoh_ul(ul); +} + +static inline uint32_t _ntoh_ui(uint32_t ui) + /*...@*/ +{ +union _dbswap _a; +_a.ui = ui; +if (_endian.uc[0] == 0x44) { + uint8_t _b, *_c = _a.uc; \ + _b = _c[3]; _c[3] = _c[0]; _c[0] = _b; \ + _b = _c[2]; _c[2] = _c[1]; _c[1] = _b; \ +} +return _a.ui; +} +static inline uint32_t _hton_ui(uint32_t ui) + /*...@*/ +{ +return _ntoh_ui(ui); +} + +static inline uint16_t _ntoh_us(uint16_t us) + /*...@*/ +{ +union _dbswap _a; +_a.us = us; +if (_endian.uc[0] == 0x44) { + uint8_t _b, *_c = _a.uc; \ + _b = _c[1]; _c[1] = _c[0]; _c[0] = _b; \ +} +return _a.us; } -static inline uint32_t _htonl(uint32_t ui) +static inline uint16_t _hton_us(uint16_t us) + /*...@*/ {
[CVS] RPM: rpm/rpmdb/ db3.c rpmdb.c
RPM Package Manager, CVS Repository http://rpm5.org/cvs/ Server: rpm5.org Name: Jeff Johnson Root: /v/rpm/cvs Email: j...@rpm5.org Module: rpm Date: 07-Oct-2009 20:27:33 Branch: HEAD Handle: 2009100718273300 Modified files: rpm/rpmdb db3.c rpmdb.c Log: - dbi: initialize new variables, rescusitate DB_RECOVER. Summary: RevisionChanges Path 1.119 +1 -0 rpm/rpmdb/db3.c 1.325 +4 -0 rpm/rpmdb/rpmdb.c patch -p0 '@@ .' Index: rpm/rpmdb/db3.c $ cvs diff -u -r1.118 -r1.119 db3.c --- rpm/rpmdb/db3.c 7 Oct 2009 00:50:24 - 1.118 +++ rpm/rpmdb/db3.c 7 Oct 2009 18:27:33 - 1.119 @@ -666,6 +666,7 @@ } #endif +if (eflags DB_RECOVER) eflags |= DB_CREATE; #if (DB_VERSION_MAJOR == 3 DB_VERSION_MINOR != 0) || (DB_VERSION_MAJOR == 4) rc = (dbenv-open)(dbenv, dbhome, eflags, dbi-dbi_perms); #else @@ . patch -p0 '@@ .' Index: rpm/rpmdb/rpmdb.c $ cvs diff -u -r1.324 -r1.325 rpmdb.c --- rpm/rpmdb/rpmdb.c 7 Oct 2009 00:50:25 - 1.324 +++ rpm/rpmdb/rpmdb.c 7 Oct 2009 18:27:33 - 1.325 @@ -1177,7 +1177,11 @@ db-db_nbits = 0; db-db_next = NULL; db-db_opens = 0; + db-db_dbenv = NULL; +db-db_txnid = NULL; +db-db_logc = NULL; +db-db_mpf = NULL; dbiTagsInit(db-db_tags, db-db_ndbi); db-_dbi = xcalloc(db-db_ndbi, sizeof(*db-_dbi)); @@ . __ RPM Package Managerhttp://rpm5.org CVS Sources Repositoryrpm-cvs@rpm5.org
[CVS] RPM: rpm/rpmdb/ db3.c rpmdb.c
RPM Package Manager, CVS Repository http://rpm5.org/cvs/ Server: rpm5.org Name: Jeff Johnson Root: /v/rpm/cvs Email: j...@rpm5.org Module: rpm Date: 07-Oct-2009 02:50:25 Branch: HEAD Handle: 2009100700502401 Modified files: rpm/rpmdb db3.c rpmdb.c Log: - dbi: sanitize DB_THREAD for non-root lusers. Summary: RevisionChanges Path 1.118 +30 -18 rpm/rpmdb/db3.c 1.324 +0 -2 rpm/rpmdb/rpmdb.c patch -p0 '@@ .' Index: rpm/rpmdb/db3.c $ cvs diff -u -r1.117 -r1.118 db3.c --- rpm/rpmdb/db3.c 6 Oct 2009 23:04:13 - 1.117 +++ rpm/rpmdb/db3.c 7 Oct 2009 00:50:24 - 1.118 @@ -1005,10 +1005,10 @@ int _printit; int rc; -assert(db != NULL); +assert(db != NULL); if (dbcursor == NULL) { /* XXX duplicates require cursors. */ - rc = db-get(db, _txnid, key, data, 0); + rc = db-get(db, _txnid, key, data, flags); /* XXX DB_NOTFOUND can be returned */ _printit = (rc == DB_NOTFOUND ? 0 : _debug); rc = cvtdberr(dbi, db-get, rc, _printit); @@ -1042,25 +1042,32 @@ /*...@modifies *dbcursor, *key, *data, fileSystem @*/ { DB * db = dbi-dbi_db; +DB_TXN * _txnid = dbiTxnid(dbi); int _printit; int rc; -assert(db != NULL); -assert(dbcursor != NULL); - +assert(db != NULL); +if (dbcursor == NULL) { + /* XXX duplicates require cursors. */ + rc = db-pget(db, _txnid, key, pkey, data, flags); + /* XXX DB_NOTFOUND can be returned */ + _printit = (rc == DB_NOTFOUND ? 0 : _debug); + rc = cvtdberr(dbi, db-pget, rc, _printit); +} else { #if (DB_VERSION_MAJOR == 4 DB_VERSION_MINOR = 6) -/* XXX db3 does DB_FIRST on uninitialized cursor */ -rc = dbcursor-pget(dbcursor, key, pkey, data, flags); -/* XXX DB_NOTFOUND can be returned */ -_printit = (rc == DB_NOTFOUND ? 0 : _debug); -rc = cvtdberr(dbi, dbcursor-pget, rc, _printit); + /* XXX db3 does DB_FIRST on uninitialized cursor */ + rc = dbcursor-pget(dbcursor, key, pkey, data, flags); + /* XXX DB_NOTFOUND can be returned */ + _printit = (rc == DB_NOTFOUND ? 0 : _debug); + rc = cvtdberr(dbi, dbcursor-pget, rc, _printit); #else -/* XXX db3 does DB_FIRST on uninitialized cursor */ -rc = dbcursor-c_pget(dbcursor, key, pkey, data, flags); -/* XXX DB_NOTFOUND can be returned */ -_printit = (rc == DB_NOTFOUND ? 0 : _debug); -rc = cvtdberr(dbi, dbcursor-c_pget, rc, _printit); + /* XXX db3 does DB_FIRST on uninitialized cursor */ + rc = dbcursor-c_pget(dbcursor, key, pkey, data, flags); + /* XXX DB_NOTFOUND can be returned */ + _printit = (rc == DB_NOTFOUND ? 0 : _debug); + rc = cvtdberr(dbi, dbcursor-c_pget, rc, _printit); #endif +} DBIDEBUG(dbi, (stderr, -- %s(%p,%p,%p,%p,%p,0x%x) rc %d %s%s\n, __FUNCTION__, dbi, dbcursor, key, pkey, data, flags, rc, _DBCFLAGS(flags), _KEYDATA(key, data, NULL))); return rc; @@ -1077,7 +1084,7 @@ DB_TXN * _txnid = dbiTxnid(dbi); int rc; -assert(db != NULL); +assert(db != NULL); if (dbcursor == NULL) { rc = db-del(db, _txnid, key, flags); rc = cvtdberr(dbi, db-del, rc, _debug); @@ -1898,6 +1905,7 @@ /* dbhome is unwritable, don't attempt DB_CREATE on DB-open ... */ oflags = ~DB_CREATE; + oflags = ~DB_AUTO_COMMIT; /* ... but DBENV-open might still need DB_CREATE ... */ if (dbi-dbi_eflags DB_PRIVATE) { @@ -1905,7 +1913,9 @@ } else { dbi-dbi_eflags |= DB_JOINENV; dbi-dbi_oeflags = ~DB_CREATE; +#ifdef DYING dbi-dbi_oeflags = ~DB_THREAD; +#endif /* ... but, unless DB_PRIVATE is used, skip DBENV. */ dbi-dbi_use_dbenv = 0; } @@ -1949,7 +1959,9 @@ } else { dbi-dbi_eflags |= DB_JOINENV; dbi-dbi_oeflags = ~DB_CREATE; +#ifdef DYING dbi-dbi_oeflags = ~DB_THREAD; +#endif } } dbf = _free(dbf); @@ -2107,7 +2119,7 @@ /* 4.1: db-set_errcall(dbenv, rpmdb-db_errcall); */ /* 4.1: db-set_errfile(dbenv, rpmdb-db_errfile); */ /* 4.1: db-set_errpfx(dbenv, rpmdb-db_errpfx); */ - /* 4.1: db-set_feedback(???) */ +/* 4.1: db-set_feedback(???) */ if (rc == 0 dbi-dbi_lorder) { rc = db-set_lorder(db, dbi-dbi_lorder); @@