[Date Prev][Date Next] [Chronological] [Thread] [Top]

Re: NEXTID set to 1 in OPENLDAP_REL_ENG_1_2

At 10:41 AM 7/20/99 -0500, Randy Kunkee wrote:
>This would be approximately 1.2.4 version (checked it out about a week
>ago).  I recall several email messages awhile ago trying to work out
>NEXTID.  I recently loaded an LDIF file using ldif2ldbm -i filename -j 10.
>When all was finished, NEXTID contained a '1'.  Did this stuff perhaps
>not get merged into this branch?

I don't believe so.  I don't believe we've gotten any feedback
on this and a variety of other suggested changes...  I haven't
had time to test them myself.  I encourage other to test changes
and propose patches for Release Engineering.

>Also, when reloading an ldif file with IDs in it, I believe the code sets
>NEXTID to the last value it sees.  On some architectures (Intel and Alpha
>among them) ldbmcat does not dump items in ID number order, and the last
>ID written to the ldif file is not necessarily the highest ID.  For example,
>an ldif file I dumped yesterday has id 20900, followed by 421, and the
>last entry is ID 20735.  Upon reloading, a max function needs to be used.
>Here is a suggested patch for ldif2id2entry.c (which only should fix the max
>problem, and I haven't tested this yet, except to say that it compiles):

Please test and provide feedback.

>cvs diff ldif2id2entry.c
>Index: ldif2id2entry.c
>RCS file: /repo/OpenLDAP/pkg/ldap/servers/slapd/tools/ldif2id2entry.c,v
>retrieving revision
>diff -r1. ldif2id2entry.c
>> #define max(a, b)             ( ((a) > (b)) ? (a) : (b) )
><       ID              id;
>>       ID              id, maxid;
><       id = 0;
>>       id = maxid = 0;
>>                                       maxid = max(id, maxid);
>>                               maxid = max(id, maxid);
><       id++;
>>       maxid++;
><               fprintf( stderr, "Could not write next id %ld\n", id );
>>               fprintf( stderr, "Could not write next id %ld\n", maxid );
><               fprintf( fp, "%ld\n", id );
>>               fprintf( fp, "%ld\n", maxid );