[Date Prev][Date Next] [Chronological] [Thread] [Top]

Re: (ITS#9150) olcDbNoSync: FALSE has the same effect as olcDbNoSync: TRUE



maxime.besson@worteks.com wrote:
> Full_Name: Maxime Besson
> Version: 2.4.48
> OS: Debian Buster / CentOS7
> URL: ftp://ftp.openldap.org/incoming/
> Submission from: (NULL) (2a01:cb00:802:8400:2cbe:3c60:fca6:e50b)
> 
> 
> While migrating configuration from slapd.conf to cn=config, I noticed something
> pretty strange related to the dbnosync option

Thanks for the report, fixed now in git master.
> 
> The result of converting the following config:
> 
> include		./core.schema
> pidfile		./slapd.1.pid
> argsfile	./slapd.1.args
> 
> 
> database	mdb
> suffix		"dc=example,dc=com"
> rootdn		"cn=Manager,dc=example,dc=com"
> rootpw		secret
> directory	db.1.a
> index		objectClass	eq
> index		cn,sn,uid	pres,eq,sub
> index		entryUUID,entryCSN	eq
> 
> 
> Is (only interested in MDB config):
> # AUTO-GENERATED FILE - DO NOT EDIT!! Use ldapmodify.
> # CRC32 3df9c3d6
> dn: olcDatabase={1}mdb
> objectClass: olcDatabaseConfig
> objectClass: olcMdbConfig
> olcDatabase: {1}mdb
> olcSuffix: dc=example,dc=com
> olcAddContentAcl: FALSE
> olcLastMod: TRUE
> olcMaxDerefDepth: 15
> olcReadOnly: FALSE
> olcRootDN: cn=Manager,dc=example,dc=com
> olcRootPW:: c2VjcmV0
> olcSyncUseSubentry: FALSE
> olcMonitoring: TRUE
> olcDbDirectory: db.1.a
> olcDbNoSync: FALSE
> olcDbIndex: objectClass eq
> olcDbIndex: entryUUID eq
> olcDbIndex: entryCSN eq
> olcDbIndex: cn pres,eq,sub
> olcDbIndex: uid pres,eq,sub
> olcDbIndex: sn pres,eq,sub
> olcDbMaxReaders: 0
> olcDbMaxSize: 10485760
> olcDbMode: 0600
> olcDbSearchStack: 16
> olcDbMaxEntrySize: 0
> olcDbRtxnSize: 10000
> 
> 
> As you can see, olcDbNoSync has the value FALSE, because there was no "dbnosync"
> option in slapd.conf, however, performance testing shows a dramatic increase in
> write speed after slapd.d migration. Which seems odd to me. It seems like the
> MDB database was not syncing to disk anymore despite olcDbNoSync being FALSE
> 
> Removing olcDbNoSync: FALSE from cn=config did restore previous performance and
> syncing behavior
> 
> Looking at  servers/slapd/back-mdb/config.c:723 I found this: 
> 
>   case MDB_DBNOSYNC:
>     if ( c->value_int )
>             mdb->mi_dbenv_flags |= MDB_NOSYNC;
>         else
>             mdb->mi_dbenv_flags ^= MDB_NOSYNC;
>            
> 
> The else case seems wrong, I replaced it with 
> 
>   case MDB_DBNOSYNC:
>    if ( c->value_int )
>             mdb->mi_dbenv_flags |= MDB_NOSYNC;
>         else
>             mdb->mi_dbenv_flags &= ~MDB_NOSYNC;
>  
> And it solves the issue on my system.
> 
> Reproduced on master, and 2.4.48, on Debian
> 
> 


-- 
  -- Howard Chu
  CTO, Symas Corp.           http://www.symas.com
  Director, Highland Sun     http://highlandsun.com/hyc/
  Chief Architect, OpenLDAP  http://www.openldap.org/project/