MIT krb db2 hash test failures on Solaris

Will Fiveash William.Fiveash at Sun.COM
Thu Jan 22 21:42:26 EST 2009


Ken/Tom,

On Solaris 5.11 snv_96 i86pc I'm seeing failures when running the db2
hash tests found in src/plugins/kdb/db2/libdb2/test.  What is happening
is in test1 there is a put() followed by a get() which is failing with
this error message:

get failed, no such key

I'm running:

./dbtest -o ./t3 hash ./t2

Its failing because in:

__get_item() there is this code to calculate the key->size:

	if (KEY_OFF(cursorp->pagep, cursorp->pgndx) != BIGPAIR) {
		if ((i = prev_realkey(cursorp->pagep, cursorp->pgndx)) ==
		    cursorp->pgndx)
			key->size = hashp->hdr.bsize -
			    KEY_OFF(cursorp->pagep, cursorp->pgndx);

Now I know that the put() key->size was 5 but after the assignment above
key->size is 65541.  The problem is that on Solaris:

KEY_OFF(cursorp->pagep, cursorp->pgndx) = 65531
hashp->hdr.bsize = 131072

And hashp->hdr.bsize is being set in init_hash here:

	/* Fix bucket size to be optimal for file system */
	if (file != NULL) {
		if (stat(file, &statbuf))
			return (NULL);
		hashp->hdr.bsize = statbuf.st_blksize;

And statbuf.st_blksize = 131072.  Note that I'm running dbtest on a ZFS
filesystem.  And googling I notice some posts about how ZFS uses
variable block sizes.

So either is the above code is making some bad assumptions or stat() is
buggy.  Thoughts?

-- 
Will Fiveash
Sun Microsystems Inc.
http://opensolaris.org/os/project/kerberos/



More information about the krbdev mailing list