In your previous mail you said they were incompatible, but you provided a logical reason why (you can't sort the data). Now I found a case where the reason doesn't apply (you can append without doing the comparison). So I thought maybe there was something else I missed. But ok I understand this is not supported.
On 21 August 2015 at 21:21, Howard Chu <[email protected]> wrote: > Simon Majou wrote: > >> Correction, with the flags MDB_RESERVE|MDB_APPENDDUP >> > > What part of "DUPSORT and RESERVE are incompatible" do you not understand? > >> >> Here is the stack from gdb : >> >> Program received signal SIGSEGV, Segmentation fault. >> mdb_node_del (mc=mc@entry=0x7fffffffdb10, ksize=ksize@entry=0) at >> mdb.c:7183 >> 7183 mp->mp_ptrs[j] = mp->mp_ptrs[i]; >> (gdb) bt >> #0 mdb_node_del (mc=mc@entry=0x7fffffffdb10, ksize=ksize@entry=0) >> at mdb.c:7183 >> #1 0x00007ffff7bd06e2 in mdb_cursor_put (mc=0x7fffffffdb10, >> key=0x7fffffffd8d0, data=0x7fffffffd8c0, flags=<optimized out>) >> at mdb.c:6698 >> #2 0x00007ffff7bd0f8e in mdb_cursor_put (mc=0x7fffffffd980, >> key=0x7fffffffdd70, data=0x7fffffffdda0, flags=<optimized out>) >> at mdb.c:6757 >> #3 0x00007ffff7bd29b2 in mdb_put (txn=<optimized out>, dbi=<optimized >> out>, >> key=0x7fffffffdd70, data=0x7fffffffdda0, flags=327680) at mdb.c:8611 >> #4 0x0000000000400dea in main (argc=1, argv=0x7fffffffded8) >> at test_lmdb_appenddup.c:59 >> >> >> >> On 21 August 2015 at 19:25, Simon Majou <[email protected] >> <mailto:[email protected]>> wrote: >> >> And in the case where I want to append data in a DUPSORT database, is >> there a way to write directly in the persisted page ? >> I tried with the flags MDB_RESERVE|MDB_APPEND but it fails. >> >> On 18 August 2015 at 15:41, Simon Majou <[email protected] >> <mailto:[email protected]>> wrote: >> >> Oh ok it makes sense now. Thank you for the heads up >> >> On 18 August 2015 at 15:36, Howard Chu <[email protected] >> <mailto:[email protected]>> wrote: >> >> Simon Majou wrote: >> >> This is version 0.9.16 >> >> I used sample-bdb.txt for instance, with the DUP_SORT >> option, >> and the mdb_put >> with the MDB_RESERVED flags, and execute it 2 times. The >> first >> run (creation) >> is ok, the second (update) gets the seg fault. >> >> >> DUPSORT and RESERVED are incompatible. RESERVED means you're >> not >> providing a data value, only a length. DUPSORT sorts *values* >> - >> since you didn't provide a valid value, it probably chased a >> pointer off into space. >> >> >> I ran it in gdb and got the stack : >> #0 mdb_cursor_set (mc=mc@entry=0x7fffffffdb40, >> key=key@entry=0x7fffffffdda0, >> data=data@entry=0x7fffffffd800, op=op@entry >> =MDB_SET, >> exactp=exactp@entry=0x7fffffffd7f0) at mdb.c:5867 >> #1 0x00007ffff7bd024c in mdb_cursor_put >> (mc=0x7fffffffdb40, >> key=0x7fffffffdda0, data=0x7fffffffd8f0, >> flags=32768) at >> mdb.c:6391 >> #2 0x00007ffff7bd095f in mdb_cursor_put >> (mc=0x7fffffffd9b0, >> key=0x7fffffffdd90, data=0x7fffffffdda0, >> flags=<optimized out>) >> at mdb.c:6780 >> #3 0x00007ffff7bd29b2 in mdb_put (txn=<optimized out>, >> dbi=<optimized out>, >> key=0x7fffffffdd90, data=0x7fffffffdda0, >> flags=65536) at >> mdb.c:8611 >> #4 0x0000000000400ccf in main (argc=1, >> argv=0x7fffffffded8) >> at sample-mdb.c:43 >> >> It seems the mp_lower value of the page is set to 0 >> instead of >> a value inside >> the page. >> >> On 18 August 2015 at 13:58, Howard Chu <[email protected] >> <mailto:[email protected]> <mailto:[email protected] >> >> <mailto:[email protected]>>> >> wrote: >> >> Simon Majou wrote: >> >> Hello, >> >> I wonder, why do I get a Segmentation fault when >> I >> use mdb_put with >> MDB_RESERVE on a key that already exists ? >> >> >> Have no idea. Provide some more details and maybe we >> can >> guess. >> >> LMDB version? stack trace from SEGV? What's the size >> of >> the existing >> record, what's the size of the new record? Show >> sample >> code that >> demonstrates the problem? >> >> -- >> -- Howard Chu >> CTO, Symas Corp. http://www.symas.com >> Director, Highland Sun >> http://highlandsun.com/hyc/ >> Chief Architect, OpenLDAP >> http://www.openldap.org/project/ >> >> >> >> >> -- >> >> Best regards, >> >> Simon >> >> >> >> -- >> -- Howard Chu >> CTO, Symas Corp. http://www.symas.com >> Director, Highland Sun http://highlandsun.com/hyc/ >> Chief Architect, OpenLDAP http://www.openldap.org/project/ >> >> >> >> >> -- >> >> Best regards, >> >> Simon >> >> >> >> >> -- >> >> Best regards, >> >> Simon >> >> >> >> >> -- >> >> Best regards, >> >> Simon >> > > > -- > -- Howard Chu > CTO, Symas Corp. http://www.symas.com > Director, Highland Sun http://highlandsun.com/hyc/ > Chief Architect, OpenLDAP http://www.openldap.org/project/ > -- Best regards, Simon
