Aaron Richton wrote:
Well, from 2.3 to 2.4 a change wouldn't be very surprising. This is 2.4.6 to 2.4.7, which may be more surprising.
I think we don't have too much 2.4.6 users currently and if we communicate the change clearly enough we can afford such a change. I think similar to Michael here, let's avoid the additional config setting and make the new index format the default. My reason for this is, that the option only really makes sense when using old 2.3 (and 2.4.6) databases, the options is of very low values when creating new databases, I guess. (And you would have to explicitly set it for a new database to be able to use ordered indexes).
It may be surprising in that it's not in keeping with RE22/23 practice, but there are a lot of benefits here. If this is to make it into RE24 at all, I'd want it to get into the train as early as possible (2.4.7?) and agree with it being a default. Of course there will be no bugs -- but if there are, I'd like them seen at more sites as they continue their 2.4 installations. As Ralf pointed out, 2.4 isn't often in production, so if this is introduced as default in 2.4.7 we'll probably get a lot of free testing from sites evaluating for RE23->RE24 transition.
OK, I guess it's fine to make it the default. However, because I think we still want the key size to be tunable, I'm going to keep the config keyword.
Yes, this might be a bit painful for the early adopters. Is there any sort of magic number or similar where slapd could bail out "sorry, please slapindex" if given a RE23 format database? Then at least the FAQ-O-Matic could point out "use 2.4.6 slapcat then upgrade again" or some other concrete procedure.
In this case, all you'd need is to run "slapindex -qt" to recreate the relevant indices. (Whether that's actually faster than slapcat/slapadd, I don't really know. Historically it's been pretty slow...)
I guess we can detect an old format index when it gets referenced, but currently we don't reference them until an actual search operation comes along. I.e., it's not something we would normally check at startup time, and it would be pretty awkward at runtime.