]> git.sur5r.net Git - openldap/blob - servers/slapd/back-bdb/trans.c
Declare bdb_cache_entry_db_unlock().
[openldap] / servers / slapd / back-bdb / trans.c
1 /* trans.c - bdb backend transaction routines */
2 /* $OpenLDAP$ */
3
4 #include "portable.h"
5
6 #include <stdio.h>
7 #include <ac/string.h>
8
9 #include "back-bdb.h"
10 #include "external.h"
11 #include "lber_pvt.h"
12
13
14 /* Congestion avoidance code
15  * for Deadlock Rollback
16  */
17
18 void
19 bdb_trans_backoff( int num_retries )
20 {
21         int i;
22         int delay = 0;
23         int pow_retries = 1;
24         unsigned long key = 0;
25         unsigned long max_key = -1;
26         struct timeval timeout;
27
28         lutil_entropy( &key, sizeof( unsigned long ));
29
30         for ( i = 0; i < num_retries; i++ ) {
31                 if ( i >= 5 ) break;
32                 pow_retries *= 4;
33         }
34
35         delay = 16384 * (key * (double) pow_retries / (double) max_key);
36         delay = delay ? delay : 1;
37
38 #ifdef NEW_LOGGING
39         LDAP_LOG( OPERATION, ERR, "delay = %d, num_retries = %d\n", delay, num_retries, 0 );
40 #else
41         Debug( LDAP_DEBUG_TRACE,  "delay = %d, num_retries = %d\n", delay, num_retries, 0 );
42 #endif
43
44         timeout.tv_sec = delay / 1000000;
45         timeout.tv_usec = delay % 1000000;
46         select( 0, NULL, NULL, NULL, &timeout );
47 }