Hello Jonathan,
Thanks for your answers.
2009/4/21 Jonathan Clarke jonathan@phillipoux.net
Hi,
On 21.04.2009 15:57, Frederic Bouy wrote:
Hello,
For performance issues (millions or records) I have two ldap servers:
- one master with an sql backend (postgres) to allow easy data
manipulation
- one slave to anwer ldap queries and provide good response time
When lauching the slave ("./slapd -f /usr/local/openldap/etc/openldap/slapd-front.conf -h "ldap://localhost:3890" -d 1") I got a first non blocking error I don't really understand: " => bdb_dn2id("dc=lnp") <= bdb_dn2id: get failed: DB_NOTFOUND: No matching key/data pair found (-30988)"
This looks like the entry "dc=lnp" doesn't exist in your database.
I think that this entry exist, at least according to my db I got:
LNP=# select * from ldap_entries where id=1; id | dn | oc_map_id | parent | keyval ----+--------+-----------+--------+-------- 1 | dc=lnp | 1 | 0 | 1
LNP=# select * from ldap_oc_mappings where id=1; id | name | keytbl | keycol | create_proc | delete_proc | expect_return ----+----------+-----------+--------+---------------------------+----------------------------------+--------------- 1 | dcObject | dc_object | id | SELECT create_dc_object() | DELETE FROM dc_object WHERE id=? | 0
LNP=# select * from dc_object where id=1; id | dc | description ----+-----+------------- 1 | lnp |
But when doing "ldapsearch -b "dc=lnp" " I got the followin result:
# extended LDIF # # LDAPv3 # base <dc=lnp> with scope subtree # filter: (objectclass=*) # requesting: ALL #
# search result search: 2 result: 80 Other (e.g., implementation specific) error text: bad referral object
# numResponses: 1
but I can not find any error in the log:
slap_listener_activate(8):
slap_listener(ldap:///)
connection_get(10): got connid=0 connection_read(10): checking for input on id=0 ber_get_next ber_get_next: tag 0x30 len 12 contents: ber_get_next conn=0 op=0 do_bind ber_scanf fmt ({imt) ber: ber_scanf fmt (m}) ber:
dnPrettyNormal: <>
<<< dnPrettyNormal: <>, <> do_bind: version=3 dn="" method=128 send_ldap_result: conn=0 op=0 p=3 send_ldap_response: msgid=1 tag=97 err=0 ber_flush2: 14 bytes to sd 10 do_bind: v3 anonymous bind connection_get(10): got connid=0 connection_read(10): checking for input on id=0 ber_get_next ber_get_next: tag 0x30 len 43 contents: ber_get_next conn=0 op=1 do_search ber_scanf fmt ({miiiib) ber:
dnPrettyNormal: <dc=lnp>
<<< dnPrettyNormal: <dc=lnp>, <dc=lnp> ber_scanf fmt (m) ber: ber_scanf fmt ({M}}) ber: ==> limits_get: conn=0 op=1 dn="[anonymous]" ==>backsql_search(): base="dc=lnp", filter="(objectClass=*)", scope=2, deref=0, attrsonly=0, attributes to load: all ==>backsql_get_db_conn() ==>backsql_open_db_handle() <==backsql_open_db_handle() <==backsql_get_db_conn() ==>backsql_dn2id("dc=lnp") matched expected backsql_dn2id("dc=lnp"): id_query "SELECT id,keyval,oc_map_id,dn FROM ldap_entries WHERE dn=?" backsql_dn2id("dc=lnp"): id=1 keyval=1 oc_id=1 dn=dc=lnp
dnPrettyNormal: <dc=lnp>
<<< dnPrettyNormal: <dc=lnp>, <dc=lnp> <==backsql_dn2id("dc=lnp"): err=0 ==>backsql_id2entry() backsql_id2entry(): retrieving all attributes ==>backsql_get_attr_vals(): oc="dcObject" attr="dc" keyval=1 backsql_get_attr_vals(): number of values in query: 1 <==backsql_get_attr_vals() ==>backsql_get_attr_vals(): oc="dcObject" attr="objectClass" keyval=1 backsql_get_attr_vals(): number of values in query: 1 <==backsql_get_attr_vals() <==backsql_id2entry() send_ldap_result: conn=0 op=1 p=3 send_ldap_response: msgid=2 tag=101 err=80 ber_flush2: 33 bytes to sd 10 <==backsql_search() connection_get(10): got connid=0 connection_read(10): checking for input on id=0 ber_get_next ber_get_next: tag 0x30 len 5 contents: ber_get_next ber_get_next on fd 10 failed errno=0 (Success) connection_closing: readying conn=0 sd=10 for close connection_close: deferring conn=0 sd=10 conn=0 op=2 do_unbind connection_resched: attempting closing conn=0 sd=10 connection_close: conn=0 sd=10
As lnp is supposed to be the root is has a ldap_entries.parent=0. Could it be linked? or is it a normal behavior?
According to the fact that the following command is successfull:
"ldapwhoami -H "ldap://localhost:389" -D "cn=manager,dc=lnp" -w secret"
This works because the "cn=manager,dc=lnp" user and password are defined in your slapd.conf. It would be the same if you had no data in the database at all.
database bdb
suffix "dc=lnp" rootdn "cn=Manager,dc=lnp" rootpw secret
[...] syncrepl rid=001 provider=ldap://localhost:389 bindmethod=simple type=refreshAndPersist searchbase="ou=31,dc=lnp"
You have configured a database on suffix "dc=lnp", but you're only replicating the subtree "ou=31,dc=lnp". Therefore, there is no LDAP entry "dc=lnp", which is where syncrepl stores it's contextCSN. This probably explains the errors you're seeing.
Either create a simple "dc=lnp" entry yourself, or replicate that entry from the master aswell.
I have changed on the slave the slapd.conf to "searchbase="dc=lnp"" and I still get this non blocking issue in the log file when starting the slave ( ./slapd -f /usr/local/openldap/etc/openldap/slapd-front.conf -h "ldap://localhost:3890" -d 1): bdb_dn2entry("dc=lnp") => bdb_dn2id("dc=lnp") <= bdb_dn2id: get failed: DB_NOTFOUND: No matching key/data pair found (-30988)
but the replication issue does not seem to be exactly the same one. I know get:
onnection_get(11): got connid=0 =>do_syncrepl rid=001 =>do_syncrep2 rid=001 ldap_result ld 0x87083d0 msgid 2 wait4msg ld 0x87083d0 msgid 2 (timeout 0 usec) wait4msg continue ld 0x87083d0 msgid 2 all 0 ** ld 0x87083d0 Connections: * host: localhost port: 389 (default) refcnt: 2 status: Connected last used: Wed Apr 22 10:06:54 2009
** ld 0x87083d0 Outstanding Requests: * msgid 2, origid 2, status InProgress outstanding referrals 0, parent count 0 ld 0x87083d0 request count 1 (abandoned 0) ** ld 0x87083d0 Response Queue: Empty ld 0x87083d0 response count 0 ldap_chkResponseList ld 0x87083d0 msgid 2 all 0 ldap_chkResponseList returns ld 0x87083d0 NULL ldap_int_select read1msg: ld 0x87083d0 msgid 2 all 0 ber_get_next ber_get_next: tag 0x30 len 12 contents: read1msg: ld 0x87083d0 msgid 2 message type search-result ber_scanf fmt ({eAA) ber: read1msg: ld 0x87083d0 0 new referrals read1msg: mark request completed, ld 0x87083d0 msgid 2 request done: ld 0x87083d0 msgid 2 res_errno: 32, res_error: <>, res_matched: <> ldap_free_request (origid 2, msgid 2) ldap_free_connection 0 1 ldap_free_connection: refcnt 1 ldap_parse_result ber_scanf fmt ({iAA) ber: ber_scanf fmt (}) ber: ldap_err2string *do_syncrep2: rid=001 LDAP_RES_SEARCH_RESULT (32) No such object* ldap_err2string ldap_err2string *do_syncrep2: rid=001 (32) No such object* ldap_err2string ldap_msgfree connection_get(11): got connid=0 ldap_free_connection 1 1 ldap_send_unbind ber_flush2: 7 bytes to sd 11 ldap_free_connection: actually freed do_syncrepl: rid=001 quitting
Any clue, advices would be greatly apreciated. Thanks
Frederic
Regards, Jonathan
--
Jonathan Clarke - jonathan@phillipoux.net
Ldap Synchronization Connector (LSC) - http://lsc-project.org