本文整理汇总了C++中db_strerror函数的典型用法代码示例。如果您正苦于以下问题:C++ db_strerror函数的具体用法?C++ db_strerror怎么用?C++ db_strerror使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了db_strerror函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。
示例1: bdb_modrdn
//.........这里部分代码省略.........
if (np != NULL) {
bdb_unlocked_cache_return_entry_r(&bdb->bi_cache, np);
np = NULL;
}
Debug( LDAP_DEBUG_TRACE, "==>" LDAP_XSTRING(bdb_modrdn)
": retrying...\n", 0, 0, 0 );
rs->sr_err = TXN_ABORT( ltid );
ltid = NULL;
LDAP_SLIST_REMOVE( &op->o_extra, &opinfo.boi_oe, OpExtra, oe_next );
opinfo.boi_oe.oe_key = NULL;
op->o_do_not_cache = opinfo.boi_acl_cache;
if( rs->sr_err != 0 ) {
rs->sr_err = LDAP_OTHER;
rs->sr_text = "internal error";
goto return_results;
}
if ( op->o_abandon ) {
rs->sr_err = SLAPD_ABANDON;
goto return_results;
}
parent_is_glue = 0;
parent_is_leaf = 0;
bdb_trans_backoff( ++num_retries );
}
/* begin transaction */
rs->sr_err = TXN_BEGIN( bdb->bi_dbenv, NULL, <id,
bdb->bi_db_opflags );
rs->sr_text = NULL;
if( rs->sr_err != 0 ) {
Debug( LDAP_DEBUG_TRACE,
LDAP_XSTRING(bdb_modrdn) ": txn_begin failed: "
"%s (%d)\n", db_strerror(rs->sr_err), rs->sr_err, 0 );
rs->sr_err = LDAP_OTHER;
rs->sr_text = "internal error";
goto return_results;
}
Debug( LDAP_DEBUG_TRACE, LDAP_XSTRING(bdb_modrdn) ": txn1 id: %x\n",
ltid->id(ltid), 0, 0 );
opinfo.boi_oe.oe_key = bdb;
opinfo.boi_txn = ltid;
opinfo.boi_err = 0;
opinfo.boi_acl_cache = op->o_do_not_cache;
LDAP_SLIST_INSERT_HEAD( &op->o_extra, &opinfo.boi_oe, oe_next );
/* get entry */
rs->sr_err = bdb_dn2entry( op, ltid, &op->o_req_ndn, &ei, 1,
&lock );
switch( rs->sr_err ) {
case 0:
case DB_NOTFOUND:
break;
case DB_LOCK_DEADLOCK:
case DB_LOCK_NOTGRANTED:
goto retry;
case LDAP_BUSY:
rs->sr_text = "ldap server busy";
goto return_results;
default:
rs->sr_err = LDAP_OTHER;
rs->sr_text = "internal error";
goto return_results;
}
开发者ID:DanahBlanahaseth,项目名称:cniiag_ldap,代码行数:67,代码来源:modrdn.c
示例2: bdb_query
//.........这里部分代码省略.........
}
if ( (ret = bdblib_valtochar(_tp, lkey, kbuf, &klen, _v, _n, BDB_KEY)) != 0 )
{ LM_ERR("error in query key \n");
goto error;
}
key.data = kbuf;
key.ulen = MAX_ROW_SIZE;
key.flags = DB_DBT_USERMEM;
key.size = klen;
data.data = dbuf;
data.ulen = MAX_ROW_SIZE;
data.flags = DB_DBT_USERMEM;
/*create an empty db_res_t which gets returned even if no result*/
*_r = db_new_result();
if (!*_r)
{ LM_ERR("no memory left for result \n");
ret = -2;
goto error;
}
RES_ROW_N(*_r) = 0;
BDB_CON_RESULT(_con) = *_r;
#ifdef BDB_EXTRA_DEBUG
LM_DBG("SELECT KEY: [%.*s]\n"
, (int) key.size
, (char *)key.data );
#endif
/*query Berkely DB*/
if ((ret = db->get(db, NULL, &key, &data, 0)) == 0)
{
#ifdef BDB_EXTRA_DEBUG
LM_DBG("RESULT\nKEY: [%.*s]\nDATA: [%.*s]\n"
, (int) key.size
, (char *)key.data
, (int) data.size
, (char *)data.data);
#endif
/*fill in the col part of db_res_t */
if ((ret = bdb_get_columns(_tbc->dtp, *_r, lres, _nc)) < 0)
{ LM_ERR("Error while getting column names\n");
goto error;
}
/*fill in the row part of db_res_t */
if ((ret=bdb_convert_row( *_r, dbuf, lres)) < 0)
{ LM_ERR("Error while converting row\n");
goto error;
}
}
else
{
/*Berkeley DB error handler*/
switch(ret)
{
case DB_NOTFOUND:
#ifdef BDB_EXTRA_DEBUG
LM_DBG("NO RESULT for QUERY \n");
#endif
ret=0;
break;
/*The following are all critical/fatal */
case DB_LOCK_DEADLOCK:
// The operation was selected to resolve a deadlock.
case DB_SECONDARY_BAD:
// A secondary index references a nonexistent primary key.
case DB_RUNRECOVERY:
default:
LM_CRIT("DB->get error: %s.\n", db_strerror(ret));
bdblib_recover(_tp,ret);
goto error;
}
}
if(lkey)
pkg_free(lkey);
if(lres)
pkg_free(lres);
return ret;
error:
if(lkey)
pkg_free(lkey);
if(lres)
pkg_free(lres);
if(*_r)
bdb_free_result(*_r);
*_r = NULL;
return ret;
}
开发者ID:eliasbaixas,项目名称:openser-xmlrpc,代码行数:101,代码来源:db_berkeley.c
示例3: bdb_delete
//.........这里部分代码省略.........
s.len = strlen(CON_TABLE(_h));
_tbc = bdblib_get_table(BDB_CON_CONNECTION(_h), &s);
if(!_tbc)
{ LM_WARN("table does not exist!\n");
return -3;
}
_tp = _tbc->dtp;
if(!_tp)
{ LM_WARN("table not loaded!\n");
return -4;
}
#ifdef BDB_EXTRA_DEBUG
LM_DBG("DELETE in %.*s\n", _tp->name.len, _tp->name.s );
#endif
db = _tp->db;
memset(&key, 0, sizeof(DBT));
memset(kbuf, 0, klen);
if(!_k || !_v || _n<=0)
{
/* Acquire a cursor for the database. */
if ((ret = db->cursor(db, NULL, &dbcp, DB_WRITECURSOR) ) != 0)
{ LM_ERR("Error creating cursor\n");
goto error;
}
while ((ret = dbcp->c_get(dbcp, &key, NULL, DB_NEXT)) == 0)
{
if(!strncasecmp((char*)key.data,"METADATA",8))
continue;
#ifdef BDB_EXTRA_DEBUG
LM_DBG("KEY: [%.*s]\n"
, (int) key.size
, (char *)key.data);
#endif
ret = dbcp->c_del(dbcp, 0);
}
dbcp->c_close(dbcp);
return 0;
}
lkey = bdb_get_colmap(_tp, _k, _n);
if(!lkey) return -5;
/* make the key */
if ( (ret = bdblib_valtochar(_tp, lkey, kbuf, &klen, _v, _n, BDB_KEY)) != 0 )
{ LM_ERR("Error in bdblib_makekey\n");
ret = -6;
goto error;
}
key.data = kbuf;
key.ulen = MAX_ROW_SIZE;
key.flags = DB_DBT_USERMEM;
key.size = klen;
if ((ret = db->del(db, NULL, &key, 0)) == 0)
{
bdblib_log(JLOG_DELETE, _tp, kbuf, klen);
#ifdef BDB_EXTRA_DEBUG
LM_DBG("DELETED ROW \n KEY: %s \n", (char *)key.data);
#endif
}
else
{ /*Berkeley DB error handler*/
switch(ret) {
case DB_NOTFOUND:
ret = 0;
break;
/*The following are all critical/fatal */
case DB_LOCK_DEADLOCK:
/* The operation was selected to resolve a deadlock. */
case DB_SECONDARY_BAD:
/* A secondary index references a nonexistent primary key. */
case DB_RUNRECOVERY:
default:
LM_CRIT("DB->del error: %s.\n"
, db_strerror(ret));
bdblib_recover(_tp, ret);
goto error;
}
}
ret = 0;
error:
if(lkey)
pkg_free(lkey);
return ret;
}
开发者ID:eliasbaixas,项目名称:openser-xmlrpc,代码行数:101,代码来源:db_berkeley.c
示例4: bdb_db_close
static int
bdb_db_close( BackendDB *be, ConfigReply *cr )
{
int rc;
struct bdb_info *bdb = (struct bdb_info *) be->be_private;
struct bdb_db_info *db;
bdb_idl_cache_entry_t *entry, *next_entry;
/* monitor handling */
(void)bdb_monitor_db_close( be );
{
Entry *e = bdb->bi_cache.c_dntree.bei_e;
if ( e ) {
bdb->bi_cache.c_dntree.bei_e = NULL;
e->e_private = NULL;
bdb_entry_return( e );
}
}
bdb->bi_flags &= ~BDB_IS_OPEN;
ber_bvarray_free( bdb->bi_db_config );
bdb->bi_db_config = NULL;
if( bdb->bi_dbenv ) {
/* Free cache locker if we enabled locking.
* TXNs must all be closed before DBs...
*/
if ( !( slapMode & SLAP_TOOL_QUICK ) && bdb->bi_cache.c_txn ) {
TXN_ABORT( bdb->bi_cache.c_txn );
bdb->bi_cache.c_txn = NULL;
}
bdb_reader_flush( bdb->bi_dbenv );
}
while( bdb->bi_databases && bdb->bi_ndatabases-- ) {
db = bdb->bi_databases[bdb->bi_ndatabases];
rc = db->bdi_db->close( db->bdi_db, 0 );
/* Lower numbered names are not strdup'd */
if( bdb->bi_ndatabases >= BDB_NDB )
free( db->bdi_name.bv_val );
free( db );
}
free( bdb->bi_databases );
bdb->bi_databases = NULL;
bdb_cache_release_all (&bdb->bi_cache);
if ( bdb->bi_idl_cache_size ) {
avl_free( bdb->bi_idl_tree, NULL );
bdb->bi_idl_tree = NULL;
entry = bdb->bi_idl_lru_head;
do {
next_entry = entry->idl_lru_next;
if ( entry->idl )
free( entry->idl );
free( entry->kstr.bv_val );
free( entry );
entry = next_entry;
} while ( entry != bdb->bi_idl_lru_head );
bdb->bi_idl_lru_head = bdb->bi_idl_lru_tail = NULL;
}
/* close db environment */
if( bdb->bi_dbenv ) {
/* force a checkpoint, but not if we were ReadOnly,
* and not in Quick mode since there are no transactions there.
*/
if ( !( slapMode & ( SLAP_TOOL_QUICK|SLAP_TOOL_READONLY ))) {
rc = TXN_CHECKPOINT( bdb->bi_dbenv, 0, 0, DB_FORCE );
if( rc != 0 ) {
Debug( LDAP_DEBUG_ANY,
"bdb_db_close: database \"%s\": "
"txn_checkpoint failed: %s (%d).\n",
be->be_suffix[0].bv_val, db_strerror(rc), rc );
}
}
rc = bdb->bi_dbenv->close( bdb->bi_dbenv, 0 );
bdb->bi_dbenv = NULL;
if( rc != 0 ) {
Debug( LDAP_DEBUG_ANY,
"bdb_db_close: database \"%s\": "
"close failed: %s (%d)\n",
be->be_suffix[0].bv_val, db_strerror(rc), rc );
return rc;
}
}
rc = alock_close( &bdb->bi_alock_info, slapMode & SLAP_TOOL_QUICK );
if( rc != 0 ) {
Debug( LDAP_DEBUG_ANY,
"bdb_db_close: database \"%s\": alock_close failed\n",
be->be_suffix[0].bv_val, 0, 0 );
return -1;
}
return 0;
}
开发者ID:Joywar,项目名称:openldap,代码行数:100,代码来源:init.c
示例5: probe_txn
/** probe if the directory contains an environment, and if so,
* if it has transactions
*/
e_txn probe_txn(bfpath *bfp)
{
DB_ENV *dbe;
int r;
#if DB_AT_LEAST(4,2)
u_int32_t flags;
#endif
r = db_env_create(&dbe, 0);
if (r) {
print_error(__FILE__, __LINE__, "cannot create environment handle: %s",
db_strerror(r));
return T_ERROR;
}
/* we might call dbe->set_flags here to set DB_NOPANIC, but this is
* only supported from 4.1 onwards and probably not worth the
* effort, we'll just check for DB_RUNRECOVERY */
#if DB_AT_LEAST(3,2)
r = dbe->open(dbe, bfp->dirname, DB_JOINENV, DS_MODE);
#else
r = ENOENT;
#endif
if (r == DB_RUNRECOVERY) {
dbe->close(dbe, 0);
return T_ENABLED;
}
if (r == ENOENT) {
struct stat st;
int w;
char *t = bfp->filepath;
struct dirent *de;
e_txn rc = T_DONT_KNOW;
DIR *d;
/* no environment found by JOINENV, but clean up handle */
dbe->close(dbe, 0);
/* retry, looking for log\.[0-9]{10} files - needed for instance
* after bogoutil --db-remove DIR or when DB_JOINENV is
* unsupported */
d = opendir(bfp->dirname);
if (d == NULL) {
print_error(__FILE__, __LINE__, "cannot open directory %s: %s",
t, strerror(r));
rc = T_ERROR;
} else {
while ((errno = 0, de = readdir(d))) {
if (strlen(de->d_name) == 14
&& strncmp(de->d_name, "log.", 4) == 0
&& strspn(de->d_name + 4, "0123456789") == 10)
{
rc = T_ENABLED;
break;
}
}
if (errno)
rc = T_ERROR;
closedir(d);
if (rc != T_ERROR && rc != T_ENABLED) {
w = stat(t, &st);
if (w == 0) {
rc = T_DISABLED;
} else if (errno != ENOENT) {
rc = T_ERROR;
print_error(__FILE__, __LINE__, "cannot stat %s: %s",
t, db_strerror(r));
}
}
}
return rc;
} /* if (r == ENOENT) for environment join */
if (r != 0) {
print_error(__FILE__, __LINE__, "cannot join environment: %s",
db_strerror(r));
return T_ERROR;
}
/* environment found, validate if it has transactions */
#if DB_AT_LEAST(4,2)
r = dbe->get_open_flags(dbe, &flags);
if (r) {
print_error(__FILE__, __LINE__, "cannot query flags: %s",
db_strerror(r));
return T_ERROR;
}
dbe->close(dbe, 0);
if ((flags & DB_INIT_TXN) == 0) {
print_error(__FILE__, __LINE__,
"environment found but does not support transactions.");
return T_ERROR;
}
//.........这里部分代码省略.........
开发者ID:BenediktGitGit,项目名称:itprojektEFT,代码行数:101,代码来源:datastore_db_trans.c
示例6: item_alloc2
item *item_cget(DBC *cursorp, char *start, size_t nstart, u_int32_t flags){
item *it = NULL;
DBT dbkey, dbdata;
bool stop;
int ret;
/* first, alloc a fixed size */
it = item_alloc2(settings.item_buf_size);
if (it == 0) {
return NULL;
}
BDB_CLEANUP_DBT();
dbkey.data = start;
dbkey.size = nstart;
dbkey.dlen = 0;
dbkey.doff = 0;
dbkey.flags = DB_DBT_PARTIAL;
dbdata.ulen = settings.item_buf_size;
dbdata.data = it;
dbdata.flags = DB_DBT_USERMEM;
stop = false;
/* try to get a item from bdb */
while (!stop) {
switch (ret = cursorp->get(cursorp, &dbkey, &dbdata, flags)) {
case DB_BUFFER_SMALL: /* user mem small */
if (settings.verbose > 1) {
fprintf(stderr, "cursorp->get: %s\n", db_strerror(ret));
}
/* free the original smaller buffer */
item_free(it);
/* alloc the correct size */
it = item_alloc2(dbdata.size);
if (it == NULL) {
return NULL;
}
dbkey.data = start;
dbkey.size = nstart;
dbdata.ulen = dbdata.size;
dbdata.data = it;
break;
case 0: /* Success. */
stop = true;
break;
case DB_NOTFOUND:
stop = true;
item_free(it);
it = NULL;
break;
default:
/* TODO: may cause bug here, if return DB_BUFFER_SMALL then retun non-zero again
* here 'it' may not a full one. a item buffer larger than item_buf_size may be added to freelist */
stop = true;
item_free(it);
it = NULL;
if (settings.verbose > 1) {
fprintf(stderr, "cursorp->get: %s\n", db_strerror(ret));
}
}
}
return it;
}
开发者ID:cyberrbob,项目名称:memcachedb,代码行数:63,代码来源:item.c
示例7: update_job
/*
* Update a Job record -- allows you to change the
* date fields in a Job record. This helps when
* providing migration from other vendors.
*/
static bool update_job(UAContext *ua)
{
int i;
char ed1[50], ed2[50];
POOL_MEM cmd(PM_MESSAGE);
JOB_DBR jr;
CLIENT_DBR cr;
utime_t StartTime;
char *client_name = NULL;
char *start_time = NULL;
const char *kw[] = {
NT_("starttime"), /* 0 */
NT_("client"), /* 1 */
NULL };
Dmsg1(200, "cmd=%s\n", ua->cmd);
i = find_arg_with_value(ua, NT_("jobid"));
if (i < 0) {
ua->error_msg(_("Expect JobId keyword, not found.\n"));
return false;
}
memset(&jr, 0, sizeof(jr));
memset(&cr, 0, sizeof(cr));
jr.JobId = str_to_int64(ua->argv[i]);
if (!db_get_job_record(ua->jcr, ua->db, &jr)) {
ua->error_msg("%s", db_strerror(ua->db));
return false;
}
for (i=0; kw[i]; i++) {
int j;
if ((j=find_arg_with_value(ua, kw[i])) >= 0) {
switch (i) {
case 0: /* start time */
start_time = ua->argv[j];
break;
case 1: /* Client name */
client_name = ua->argv[j];
break;
}
}
}
if (!client_name && !start_time) {
ua->error_msg(_("Neither Client nor StartTime specified.\n"));
return 0;
}
if (client_name) {
if (!get_client_dbr(ua, &cr)) {
return false;
}
jr.ClientId = cr.ClientId;
}
if (start_time) {
utime_t delta_start;
StartTime = str_to_utime(start_time);
if (StartTime == 0) {
ua->error_msg(_("Improper date format: %s\n"), ua->argv[i]);
return false;
}
delta_start = StartTime - jr.StartTime;
Dmsg3(200, "ST=%lld jr.ST=%lld delta=%lld\n", StartTime,
(utime_t)jr.StartTime, delta_start);
jr.StartTime = (time_t)StartTime;
jr.SchedTime += (time_t)delta_start;
jr.EndTime += (time_t)delta_start;
jr.JobTDate += delta_start;
/* Convert to DB times */
bstrutime(jr.cStartTime, sizeof(jr.cStartTime), jr.StartTime);
bstrutime(jr.cSchedTime, sizeof(jr.cSchedTime), jr.SchedTime);
bstrutime(jr.cEndTime, sizeof(jr.cEndTime), jr.EndTime);
}
Mmsg(cmd, "UPDATE Job SET ClientId=%s,StartTime='%s',SchedTime='%s',"
"EndTime='%s',JobTDate=%s WHERE JobId=%s",
edit_int64(jr.ClientId, ed1),
jr.cStartTime,
jr.cSchedTime,
jr.cEndTime,
edit_uint64(jr.JobTDate, ed1),
edit_int64(jr.JobId, ed2));
if (!db_sql_query(ua->db, cmd.c_str(), NULL, NULL)) {
ua->error_msg("%s", db_strerror(ua->db));
return false;
}
return true;
}
开发者ID:anarexia,项目名称:bacula,代码行数:91,代码来源:ua_update.c
示例8: GalaxDBopen_internal
int GalaxDBopen_internal(DB **dbp, char * dbname, DBTYPE type,
unsigned int open_flags, unsigned int set_flags,
int buffsize, int bfixed, int fixed_length) {
int retval, i;
char * argument[2];
#ifdef DEBUG
printf("C: creating database : %s and %d size | open flags %d\n", dbname, buffsize,open_flags);
fflush(stdout);
#endif
retval = db_create(dbp, NULL, open_flags);
if(retval != 0) {
#ifdef DEBUG
printf("C: Error in creating Database: %s\n", db_strerror(retval));
fflush(stdout);
#endif
return retval;
}
#ifdef DEBUG
printf("C: database created [name: %s|dbp: %X], now setting flags = %u\n", dbname, *dbp, set_flags);
fflush(stdout);
#endif
retval = (*dbp)->set_flags((*dbp), set_flags);
if(retval != 0) {
#ifdef DEBUG
printf("C: Error in setting flags : %s\n", db_strerror(retval));
fflush(stdout);
#endif
(*dbp)->err((*dbp), retval, "%s", "GalaxDB", dbname);
return retval;
}
#ifdef DEBUG
printf("C: flag set now opening database\n");
printf("C: Setting Cachesize: %d\n", buffsize);
fflush(stdout);
#endif
retval = (*dbp)->set_cachesize((*dbp), 0, buffsize, 1);
if(retval != 0) {
printf("C: Error in setting such a large cache\n");
fflush(stdout);
(*dbp)->err((*dbp), retval, "%s", "GalaxDB", dbname);
return retval;
}
if (bfixed) {
if ((retval = (*dbp)->set_re_len(*dbp, fixed_length)) != 0) {
#ifdef DEBUG
printf("C: Error in setting to fixed length : %s\n", db_strerror(retval));
fflush(stdout);
#endif
(*dbp)->err(*dbp, retval, "%s", "GalaxDBrec_fixed_length [fixed]");
return retval;
}
if((retval = (*dbp)->set_re_pad(*dbp, 0)) != 0) {
#ifdef DEBUG
printf("C: Error in setting padding : %s\n", db_strerror(retval));
fflush(stdout);
#endif
(*dbp)->err(*dbp, retval, "%s", "GalaxDBrec_fixed_length [pad]");
}
#ifdef DEBUG
printf("C: Succeded in setting fixed size of %d\n", fixed_length);
fflush(stdout);
#endif
}
retval = (*dbp)->open((*dbp), NULL, dbname, NULL, type, DB_CREATE, 0664);
if(retval != 0) {
(*dbp)->err((*dbp), retval, "%s", "GalaxDB", dbname);
return retval;
}
#ifdef DEBUG
printf("C: Database %s opened \n", dbname);
fflush(stdout);
#endif
return retval;
}
开发者ID:HanumathRao,项目名称:Galax,代码行数:87,代码来源:smallapi.c
示例9: bdb_add
//.........这里部分代码省略.........
if( 0 ) {
retry: /* transaction retry */
if( p ) {
/* free parent and reader lock */
if ( p != (Entry *)&slap_entry_root ) {
bdb_unlocked_cache_return_entry_r( bdb, p );
}
p = NULL;
}
rs->sr_err = TXN_ABORT( ltid );
ltid = NULL;
LDAP_SLIST_REMOVE( &op->o_extra, &opinfo.boi_oe, OpExtra, oe_next );
opinfo.boi_oe.oe_key = NULL;
op->o_do_not_cache = opinfo.boi_acl_cache;
if( rs->sr_err != 0 ) {
rs->sr_err = LDAP_OTHER;
rs->sr_text = "internal error";
goto return_results;
}
if ( slap_get_op_abandon(op) ) {
rs->sr_err = SLAPD_ABANDON;
goto return_results;
}
bdb_trans_backoff( ++num_retries );
}
/* begin transaction */
rs->sr_err = TXN_BEGIN( bdb->bi_dbenv, NULL, <id,
bdb->bi_db_opflags );
rs->sr_text = NULL;
if( rs->sr_err != 0 ) {
Debug( LDAP_DEBUG_TRACE,
LDAP_XSTRING(bdb_add) ": txn_begin failed: %s (%d)\n",
db_strerror(rs->sr_err), rs->sr_err );
rs->sr_err = LDAP_OTHER;
rs->sr_text = "internal error";
goto return_results;
}
Debug( LDAP_DEBUG_TRACE, LDAP_XSTRING(bdb_add) ": txn1 id: %x\n",
ltid->id(ltid) );
opinfo.boi_oe.oe_key = bdb;
opinfo.boi_txn = ltid;
opinfo.boi_err = 0;
opinfo.boi_acl_cache = op->o_do_not_cache;
LDAP_SLIST_INSERT_HEAD( &op->o_extra, &opinfo.boi_oe, oe_next );
/*
* Get the parent dn and see if the corresponding entry exists.
*/
if ( be_issuffix( op->o_bd, &op->ora_e->e_nname ) ) {
pdn = slap_empty_bv;
} else {
dnParent( &op->ora_e->e_nname, &pdn );
}
/* get entry or parent */
rs->sr_err = bdb_dn2entry( op, ltid, &op->ora_e->e_nname, &ei,
1, &lock );
switch( rs->sr_err ) {
case 0:
rs->sr_err = LDAP_ALREADY_EXISTS;
goto return_results;
case DB_NOTFOUND:
break;
case DB_LOCK_DEADLOCK:
开发者ID:osstech-jp,项目名称:ReOpenLDAP,代码行数:67,代码来源:add.c
示例10: update_volume
/*
* Update a media record -- allows you to change the
* Volume status. E.g. if you want Bacula to stop
* writing on the volume, set it to anything other
* than Append.
*/
static int update_volume(UAContext *ua)
{
MEDIA_DBR mr;
POOL *pool;
POOL_DBR pr;
POOLMEM *query;
POOL_MEM ret;
char buf[1000];
char ed1[130];
bool done = false;
int i;
const char *kw[] = {
NT_("VolStatus"), /* 0 */
NT_("VolRetention"), /* 1 */
NT_("VolUse"), /* 2 */
NT_("MaxVolJobs"), /* 3 */
NT_("MaxVolFiles"), /* 4 */
NT_("MaxVolBytes"), /* 5 */
NT_("Recycle"), /* 6 */
NT_("InChanger"), /* 7 */
NT_("Slot"), /* 8 */
NT_("Pool"), /* 9 */
NT_("FromPool"), /* 10 */
NT_("AllFromPool"), /* 11 !!! see below !!! */
NT_("Enabled"), /* 12 */
NT_("RecyclePool"), /* 13 */
NT_("ActionOnPurge"), /* 14 */
NULL };
#define AllFromPool 11 /* keep this updated with above */
for (i=0; kw[i]; i++) {
int j;
POOL_DBR pr;
if ((j=find_arg_with_value(ua, kw[i])) > 0) {
/* If all from pool don't select a media record */
if (i != AllFromPool && !select_media_dbr(ua, &mr)) {
return 0;
}
switch (i) {
case 0:
update_volstatus(ua, ua->argv[j], &mr);
break;
case 1:
update_volretention(ua, ua->argv[j], &mr);
break;
case 2:
update_voluseduration(ua, ua->argv[j], &mr);
break;
case 3:
update_volmaxjobs(ua, ua->argv[j], &mr);
break;
case 4:
update_volmaxfiles(ua, ua->argv[j], &mr);
break;
case 5:
update_volmaxbytes(ua, ua->argv[j], &mr);
break;
case 6:
update_volrecycle(ua, ua->argv[j], &mr);
break;
case 7:
update_volinchanger(ua, ua->argv[j], &mr);
break;
case 8:
update_volslot(ua, ua->argv[j], &mr);
break;
case 9:
memset(&pr, 0, sizeof(POOL_DBR));
pr.PoolId = mr.PoolId;
if (!db_get_pool_record(ua->jcr, ua->db, &pr)) {
ua->error_msg("%s", db_strerror(ua->db));
break;
}
update_vol_pool(ua, ua->argv[j], &mr, &pr);
break;
case 10:
update_vol_from_pool(ua, &mr);
return 1;
case 11:
update_all_vols_from_pool(ua, ua->argv[j]);
return 1;
case 12:
update_volenabled(ua, ua->argv[j], &mr);
break;
case 13:
update_vol_recyclepool(ua, ua->argv[j], &mr);
break;
case 14:
update_vol_actiononpurge(ua, ua->argv[j], &mr);
break;
}
done = true;
//.........这里部分代码省略.........
开发者ID:anarexia,项目名称:bacula,代码行数:101,代码来源:ua_update.c
示例11: main
int
main(int argc, char *argv[])
{
/* Initialize our handles */
DB *dbp = NULL;
DB_ENV *envp = NULL;
thread_t writer_threads[NUMWRITERS];
int ch, i, ret, ret_t;
u_int32_t env_flags;
char *db_home_dir;
/* Application name */
const char *prog_name = "txn_guide";
/* Database file name */
const char *file_name = "mydb.db";
/* Parse the command line arguments */
#ifdef _WIN32
db_home_dir = ".\\";
#else
db_home_dir = "./";
#endif
while ((ch = getopt(argc, argv, "h:")) != EOF)
switch (ch) {
case 'h':
db_home_dir = optarg;
break;
case '?':
default:
return (usage());
}
/* Create the environment */
ret = db_env_create(&envp, 0);
if (ret != 0) {
fprintf(stderr, "Error creating environment handle: %s\n",
db_strerror(ret));
goto err;
}
/*
* Indicate that we want db to perform lock detection internally.
* Also indicate that the transaction with the fewest number of
* write locks will receive the deadlock notification in
* the event of a deadlock.
*/
ret = envp->set_lk_detect(envp, DB_LOCK_MINWRITE);
if (ret != 0) {
fprintf(stderr, "Error setting lock detect: %s\n",
db_strerror(ret));
goto err;
}
env_flags =
DB_CREATE | /* Create the environment if it does not exist */
DB_RECOVER | /* Run normal recovery. */
DB_INIT_LOCK | /* Initialize the locking subsystem */
DB_INIT_LOG | /* Initialize the logging subsystem */
DB_INIT_TXN | /* Initialize the transactional subsystem. This
* also turns on logging. */
DB_INIT_MPOOL | /* Initialize the memory pool (in-memory cache) */
DB_THREAD; /* Cause the environment to be free-threaded */
/* Now actually open the environment */
ret = envp->open(envp, db_home_dir, env_flags, 0);
if (ret != 0) {
fprintf(stderr, "Error opening environment: %s\n",
db_strerror(ret));
goto err;
}
/*
* If we had utility threads (for running checkpoints or
* deadlock detection, for example) we would spawn those
* here. However, for a simple example such as this,
* that is not required.
*/
/* Open the database */
ret = open_db(&dbp, prog_name, file_name,
envp, DB_DUPSORT);
if (ret != 0)
goto err;
/* Initialize a mutex. Used to help provide thread ids. */
(void)mutex_init(&thread_num_lock, NULL);
/* Start the writer threads. */
for (i = 0; i < NUMWRITERS; i++)
(void)thread_create(
&writer_threads[i], NULL, writer_thread, (void *)dbp);
/* Join the writers */
for (i = 0; i < NUMWRITERS; i++)
(void)thread_join(writer_threads[i], NULL);
err:
/* Close our database handle, if it was opened. */
if (dbp != NULL) {
ret_t = dbp->close(dbp, 0);
//.........这里部分代码省略.........
开发者ID:Wushaowei001,项目名称:omnibus,代码行数:101,代码来源:txn_guide.c
示例12: SLNFilterResultsWrite
static void SLNFilterResultsWrite(SLNSessionRef const session, SLNFilterRef const filter, SLNFilterOpts *const opts, HTTPConnectionRef const conn) {
// TODO: Accept count and use it for the total number of results.
opts->count = 0;
// We're sending a series of batches, so reversing one batch
// doesn't make sense.
opts->outdir = opts->dir;
static strarg_t const fields[] = { "wait" };
str_t *values[numberof(fields)] = {};
QSValuesParse(qs, values, fields, numberof(fields));
bool const wait = parse_wait(values[0]);
QSValuesCleanup(values, numberof(values));
// I'm aware that we're abusing HTTP for sending real-time push data.
// I'd also like to support WebSocket at some point, but this is simpler
// and frankly probably more widely supported.
// Note that the protocol doesn't really break even if this data is
// cached. It DOES break if a proxy tries to buffer the whole response
// before passing it back to the client. I'd be curious to know whether
// such proxies still exist in 2015.
HTTPConnectionWriteResponse(conn, 200, "OK");
HTTPConnectionWriteHeader(conn, "Transfer-Encoding", "chunked");
HTTPConnectionWriteHeader(conn,
"Content-Type", "text/uri-list; charset=utf-8");
HTTPConnectionWriteHeader(conn, "Cache-Control", "no-store");
HTTPConnectionWriteHeader(conn, "Vary", "*");
HTTPConnectionBeginBody(conn);
int rc;
for(;;) {
rc = sendURIBatch(session, filter, opts, conn);
if(DB_NOTFOUND == rc) break;
if(DB_SUCCESS == rc) continue;
fprintf(stderr, "Query error: %s\n", db_strerror(rc));
goto cleanup;
}
if(!wait || opts->dir < 0) goto cleanup;
SLNRepoRef const repo = SLNSessionGetRepo(session);
for(;;) {
uint64_t const timeout = uv_now(async_loop)+(1000 * 30);
rc = SLNRepoSubmissionWait(repo, opts->sortID, timeout);
if(UV_ETIMEDOUT == rc) {
uv_buf_t const parts[] = { uv_buf_init((char *)STR_LEN("\r\n")) };
rc = HTTPConnectionWriteChunkv(conn, parts, numberof(parts));
if(rc < 0) break;
continue;
}
assert(rc >= 0); // TODO: Handle cancellation?
for(;;) {
rc = sendURIBatch(session, filter, opts, conn);
if(DB_NOTFOUND == rc) break;
if(DB_SUCCESS == rc) continue;
fprintf(stderr, "Query error: %s\n", db_strerror(rc));
goto cleanup;
}
}
cleanup:
HTTPConnectionWriteChunkEnd(conn);
HTTPConnectionEnd(conn);
SLNFilterOptsCleanup(opts);
}
开发者ID:andreydelpozo2,项目名称:stronglink,代码行数:66,代码来源:2015-06-21-filter-stream.c
示例13: cnid_cdb_rebuild_add
/* ------------------------ */
cnid_t cnid_cdb_rebuild_add(struct _cnid_db *cdb, const struct stat *st,
const cnid_t did, char *name, const size_t len,
cnid_t hint)
{
CNID_private *db;
DBT key, data;
int rc;
if (!cdb || !(db = cdb->_private) || !st || !name || hint == CNID_INVALID || hint < CNID_START) {
errno = CNID_ERR_PARAM;
return CNID_INVALID;
}
#if 0
/* FIXME: Bjoern does a lookup. Should we not overwrite unconditionally? */
/* Do a lookup. */
id = cnid_cdb_lookup(cdb, st, did, name, len);
/* ... Return id if it is valid, or if Rootinfo is read-only. */
if (id || (db->flags & CNIDFLAG_DB_RO)) {
#ifdef DEBUG
LOG(log_debug9, logtype_default, "cnid_add: Looked up did %u, name %s as %u", ntohl(did), name, ntohl(id));
#endif
return id;
}
#endif
/* Initialize our DBT data structures. */
memset(&key, 0, sizeof(key));
memset(&data, 0, sizeof(data));
if ((data.data = make_cnid_data(cdb->flags, st, did, name, len)) == NULL) {
LOG(log_error, logtype_default, "cnid_add: Path name is too long");
errno = CNID_ERR_PATH;
return CNID_INVALID;
}
data.size = CNID_HEADER_LEN + len + 1;
memcpy(data.data, &hint, sizeof(hint));
key.data = &hint;
key.size = sizeof(hint);
/* Now we need to add the CNID data to the databases. */
if ((rc = db->db_cnid->put(db->db_cnid, tid, &key, &data, 0))) {
LOG(log_error, logtype_default
, "cnid_add: Failed to add CNID for %s to database using hint %u: %s",
name, ntohl(hint), db_strerror(rc));
errno = CNID_ERR_DB;
goto cleanup;
}
if (set_max_cnid(db, hint) == CNID_INVALID) {
errno = CNID_ERR_DB;
goto cleanup;
}
#ifdef DEBUG
LOG(log_debug9, logtype_default, "cnid_add: Returned CNID for did %u, name %s as %u", ntohl(did), name, ntohl(hint));
#endif
return hint;
cleanup:
return CNID_INVALID;
}
开发者ID:BrianHoldsworth,项目名称:netatalk2,代码行数:66,代码来源:cnid_cdb_rebuild_add.c
示例14: bdb_tool_entry_reindex
int bdb_tool_entry_reindex(
BackendDB *be,
ID id,
AttributeDescription **adv )
{
struct bdb_info *bi = (struct bdb_info *) be->be_private;
int rc;
Entry *e;
DB_TXN *tid = NULL;
Operation op = {0};
Opheader ohdr = {0};
Debug( LDAP_DEBUG_ARGS,
"=> " LDAP_XSTRING(bdb_tool_entry_reindex) "( %ld )\n",
(long) id, 0, 0 );
assert( tool_base == NULL );
assert( tool_filter == NULL );
/* No indexes configured, nothing to do. Could return an
* error here to shortcut things.
*/
if (!bi->bi_attrs) {
return 0;
}
/* Check for explicit list of attrs to index */
if ( adv ) {
int i, j, n;
if ( bi->bi_attrs[0]->ai_desc != adv[0] ) {
/* count */
for ( n = 0; adv[n]; n++ ) ;
/* insertion sort */
for ( i = 0; i < n; i++ ) {
AttributeDescription *ad = adv[i];
for ( j = i-1; j>=0; j--) {
if ( SLAP_PTRCMP( adv[j], ad ) <= 0 ) break;
adv[j+1] = adv[j];
}
adv[j+1] = ad;
}
}
for ( i = 0; adv[i]; i++ ) {
if ( bi->bi_attrs[i]->ai_desc != adv[i] ) {
for ( j = i+1; j < bi->bi_nattrs; j++ ) {
if ( bi->bi_attrs[j]->ai_desc == adv[i] ) {
AttrInfo *ai = bi->bi_attrs[i];
bi->bi_attrs[i] = bi->bi_attrs[j];
bi->bi_attrs[j] = ai;
break;
}
}
if ( j == bi->bi_nattrs ) {
Debug( LDAP_DEBUG_ANY,
LDAP_XSTRING(bdb_tool_entry_reindex)
": no index configured for %s\n",
adv[i]->ad_cname.bv_val, 0, 0 );
return -1;
}
}
}
bi->bi_nattrs = i;
}
/* Get the first attribute to index */
if (bi->bi_linear_index && !index_nattrs) {
index_nattrs = bi->bi_nattrs - 1;
bi->bi_nattrs = 1;
}
e = bdb_tool_entry_get( be, id );
if( e == NULL ) {
Debug( LDAP_DEBUG_ANY,
LDAP_XSTRING(bdb_tool_entry_reindex)
": could not locate id=%ld\n",
(long) id, 0, 0 );
return -1;
}
if (! (slapMode & SLAP_TOOL_QUICK)) {
rc = TXN_BEGIN( bi->bi_dbenv, NULL, &tid, bi->bi_db_opflags );
if( rc != 0 ) {
Debug( LDAP_DEBUG_ANY,
"=> " LDAP_XSTRING(bdb_tool_entry_reindex) ": "
"txn_begin failed: %s (%d)\n",
db_strerror(rc), rc, 0 );
goto done;
}
Debug( LDAP_DEBUG_TRACE, LDAP_XSTRING(bdb_tool_entry_reindex) ": txn id: %x\n",
tid->id(tid), 0, 0 );
}
/*
* just (re)add them for now
* assume that some other routine (not yet implemented)
* will zap index databases
*
//.........这里部分代码省略.........
开发者ID:rouzier,项目名称:openldap,代码行数:101,代码来源:tools.c
示例15: find_record
int
find_record(struct bdb_t *bdbp, DBT **dbt_ptr, void *key_ptr, size_t key_len, size_t *value_len)
{
assert(dbt_ptr != NULL);
assert(key_ptr != NULL);
assert(value_len != NULL);
void *value_ptr = NULL;
int ret;
DBT query_cond;
int alloc_flag;
alloc_flag = 0;
if (*dbt_ptr == NULL)
{
if ((*dbt_ptr = slab_alloc(sizeof **dbt_ptr)) == NULL)
{
ret = -1;
REPORT_ERR("memory is not enough");
}
alloc_flag = alloc_flag | FIND_RECORD_ALLOC_DBT_PTR;
}
if ((value_ptr = slab_alloc(*value_len)) == NULL)
{
ret = -1;
REPORT_ERR("memory is not enough");
}
alloc_flag = alloc_flag | FIND_RECORD_ALLOC_VAL_PTR;
memset(&query_cond, 0, sizeof query_cond);
memset(*dbt_ptr, 0, sizeof **dbt_ptr);
memset(value_ptr, 0, *value_len);
query_cond.data = key_ptr;
query_cond.size = key_len;
(*dbt_ptr)->data = value_ptr;
(*dbt_ptr)->ulen = *value_len;
(*dbt_ptr)->flags = DB_DBT_USERMEM;
BUILD_DB_PREFIX;
if ((ret = bdbp->dbp->get(bdbp->dbp, NULL, &query_cond, *dbt_ptr, 0)) != 0)
{
if (ret != DB_NOTFOUND)
REPORT_ERR("bdb query failed: %s", db_strerror(ret));
}
err:
if (ret != 0)
{
if ((alloc_flag & FIND_RECORD_ALLOC_DBT_PTR) && (*dbt_ptr != NULL))
{
slab_free(*dbt_ptr);
*dbt_ptr = NULL;
}
if ((alloc_flag & FIND_RECORD_ALLOC_VAL_PTR) && (value_ptr != NULL))
{
slab_free(value_ptr);
if (*dbt_ptr != NULL)
(*dbt_ptr)->data = NULL;
}
}
return ret;
}
开发者ID:changjiang1124,项目名称:crabdb,代码行数:64,代码来源:bdblib.c
示例16: bdb_tool_entry_modify
ID bdb_tool_entry_modify(
BackendDB *be,
Entry *e,
struct berval *text )
{
int rc;
struct bdb_info *bdb;
DB_TXN *tid = NULL;
Operation op = {0};
Opheader ohdr = {0};
assert( be != NULL );
assert( slapMode & SLAP_TOOL_MODE );
assert( text != NULL );
assert( text->bv_val != NULL );
assert( text->bv_val[0] == '\0' ); /* overconservative? */
assert ( e->e_id != NOID );
Debug( LDAP_DEBUG_TRACE,
"=> " LDAP_XSTRING(bdb_tool_entry_modify) "( %ld, \"%s\" )\n",
(long) e->e_id, e->e_dn, 0 );
bdb = (struct bdb_info *) be->be_private;
if (! (slapMode & SLAP_TOOL_QUICK)) {
if( cursor ) {
cursor->c_close( cursor );
cursor = NULL;
}
rc = TXN_BEGIN( bdb->bi_dbenv, NULL, &tid,
bdb->bi_db_opflags );
if( rc != 0 ) {
snprintf( text->bv_val, text->bv_len,
"txn_begin failed: %s (%d)",
db_strerror(rc), rc );
Debug( LDAP_DEBUG_ANY,
"=> " LDAP_XSTRING(bdb_tool_entry_modify) ": %s\n",
text->bv_val, 0, 0 );
return NOID;
}
Debug( LDAP_DEBUG_TRACE, LDAP_XSTRING(bdb_tool_entry_modify) ": txn id: %x\n",
tid->id(tid), 0, 0 );
}
op.o_hdr = &ohdr;
op.o_bd = be;
op.o_tmpmemctx = NULL;
op.o_tmpmfuncs = &ch_mfuncs;
/* id2entry index */
rc = bdb_id2entry_update( be, tid, e );
if( rc != 0 ) {
snprintf( text->bv_val, text->bv_len,
"id2entry_add failed: %s (%d)",
db_strerror(rc), rc );
Debug( LDAP_DEBUG_ANY,
"=> " LDAP_XSTRING(bdb_tool_entry_modify) ": %s\n",
text->bv_val, 0, 0 );
goto done;
}
done:
if( rc == 0 ) {
if (! (slapMode & SLAP_TOOL_QUICK)) {
rc = TXN_COMMIT( tid, 0 );
if( rc != 0 ) {
snprintf( text->bv_val, text->bv_len,
"txn_commit failed: %s (%d)",
db_strerror(rc), rc );
Debug( LDAP_DEBUG_ANY,
"=> " LDAP_XSTRING(bdb_tool_entry_modify) ": "
"%s\n", text->bv_val, 0, 0 );
e->e_id = NOID;
}
}
} else {
if (! (slapMode & SLAP_TOOL_QUICK)) {
TXN_ABORT( tid );
snprintf( text->bv_val, text->bv_len,
"txn_aborted! %s (%d)",
db_strerror(rc), rc );
Debug( LDAP_DEBUG_ANY,
"=> " LDAP_XSTRING(bdb_tool_entry_modify) ": %s\n",
text->bv_val, 0, 0 );
}
e->e_id = NOID;
}
if ( cursor == NULL )
{
int rc = bdb->bi_id2entry->bdi_db->cursor(
bdb->bi_id2entry->bdi_db, bdb->bi_cache.c_txn, &cursor,
bdb->bi_db_opflags );
if ( rc != 0 )
e->e_id = NOID;
}
//.........这里部分代码省略.........
开发者ID:rouzier,项目名称:openldap,代码行数:101,代码来源:tools.c
示例17: tags_cache_gc
static void tags_cache_gc (struct tags_cache *c)
{
DBC *cur;
DBT key;
DBT serialized_cache_rec;
int ret;
char *last_referenced = NULL;
time_t last_referenced_atime = time (NULL) + 1;
int nitems = 0;
c->db->cursor (c->db, NULL, &cur, 0);
memset (&key, 0, sizeof(key));
memset (&serialized_cache_rec, 0, sizeof(serialized_cache_rec));
key.flags = DB_DBT_MALLOC;
serialized_cache_rec.flags = DB_DBT_MALLOC;
while (true) {
struct cache_record rec;
#if DB_VERSION_MAJOR == 4 && DB_VERSION_MINOR < 6
ret = cur->c_get (cur, &key, &serialized_cache_rec, DB_NEXT);
#else
ret = cur->get (cur, &key, &serialized_cache_rec, DB_NEXT);
#endif
if (ret != 0)
break;
if (cache_record_deserialize (&rec, serialized_cache_rec.data,
serialized_cache_rec.size, 1)
&& rec.atime < last_referenced_atime) {
last_refer
|
请发表评论