Bug in: keyval, reading keys in reverse order
Reported by Bert Wesarg
Ich versuche mir gerade klar zu werden, wie ich keys in beliebiger Reihenfolge lesen kann, und das auch mit dem mapped interface, also auch aus mehreren ranks.
Ich habe folgenden writer: test-sion-key-writer-mpi
Aufzurufen mit:
$ mpirun -np ./test-sion-key-writer-mpi test-key-mpi....dat
Es schreiben also ranks in sion files, jeder von ihnen keys, und zwar interleaved jeweils zwei 4MB chunks. Wenn ich das fuer N=2, K=2, und F=2 ausführe bekomme ich erstmal keine fehler.
Die chunks sind also wie folgt fuer einen rank: <k,c> ist der c-te chunk fuer key k
<0,0> <1,0> <0,1> <1,1>
Jetzt will ich es wieder einlesen, mit test-sion-key-reader
Den startet man mit:
$ ./test-sion-key-reader test-key-mpi....dat [-RANKS...]
Es sind also ranks im file, der ranks moechte ich lesen, und zwar die [-RANKS...], und jeder rank hat keys geschrieben.
Ich will jetzt nur für rank 0 lesen, also:
$ ./test-sion-key-reader test-key-mpi.2.2.1.dat 2 1 0 2
Das lesen passiert jetzt in de gleichen reihenfolge wie beim schreiben, also:
<0,0> <1,0> <0,1> <1,1>
Wenn ich es aber nicht in der gleichen Reihenfolge lesen will, also zb. zuerst immer für key 1 einen chunk, und dann einen chunk für key 0, aber innerhalb eines keys in der gleichen Reihenfolge wie beim schreiben, bin ich nicht sicher, was ich machen muss.
Um das reverse reading einzuschalten bitte das test-sion-key-reader.c editieren und das #define REVERSE aktivieren. Jetzt sollen die chunks in folgender Reihenfolge gelesen werden:
<1,0> <0,0> <1,1> <0,1>
Das funktioniert auch so, wenn ich nur einen rank lesen will. Sobald ich aber beide ranks mit:
$ ./test-sion-key-reader test-key-mpi.2.2.1.dat 2 2 0 1 2
lesen will bekomme:
0: sion_generic_paropen_mapped( aid=0, fname="test-key-mpi.2.2.1.dat", mode="br,keyval=unknown", numfiles=&, global, grank=0, gsize=1, nlocaltasks=2, globalranks=[], chunksizes=&[], mapping_filenrs=&[], mapping_lranks=&[], fsblksize=&, fp=NULL ) 0: sion_generic_paropen_mapped( ..., grank=0, gsize=1, ..., globalranks[0]=0, ... ) 0: sion_generic_paropen_mapped( ..., grank=0, gsize=1, ..., globalranks[1]=1, ... ) 0: sion_generic_paropen_mapped( ..., grank=0, gsize=1, ... ) = ( sid=1, numfiles=1, fsblksize=-1 ) 0: sion_generic_paropen_mapped( ..., grank=0, gsize=1, ... ) = ( chunksizes[0]=4194304, mapping_filenrs[0]=0, mapping_lranks[0]=0 ) 0: sion_generic_paropen_mapped( ..., grank=0, gsize=1, ... ) = ( chunksizes[1]=4194304, mapping_filenrs[1]=0, mapping_lranks[1]=1 ) 0: sion_get_keyval_mode( sid=1 ) = 51 0: sion_seek( sid=1, rank=0, SION_CURRENT_CHUNK, SION_CURRENT_POS ) 0: sion_seek( sid=1, rank=0, SION_CURRENT_CHUNK, SION_CURRENT_POS ) = 1 0: sion_fread_key( 0x7fcfe62e7010, key=2, size=4194304, 1, sid=1 ) 0: sion_fread_key( 0x7fcfe62e7010, key=2, size=4194304, 1, sid=1 ) = 1 0: sion_seek( sid=1, rank=1, SION_CURRENT_CHUNK, SION_CURRENT_POS ) 0: sion_seek( sid=1, rank=1, SION_CURRENT_CHUNK, SION_CURRENT_POS ) = 1 0: sion_fread_key( 0x7fcfe5ee6010, key=3, size=4194304, 1, sid=1 ) 0: sion_fread_key( 0x7fcfe5ee6010, key=3, size=4194304, 1, sid=1 ) = 1 0: sion_seek( sid=1, rank=0, SION_CURRENT_CHUNK, SION_CURRENT_POS ) 0: sion_seek( sid=1, rank=0, SION_CURRENT_CHUNK, SION_CURRENT_POS ) = 1 0: sion_fread_key( 0x7fcfe62e7010, key=0, size=4194304, 1, sid=1 ) 0: sion_fread_key( 0x7fcfe62e7010, key=0, size=4194304, 1, sid=1 ) = 1 0: sion_seek( sid=1, rank=1, SION_CURRENT_CHUNK, SION_CURRENT_POS ) 0: sion_seek( sid=1, rank=1, SION_CURRENT_CHUNK, SION_CURRENT_POS ) = 1 0: sion_fread_key( 0x7fcfe5ee6010, key=1, size=4194304, 1, sid=1 ) 0: sion_fread_key( 0x7fcfe5ee6010, key=1, size=4194304, 1, sid=1 ) = 1 0: sion_seek( sid=1, rank=0, SION_CURRENT_CHUNK, SION_CURRENT_POS ) 0: sion_seek( sid=1, rank=0, SION_CURRENT_CHUNK, SION_CURRENT_POS ) = 1 0: sion_fread_key( 0x7fcfe62e7010, key=2, size=4194304, 1, sid=1 ) 0: sion_fread_key( 0x7fcfe62e7010, key=2, size=4194304, 1, sid=1 ) = 1 0: sion_seek( sid=1, rank=1, SION_CURRENT_CHUNK, SION_CURRENT_POS ) 0: sion_seek( sid=1, rank=1, SION_CURRENT_CHUNK, SION_CURRENT_POS ) = 1 0: sion_fread_key( 0x7fcfe5ee6010, key=3, size=4194304, 1, sid=1 ) 0: sion_fread_key( 0x7fcfe5ee6010, key=3, size=4194304, 1, sid=1 ) = 1 0: sion_seek( sid=1, rank=0, SION_CURRENT_CHUNK, SION_CURRENT_POS ) SION_ERROR_RETURN on rank -1, rc=0: sion_seek: seek after end of file, returning ...
0: sion_seek( sid=1, rank=0, SION_CURRENT_CHUNK, SION_CURRENT_POS ) = 0 0: error seeking for rank 0 0: sion_seek( sid=1, rank=1, SION_CURRENT_CHUNK, SION_CURRENT_POS ) SION_ERROR_RETURN on rank -1, rc=0: sion_seek: seek after end of file, returning ...
0: sion_seek( sid=1, rank=1, SION_CURRENT_CHUNK, SION_CURRENT_POS ) = 0 0: error seeking for rank 1
Ich hab auch schon versuch noch ein sion_seek_key aufzurufen, aber das klappt dann schon nicht, wenn ich nur einen rank lese.