Skip to content

Commit e0c1a8d

Browse files
author
Rob Dinoff
committed
fix: parsing date fails due to thread race
Two python threads can call get_date_helper() simultaneously, causing a partially-contstructed DateHelper object to be returned to the caller.
1 parent a1f924a commit e0c1a8d

File tree

1 file changed

+10
-7
lines changed

1 file changed

+10
-7
lines changed

influxdb_client/client/util/date_utils.py

+10-7
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,13 @@
11
"""Utils to get right Date parsing function."""
22
import datetime
3+
import threading
34
from datetime import timezone as tz
45

56
from dateutil import parser
67

78
date_helper = None
89

10+
lock_ = threading.Lock()
911

1012
class DateHelper:
1113
"""
@@ -78,12 +80,13 @@ def get_date_helper() -> DateHelper:
7880
If there is a 'ciso8601' than use 'ciso8601.parse_datetime' else use 'dateutil.parse'.
7981
"""
8082
global date_helper
81-
if date_helper is None:
82-
date_helper = DateHelper()
83-
try:
84-
import ciso8601
85-
date_helper.parse_date = ciso8601.parse_datetime
86-
except ModuleNotFoundError:
87-
date_helper.parse_date = parser.parse
83+
with lock_:
84+
if date_helper is None:
85+
date_helper = DateHelper()
86+
try:
87+
import ciso8601
88+
date_helper.parse_date = ciso8601.parse_datetime
89+
except ModuleNotFoundError:
90+
date_helper.parse_date = parser.parse
8891

8992
return date_helper

0 commit comments

Comments
 (0)