From 0ad9acb61f83244af02081ffd79c350af831f21c Mon Sep 17 00:00:00 2001 From: Ludwig Krispenz Date: Thu, 18 Jun 2015 15:22:54 +0200 Subject: [PATCH 2/2] Ticket 48195 - Slow replication when deleting large quantities of multi-valued attributes https://fedorahosted.org/389/ticket/48195 In update resoultion for entry deletion, there is still use of valuearray_find() to find an existingvalue to update its csn. with the fix for ticket #346 there exists slapi_valueset_find() which uses the possibility to do a binary search on the values. Fix: do not use valuearray_find Review: Rich, Thanks (cherry picked from commit 09ab8c799fc3d87db7a5b3aa07eccf9b41ea43d5) (cherry picked from commit a980b795ac03200fd01a2d05ce568691681d50ef) --- ldap/servers/slapd/valueset.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/ldap/servers/slapd/valueset.c b/ldap/servers/slapd/valueset.c index 73208f5..0cf3ded 100644 --- a/ldap/servers/slapd/valueset.c +++ b/ldap/servers/slapd/valueset.c @@ -1411,12 +1411,12 @@ valueset_update_csn_for_valuearray_ext(Slapi_ValueSet *vs, const Slapi_Attr *a, int del_index = -1, del_count = 0; for (i=0;valuestoupdate[i]!=NULL;++i) { - int index= valuearray_find(a, vs->va, valuestoupdate[i]); - if(index!=-1) + Slapi_Value *v = slapi_valueset_find(a, vs, valuestoupdate[i]); + if(v) { - value_update_csn(vs->va[index],t,csn); + value_update_csn(v,t,csn); if (csnref_updated) - valuestoupdate[i]->v_csnset = (CSNSet *)value_get_csnset(vs->va[index]); + valuestoupdate[i]->v_csnset = (CSNSet *)value_get_csnset(v); valuearrayfast_add_value_passin(&vaf_valuesupdated,valuestoupdate[i]); valuestoupdate[i]= NULL; del_count++; -- 1.9.3