@@ -1337,6 +1337,8 @@ aqo_data_store(uint64 fs, int fss, OkNNrdata *data, List *reloids)
13371337entry -> cols = data -> cols ;
13381338entry -> rows = data -> rows ;
13391339entry -> nrels = list_length (reloids );
1340+ entry -> neighbour_refs .next = NULL ;
1341+ entry -> neighbour_refs .prev = NULL ;
13401342
13411343size = _compute_data_dsa (entry );
13421344entry -> data_dp = dsa_allocate0 (data_dsa ,size );
@@ -1391,10 +1393,14 @@ aqo_data_store(uint64 fs, int fss, OkNNrdata *data, List *reloids)
13911393* Find prev fs with the same fss
13921394*/
13931395
1396+ elog (LOG ,"aqo_data_store1 entry->fss %ld" ,entry -> key .fss );
1397+
13941398if (!found ) {
13951399LWLockAcquire (& aqo_state -> neighbours_lock ,LW_EXCLUSIVE );
13961400
13971401prev = (NeighboursEntry * )hash_search (fss_neighbours ,& key .fss ,HASH_ENTER ,& found );
1402+ if (found )
1403+ elog (LOG ,"aqo_data_store2 prev->data->key.fss %ld key.fss %ld" ,prev -> data -> key .fss ,key .fss );
13981404
13991405/* A new element contains backward link to the first element list and
14001406 * the first element contains toward link to the new element.
@@ -1406,6 +1412,8 @@ aqo_data_store(uint64 fs, int fss, OkNNrdata *data, List *reloids)
14061412entry -> neighbour_refs .prev = prev -> data ;
14071413}
14081414prev -> data = entry ;
1415+ if (prev -> data -> neighbour_refs .next )
1416+ elog (LOG ,"aqo_data_store3 prev->data->key.fss %ld prev->data->neighbour_refs.next %ld" ,prev -> data -> key .fss ,prev -> data -> neighbour_refs .next -> key .fss );
14091417aqo_state -> neighbours_changed = true;
14101418LWLockRelease (& aqo_state -> neighbours_lock );
14111419}
@@ -1771,9 +1779,17 @@ _aqo_data_clean(uint64 fs)
17711779
17721780if (has_prev )
17731781entry -> neighbour_refs .prev -> neighbour_refs .next = has_next ?entry -> neighbour_refs .next :NULL ;
1782+
1783+ if (has_prev && has_next )
1784+ elog (LOG ,"_aqo_data_clean1 entry->neighbour_refs.prev->neighbour_refs.next: %ld, entry->key.fss: %ld" ,entry -> neighbour_refs .prev -> neighbour_refs .next -> key .fss ,entry -> neighbour_refs .prev -> key .fss );
1785+
17741786if (has_next )
17751787entry -> neighbour_refs .next -> neighbour_refs .prev = has_prev ?entry -> neighbour_refs .prev :NULL ;
17761788
1789+ if (has_prev && has_next )
1790+ elog (LOG ,"_aqo_data_clean2 entry->neighbour_refs.next->neighbour_refs.prev: %ld, entry->key.fss: %ld" ,entry -> neighbour_refs .next -> neighbour_refs .prev -> key .fss ,entry -> neighbour_refs .next -> key .fss );
1791+
1792+
17771793/* Fix or remove neighbours htab entry*/
17781794LWLockAcquire (& aqo_state -> neighbours_lock ,LW_EXCLUSIVE );
17791795fss_htab_entry = (NeighboursEntry * )hash_search (fss_neighbours ,& entry -> key .fss ,HASH_FIND ,& found );
@@ -1787,6 +1803,7 @@ _aqo_data_clean(uint64 fs)
17871803{
17881804hash_search (fss_neighbours ,& entry -> key .fss ,HASH_REMOVE ,NULL );
17891805}
1806+
17901807/*
17911808 * We found element in Neibours hash table and made change:
17921809 * either delete element of table or replace its value.
@@ -2339,6 +2356,7 @@ cleanup_aqo_database(bool gentle, int *fs_num, int *fss_num)
23392356if (has_next )
23402357entry -> neighbour_refs .next -> neighbour_refs .prev = has_prev ?entry -> neighbour_refs .prev :NULL ;
23412358
2359+
23422360/* Fix or remove neighbours htab entry*/
23432361LWLockAcquire (& aqo_state -> neighbours_lock ,LW_EXCLUSIVE );
23442362fss_htab_entry = (NeighboursEntry * )hash_search (fss_neighbours ,& key .fss ,HASH_FIND ,& found );