When open a ClickHouse DB connection through the HTTP protocol and using the WithDeadline context during transaction execution, there is a small probability of concurrent writes to a map, which can lead to a panic. The reason is that when the PrepareContext function is called, it creates a goroutine to read data through the readData function. The readData function updates the key of “max_execution_time” in the map by calling the queryOptions function. Finally, when the transaction executes the Commit, it also calls the Send function, which in turn calls the queryOptions function to update the key of ”max_execution_time“ in the map.
Summary
When open a ClickHouse DB connection through the HTTP protocol and using the WithDeadline context during transaction execution, there is a small probability of concurrent writes to a map, which can lead to a panic. The reason is that when the PrepareContext function is called, it creates a goroutine to read data through the readData function. The readData function updates the key of “max_execution_time” in the map by calling the queryOptions function. Finally, when the transaction executes the Commit, it also calls the Send function, which in turn calls the queryOptions function to update the key of ”max_execution_time“ in the map.