Parametrized LDAP benchmark. Admin bind is cached once per thread (Once Only Controller, labelled ADMIN_CONNECT, excluded from metrics). Data ops (ADD/SEARCH/COMPARE/MODIFY/DELETE/READD) reuse the cached admin connection. Entries use mail as the naming/searchable attribute (equality-indexed by default on BOTH OpenDJ and OpenLDAP); only mail + objectClass (both indexed on both servers) are stored, keeping the write cost symmetric. Every created value is unique: ADD uses a per-iteration counter, READD uses a UUID. The measured user authentication is a single bind/unbind (test=sbind, own connection) after MODIFY has set the userPassword. false true false continue false -1 ${__P(threads,200)} ${__P(rampup,0)} true ${__P(duration,300)} 1 1 iter true false ${__P(host,localhost)} ${__P(port,1389)} ou=People,${__P(basedn,dc=example\,dc=com)} 2 false false 60000 false false ${__P(adminbinddn,cn=Directory Manager)} ${__P(adminbindpw,password)} bind 2 false false false false add mail=u_${__threadNum}_${iter}@test.com mail u_${__threadNum}_${iter}@test.com = objectClass top = objectClass locality = objectClass extensibleObject = 2 0 0 mail:dn:objectClass false false false false search (mail=u_${__threadNum}_${iter}@test.com) 2 false false false false mail=u_${__threadNum}_${iter}@test.com mail=u_${__threadNum}_${iter}@test.com compare 2 false false false false modify mail=u_${__threadNum}_${iter}@test.com description mod_${__threadNum}_${iter} replace = userPassword ${__P(benchpw,benchPass1)} replace = ${__P(host,localhost)} ${__P(port,1389)} ou=People,${__P(basedn,dc=example\,dc=com)} 2 false false 60000 false false mail=u_${__threadNum}_${iter}@test.com,ou=People,${__P(basedn,dc=example\,dc=com)} ${__P(benchpw,benchPass1)} sbind 2 false false false false delete mail=u_${__threadNum}_${iter}@test.com 2 false false false false add mail=u_${__UUID}@test.com mail u_${__UUID}@test.com = objectClass top = objectClass locality = objectClass extensibleObject =