From 54369e28f1aa8d10c4a5d01e58f05375f4861bd6 Mon Sep 17 00:00:00 2001 From: Tom Molesworth Date: Wed, 21 Aug 2024 04:26:47 +0800 Subject: [PATCH] Support `key` parameter in `$api->mutex` This allows a service to have multiple independent mutex instances, for example per emitter or RPC call. The default is still a per-service mutex. --- lib/Myriad/API.pm | 6 ++++-- lib/Myriad/Transport/Redis.pm | 2 +- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/lib/Myriad/API.pm b/lib/Myriad/API.pm index 7002646a..3b4e9408 100644 --- a/lib/Myriad/API.pm +++ b/lib/Myriad/API.pm @@ -95,12 +95,14 @@ method config ($key) { async method mutex (@args) { my ($code) = extract_by { ref($_) eq 'CODE' } @args; + # `name` is used for a shared mutex across services my $name = @args % 2 ? shift(@args) : $service_name; my %args = @args; - $log->infof('Service = %s', "$service"); + # `key` is used for a suffix for a specific service + my $suffix = delete($args{key}) // ''; my $mutex = Myriad::Mutex->new( %args, - key => $name, + key => $name . (length($suffix) ? "[$suffix]" : ''), storage => $storage, id => $service->uuid, ); diff --git a/lib/Myriad/Transport/Redis.pm b/lib/Myriad/Transport/Redis.pm index 9c501714..d6304ba5 100644 --- a/lib/Myriad/Transport/Redis.pm +++ b/lib/Myriad/Transport/Redis.pm @@ -728,7 +728,7 @@ async method del (@keys) { } async method set_unless_exists ($key, $v, $ttl) { - $log->infof('Set [%s] to %s with TTL %s', $key, $v, $ttl); + $log->tracef('Set [%s] to %s with TTL %s', $key, $v, $ttl); await $redis->set( $self->apply_prefix($key), $v,