@@ -391,8 +391,11 @@ aqo_stat_reset(void)
391
391
elog (ERROR ,"[AQO] hash table corrupted" );
392
392
num_remove ++ ;
393
393
}
394
+ aqo_state -> stat_changed = true;
394
395
LWLockRelease (& aqo_state -> stat_lock );
395
- Assert (num_remove == num_entries );/* Is it really impossible? */
396
+
397
+ if (num_remove != num_entries )
398
+ elog (ERROR ,"[AQO] Stat memory storage is corrupted or parallel access without a lock was detected." );
396
399
397
400
aqo_stat_flush ();
398
401
@@ -1231,9 +1234,10 @@ aqo_qtexts_reset(void)
1231
1234
}
1232
1235
aqo_state -> qtexts_changed = true;
1233
1236
LWLockRelease (& aqo_state -> qtexts_lock );
1234
- Assert (num_remove == num_entries - 1 );/* Is it really impossible? */
1237
+ if (num_remove != num_entries - 1 )
1238
+ elog (ERROR ,"[AQO] Query texts memory storage is corrupted or parallel access without a lock was detected." );
1235
1239
1236
- /* TODO: clean disk storage */
1240
+ aqo_qtexts_flush ();
1237
1241
1238
1242
return num_remove ;
1239
1243
}
@@ -1441,6 +1445,7 @@ _fill_knn_data(const DataEntry *entry, List **reloids)
1441
1445
ptr += sizeof (double )* data -> cols ;
1442
1446
}
1443
1447
}
1448
+
1444
1449
/* copy targets from DSM storage */
1445
1450
memcpy (data -> targets ,ptr ,sizeof (double )* entry -> rows );
1446
1451
ptr += sizeof (double )* entry -> rows ;
@@ -1463,7 +1468,11 @@ _fill_knn_data(const DataEntry *entry, List **reloids)
1463
1468
* reloids = lappend_oid (* reloids ,ObjectIdGetDatum (* (Oid * )ptr ));
1464
1469
ptr += sizeof (Oid );
1465
1470
}
1466
- Assert (ptr - (char * )dsa_get_address (data_dsa ,entry -> data_dp )== sz );
1471
+
1472
+ offset = ptr - (char * )dsa_get_address (data_dsa ,entry -> data_dp );
1473
+ if (offset != sz )
1474
+ elog (PANIC ,"[AQO] Shared memory ML storage is corrupted." );
1475
+
1467
1476
return data ;
1468
1477
}
1469
1478
@@ -1712,9 +1721,10 @@ aqo_data_reset(void)
1712
1721
}
1713
1722
aqo_state -> data_changed = true;
1714
1723
LWLockRelease (& aqo_state -> data_lock );
1715
- Assert (num_remove == num_entries );
1724
+ if (num_remove != num_entries )
1725
+ elog (ERROR ,"[AQO] Query ML memory storage is corrupted or parallel access without a lock has detected." );
1716
1726
1717
- /* TODO: clean disk storage */
1727
+ aqo_data_flush ();
1718
1728
1719
1729
return num_remove ;
1720
1730
}
@@ -1846,8 +1856,11 @@ aqo_queries_reset(void)
1846
1856
elog (ERROR ,"[AQO] hash table corrupted" );
1847
1857
num_remove ++ ;
1848
1858
}
1859
+ aqo_state -> queries_changed = true;
1849
1860
LWLockRelease (& aqo_state -> queries_lock );
1850
- Assert (num_remove == num_entries - 1 );
1861
+
1862
+ if (num_remove != num_entries - 1 )
1863
+ elog (ERROR ,"[AQO] Queries memory storage is corrupted or parallel access without a lock has detected." );
1851
1864
1852
1865
aqo_queries_flush ();
1853
1866