#include "slap.h"
#include "back-bdb2.h"
-/* XXX the separate handling of the NEXTID file is in contrast to TP */
-/* the NEXTID file is beeing opened during database start-up */
-static ID
-next_id_read( BackendDB *be )
-{
- struct ldbminfo *li = (struct ldbminfo *) be->be_private;
- BDB2_TXN_HEAD *head = &li->li_txn_head;
- FILE* fp = head->nextidFP;
- ID id;
- char buf[20];
-
- /* set the file pointer to the beginnig of the file */
- rewind( fp );
-
- /* read the nextid */
- if ( fgets( buf, sizeof(buf), fp ) == NULL ) {
- Debug( LDAP_DEBUG_ANY,
- "next_id_read: could not fgets nextid from \"%s\"\n",
- li->li_nextid_file, 0, 0 );
- return NOID;
- }
-
- id = atol( buf );
-
- if(id < 1) {
- Debug( LDAP_DEBUG_ANY,
- "next_id_read %ld: atol(%s) return non-positive integer\n",
- id, buf, 0 );
- return NOID;
- }
+/* reading and writing NEXTID is handled in txn.c */
+#define next_id_read(be) bdb2i_get_nextid( (be) )
+#define next_id_write(be,id) bdb2i_put_nextid( (be), (id) )
- return id;
-}
-
-/* XXX the separate handling of the NEXTID file is in contrast to TP */
-/* the NEXTID file is beeing opened during database start-up */
-static int
-next_id_write( BackendDB *be, ID id )
-{
- struct ldbminfo *li = (struct ldbminfo *) be->be_private;
- BDB2_TXN_HEAD *head = &li->li_txn_head;
- FILE* fp = head->nextidFP;
- char buf[20];
- int rc = 0;
-
- /* set the file pointer to the beginnig of the file */
- rewind( fp );
-
- /* write the nextid */
- if ( fprintf( fp, "%ld\n", id ) == EOF ) {
- Debug( LDAP_DEBUG_ANY, "next_id_write(%ld): cannot fprintf\n",
- id, 0, 0 );
- rc = -1;
- }
-
- /* if forced flushing of files is in effect, do so */
- if( li->li_dbcachewsync && ( fflush( fp ) != 0 )) {
- Debug( LDAP_DEBUG_ANY, "next_id_write %ld: cannot fflush\n",
- id, 0, 0 );
- rc = -1;
- }
-
- return rc;
-}
int
bdb2i_next_id_save( BackendDB *be )
{
struct ldbminfo *li = (struct ldbminfo *) be->be_private;
ID id = bdb2i_next_id_get( be );
- int rc = next_id_write( be, id );
+ int rc;
+ rc = next_id_write( be, id );
if (rc == 0) {
li->li_nextid_wrote = id;
}
struct ldbminfo *li = (struct ldbminfo *) be->be_private;
ID id;
- ldap_pvt_thread_mutex_lock( &li->li_nextid_mutex );
-
/* first time in here since startup - try to read the nexid */
if ( li->li_nextid == NOID ) {
li->li_nextid = next_id_read( be );
(void) next_id_write( be, li->li_nextid );
#endif
- ldap_pvt_thread_mutex_unlock( &li->li_nextid_mutex );
return( id );
}
#ifdef SLAPD_NEXTID_RETURN
struct ldbminfo *li = (struct ldbminfo *) be->be_private;
- ldap_pvt_thread_mutex_lock( &li->li_nextid_mutex );
-
if ( id != li->li_nextid - 1 ) {
- ldap_pvt_thread_mutex_unlock( &li->li_nextid_mutex );
return;
}
li->li_nextid--;
-#if !( SLAPD_NEXTID_CHUCK > 1 )
+#if !( SLAPD_NEXTID_CHUNK > 1 )
(void) next_id_write( be, li->li_nextid );
#endif
-
- ldap_pvt_thread_mutex_unlock( &li->li_nextid_mutex );
#endif
}
struct ldbminfo *li = (struct ldbminfo *) be->be_private;
ID id;
- ldap_pvt_thread_mutex_lock( &li->li_nextid_mutex );
-
/* first time in here since startup - try to read the nexid */
if ( li->li_nextid == NOID ) {
li->li_nextid = next_id_read( be );
id = li->li_nextid;
- ldap_pvt_thread_mutex_unlock( &li->li_nextid_mutex );
-
return( id );
}