This commit is contained in:
Kurt Zeilenga 2004-04-06 01:48:36 +00:00
parent c7e89d57be
commit 13d25a675f
2 changed files with 48 additions and 52 deletions

View file

@ -41,24 +41,20 @@ slap_get_commit_csn( Operation *op, struct berval *csn )
ldap_pvt_thread_mutex_lock( &op->o_bd->be_pcl_mutex );
LDAP_TAILQ_FOREACH( csne, &op->o_bd->be_pending_csn_list, csn_link ) {
if ( csne->opid == op->o_opid && csne->connid == op->o_connid ) {
csne->state = SLAP_CSN_COMMIT;
LDAP_TAILQ_FOREACH( csne, &op->o_bd->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;
break;
}
}
LDAP_TAILQ_FOREACH( csne, &op->o_bd->be_pending_csn_list, csn_link ) {
if ( csne->state == SLAP_CSN_COMMIT ) committed_csne = csne;
if ( csne->state == SLAP_CSN_PENDING ) break;
}
if ( committed_csne ) {
ber_dupbv( csn, committed_csne->csn );
LDAP_TAILQ_FOREACH( csne, &op->o_bd->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 ) ber_dupbv( csn, committed_csne->ce_csn );
ldap_pvt_thread_mutex_unlock( &op->o_bd->be_pcl_mutex );
}
void
@ -68,9 +64,9 @@ slap_rewind_commit_csn( Operation *op )
ldap_pvt_thread_mutex_lock( &op->o_bd->be_pcl_mutex );
LDAP_TAILQ_FOREACH( csne, &op->o_bd->be_pending_csn_list, csn_link ) {
if ( csne->opid == op->o_opid && csne->connid == op->o_connid ) {
csne->state = SLAP_CSN_PENDING;
LDAP_TAILQ_FOREACH( csne, &op->o_bd->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;
}
}
@ -83,19 +79,17 @@ slap_graduate_commit_csn( Operation *op )
{
struct slap_csn_entry *csne;
if ( op == NULL )
return;
if ( op->o_bd == NULL )
return;
if ( op == NULL ) return;
if ( op->o_bd == NULL ) return;
ldap_pvt_thread_mutex_lock( &op->o_bd->be_pcl_mutex );
LDAP_TAILQ_FOREACH( csne, &op->o_bd->be_pending_csn_list, csn_link ) {
if ( csne->opid == op->o_opid && csne->connid == op->o_connid ) {
LDAP_TAILQ_REMOVE( &op->o_bd->be_pending_csn_list, csne, csn_link );
ch_free( csne->csn->bv_val );
ch_free( csne->csn );
LDAP_TAILQ_FOREACH( csne, &op->o_bd->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,
csne, ce_csn_link );
ch_free( csne->ce_csn->bv_val );
ch_free( csne->ce_csn );
ch_free( csne );
break;
}
@ -116,8 +110,7 @@ static struct berval ocbva[] = {
Entry *
slap_create_context_csn_entry(
Backend *be,
struct berval *context_csn
)
struct berval *context_csn )
{
Entry* e;
int rc;
@ -155,8 +148,7 @@ slap_get_csn(
char *csnbuf,
int len,
struct berval *csn,
int manage_ctxcsn
)
int manage_ctxcsn )
{
struct slap_csn_entry *pending;
@ -170,12 +162,12 @@ slap_get_csn(
sizeof( struct slap_csn_entry ));
ldap_pvt_thread_mutex_lock( &op->o_bd->be_pcl_mutex );
ber_dupbv( &op->o_sync_csn, csn );
pending->csn = ber_dupbv( NULL, csn );
pending->connid = op->o_connid;
pending->opid = op->o_opid;
pending->state = SLAP_CSN_PENDING;
pending->ce_csn = ber_dupbv( NULL, csn );
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,
pending, csn_link );
pending, ce_csn_link );
ldap_pvt_thread_mutex_unlock( &op->o_bd->be_pcl_mutex );
}

View file

@ -530,8 +530,8 @@ typedef struct slap_matching_rule {
*/
struct slap_matching_rule *smr_associated;
#define SLAP_MR_ASSOCIATED(mr,amr) (((mr) == (amr)) || \
((mr)->smr_associated == (amr)))
#define SLAP_MR_ASSOCIATED(mr,amr) \
(((mr) == (amr)) || ((mr)->smr_associated == (amr)))
LDAP_SLIST_ENTRY(slap_matching_rule)smr_next;
@ -1687,18 +1687,23 @@ typedef int (BI_op_add) LDAP_P(( struct slap_op *op, struct slap_rep *rs ));
typedef int (BI_op_delete) LDAP_P(( struct slap_op *op, struct slap_rep *rs ));
typedef int (BI_op_abandon) LDAP_P(( struct slap_op *op, struct slap_rep *rs ));
typedef int (BI_op_cancel) LDAP_P(( struct slap_op *op, struct slap_rep *rs ));
typedef int (BI_op_extended) LDAP_P(( struct slap_op *op, struct slap_rep *rs ));
typedef int (BI_chk_referrals) LDAP_P(( struct slap_op *op, struct slap_rep *rs ));
typedef int (BI_entry_release_rw) LDAP_P(( struct slap_op *op, Entry *e, int rw ));
typedef int (BI_op_extended) LDAP_P((
struct slap_op *op, struct slap_rep *rs ));
typedef int (BI_chk_referrals) LDAP_P((
struct slap_op *op, struct slap_rep *rs ));
typedef int (BI_entry_release_rw)
LDAP_P(( struct slap_op *op, Entry *e, int rw ));
typedef int (BI_entry_get_rw) LDAP_P(( struct slap_op *op, struct berval *ndn,
ObjectClass *oc, AttributeDescription *at, int rw, Entry **e ));
typedef int (BI_operational) LDAP_P(( struct slap_op *op, struct slap_rep *rs, int opattrs, Attribute **ap ));
typedef int (BI_has_subordinates) LDAP_P(( struct slap_op *op, Entry *e, int *hasSubs ));
typedef int (BI_operational) LDAP_P(( struct slap_op *op, struct slap_rep *rs,
int opattrs, Attribute **ap ));
typedef int (BI_has_subordinates) LDAP_P(( struct slap_op *op,
Entry *e, int *hasSubs ));
typedef int (BI_connection_init) LDAP_P((BackendDB *bd,
struct slap_conn *c));
typedef int (BI_connection_destroy) LDAP_P((BackendDB *bd,
struct slap_conn *c));
typedef int (BI_connection_init) LDAP_P(( BackendDB *bd,
struct slap_conn *c ));
typedef int (BI_connection_destroy) LDAP_P(( BackendDB *bd,
struct slap_conn *c ));
typedef int (BI_tool_entry_open) LDAP_P(( BackendDB *be, int mode ));
typedef int (BI_tool_entry_close) LDAP_P(( BackendDB *be ));
@ -1706,13 +1711,13 @@ typedef ID (BI_tool_entry_first) LDAP_P(( BackendDB *be ));
typedef ID (BI_tool_entry_next) LDAP_P(( BackendDB *be ));
typedef Entry* (BI_tool_entry_get) LDAP_P(( BackendDB *be, ID id ));
typedef ID (BI_tool_entry_put) LDAP_P(( BackendDB *be, Entry *e,
struct berval *text ));
struct berval *text ));
typedef int (BI_tool_entry_reindex) LDAP_P(( BackendDB *be, ID id ));
typedef int (BI_tool_sync) LDAP_P(( BackendDB *be ));
typedef ID (BI_tool_dn2id_get) LDAP_P(( BackendDB *be, struct berval *dn ));
typedef int (BI_tool_id2entry_get) LDAP_P(( BackendDB *be, ID id, Entry **e ));
typedef ID (BI_tool_entry_modify) LDAP_P(( BackendDB *be, Entry *e,
struct berval *text ));
struct berval *text ));
struct slap_backend_info {
char *bi_type; /* type of backend */
@ -1889,7 +1894,6 @@ typedef struct slap_paged_state {
ID ps_id;
} PagedResultsState;
#define LDAP_PSEARCH_BY_ADD 0x01
#define LDAP_PSEARCH_BY_DELETE 0x02
#define LDAP_PSEARCH_BY_PREMODIFY 0x03
@ -1917,13 +1921,13 @@ struct slap_session_entry {
};
struct slap_csn_entry {
struct berval *csn;
unsigned long opid;
unsigned long connid;
struct berval *ce_csn;
unsigned long ce_opid;
unsigned long ce_connid;
#define SLAP_CSN_PENDING 1
#define SLAP_CSN_COMMIT 2
long state;
LDAP_TAILQ_ENTRY (slap_csn_entry) csn_link;
long ce_state;
LDAP_TAILQ_ENTRY (slap_csn_entry) ce_csn_link;
};
/*