X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=servers%2Fslapd%2Fback-mdb%2Fconfig.c;h=c1995176e8985ad29090d5b03fb6272474eb23d0;hb=7f3da6c9b7af5ef5b8e45fbe6cbc405967b6baf8;hp=fa11d8c1f3313be930a244edeab4694e55b2a8ed;hpb=79ac4cb36184570cc4fbcdbb328240ef37a4aeae;p=openldap diff --git a/servers/slapd/back-mdb/config.c b/servers/slapd/back-mdb/config.c index fa11d8c1f3..c1995176e8 100644 --- a/servers/slapd/back-mdb/config.c +++ b/servers/slapd/back-mdb/config.c @@ -2,7 +2,7 @@ /* $OpenLDAP$ */ /* This work is part of OpenLDAP Software . * - * Copyright 2000-2013 The OpenLDAP Foundation. + * Copyright 2000-2015 The OpenLDAP Foundation. * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -39,7 +39,8 @@ enum { MDB_MAXREADERS, MDB_MAXSIZE, MDB_MODE, - MDB_SSTACK + MDB_SSTACK, + MDB_MAXENTSZ }; static ConfigTable mdbcfg[] = { @@ -59,12 +60,17 @@ static ConfigTable mdbcfg[] = { { "envflags", "flags", 2, 0, 0, ARG_MAGIC|MDB_ENVFLAGS, mdb_cf_gen, "( OLcfgDbAt:12.3 NAME 'olcDbEnvFlags' " "DESC 'Database environment flags' " + "EQUALITY caseIgnoreMatch " "SYNTAX OMsDirectoryString )", NULL, NULL }, { "index", "attr> <[pres,eq,approx,sub]", 2, 3, 0, ARG_MAGIC|MDB_INDEX, mdb_cf_gen, "( OLcfgDbAt:0.2 NAME 'olcDbIndex' " "DESC 'Attribute index parameters' " "EQUALITY caseIgnoreMatch " "SYNTAX OMsDirectoryString )", NULL, NULL }, + { "maxentrysize", "size", 2, 2, 0, ARG_ULONG|ARG_MAGIC|MDB_MAXENTSZ, + mdb_cf_gen, "( OLcfgDbAt:12.4 NAME 'olcDbMaxEntrySize' " + "DESC 'Maximum size of an entry in bytes' " + "SYNTAX OMsInteger SINGLE-VALUE )", NULL, NULL }, { "maxreaders", "num", 2, 2, 0, ARG_UINT|ARG_MAGIC|MDB_MAXREADERS, mdb_cf_gen, "( OLcfgDbAt:12.1 NAME 'olcDbMaxReaders' " "DESC 'Maximum number of threads that may access the DB concurrently' " @@ -93,8 +99,8 @@ static ConfigOCs mdbocs[] = { "SUP olcDatabaseConfig " "MUST olcDbDirectory " "MAY ( olcDbCheckpoint $ olcDbEnvFlags $ " - "olcDbNoSync $ olcDbIndex $ olcDbMaxReaders $ olcDbMaxsize $ " - "olcDbMode $ olcDbSearchStack ) )", + "olcDbNoSync $ olcDbIndex $ olcDbMaxReaders $ olcDbMaxSize $ " + "olcDbMode $ olcDbSearchStack $ olcDbMaxEntrySize ) )", Cft_Database, mdbcfg }, { NULL, 0, NULL } }; @@ -104,6 +110,7 @@ static slap_verbmasks mdb_envflags[] = { { BER_BVC("nometasync"), MDB_NOMETASYNC }, { BER_BVC("writemap"), MDB_WRITEMAP }, { BER_BVC("mapasync"), MDB_MAPASYNC }, + { BER_BVC("nordahead"), MDB_NORDAHEAD }, { BER_BVNULL, 0 } }; @@ -114,7 +121,7 @@ mdb_checkpoint( void *ctx, void *arg ) struct re_s *rtask = arg; struct mdb_info *mdb = rtask->arg; - mdb_env_sync( mdb->mi_dbenv, 0 ); + mdb_env_sync( mdb->mi_dbenv, 1 ); ldap_pvt_thread_mutex_lock( &slapd_rq.rq_mutex ); ldap_pvt_runqueue_stoptask( &slapd_rq, rtask ); ldap_pvt_thread_mutex_unlock( &slapd_rq.rq_mutex ); @@ -327,6 +334,10 @@ mdb_cf_gen( ConfigArgs *c ) c->value_int = mdb->mi_search_stack_depth; break; + case MDB_MAXENTSZ: + c->value_ulong = mdb->mi_maxentrysize; + break; + case MDB_MAXREADERS: c->value_int = mdb->mi_readers; break; @@ -353,6 +364,10 @@ mdb_cf_gen( ConfigArgs *c ) case MDB_MAXSIZE: break; + case MDB_MAXENTSZ: + mdb->mi_maxentrysize = 0; + break; + case MDB_CHKPT: if ( mdb->mi_txn_cp_task ) { struct re_s *re = mdb->mi_txn_cp_task; @@ -404,6 +419,9 @@ mdb_cf_gen( ConfigArgs *c ) mdb->mi_dbenv_flags ^= mdb_envflags[i].mask; } else { /* unknown keyword */ + snprintf( c->cr_msg, sizeof( c->cr_msg ), "%s: unknown keyword \"%s\"", + c->argv[0], c->argv[i] ); + Debug( LDAP_DEBUG_CONFIG, "%s %s\n", c->log, c->cr_msg, 0 ); rc = 1; } } @@ -606,7 +624,10 @@ mdb_cf_gen( ConfigArgs *c ) mdb->mi_dbenv_flags |= mdb_envflags[j].mask; } else { /* unknown keyword */ - rc = 1; + snprintf( c->cr_msg, sizeof( c->cr_msg ), "%s: unknown keyword \"%s\"", + c->argv[0], c->argv[i] ); + Debug( LDAP_DEBUG_ANY, "%s %s\n", c->log, c->cr_msg, 0 ); + return 1; } } } @@ -617,23 +638,25 @@ mdb_cf_gen( ConfigArgs *c ) c->argc - 1, &c->argv[1], &c->reply); if( rc != LDAP_SUCCESS ) return 1; - c->cleanup = mdb_cf_cleanup; mdb->mi_flags |= MDB_OPEN_INDEX; - if (( mdb->mi_flags & MDB_IS_OPEN ) && !mdb->mi_index_task ) { - /* Start the task as soon as we finish here. Set a long - * interval (10 hours) so that it only gets scheduled once. - */ - if ( c->be->be_suffix == NULL || BER_BVISNULL( &c->be->be_suffix[0] ) ) { - fprintf( stderr, "%s: " - "\"index\" must occur after \"suffix\".\n", - c->log ); - return 1; + if ( mdb->mi_flags & MDB_IS_OPEN ) { + c->cleanup = mdb_cf_cleanup; + if ( !mdb->mi_index_task ) { + /* Start the task as soon as we finish here. Set a long + * interval (10 hours) so that it only gets scheduled once. + */ + if ( c->be->be_suffix == NULL || BER_BVISNULL( &c->be->be_suffix[0] ) ) { + fprintf( stderr, "%s: " + "\"index\" must occur after \"suffix\".\n", + c->log ); + return 1; + } + ldap_pvt_thread_mutex_lock( &slapd_rq.rq_mutex ); + mdb->mi_index_task = ldap_pvt_runqueue_insert( &slapd_rq, 36000, + mdb_online_index, c->be, + LDAP_XSTRING(mdb_online_index), c->be->be_suffix[0].bv_val ); + ldap_pvt_thread_mutex_unlock( &slapd_rq.rq_mutex ); } - ldap_pvt_thread_mutex_lock( &slapd_rq.rq_mutex ); - mdb->mi_index_task = ldap_pvt_runqueue_insert( &slapd_rq, 36000, - mdb_online_index, c->be, - LDAP_XSTRING(mdb_online_index), c->be->be_suffix[0].bv_val ); - ldap_pvt_thread_mutex_unlock( &slapd_rq.rq_mutex ); } break; @@ -647,6 +670,10 @@ mdb_cf_gen( ConfigArgs *c ) mdb->mi_search_stack_depth = c->value_int; break; + case MDB_MAXENTSZ: + mdb->mi_maxentrysize = c->value_ulong; + break; + case MDB_MAXREADERS: mdb->mi_readers = c->value_int; if ( mdb->mi_flags & MDB_IS_OPEN ) {