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: 24-Sep-2009 04:59:05 Branch: HEAD Handle: 2009092402590400 Modified files: rpm/js rpmdbe-js.c tjs.c rpm/js/tscripts Db.js Dbe.js Log: - js: open db's within a dbenv. Summary: Revision Changes Path 1.5 +47 -35 rpm/js/rpmdbe-js.c 1.56 +2 -2 rpm/js/tjs.c 1.15 +24 -10 rpm/js/tscripts/Db.js 1.4 +86 -52 rpm/js/tscripts/Dbe.js ____________________________________________________________________________ patch -p0 <<'@@ .' Index: rpm/js/rpmdbe-js.c ============================================================================ $ cvs diff -u -r1.4 -r1.5 rpmdbe-js.c --- rpm/js/rpmdbe-js.c 24 Sep 2009 00:18:20 -0000 1.4 +++ rpm/js/rpmdbe-js.c 24 Sep 2009 02:59:04 -0000 1.5 @@ -39,34 +39,6 @@ #define rpmdbe_wrappedobject NULL /* --- helpers */ -static const char _home[] = "./rpmdb"; -static int _eflags = DB_CREATE | DB_INIT_LOCK | DB_INIT_MPOOL | DB_INIT_REP | DB_INIT_TXN; - -static uint64_t _cachesize = 1024 * 1024; -static int _ncaches = 1; - -static int rpmdbe_create(DB_ENV ** dbenvp, uint32_t flags) -{ - FILE * _errfile = stderr; - int _mode = 0; - int ret; - - if ((ret = db_env_create(dbenvp, flags)) != 0) { - fprintf(stderr, "db_env_create: %s", db_strerror(ret)); - ret = 1; - goto exit; - } - - (*dbenvp)->set_errfile(*dbenvp, _errfile); - - (*dbenvp)->set_errpfx(*dbenvp, _home); /* XXX FIXME */ - - (*dbenvp)->set_cachesize(*dbenvp, - (_cachesize >> 32), (_cachesize & 0xffffffff), _ncaches); - -exit: - return ret; -} /* --- Object methods */ @@ -220,7 +192,41 @@ if (dbenv->app_private == NULL) { int ret = dbenv->remove(dbenv, _home, _flags); - *rval = JSVAL_TRUE; + if (ret) { + dbenv->err(dbenv, ret, "DB_ENV->remove: %s", _home); + goto exit; + } else + *rval = JSVAL_TRUE; + } + + ok = JS_TRUE; + +exit: + return ok; +} + +static JSBool +rpmdbe_StatPrint(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) +{ + void * ptr = JS_GetInstancePrivate(cx, obj, &rpmdbeClass, NULL); + DB_ENV * dbenv = ptr; + uint32_t _flags = DB_STAT_ALL; + JSBool ok = JS_FALSE; + +_METHOD_DEBUG_ENTRY(_debug); + + if (dbenv == NULL) goto exit; + *rval = JSVAL_FALSE; + + if (!(ok = JS_ConvertArguments(cx, argc, argv, "/u", &_flags))) + goto exit; + + if (dbenv->app_private != NULL) { + int ret = dbenv->stat_print(dbenv, _flags); + if (ret) + dbenv->err(dbenv, ret, "DB_ENV->stat_print"); + else + *rval = JSVAL_TRUE; } ok = JS_TRUE; @@ -235,6 +241,7 @@ JS_FS("dbrename", rpmdbe_Dbrename, 0,0,0), JS_FS("open", rpmdbe_Open, 0,0,0), JS_FS("remove", rpmdbe_Remove, 0,0,0), + JS_FS("stat_print", rpmdbe_StatPrint, 0,0,0), JS_FS_END }; @@ -453,8 +460,14 @@ if (!dbenv->get_data_dirs(dbenv, &_av) && (_ac = argvCount(_av)) > 0) { - _s = _av[0]; /* XXX FIXME: return array */ - *vp = _RET_S(_s); + JSObject * o = JS_NewArrayObject(cx, 0, NULL); + int i; + + *vp = OBJECT_TO_JSVAL(o); + for (i = 0; i < _ac; i++) { + jsval v = STRING_TO_JSVAL(JS_NewStringCopyZ(cx, _av[i])); + (void) JS_SetElement(cx, o, i, &v); + } } else *vp = JSVAL_VOID; break; @@ -625,7 +638,7 @@ break; break; /* dbenv->add_data_dir() */ - case _DATADIRS: break; /* XXX FIXME */ + case _DATADIRS: *vp = _PUT_S(dbenv->add_data_dir(dbenv, _s)); break; case _CREATE_DIR: *vp = _PUT_S(dbenv->set_create_dir(dbenv, _s)); break; case _ENCRYPT: *vp = _PUT_S(dbenv->set_encrypt(dbenv, _s, DB_ENCRYPT_AES)); break; case _ERRFILE: @@ -817,10 +830,9 @@ { DB_ENV * dbenv = NULL; uint32_t _flags = 0; + int ret = db_env_create(&dbenv, _flags); - if (rpmdbe_create(&dbenv, _flags) || dbenv == NULL - || !JS_SetPrivate(cx, obj, (void *)dbenv)) - { + if (ret || dbenv == NULL || !JS_SetPrivate(cx, obj, (void *)dbenv)) { if (dbenv) (void) dbenv->close(dbenv, _flags); @@ . patch -p0 <<'@@ .' Index: rpm/js/tjs.c ============================================================================ $ cvs diff -u -r1.55 -r1.56 tjs.c --- rpm/js/tjs.c 24 Sep 2009 00:18:20 -0000 1.55 +++ rpm/js/tjs.c 24 Sep 2009 02:59:04 -0000 1.56 @@ -76,8 +76,8 @@ { "Bc", rpmjs_InitBcClass, -40 }, /* todo++ */ { "Bf", rpmjs_InitBfClass, -26 }, - { "Db", rpmjs_InitDbClass, -45 }, - { "Dbc", rpmjs_InitDbcClass, -46 }, + { "Db", rpmjs_InitDbClass, 45 }, + { "Dbc", rpmjs_InitDbcClass, 46 }, { "Dbe", rpmjs_InitDbeClass, 44 }, { "Txn", rpmjs_InitTxnClass, -47 }, @@ . patch -p0 <<'@@ .' Index: rpm/js/tscripts/Db.js ============================================================================ $ cvs diff -u -r1.14 -r1.15 Db.js --- rpm/js/tscripts/Db.js 23 Sep 2009 22:33:54 -0000 1.14 +++ rpm/js/tscripts/Db.js 24 Sep 2009 02:59:04 -0000 1.15 @@ -232,17 +232,29 @@ // ------------------------- // ----- -var dbenv = null; -var eoflags = 0; +var home = "./rpmdb"; +var eflags = DB_CREATE | DB_INIT_LOCK | DB_INIT_MPOOL | DB_INIT_REP | DB_INIT_TXN; +var emode = 0; + +// var dbenv = null; +var dbenv = new Dbe(); +ack("typeof dbenv;", "object"); +ack("dbenv instanceof Dbe;", true); +ack('dbenv.open(home, eflags, emode)', true); +ack('dbenv.home', home); +ack('dbenv.open_flags', eflags); -var errfile = "stdout"; +var eoflags = 0; +var errfile = "stderr"; var errpfx = "Stuff"; var pagesize = 1024; var cachesize = 1024 * 1024; var little_endian = 1234; var big_endian = 4321; -var dbfile = "./rpmdb/Stuff"; +// var dbfile = home + "/Stuff"; +var dbfile = "Stuff"; + var dbname = null; var oflags = DB_CREATE; var dbtype = DB_HASH; @@ -259,7 +271,7 @@ // ack("db.debug = 1;", 1); // ack("db.debug = 0;", 0); -ack('db.errfile', 'stderr'); +ack('db.errfile', null); ack('db.errfile = errfile', true); ack('db.errfile', errfile); @@ -269,7 +281,7 @@ ack('db.lorder', little_endian); ack('db.lorder = big_endian', true); -ack('db.lorder', big_endian); +// ack('db.lorder', big_endian); ack('db.lorder = little_endian', true); ack('db.lorder', little_endian); @@ -277,9 +289,10 @@ ack('db.pagesize = pagesize', true); ack('db.pagesize', pagesize); -ack('db.cachesize', 265564); -ack('db.cachesize = cachesize', true); -ack('db.cachesize >= cachesize', true); +// --- not permitted with dbenv +// ack('db.cachesize', 265564); +// ack('db.cachesize = cachesize', true); +// ack('db.cachesize >= cachesize', true); h_ffactor = 50; // todo: figger the units ack('db.h_ffactor', 0); @@ -305,7 +318,8 @@ ack('db.create_dir', null); // ack('db.create_dir = "."', true); -ack('db.encrypt', 0); +// --- not permitted with dbenv +// ack('db.encrypt', 0); // ack('db.encrypt = "xyzzy"', true); ack('db.flags', 0); @@ . patch -p0 <<'@@ .' Index: rpm/js/tscripts/Dbe.js ============================================================================ $ cvs diff -u -r1.3 -r1.4 Dbe.js --- rpm/js/tscripts/Dbe.js 24 Sep 2009 00:18:20 -0000 1.3 +++ rpm/js/tscripts/Dbe.js 24 Sep 2009 02:59:04 -0000 1.4 @@ -67,54 +67,104 @@ ack('dbenv.minor', 8); ack('dbenv.patch', 24); -ack('dbenv.open(home, eflags, emode)', true); -ack('dbenv.home', home); -ack('dbenv.open_flags', eflags); +ack('dbenv.errpfx', null); +ack('dbenv.errpfx = home', true); +ack('dbenv.errpfx', home); + +ack('dbenv.errfile', null); +ack('dbenv.errfile = "stderr"', true); +ack('dbenv.errfile', 'stderr'); + +ack('dbenv.cachemax', 265564); +ack('dbenv.cachesize', 265564); +ack('dbenv.ncaches', 1); + +ack('dbenv.cachemax = 1318912', true); +ack('dbenv.cachesize = 1312348', true); +ack('dbenv.ncaches = 2', true); + +ack('dbenv.cachemax', 1318912); +ack('dbenv.cachesize', 2054206); +ack('dbenv.ncaches', 2); + +ack('dbenv.mmapsize', 0); +ack('dbenv.mmapsize = 16*1024*1024', true); +ack('dbenv.mmapsize', 16*1024*1024); + +ack('dbenv.thread_count', 0); +ack('dbenv.thread_count = 64', true); +ack('dbenv.thread_count', 64); + +ack('dbenv.max_openfd', 0); +// ack('dbenv.max_openfd = 100', true); +// ack('dbenv.max_openfd', 100); + +ack('dbenv.shm_key', -1); +ack('dbenv.shm_key = 0x1234', true); +// ack('dbenv.shm_key', 0x1234); -ack('dbenv.data_dirs', './data'); +ack('dbenv.data_dirs', undefined); // ack('dbenv.data_dirs = "./data"', true); // todo++ +// ack('dbenv.data_dirs', './data'); -ack('dbenv.create_dir', '.'); +ack('dbenv.create_dir', null); // ack('dbenv.create_dir = "."', true); +// ack('dbenv.create_dir', '.'); -ack('dbenv.encrypt', 0); -// ack('dbenv.encrypt = "xyzzy"', true); +ack('dbenv.idirmode', null); +ack('dbenv.idirmode = "rwxr-xr-x"', true); +ack('dbenv.idirmode', 'rwxr-xr-x'); -ack('dbenv.errfile', 'stderr'); -// ack('dbenv.errfile = "stdout"', true); +ack('dbenv.tmp_dir', null); +ack('dbenv.tmp_dir = "./tmp"', true); +ack('dbenv.tmp_dir', './tmp'); -ack('dbenv.errpfx', home); -// ack('dbenv.errpfx = "foo"', true); +ack('dbenv.lg_bsize', 0); +ack('dbenv.lg_bsize = 65536', true); +ack('dbenv.lg_bsize', 65536); -ack('dbenv.flags', DB_REGION_INIT); -// ack('dbenv.flags = DB_REGION_INIT', true); +ack('dbenv.lg_dir', null); +ack('dbenv.lg_dir = "./log"', true); +ack('dbenv.lg_dir', './log'); -ack('dbenv.idirmode', 'rwxr-xr-x'); -// ack('dbenv.idirmode = "rwxrwxrwx"', true); +ack('dbenv.lg_filemode', 0); +ack('dbenv.lg_filemode = 0644', true); +ack('dbenv.lg_filemode', 0644); -ack('dbenv.msgfile', null); -// ack('dbenv.msgfile = "stdout"', true); +ack('dbenv.lg_max', 0); +ack('dbenv.lg_max = 10485760', true); +ack('dbenv.lg_max', 10485760); -ack('dbenv.shm_key', -1); -// ack('dbenv.shm_key = 0x1234', true); +ack('dbenv.lg_regionmax', 130000); -ack('dbenv.thread_count', 64); -// ack('dbenv.thread_count = 2 * 64', true); +ack('dbenv.tx_max', 100); +// ack('dbenv.tx_max = 100', true); -ack('dbenv.cachemax', 1318912); -// ack('dbenv.cachemax = 2 * 1318912', true); +ack('dbenv.tx_timestamp', 0); +ack('dbenv.tx_timestamp = 0x12345678', true); +ack('dbenv.tx_timestamp', 0x12345678); -ack('dbenv.cachesize', 1312348); -// ack('dbenv.cachesize = 2 * 1312348', true); +ack('dbenv.encrypt', 0); +// ack('dbenv.encrypt = "xyzzy"', true); +// ack('dbenv.encrypt', 1); -ack('dbenv.ncaches', 1); -// ack('dbenv.ncaches = 2 * 1', true); +// ----- +ack('dbenv.open(home, eflags, emode)', true); +ack('dbenv.home', home); +ack('dbenv.open_flags', eflags); -ack('dbenv.max_openfd', 100); -// ack('dbenv.max_openfd = 100', true); +ack('dbenv.data_dirs', './data,.'); +ack('dbenv.create_dir', '.'); + +ack('dbenv.flags', DB_REGION_INIT); +// ack('dbenv.flags = DB_REGION_INIT', true); + +ack('dbenv.msgfile', null); +// ack('dbenv.msgfile = "stdout"', true); ack('dbenv.mmapsize', 16*1024*1024); -// ack('dbenv.mmapsize = 32*1024*1024', true); +ack('dbenv.mmapsize = 32*1024*1024', true); +ack('dbenv.mmapsize', 32*1024*1024); ack('dbenv.mutex_align', 4); // ack('dbenv.mutex_align = 4', true); @@ -135,11 +185,9 @@ // ack('dbenv.txn_timeout = 0', true); ack('dbenv.tmp_dir', './tmp'); -// ack('dbenv.tmp_dir = "/var/tmp"', true); -ack('dbenv.verbose', false); // todo++ - -ack('dbenv.lk_conflicts', false); // todo++ +ack('dbenv.verbose', undefined); // todo++ +ack('dbenv.lk_conflicts', undefined); // todo++ ack('dbenv.lk_detect', DB_LOCK_DEFAULT); // ack('dbenv.lk_detect = DB_LOCK_DEFAULT', true); @@ -172,24 +220,10 @@ // ack('dbenv.log_zero = 0', true); ack('dbenv.lg_bsize', 65536); -// ack('dbenv.lg_bsize = 2 * 32000', true); - ack('dbenv.lg_dir', './log'); -// ack('dbenv.lg_dir = "/var/tmp/log"', true); - ack('dbenv.lg_filemode', 0644); // todo++ - ack('dbenv.lg_max', 10485760); -// ack('dbenv.lg_max = 2 * 10485760', true); - ack('dbenv.lg_regionmax', 130000); -// ack('dbenv.lg_regionmax = 2 * 130000', true); - -ack('dbenv.tx_max', 100); -// ack('dbenv.tx_max = 2 * 100', true); - -ack('dbenv.tx_timestamp', 0); -// ack('dbenv.tx_timestamp = 0x1234', true); ack('dbenv.DB_REP_CONF_BULK', 0); ack('dbenv.DB_REP_CONF_DELAYCLIENT', 0); @@ -199,9 +233,9 @@ ack('dbenv.DB_REP_CONF_NOWAIT', 0); ack('dbenv.DB_REPMGR_CONF_2SITE_STRICT', 0); -ack('dbenv.rep_limit', 0); -ack('dbenv.rep_nsites', 0); -ack('dbenv.rep_priority', 0); +ack('dbenv.rep_limit', undefined); +ack('dbenv.rep_nsites', undefined); +ack('dbenv.rep_priority', undefined); ack('dbenv.DB_REP_ACK_TIMEOUT', 1000000); ack('dbenv.DB_REP_CHECKPOINT_DELAY', 30000000); @@ -213,6 +247,6 @@ ack('dbenv.DB_REP_HEARTBEAT_SEND', 0); ack('dbenv.DB_REP_LEASE_TIMEOUT', 0); -dbenv.close(0); +ack('dbenv.close(0)', true); if (loglvl) print("<-- Dbe.js"); @@ . ______________________________________________________________________ RPM Package Manager http://rpm5.org CVS Sources Repository [email protected]
