Skip to content

Commit bc55fd1

Browse files
committed
reducing the number of thread count to provide stability on the test
1 parent 56cb334 commit bc55fd1

File tree

1 file changed

+17
-5
lines changed

1 file changed

+17
-5
lines changed

tests/test_004_cursor.py

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1751,16 +1751,18 @@ def test_executemany_concurrent_null_parameters(db_connection):
17511751
import threading
17521752
import time
17531753

1754-
# Create table
1754+
# Create table with unique constraint to prevent duplicate inserts
17551755
with db_connection.cursor() as cursor:
17561756
cursor.execute(
17571757
"""
17581758
CREATE TABLE #pytest_concurrent_nulls (
17591759
thread_id INT,
1760+
row_id INT,
17601761
col1 INT,
17611762
col2 VARCHAR(100),
17621763
col3 FLOAT,
1763-
col4 DATETIME
1764+
col4 DATETIME,
1765+
CONSTRAINT pk_concurrent_nulls PRIMARY KEY (thread_id, row_id)
17641766
)
17651767
"""
17661768
)
@@ -1780,6 +1782,7 @@ def insert_nulls(thread_id):
17801782
for i in range(20):
17811783
row = (
17821784
thread_id,
1785+
i, # Add explicit row_id
17831786
i if i % 2 == 0 else None, # Mix of values and NULLs
17841787
f"thread_{thread_id}_row_{i}" if i % 3 != 0 else None,
17851788
float(i * 1.5) if i % 4 != 0 else None,
@@ -1788,16 +1791,18 @@ def insert_nulls(thread_id):
17881791
data.append(row)
17891792

17901793
cursor.executemany(
1791-
"INSERT INTO #pytest_concurrent_nulls VALUES (?, ?, ?, ?, ?)", data
1794+
"INSERT INTO #pytest_concurrent_nulls VALUES (?, ?, ?, ?, ?, ?)", data
17921795
)
17931796
db_connection.commit()
17941797
except Exception as e:
1798+
import traceback
17951799
with lock:
1796-
errors.append((thread_id, str(e)))
1800+
errors.append((thread_id, str(e), traceback.format_exc()))
17971801

17981802
# Create and start multiple threads
1803+
# Use fewer threads (3) to reduce flakiness while still testing concurrency
17991804
threads = []
1800-
num_threads = 5
1805+
num_threads = 3
18011806

18021807
for i in range(num_threads):
18031808
thread = threading.Thread(target=insert_nulls, args=(i,))
@@ -1809,12 +1814,19 @@ def insert_nulls(thread_id):
18091814
thread.join()
18101815

18111816
# Check for errors
1817+
if errors:
1818+
print(f"Errors occurred in threads: {errors}")
18121819
assert len(errors) == 0, f"Errors occurred in threads: {errors}"
18131820

18141821
# Verify data was inserted correctly
18151822
with db_connection.cursor() as cursor:
18161823
cursor.execute("SELECT COUNT(*) FROM #pytest_concurrent_nulls")
18171824
total_count = cursor.fetchone()[0]
1825+
if total_count != num_threads * 20:
1826+
# Debug: Check what data is actually in the table
1827+
cursor.execute("SELECT thread_id, COUNT(*) as cnt FROM #pytest_concurrent_nulls GROUP BY thread_id ORDER BY thread_id")
1828+
thread_counts = cursor.fetchall()
1829+
print(f"Thread counts: {thread_counts}")
18181830
assert (
18191831
total_count == num_threads * 20
18201832
), f"Expected {num_threads * 20} rows, got {total_count}"

0 commit comments

Comments
 (0)