Use a single sessionlog per context, delete sid

This commit is contained in:
Howard Chu 2005-01-13 19:51:01 +00:00
parent 0d964a487b
commit 93c56951ed
7 changed files with 24 additions and 86 deletions

View File

@ -1669,7 +1669,6 @@ add_syncrepl(
si->si_retrynum = NULL;
si->si_syncCookie.ctxcsn = NULL;
si->si_syncCookie.octet_str = NULL;
si->si_syncCookie.sid = -1;
si->si_manageDSAit = 0;
si->si_tlimit = 0;
si->si_slimit = 0;

View File

@ -39,45 +39,24 @@ slap_compose_sync_cookie(
Operation *op,
struct berval *cookie,
struct berval *csn,
int sid,
int rid )
{
char cookiestr[ LDAP_LUTIL_CSNSTR_BUFSIZE + 20 ];
if ( csn->bv_val == NULL ) {
if ( sid == -1 ) {
if ( rid == -1 ) {
cookiestr[0] = '\0';
} else {
snprintf( cookiestr, LDAP_LUTIL_CSNSTR_BUFSIZE + 20,
"rid=%03d", rid );
}
if ( rid == -1 ) {
cookiestr[0] = '\0';
} else {
if ( rid == -1 ) {
snprintf( cookiestr, LDAP_LUTIL_CSNSTR_BUFSIZE + 20,
"sid=%03d", sid );
} else {
snprintf( cookiestr, LDAP_LUTIL_CSNSTR_BUFSIZE + 20,
"sid=%03d,rid=%03d", sid, rid );
}
snprintf( cookiestr, LDAP_LUTIL_CSNSTR_BUFSIZE + 20,
"rid=%03d", rid );
}
} else {
if ( sid == -1 ) {
if ( rid == -1 ) {
snprintf( cookiestr, LDAP_LUTIL_CSNSTR_BUFSIZE + 20,
"csn=%s", csn->bv_val );
} else {
snprintf( cookiestr, LDAP_LUTIL_CSNSTR_BUFSIZE + 20,
"csn=%s,rid=%03d", csn->bv_val, rid );
}
if ( rid == -1 ) {
snprintf( cookiestr, LDAP_LUTIL_CSNSTR_BUFSIZE + 20,
"csn=%s", csn->bv_val );
} else {
if ( rid == -1 ) {
snprintf( cookiestr, LDAP_LUTIL_CSNSTR_BUFSIZE + 20,
"csn=%s,sid=%03d", csn->bv_val, sid );
} else {
snprintf( cookiestr, LDAP_LUTIL_CSNSTR_BUFSIZE + 20,
"csn=%s,sid=%03d,rid=%03d", csn->bv_val, sid, rid );
}
snprintf( cookiestr, LDAP_LUTIL_CSNSTR_BUFSIZE + 20,
"csn=%s,rid=%03d", csn->bv_val, rid );
}
}
ber_str2bv( cookiestr, strlen(cookiestr), 1, cookie );
@ -118,8 +97,6 @@ slap_parse_sync_cookie(
char *csn_str;
int csn_str_len;
int valid = 0;
char *sid_ptr;
char *sid_str;
char *rid_ptr;
char *rid_str;
char *cval;
@ -159,18 +136,6 @@ slap_parse_sync_cookie(
cookie->ctxcsn = NULL;
}
if (( sid_ptr = strstr( cookie->octet_str->bv_val, "sid=" )) != NULL ) {
sid_str = SLAP_STRNDUP( sid_ptr,
SLAP_SYNC_SID_SIZE + sizeof("sid=") - 1 );
if ( (cval = strchr( sid_str, ',' )) != NULL ) {
*cval = '\0';
}
cookie->sid = atoi( sid_str + sizeof("sid=") - 1 );
ch_free( sid_str );
} else {
cookie->sid = -1;
}
if (( rid_ptr = strstr( cookie->octet_str->bv_val, "rid=" )) != NULL ) {
rid_str = SLAP_STRNDUP( rid_ptr,
SLAP_SYNC_RID_SIZE + sizeof("rid=") - 1 );
@ -238,7 +203,6 @@ slap_dup_sync_cookie(
ch_calloc( 1, sizeof( struct sync_cookie ));
}
new->sid = src->sid;
new->rid = src->rid;
if ( src->ctxcsn ) {

View File

@ -56,7 +56,6 @@ typedef struct syncops {
struct berval s_base; /* ndn of search base */
ID s_eid; /* entryID of search base */
Operation *s_op; /* search op */
int s_sid;
int s_rid;
struct berval s_filterstr;
int s_flags; /* search status */
@ -101,8 +100,6 @@ typedef struct slog_entry {
} slog_entry;
typedef struct sessionlog {
struct sessionlog *sl_next;
int sl_sid;
struct berval sl_mincsn;
int sl_num;
int sl_size;
@ -771,8 +768,7 @@ syncprov_sendresp( Operation *op, opcookie *opc, syncops *so, Entry *e, int mode
}
ctrls[1] = NULL;
slap_compose_sync_cookie( op, &cookie, &opc->sctxcsn,
so->s_sid, so->s_rid );
slap_compose_sync_cookie( op, &cookie, &opc->sctxcsn, so->s_rid );
e_uuid.e_attrs = &a_uuid;
a_uuid.a_desc = slap_schema.si_ad_entryUUID;
@ -1097,7 +1093,7 @@ syncprov_add_slog( Operation *op, struct berval *csn )
sessionlog *sl;
slog_entry *se;
for ( sl = si->si_logs; sl; sl=sl->sl_next ) {
for ( sl = si->si_logs; sl; ) {
/* Allocate a record. UUIDs are not NUL-terminated. */
se = ch_malloc( sizeof( slog_entry ) + opc->suuid.bv_len +
csn->bv_len + 1 );
@ -1626,7 +1622,7 @@ syncprov_search_response( Operation *op, SlapReply *rs )
slap_compose_sync_cookie( op, &cookie,
&op->ors_filter->f_and->f_ava->aa_value,
srs->sr_state.sid, srs->sr_state.rid );
srs->sr_state.rid );
/* Is this a regular refresh? */
if ( !ss->ss_so ) {
@ -1746,7 +1742,6 @@ syncprov_op_search( Operation *op, SlapReply *rs )
sop = ch_malloc( sizeof( syncops ));
*sop = so;
ldap_pvt_thread_mutex_init( &sop->s_mutex );
sop->s_sid = srs->sr_state.sid;
sop->s_rid = srs->sr_state.rid;
sop->s_inuse = 1;
@ -1788,8 +1783,7 @@ syncprov_op_search( Operation *op, SlapReply *rs )
goto shortcut;
}
/* Do we have a sessionlog for this search? */
for ( sl=si->si_logs; sl; sl=sl->sl_next )
if ( sl->sl_sid == srs->sr_state.sid ) break;
sl=si->si_logs;
if ( sl ) {
ldap_pvt_thread_mutex_lock( &sl->sl_mutex );
if ( ber_bvcmp( srs->sr_state.ctxcsn, &sl->sl_mincsn ) >= 0 ) {
@ -1947,44 +1941,30 @@ syncprov_db_config(
} else if ( strcasecmp( argv[0], "syncprov-sessionlog" ) == 0 ) {
sessionlog *sl;
int sid, size;
if ( argc != 3 ) {
int size;
if ( argc != 2 ) {
fprintf( stderr, "%s: line %d: wrong number of arguments in "
"\"syncprov-sessionlog <sid> <size>\"\n", fname, lineno );
"\"syncprov-sessionlog <size>\"\n", fname, lineno );
return -1;
}
sid = atoi( argv[1] );
if ( sid < 0 || sid > 999 ) {
fprintf( stderr,
"%s: line %d: session log id %d is out of range [0..999]\n",
fname, lineno, sid );
return -1;
}
size = atoi( argv[2] );
size = atoi( argv[1] );
if ( size < 0 ) {
fprintf( stderr,
"%s: line %d: session log size %d is negative\n",
fname, lineno, size );
return -1;
}
for ( sl = si->si_logs; sl; sl=sl->sl_next ) {
if ( sl->sl_sid == sid ) {
sl->sl_size = size;
break;
}
}
sl = si->si_logs;
if ( !sl ) {
sl = ch_malloc( sizeof( sessionlog ) + LDAP_LUTIL_CSNSTR_BUFSIZE );
sl->sl_mincsn.bv_val = (char *)(sl+1);
sl->sl_mincsn.bv_len = 0;
sl->sl_sid = sid;
sl->sl_size = size;
sl->sl_num = 0;
sl->sl_head = sl->sl_tail = NULL;
sl->sl_next = si->si_logs;
ldap_pvt_thread_mutex_init( &sl->sl_mutex );
si->si_logs = sl;
}
sl->sl_size = size;
return 0;
}

View File

@ -753,7 +753,7 @@ LDAP_SLAPD_V (int) krbv4_ldap_auth();
* ldapsync.c
*/
LDAP_SLAPD_F (void) slap_compose_sync_cookie LDAP_P((
Operation *, struct berval *, struct berval *, int, int ));
Operation *, struct berval *, struct berval *, int ));
LDAP_SLAPD_F (void) slap_sync_cookie_free LDAP_P((
struct sync_cookie *, int free_cookie ));
LDAP_SLAPD_F (int) slap_parse_sync_cookie LDAP_P((

View File

@ -1465,7 +1465,6 @@ struct nonpresent_entry {
struct sync_cookie {
struct berval *ctxcsn;
long sid;
struct berval *octet_str;
long rid;
LDAP_STAILQ_ENTRY(sync_cookie) sc_next;

View File

@ -472,7 +472,7 @@ done:;
}
}
slap_compose_sync_cookie( NULL, &mc, &maxcsn, -1, -1 );
slap_compose_sync_cookie( NULL, &mc, &maxcsn, -1 );
if ( SLAP_LASTMOD(be) && replica_promotion ) {
if ( provider_subentry || update_ctxcsn == SLAP_TOOL_CTXCSN_BATCH ||

View File

@ -444,10 +444,6 @@ do_syncrep1(
ber_bvarray_free( si->si_syncCookie.octet_str );
si->si_syncCookie.octet_str = NULL;
ber_bvarray_free_x( cookie, op->o_tmpmemctx );
if ( sc->sid != -1 ) {
/* command line cookie wins */
si->si_syncCookie.sid = sc->sid;
}
if ( sc->ctxcsn != NULL ) {
/* command line cookie wins */
if ( si->si_syncCookie.ctxcsn ) {
@ -465,7 +461,7 @@ do_syncrep1(
sc = NULL;
slap_compose_sync_cookie( NULL, &newcookie,
&si->si_syncCookie.ctxcsn[0],
si->si_syncCookie.sid, si->si_syncCookie.rid );
si->si_syncCookie.rid );
ber_bvarray_add( &si->si_syncCookie.octet_str, &newcookie );
}
@ -527,8 +523,8 @@ do_syncrep2(
int syncstate;
struct berval syncUUID = BER_BVNULL;
struct sync_cookie syncCookie = { NULL, -1, NULL };
struct sync_cookie syncCookie_req = { NULL, -1, NULL };
struct sync_cookie syncCookie = { NULL };
struct sync_cookie syncCookie_req = { NULL };
struct berval cookie = BER_BVNULL;
int rc, err, i;