forked from jengelh/openldap2
297 lines
10 KiB
Plaintext
297 lines
10 KiB
Plaintext
Index: servers/slapd/proto-slap.h
|
|
===================================================================
|
|
RCS file: /repo/OpenLDAP/pkg/ldap/servers/slapd/proto-slap.h,v
|
|
retrieving revision 1.762
|
|
retrieving revision 1.763
|
|
diff -u -r1.762 -r1.763
|
|
--- servers/slapd/proto-slap.h 1 Nov 2008 14:16:49 -0000 1.762
|
|
+++ servers/slapd/proto-slap.h 2 Nov 2008 21:16:20 -0000 1.763
|
|
@@ -804,7 +804,7 @@
|
|
LDAP_SLAPD_V( const struct berval ) slap_ldapsync_bv;
|
|
LDAP_SLAPD_V( const struct berval ) slap_ldapsync_cn_bv;
|
|
LDAP_SLAPD_F (void) slap_get_commit_csn LDAP_P((
|
|
- Operation *, struct berval *maxcsn ));
|
|
+ Operation *, struct berval *maxcsn, int *foundit ));
|
|
LDAP_SLAPD_F (void) slap_rewind_commit_csn LDAP_P(( Operation * ));
|
|
LDAP_SLAPD_F (void) slap_graduate_commit_csn LDAP_P(( Operation * ));
|
|
LDAP_SLAPD_F (Entry *) slap_create_context_csn_entry LDAP_P(( Backend *, struct berval *));
|
|
Index: servers/slapd/overlays/syncprov.c
|
|
===================================================================
|
|
RCS file: /repo/OpenLDAP/pkg/ldap/servers/slapd/overlays/syncprov.c,v
|
|
retrieving revision 1.249
|
|
retrieving revision 1.250
|
|
diff -u -r1.249 -r1.250
|
|
--- servers/slapd/overlays/syncprov.c 28 Oct 2008 19:33:46 -0000 1.249
|
|
+++ servers/slapd/overlays/syncprov.c 2 Nov 2008 14:26:25 -0000 1.250
|
|
@@ -1604,12 +1604,12 @@
|
|
{
|
|
struct berval maxcsn = BER_BVNULL;
|
|
char cbuf[LDAP_LUTIL_CSNSTR_BUFSIZE];
|
|
- int do_check = 0, have_psearches;
|
|
+ int do_check = 0, have_psearches, foundit;
|
|
|
|
/* Update our context CSN */
|
|
cbuf[0] = '\0';
|
|
ldap_pvt_thread_rdwr_wlock( &si->si_csn_rwlock );
|
|
- slap_get_commit_csn( op, &maxcsn );
|
|
+ slap_get_commit_csn( op, &maxcsn, &foundit );
|
|
if ( BER_BVISNULL( &maxcsn ) && SLAP_GLUE_SUBORDINATE( op->o_bd )) {
|
|
/* syncrepl queues the CSN values in the db where
|
|
* it is configured , not where the changes are made.
|
|
@@ -1618,7 +1618,7 @@
|
|
*/
|
|
BackendDB *be = op->o_bd;
|
|
op->o_bd = select_backend( &be->be_nsuffix[0], 1);
|
|
- slap_get_commit_csn( op, &maxcsn );
|
|
+ slap_get_commit_csn( op, &maxcsn, &foundit );
|
|
op->o_bd = be;
|
|
}
|
|
if ( !BER_BVISNULL( &maxcsn ) ) {
|
|
@@ -1641,7 +1641,7 @@
|
|
sizeof(int));
|
|
si->si_sids[i] = sid;
|
|
}
|
|
- } else {
|
|
+ } else if ( !foundit ) {
|
|
/* internal ops that aren't meant to be replicated */
|
|
ldap_pvt_thread_rdwr_wunlock( &si->si_csn_rwlock );
|
|
return SLAP_CB_CONTINUE;
|
|
@@ -1678,8 +1678,11 @@
|
|
ldap_pvt_thread_rdwr_runlock( &si->si_csn_rwlock );
|
|
}
|
|
|
|
- opc->sctxcsn.bv_len = maxcsn.bv_len;
|
|
- opc->sctxcsn.bv_val = cbuf;
|
|
+ /* only update consumer ctx if this is the greatest csn */
|
|
+ if ( bvmatch( &maxcsn, &op->o_csn )) {
|
|
+ opc->sctxcsn.bv_len = maxcsn.bv_len;
|
|
+ opc->sctxcsn.bv_val = cbuf;
|
|
+ }
|
|
|
|
/* Handle any persistent searches */
|
|
ldap_pvt_thread_mutex_lock( &si->si_ops_mutex );
|
|
Index: servers/slapd/ctxcsn.c
|
|
===================================================================
|
|
RCS file: /repo/OpenLDAP/pkg/ldap/servers/slapd/ctxcsn.c,v
|
|
retrieving revision 1.47
|
|
retrieving revision 1.50
|
|
diff -u -r1.47 -r1.50
|
|
--- servers/slapd/ctxcsn.c 10 Feb 2008 01:18:22 -0000 1.47
|
|
+++ servers/slapd/ctxcsn.c 2 Nov 2008 21:16:20 -0000 1.50
|
|
@@ -33,71 +33,72 @@
|
|
void
|
|
slap_get_commit_csn(
|
|
Operation *op,
|
|
- struct berval *maxcsn
|
|
+ struct berval *maxcsn,
|
|
+ int *foundit
|
|
)
|
|
{
|
|
struct slap_csn_entry *csne, *committed_csne = NULL;
|
|
+ BackendDB *be = op->o_bd->bd_self;
|
|
|
|
if ( maxcsn ) {
|
|
BER_BVZERO( maxcsn );
|
|
}
|
|
+ if ( foundit ) {
|
|
+ *foundit = 0;
|
|
+ }
|
|
|
|
- ldap_pvt_thread_mutex_lock( op->o_bd->be_pcl_mutexp );
|
|
+ ldap_pvt_thread_mutex_lock( &be->be_pcl_mutex );
|
|
|
|
- LDAP_TAILQ_FOREACH( csne, op->o_bd->be_pending_csn_list, ce_csn_link ) {
|
|
+ LDAP_TAILQ_FOREACH( csne, be->be_pending_csn_list, ce_csn_link ) {
|
|
if ( csne->ce_opid == op->o_opid && csne->ce_connid == op->o_connid ) {
|
|
csne->ce_state = SLAP_CSN_COMMIT;
|
|
+ if ( foundit ) *foundit = 1;
|
|
break;
|
|
}
|
|
}
|
|
|
|
- LDAP_TAILQ_FOREACH( csne, op->o_bd->be_pending_csn_list, ce_csn_link ) {
|
|
+ LDAP_TAILQ_FOREACH( csne, be->be_pending_csn_list, ce_csn_link ) {
|
|
if ( csne->ce_state == SLAP_CSN_COMMIT ) committed_csne = csne;
|
|
if ( csne->ce_state == SLAP_CSN_PENDING ) break;
|
|
}
|
|
|
|
if ( committed_csne && maxcsn ) *maxcsn = committed_csne->ce_csn;
|
|
- ldap_pvt_thread_mutex_unlock( op->o_bd->be_pcl_mutexp );
|
|
+ ldap_pvt_thread_mutex_unlock( &be->be_pcl_mutex );
|
|
}
|
|
|
|
void
|
|
slap_rewind_commit_csn( Operation *op )
|
|
{
|
|
struct slap_csn_entry *csne;
|
|
+ BackendDB *be = op->o_bd->bd_self;
|
|
|
|
- ldap_pvt_thread_mutex_lock( op->o_bd->be_pcl_mutexp );
|
|
+ ldap_pvt_thread_mutex_lock( &be->be_pcl_mutex );
|
|
|
|
- LDAP_TAILQ_FOREACH( csne, op->o_bd->be_pending_csn_list, ce_csn_link ) {
|
|
+ LDAP_TAILQ_FOREACH( csne, be->be_pending_csn_list, ce_csn_link ) {
|
|
if ( csne->ce_opid == op->o_opid && csne->ce_connid == op->o_connid ) {
|
|
csne->ce_state = SLAP_CSN_PENDING;
|
|
break;
|
|
}
|
|
}
|
|
|
|
- ldap_pvt_thread_mutex_unlock( op->o_bd->be_pcl_mutexp );
|
|
+ ldap_pvt_thread_mutex_unlock( &be->be_pcl_mutex );
|
|
}
|
|
|
|
void
|
|
slap_graduate_commit_csn( Operation *op )
|
|
{
|
|
struct slap_csn_entry *csne;
|
|
+ BackendDB *be;
|
|
|
|
if ( op == NULL ) return;
|
|
if ( op->o_bd == NULL ) return;
|
|
+ be = op->o_bd->bd_self;
|
|
|
|
-#if 0
|
|
- /* it is NULL when we get here from the frontendDB;
|
|
- * alternate fix: initialize frontendDB like all other backends */
|
|
- assert( op->o_bd->be_pcl_mutexp != NULL );
|
|
-#endif
|
|
-
|
|
- if ( op->o_bd->be_pcl_mutexp == NULL ) return;
|
|
-
|
|
- ldap_pvt_thread_mutex_lock( op->o_bd->be_pcl_mutexp );
|
|
+ ldap_pvt_thread_mutex_lock( &be->be_pcl_mutex );
|
|
|
|
- LDAP_TAILQ_FOREACH( csne, op->o_bd->be_pending_csn_list, ce_csn_link ) {
|
|
+ LDAP_TAILQ_FOREACH( csne, be->be_pending_csn_list, ce_csn_link ) {
|
|
if ( csne->ce_opid == op->o_opid && csne->ce_connid == op->o_connid ) {
|
|
- LDAP_TAILQ_REMOVE( op->o_bd->be_pending_csn_list,
|
|
+ LDAP_TAILQ_REMOVE( be->be_pending_csn_list,
|
|
csne, ce_csn_link );
|
|
Debug( LDAP_DEBUG_SYNC, "slap_graduate_commit_csn: removing %p %s\n",
|
|
csne->ce_csn.bv_val, csne->ce_csn.bv_val, 0 );
|
|
@@ -110,7 +111,7 @@
|
|
}
|
|
}
|
|
|
|
- ldap_pvt_thread_mutex_unlock( op->o_bd->be_pcl_mutexp );
|
|
+ ldap_pvt_thread_mutex_unlock( &be->be_pcl_mutex );
|
|
|
|
return;
|
|
}
|
|
@@ -161,22 +162,23 @@
|
|
struct berval *csn )
|
|
{
|
|
struct slap_csn_entry *pending;
|
|
+ BackendDB *be = op->o_bd->bd_self;
|
|
|
|
pending = (struct slap_csn_entry *) ch_calloc( 1,
|
|
sizeof( struct slap_csn_entry ));
|
|
|
|
Debug( LDAP_DEBUG_SYNC, "slap_queue_csn: queing %p %s\n", csn->bv_val, csn->bv_val, 0 );
|
|
|
|
- ldap_pvt_thread_mutex_lock( op->o_bd->be_pcl_mutexp );
|
|
+ ldap_pvt_thread_mutex_lock( &be->be_pcl_mutex );
|
|
|
|
ber_dupbv( &pending->ce_csn, csn );
|
|
ber_bvreplace_x( &op->o_csn, &pending->ce_csn, op->o_tmpmemctx );
|
|
pending->ce_connid = op->o_connid;
|
|
pending->ce_opid = op->o_opid;
|
|
pending->ce_state = SLAP_CSN_PENDING;
|
|
- LDAP_TAILQ_INSERT_TAIL( op->o_bd->be_pending_csn_list,
|
|
+ LDAP_TAILQ_INSERT_TAIL( be->be_pending_csn_list,
|
|
pending, ce_csn_link );
|
|
- ldap_pvt_thread_mutex_unlock( op->o_bd->be_pcl_mutexp );
|
|
+ ldap_pvt_thread_mutex_unlock( &be->be_pcl_mutex );
|
|
}
|
|
|
|
int
|
|
Index: servers/slapd/frontend.c
|
|
===================================================================
|
|
RCS file: /repo/OpenLDAP/pkg/ldap/servers/slapd/frontend.c,v
|
|
retrieving revision 1.26
|
|
retrieving revision 1.27
|
|
diff -u -r1.26 -r1.27
|
|
--- servers/slapd/frontend.c 19 Sep 2008 18:37:11 -0000 1.26
|
|
+++ servers/slapd/frontend.c 2 Nov 2008 06:58:50 -0000 1.27
|
|
@@ -108,11 +108,7 @@
|
|
frontendDB->be_def_limit.lms_s_pr_hide = 0; /* don't hide number of entries left */
|
|
frontendDB->be_def_limit.lms_s_pr_total = 0; /* number of total entries returned by pagedResults equal to hard limit */
|
|
|
|
-#if 0
|
|
- /* FIXME: do we need this? */
|
|
- frontendDB->be_pcl_mutexp = &frontendDB->be_pcl_mutex;
|
|
- ldap_pvt_thread_mutex_init( frontendDB->be_pcl_mutexp );
|
|
-#endif
|
|
+ ldap_pvt_thread_mutex_init( &frontendDB->be_pcl_mutex );
|
|
|
|
/* suffix */
|
|
frontendDB->be_suffix = ch_calloc( 2, sizeof( struct berval ) );
|
|
Index: servers/slapd/slap.h
|
|
===================================================================
|
|
RCS file: /repo/OpenLDAP/pkg/ldap/servers/slapd/slap.h,v
|
|
retrieving revision 1.860
|
|
retrieving revision 1.861
|
|
diff -u -r1.860 -r1.861
|
|
--- servers/slapd/slap.h 1 Nov 2008 14:16:49 -0000 1.860
|
|
+++ servers/slapd/slap.h 2 Nov 2008 06:58:50 -0000 1.861
|
|
@@ -1895,7 +1895,6 @@
|
|
BerVarray be_update_refs; /* where to refer modifying clients to */
|
|
struct be_pcl *be_pending_csn_list;
|
|
ldap_pvt_thread_mutex_t be_pcl_mutex;
|
|
- ldap_pvt_thread_mutex_t *be_pcl_mutexp;
|
|
struct syncinfo_s *be_syncinfo; /* For syncrepl */
|
|
|
|
void *be_pb; /* Netscape plugin */
|
|
Index: servers/slapd/overlays/pcache.c
|
|
===================================================================
|
|
RCS file: /repo/OpenLDAP/pkg/ldap/servers/slapd/overlays/pcache.c,v
|
|
retrieving revision 1.157
|
|
retrieving revision 1.158
|
|
diff -u -r1.157 -r1.158
|
|
--- servers/slapd/overlays/pcache.c 24 Oct 2008 16:57:38 -0000 1.157
|
|
+++ servers/slapd/overlays/pcache.c 2 Nov 2008 06:58:50 -0000 1.158
|
|
@@ -3145,7 +3145,7 @@
|
|
cm->db = *be;
|
|
SLAP_DBFLAGS(&cm->db) |= SLAP_DBFLAG_NO_SCHEMA_CHECK;
|
|
cm->db.be_private = NULL;
|
|
- cm->db.be_pcl_mutexp = &cm->db.be_pcl_mutex;
|
|
+ cm->db.bd_self = &cm->db;
|
|
cm->qm = qm;
|
|
cm->numattrsets = 0;
|
|
cm->num_entries_limit = 5;
|
|
Index: servers/slapd/overlays/translucent.c
|
|
===================================================================
|
|
RCS file: /repo/OpenLDAP/pkg/ldap/servers/slapd/overlays/translucent.c,v
|
|
retrieving revision 1.56
|
|
retrieving revision 1.57
|
|
diff -u -r1.56 -r1.57
|
|
--- servers/slapd/overlays/translucent.c 17 Oct 2008 15:40:49 -0000 1.56
|
|
+++ servers/slapd/overlays/translucent.c 2 Nov 2008 06:58:50 -0000 1.57
|
|
@@ -1268,7 +1268,6 @@
|
|
on->on_bi.bi_private = ov;
|
|
ov->db = *be;
|
|
ov->db.be_private = NULL;
|
|
- ov->db.be_pcl_mutexp = &ov->db.be_pcl_mutex;
|
|
ov->defer_db_open = 1;
|
|
|
|
if ( !backend_db_init( "ldap", &ov->db, -1, NULL )) {
|
|
Index: servers/slapd/backend.c
|
|
===================================================================
|
|
RCS file: /repo/OpenLDAP/pkg/ldap/servers/slapd/backend.c,v
|
|
retrieving revision 1.402
|
|
retrieving revision 1.403
|
|
diff -u -r1.402 -r1.403
|
|
--- servers/slapd/backend.c 1 Nov 2008 14:16:49 -0000 1.402
|
|
+++ servers/slapd/backend.c 2 Nov 2008 06:58:50 -0000 1.403
|
|
@@ -594,8 +594,7 @@
|
|
be->be_requires = frontendDB->be_requires;
|
|
be->be_ssf_set = frontendDB->be_ssf_set;
|
|
|
|
- be->be_pcl_mutexp = &be->be_pcl_mutex;
|
|
- ldap_pvt_thread_mutex_init( be->be_pcl_mutexp );
|
|
+ ldap_pvt_thread_mutex_init( &be->be_pcl_mutex );
|
|
|
|
/* assign a default depth limit for alias deref */
|
|
be->be_max_deref_depth = SLAPD_DEFAULT_MAXDEREFDEPTH;
|