Hi, guys,

I was quite confused with "index_intlen".  

---------- what the manual says ----------

index_intlen <integer>
Specify  the  key  length  for ordered integer indices. The most
significant bytes of the binary integer will be used  for  index
keys.  The default value is 4, which provides exact indexing for
31 bit values.  A floating point representation is used to index
too large values.
------------------------------------------------------

Ok, what the manual told me is that 4 is the default value, and large values can be handled.

But I finally figured out that 4 is not only the default value but also the minimum value. 

From the source code, I knew the index_intlen is with the data range [4, 255]. Any out-of-range value will be converted to the boundaries without notifying users:

#define SLAP_INDEX_INTLEN_DEFAULT       4

/* servers/slapd/bconfig.c */
static int
config_generic(ConfigArgs *c) {

    ...
    case CFG_IX_INTLEN:
        if ( c->value_int < SLAP_INDEX_INTLEN_DEFAULT )
            c->value_int = SLAP_INDEX_INTLEN_DEFAULT;
        else if ( c->value_int > 255 )
            c->value_int = 255; 
        index_intlen = c->value_int;
    ...
   
To my opinion, as a configuration knob for user tuning, such behavior (especially the range) should be explicitly exposed to users.

I would suggest to make it explicit by

1. print out logs to notify users
2. write in the manual. 


Thanks a lot!
Tianyin


--
Tianyin XU,
http://cseweb.ucsd.edu/~tixu/