Skip to content

Commit 20a2330

Browse files
committed
MB-51458 check if consumer truncates names when constructing
...connection name on producer, so wait_for_data_move doesn't use trimmed name for the connection created by node that does not trim names Change-Id: Ic57ae3661f774b9556d1434e6ca305b619277ae2 Reviewed-on: https://review.couchbase.org/c/ns_server/+/172672 Well-Formed: Restriction Checker Well-Formed: Build Bot <[email protected]> Reviewed-by: Timofey Barmin <[email protected]> Tested-by: Artem Stemkovski <[email protected]>
1 parent ab32299 commit 20a2330

File tree

2 files changed

+23
-6
lines changed

2 files changed

+23
-6
lines changed

src/dcp_replicator.erl

Lines changed: 19 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -251,7 +251,7 @@ get_connection_name(ConsumerNode, ProducerNode, Bucket) ->
251251
true ->
252252
CName;
253253
false ->
254-
case should_truncate_name(ProducerNode) of
254+
case should_truncate_name(ConsumerNode, ProducerNode) of
255255
true ->
256256
get_truncated_connection_name(
257257
CName, ConsumerNode, ProducerNode, Bucket);
@@ -272,15 +272,24 @@ get_truncated_connection_name(LongName, ConsumerNode, ProducerNode, Bucket) ->
272272
true = length(CName) =< ?MAX_DCP_CONNECTION_NAME,
273273
CName.
274274

275-
should_truncate_name(ProducerNode) ->
276-
case cluster_compat_mode:is_cluster_71() of
275+
node_supports_truncated_names(Node) ->
276+
case Node == misc:this_node() of
277277
true ->
278278
true;
279279
false ->
280-
Quirks = rebalance_quirks:get_quirks([ProducerNode], long_names),
280+
Quirks = rebalance_quirks:get_quirks([Node], long_names),
281281
not rebalance_quirks:is_enabled(
282282
dont_truncate_long_names,
283-
rebalance_quirks:get_node_quirks(ProducerNode, Quirks))
283+
rebalance_quirks:get_node_quirks(Node, Quirks))
284+
end.
285+
286+
should_truncate_name(ConsumerNode, ProducerNode) ->
287+
case cluster_compat_mode:is_cluster_71() of
288+
true ->
289+
true;
290+
false ->
291+
lists:all(fun node_supports_truncated_names/1,
292+
[ConsumerNode, ProducerNode])
284293
end.
285294

286295
trim_common_prefix(Consumer, Producer) ->
@@ -383,12 +392,14 @@ get_connection_name_test_() ->
383392
fun () ->
384393
meck:new(cluster_compat_mode, [passthrough]),
385394
meck:new(rebalance_quirks, [passthrough]),
395+
meck:new(misc, [passthrough]),
386396
meck:expect(cluster_compat_mode, is_cluster_71,
387397
fun () -> true end)
388398
end,
389399
fun (_) ->
390400
meck:unload(cluster_compat_mode),
391-
meck:unload(rebalance_quirks)
401+
meck:unload(rebalance_quirks),
402+
meck:unload(misc)
392403
end,
393404
[{"Connection name fits into the maximum allowed",
394405
fun () ->
@@ -413,6 +424,7 @@ get_connection_name_test_() ->
413424
fun () -> false end),
414425
meck:expect(rebalance_quirks, get_quirks,
415426
fun (_, long_names) -> [{ProducerNode, []}] end),
427+
meck:expect(misc, this_node, fun () -> ConsumerNode end),
416428
?assertEqual(
417429
TrimmedName,
418430
get_connection_name(ConsumerNode, ProducerNode,
@@ -427,6 +439,7 @@ get_connection_name_test_() ->
427439
fun (_, long_names) ->
428440
[{ProducerNode, [dont_truncate_long_names]}]
429441
end),
442+
meck:expect(misc, this_node, fun () -> ConsumerNode end),
430443
Conn = get_connection_name(ConsumerNode, ProducerNode,
431444
VeryLongBucket),
432445
?assertEqual(

src/misc.erl

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -339,6 +339,10 @@ position(E, [_|List], N) -> position(E, List, N+1).
339339
msecs_to_usecs(MilliSec) ->
340340
MilliSec * 1000.
341341

342+
%% just because we need to mock node() sometimes
343+
this_node() ->
344+
node().
345+
342346
% Returns just the node name string that's before the '@' char.
343347
% For example, returns "test" instead of "[email protected]".
344348
%

0 commit comments

Comments
 (0)