postgres的HTAB哈希表,entry的第一个字段必须是key
在给一个新特性的内部状态加隔离时发现共享内存中的哈希表一直查不出元素,但是直接顺序访问又有。定位发现和共享内存无关,因为本地线程自己查自己都查不到,而且是原本查得到直到给entry的其中一个字段赋值(图一箭头处)后就查不到了。。进一步挂gdb发现是hash_search中一行对HASHELEMENT和keyPtr进行memcmp的代码导致的(图二)。请同事调了一晚上没结果,早上再请mentor看也没结论,最后leader看了一眼就说HTAB要求entry的第一个元素必须是key,会直接用entry的头部来比对,而entry->handle正好就是第一个元素,所以给这个字段赋值之后就查不到了。。
昨天下午到现在弄了一整天结果就是这么个坑,emotional damage。下午请了年假缓缓心态。
在给一个新特性的内部状态加隔离时发现共享内存中的哈希表一直查不出元素,但是直接顺序访问又有。定位发现和共享内存无关,因为本地线程自己查自己都查不到,而且是原本查得到直到给entry的其中一个字段赋值(图一箭头处)后就查不到了。。进一步挂gdb发现是hash_search中一行对HASHELEMENT和keyPtr进行memcmp的代码导致的(图二)。请同事调了一晚上没结果,早上再请mentor看也没结论,最后leader看了一眼就说HTAB要求entry的第一个元素必须是key,会直接用entry的头部来比对,而entry->handle正好就是第一个元素,所以给这个字段赋值之后就查不到了。。
昨天下午到现在弄了一整天结果就是这么个坑,emotional damage。下午请了年假缓缓心态。