Add the bsddb.db.DBEnv.lock_id_free method.

Improve test_lock's tempdir creation and cleanup.
This commit is contained in:
Gregory P. Smith 2007-11-05 02:56:31 +00:00
parent ec10a4a402
commit ac11e02143
3 changed files with 35 additions and 14 deletions

View File

@ -2,10 +2,12 @@
TestCases for testing the locking sub-system. TestCases for testing the locking sub-system.
""" """
import sys, os, string import os
from pprint import pprint
import shutil
import sys
import tempfile import tempfile
import time import time
from pprint import pprint
try: try:
from threading import Thread, currentThread from threading import Thread, currentThread
@ -30,21 +32,15 @@ except ImportError:
class LockingTestCase(unittest.TestCase): class LockingTestCase(unittest.TestCase):
def setUp(self): def setUp(self):
homeDir = os.path.join(tempfile.gettempdir(), 'db_home') self.homeDir = tempfile.mkdtemp('.test_lock')
self.homeDir = homeDir
try: os.mkdir(homeDir)
except os.error: pass
self.env = db.DBEnv() self.env = db.DBEnv()
self.env.open(homeDir, db.DB_THREAD | db.DB_INIT_MPOOL | self.env.open(self.homeDir, db.DB_THREAD | db.DB_INIT_MPOOL |
db.DB_INIT_LOCK | db.DB_CREATE) db.DB_INIT_LOCK | db.DB_CREATE)
def tearDown(self): def tearDown(self):
self.env.close() self.env.close()
import glob shutil.rmtree(self.homeDir)
files = glob.glob(os.path.join(self.homeDir, '*'))
for file in files:
os.remove(file)
def test01_simple(self): def test01_simple(self):
@ -62,8 +58,8 @@ class LockingTestCase(unittest.TestCase):
self.env.lock_put(lock) self.env.lock_put(lock)
if verbose: if verbose:
print "Released lock: %s" % lock print "Released lock: %s" % lock
if db.version() >= (4,0):
self.env.lock_id_free(anID)
def test02_threaded(self): def test02_threaded(self):
@ -124,6 +120,8 @@ class LockingTestCase(unittest.TestCase):
self.env.lock_put(lock) self.env.lock_put(lock)
if verbose: if verbose:
print "%s: Released %s lock: %s" % (name, lt, lock) print "%s: Released %s lock: %s" % (name, lt, lock)
if db.version() >= (4,0):
self.env.lock_id_free(anID)
#---------------------------------------------------------------------- #----------------------------------------------------------------------

View File

@ -830,6 +830,8 @@ Extension Modules
DB users should use DB.put(k, v) when they want to store duplicates; not DB users should use DB.put(k, v) when they want to store duplicates; not
DB[k] = v. DB[k] = v.
- Add the bsddb.db.DBEnv.lock_id_free method.
- Bug #1686475: Support stat'ing open files on Windows again. - Bug #1686475: Support stat'ing open files on Windows again.
- Patch #1185447: binascii.b2a_qp() now correctly quotes binary characters - Patch #1185447: binascii.b2a_qp() now correctly quotes binary characters

View File

@ -4250,6 +4250,24 @@ DBEnv_lock_id(DBEnvObject* self, PyObject* args)
return PyInt_FromLong((long)theID); return PyInt_FromLong((long)theID);
} }
#if (DBVER >= 40)
static PyObject*
DBEnv_lock_id_free(DBEnvObject* self, PyObject* args)
{
int err;
u_int32_t theID;
if (!PyArg_ParseTuple(args, "I:lock_id_free", &theID))
return NULL;
CHECK_ENV_NOT_CLOSED(self);
MYDB_BEGIN_ALLOW_THREADS;
err = self->db_env->lock_id_free(self->db_env, theID);
MYDB_END_ALLOW_THREADS;
RETURN_IF_ERR();
RETURN_NONE();
}
#endif
static PyObject* static PyObject*
DBEnv_lock_put(DBEnvObject* self, PyObject* args) DBEnv_lock_put(DBEnvObject* self, PyObject* args)
@ -5125,6 +5143,9 @@ static PyMethodDef DBEnv_methods[] = {
{"lock_detect", (PyCFunction)DBEnv_lock_detect, METH_VARARGS}, {"lock_detect", (PyCFunction)DBEnv_lock_detect, METH_VARARGS},
{"lock_get", (PyCFunction)DBEnv_lock_get, METH_VARARGS}, {"lock_get", (PyCFunction)DBEnv_lock_get, METH_VARARGS},
{"lock_id", (PyCFunction)DBEnv_lock_id, METH_VARARGS}, {"lock_id", (PyCFunction)DBEnv_lock_id, METH_VARARGS},
#if (DBVER >= 40)
{"lock_id_free", (PyCFunction)DBEnv_lock_id_free, METH_VARARGS},
#endif
{"lock_put", (PyCFunction)DBEnv_lock_put, METH_VARARGS}, {"lock_put", (PyCFunction)DBEnv_lock_put, METH_VARARGS},
{"lock_stat", (PyCFunction)DBEnv_lock_stat, METH_VARARGS}, {"lock_stat", (PyCFunction)DBEnv_lock_stat, METH_VARARGS},
{"log_archive", (PyCFunction)DBEnv_log_archive, METH_VARARGS}, {"log_archive", (PyCFunction)DBEnv_log_archive, METH_VARARGS},