@@ -75,7 +75,8 @@ def started_cluster():
7575 cluster .shutdown ()
7676
7777
78- def check_s3_gets (cluster , node , expected_result , cluster_first , cluster_second , enable_filesystem_cache , lock = False ):
78+ def check_s3_gets (cluster , node , expected_result , cluster_first , cluster_second , enable_filesystem_cache ,
79+ lock_object_storage_task_distribution_ms ):
7980 for host in list (cluster .instances .values ()):
8081 host .query ("SYSTEM DROP FILESYSTEM CACHE 'raw_s3_cache'" , ignore_error = True )
8182
@@ -84,8 +85,8 @@ def check_s3_gets(cluster, node, expected_result, cluster_first, cluster_second,
8485 "filesystem_cache_name" : "'raw_s3_cache'" ,
8586 }
8687
87- if lock :
88- settings ["lock_object_storage_task_distribution_ms" ] = 30000
88+ if lock_object_storage_task_distribution_ms > 0 :
89+ settings ["lock_object_storage_task_distribution_ms" ] = lock_object_storage_task_distribution_ms
8990
9091 query_id_first = str (uuid .uuid4 ())
9192 result_first = node .query (
@@ -133,20 +134,21 @@ def check_s3_gets(cluster, node, expected_result, cluster_first, cluster_second,
133134 return int (s3_get_first ), int (s3_get_second )
134135
135136
136- def check_s3_gets_repeat (cluster , node , expected_result , cluster_first , cluster_second , enable_filesystem_cache , lock = False ):
137+ def check_s3_gets_repeat (cluster , node , expected_result , cluster_first , cluster_second , enable_filesystem_cache ,
138+ lock_object_storage_task_distribution_ms ):
137139 # Repeat test several times to get average result
138- iterations = 1 if lock else 10
140+ iterations = 1 if lock_object_storage_task_distribution_ms > 0 else 10
139141 s3_get_first_sum = 0
140142 s3_get_second_sum = 0
141143 for _ in range (iterations ):
142- (s3_get_first , s3_get_second ) = check_s3_gets (cluster , node , expected_result , cluster_first , cluster_second , enable_filesystem_cache , lock )
144+ (s3_get_first , s3_get_second ) = check_s3_gets (cluster , node , expected_result , cluster_first , cluster_second , enable_filesystem_cache , lock_object_storage_task_distribution_ms )
143145 s3_get_first_sum += s3_get_first
144146 s3_get_second_sum += s3_get_second
145147 return s3_get_first_sum , s3_get_second_sum
146148
147149
148- @pytest .mark .parametrize ("lock " , [False , True ])
149- def test_cache_locality (started_cluster , lock ):
150+ @pytest .mark .parametrize ("lock_object_storage_task_distribution_ms " , [0 , 30000 ])
151+ def test_cache_locality (started_cluster , lock_object_storage_task_distribution_ms ):
150152 node = started_cluster .instances ["clickhouse0" ]
151153
152154 expected_result = node .query (
@@ -158,36 +160,36 @@ def test_cache_locality(started_cluster, lock):
158160 )
159161
160162 # Algorithm does not give 100% guarantee, so add 10% on dispersion
161- dispersion = 0.0 if lock else 0.1
163+ dispersion = 0.0 if lock_object_storage_task_distribution_ms > 0 else 0.1
162164
163165 # No cache
164- (s3_get_first , s3_get_second ) = check_s3_gets_repeat (started_cluster , node , expected_result , 'cluster_12345' , 'cluster_12345' , 0 , lock )
166+ (s3_get_first , s3_get_second ) = check_s3_gets_repeat (started_cluster , node , expected_result , 'cluster_12345' , 'cluster_12345' , 0 , lock_object_storage_task_distribution_ms )
165167 assert s3_get_second == s3_get_first
166168
167169 # With cache
168- (s3_get_first , s3_get_second ) = check_s3_gets_repeat (started_cluster , node , expected_result , 'cluster_12345' , 'cluster_12345' , 1 , lock )
170+ (s3_get_first , s3_get_second ) = check_s3_gets_repeat (started_cluster , node , expected_result , 'cluster_12345' , 'cluster_12345' , 1 , lock_object_storage_task_distribution_ms )
169171 assert s3_get_second <= s3_get_first * dispersion
170172
171173 # Different nodes order
172- (s3_get_first , s3_get_second ) = check_s3_gets_repeat (started_cluster , node , expected_result , 'cluster_12345' , 'cluster_34512' , 1 , lock )
174+ (s3_get_first , s3_get_second ) = check_s3_gets_repeat (started_cluster , node , expected_result , 'cluster_12345' , 'cluster_34512' , 1 , lock_object_storage_task_distribution_ms )
173175 assert s3_get_second <= s3_get_first * dispersion
174176
175177 # No last node
176- (s3_get_first , s3_get_second ) = check_s3_gets_repeat (started_cluster , node , expected_result , 'cluster_12345' , 'cluster_1234' , 1 , lock )
178+ (s3_get_first , s3_get_second ) = check_s3_gets_repeat (started_cluster , node , expected_result , 'cluster_12345' , 'cluster_1234' , 1 , lock_object_storage_task_distribution_ms )
177179 assert s3_get_second <= s3_get_first * (0.211 + dispersion ) # actual value - 24 for 100 files, 211 for 1000
178180
179181 # No first node
180- (s3_get_first , s3_get_second ) = check_s3_gets_repeat (started_cluster , node , expected_result , 'cluster_12345' , 'cluster_2345' , 1 , lock )
182+ (s3_get_first , s3_get_second ) = check_s3_gets_repeat (started_cluster , node , expected_result , 'cluster_12345' , 'cluster_2345' , 1 , lock_object_storage_task_distribution_ms )
181183 assert s3_get_second <= s3_get_first * (0.189 + dispersion ) # actual value - 12 for 100 files, 189 for 1000
182184
183185 # No first node, different nodes order
184- (s3_get_first , s3_get_second ) = check_s3_gets_repeat (started_cluster , node , expected_result , 'cluster_12345' , 'cluster_4523' , 1 , lock )
186+ (s3_get_first , s3_get_second ) = check_s3_gets_repeat (started_cluster , node , expected_result , 'cluster_12345' , 'cluster_4523' , 1 , lock_object_storage_task_distribution_ms )
185187 assert s3_get_second <= s3_get_first * (0.189 + dispersion )
186188
187189 # Add new node, different nodes order
188- (s3_get_first , s3_get_second ) = check_s3_gets_repeat (started_cluster , node , expected_result , 'cluster_4523' , 'cluster_12345' , 1 , lock )
190+ (s3_get_first , s3_get_second ) = check_s3_gets_repeat (started_cluster , node , expected_result , 'cluster_4523' , 'cluster_12345' , 1 , lock_object_storage_task_distribution_ms )
189191 assert s3_get_second <= s3_get_first * (0.189 + dispersion )
190192
191193 # New node and old node, different nodes order
192- (s3_get_first , s3_get_second ) = check_s3_gets_repeat (started_cluster , node , expected_result , 'cluster_1234' , 'cluster_4523' , 1 , lock )
194+ (s3_get_first , s3_get_second ) = check_s3_gets_repeat (started_cluster , node , expected_result , 'cluster_1234' , 'cluster_4523' , 1 , lock_object_storage_task_distribution_ms )
193195 assert s3_get_second <= s3_get_first * (0.400 + dispersion ) # actual value - 36 for 100 files, 400 for 1000
0 commit comments