mirror of
https://github.com/timescale/timescaledb.git
synced 2025-05-26 00:00:54 +08:00
If a new chunk is created as part of an insert and drop_chunks runs concurrently with the insert, there is a risk of a race. This is a test for this. Add locks for dimension slice tuples If a dimension slice tuple is found while adding new chunk constraints as part of a chunk creation it is not locked prior to adding the chunk constraint. Hence a concurrently executing `drop_chunks` can find a dimension slice unused (because there is no chunk constraint that references it) and subsequently remove it. The insert will the continue to add the chunk constraint with a reference to a now non-existent dimension slice. This commit fixes this by locking the dimension slice tuple with a share lock when creating chunks and locking the dimension slice with an exclusive lock prior to scanning for existing chunk constraints. The commit also contains a script that repair the `dimension_slice` table if it is broken by extracting information about dimension slices that are mentioned in `chunk_constraint` table but not present in `dimension_slice` table and re-create the rows from the constraints on the chunks.