nbd-tester-client: analyse bad data using hash function huersistic
authorAlex Bligh <alex@alex.org.uk>
Sun, 5 Jun 2011 16:57:16 +0000 (17:57 +0100)
committerWouter Verhelst <w@uter.be>
Thu, 9 Jun 2011 14:41:28 +0000 (16:41 +0200)
The hash function used by the integrity test was designed specifically
such that with < (2^32) blocks and < (2^32) read/write operations, it
can accurately guess how the bad data returned was generated. This
patch uses this huersistic to provide a guess as to what is wrong.
EG if it prints out a correct block number but a bad sequence number,
it is likely the server is disordering writes or has missed writes.

nbd-tester-client.c

index fee2d87..134652c 100644 (file)
@@ -1087,7 +1087,12 @@ int integrity_test(gchar* hostname, int port, char* name, int sock,
                                        if (checkbuf(dbuf, blkhash[blknum], blknum))
                                        {
                                                retval=-1;
-                                               snprintf(errstr, errstr_len, "Bad reply data: seq %08x", blkhash[blknum]);
+                                               snprintf(errstr, errstr_len, "Bad reply data: I wanted blk %08x, seq %08x but I got (at a guess) blk %08x, seq %08x",
+                                                        (unsigned int) blknum,
+                                                        blkhash[blknum],
+                                                        ((uint32_t *)(dbuf))[0],
+                                                        ((uint32_t *)(dbuf))[1]
+                                                        );
                                                goto err_open;
                                                
                                        }