Resolves: RHEL-64143
This commit is contained in:
parent
a626f568c1
commit
49a2737250
167
0002-sanlock-new-NODELAY-flag-for-add_lockspace.patch
Normal file
167
0002-sanlock-new-NODELAY-flag-for-add_lockspace.patch
Normal file
@ -0,0 +1,167 @@
|
||||
From 6240d633b229e15d445868a8b1463fb8ee6ddbc6 Mon Sep 17 00:00:00 2001
|
||||
From: David Teigland <teigland@redhat.com>
|
||||
Date: Wed, 23 Oct 2024 14:51:04 -0500
|
||||
Subject: [PATCH] sanlock: new NODELAY flag for add_lockspace
|
||||
|
||||
Forces the existing "no delay" path for acquiring a host_id
|
||||
delta lease. This avoids delays in add_lockspace that are
|
||||
used to detect machines using the same host_id. So, using
|
||||
this flag is unsafe if multiple hosts may end up using the
|
||||
same host_id.
|
||||
---
|
||||
src/cmd.c | 3 ++-
|
||||
src/delta_lease.c | 8 ++++++--
|
||||
src/delta_lease.h | 1 +
|
||||
src/direct.c | 1 +
|
||||
src/lockspace.c | 5 +++--
|
||||
src/lockspace.h | 2 +-
|
||||
src/sanlock_admin.h | 1 +
|
||||
src/sanlock_internal.h | 1 +
|
||||
8 files changed, 16 insertions(+), 6 deletions(-)
|
||||
|
||||
diff --git a/src/cmd.c b/src/cmd.c
|
||||
index e91da9d3eb41..47656bbb7f75 100644
|
||||
--- a/src/cmd.c
|
||||
+++ b/src/cmd.c
|
||||
@@ -1306,6 +1306,7 @@ static void cmd_add_lockspace(struct cmd_args *ca, uint32_t cmd)
|
||||
struct space *sp;
|
||||
uint32_t io_timeout;
|
||||
int async = ca->header.cmd_flags & SANLK_ADD_ASYNC;
|
||||
+ int nodelay = (ca->header.cmd_flags & SANLK_ADD_NODELAY) ? 1 : 0;
|
||||
int fd, rv, result;
|
||||
|
||||
fd = client[ca->ci_in].fd;
|
||||
@@ -1329,7 +1330,7 @@ static void cmd_add_lockspace(struct cmd_args *ca, uint32_t cmd)
|
||||
if (!io_timeout)
|
||||
io_timeout = com.io_timeout;
|
||||
|
||||
- rv = add_lockspace_start(&lockspace, io_timeout, &sp);
|
||||
+ rv = add_lockspace_start(&lockspace, io_timeout, nodelay, &sp);
|
||||
if (rv < 0) {
|
||||
result = rv;
|
||||
goto reply;
|
||||
diff --git a/src/delta_lease.c b/src/delta_lease.c
|
||||
index fb4a6402858d..144c0ea0ee11 100644
|
||||
--- a/src/delta_lease.c
|
||||
+++ b/src/delta_lease.c
|
||||
@@ -332,6 +332,7 @@ int delta_lease_acquire(struct task *task,
|
||||
char *space_name,
|
||||
char *our_host_name,
|
||||
uint64_t host_id,
|
||||
+ int nodelay,
|
||||
struct leader_record *leader_ret)
|
||||
{
|
||||
struct leader_record leader;
|
||||
@@ -394,13 +395,16 @@ int delta_lease_acquire(struct task *task,
|
||||
no_delay = 1;
|
||||
if (is_same && our_host_name_matches_product_uuid)
|
||||
no_delay = 1;
|
||||
+ if (nodelay)
|
||||
+ no_delay = 1;
|
||||
|
||||
- log_space(sp, "delta_acquire %s owner, %s free, %s our_product_uuid, %s delay, other_io_timeout %d",
|
||||
+ log_space(sp, "delta_acquire %s owner, %s free, %s our_product_uuid, %s delay, other_io_timeout %d, flag_nodelay %d",
|
||||
is_same ? "same" : "new",
|
||||
is_free ? "is" : "not",
|
||||
our_host_name_matches_product_uuid ? "is" : "not",
|
||||
no_delay ? "no" : "short",
|
||||
- other_io_timeout);
|
||||
+ other_io_timeout,
|
||||
+ nodelay);
|
||||
|
||||
goto write_new;
|
||||
}
|
||||
diff --git a/src/delta_lease.h b/src/delta_lease.h
|
||||
index ec1c3468bf72..22c6faa16995 100644
|
||||
--- a/src/delta_lease.h
|
||||
+++ b/src/delta_lease.h
|
||||
@@ -24,6 +24,7 @@ int delta_lease_acquire(struct task *task,
|
||||
char *space_name,
|
||||
char *our_host_name,
|
||||
uint64_t host_id,
|
||||
+ int nodelay,
|
||||
struct leader_record *leader_ret);
|
||||
|
||||
int delta_lease_renew(struct task *task,
|
||||
diff --git a/src/direct.c b/src/direct.c
|
||||
index 3bc7659e905c..1f4064795c4a 100644
|
||||
--- a/src/direct.c
|
||||
+++ b/src/direct.c
|
||||
@@ -364,6 +364,7 @@ static int do_delta_action(int action,
|
||||
ls->name,
|
||||
our_host_name,
|
||||
ls->host_id,
|
||||
+ 0,
|
||||
&leader);
|
||||
break;
|
||||
case ACT_RENEW_ID:
|
||||
diff --git a/src/lockspace.c b/src/lockspace.c
|
||||
index a2bee3f478fd..1cea79d41618 100644
|
||||
--- a/src/lockspace.c
|
||||
+++ b/src/lockspace.c
|
||||
@@ -973,7 +973,7 @@ static void *lockspace_thread(void *arg_in)
|
||||
|
||||
delta_result = delta_lease_acquire(&task, sp, &sp->host_id_disk,
|
||||
sp->space_name, our_host_name_global,
|
||||
- sp->host_id, &leader);
|
||||
+ sp->host_id, sp->nodelay, &leader);
|
||||
delta_length = monotime() - delta_begin;
|
||||
|
||||
if (delta_result == SANLK_OK)
|
||||
@@ -1152,7 +1152,7 @@ static void free_sp(struct space *sp)
|
||||
free(sp);
|
||||
}
|
||||
|
||||
-int add_lockspace_start(struct sanlk_lockspace *ls, uint32_t io_timeout, struct space **sp_out)
|
||||
+int add_lockspace_start(struct sanlk_lockspace *ls, uint32_t io_timeout, int nodelay, struct space **sp_out)
|
||||
{
|
||||
struct space *sp, *sp2;
|
||||
int listnum = 0;
|
||||
@@ -1178,6 +1178,7 @@ int add_lockspace_start(struct sanlk_lockspace *ls, uint32_t io_timeout, struct
|
||||
sp->host_id_disk.fd = -1;
|
||||
sp->host_id = ls->host_id;
|
||||
sp->io_timeout = io_timeout;
|
||||
+ sp->nodelay = nodelay;
|
||||
sp->set_bitmap_seconds = calc_set_bitmap_seconds(io_timeout);
|
||||
pthread_mutex_init(&sp->mutex, NULL);
|
||||
|
||||
diff --git a/src/lockspace.h b/src/lockspace.h
|
||||
index 0c3cba324e31..790a5cc68499 100644
|
||||
--- a/src/lockspace.h
|
||||
+++ b/src/lockspace.h
|
||||
@@ -42,7 +42,7 @@ int check_our_lease(struct space *sp, int *check_all, char *check_buf);
|
||||
void check_other_leases(struct space *sp, char *buf);
|
||||
|
||||
/* locks spaces_mutex */
|
||||
-int add_lockspace_start(struct sanlk_lockspace *ls, uint32_t io_timeout, struct space **sp_out);
|
||||
+int add_lockspace_start(struct sanlk_lockspace *ls, uint32_t io_timeout, int nodelay, struct space **sp_out);
|
||||
|
||||
/* locks sp, locks spaces_mutex */
|
||||
int add_lockspace_wait(struct space *sp);
|
||||
diff --git a/src/sanlock_admin.h b/src/sanlock_admin.h
|
||||
index 685cce11d6f3..10bfc49b312b 100644
|
||||
--- a/src/sanlock_admin.h
|
||||
+++ b/src/sanlock_admin.h
|
||||
@@ -12,6 +12,7 @@
|
||||
|
||||
/* add flags */
|
||||
#define SANLK_ADD_ASYNC 0x00000001
|
||||
+#define SANLK_ADD_NODELAY 0x00000002 /* can be unsafe */
|
||||
|
||||
/* rem flags */
|
||||
#define SANLK_REM_ASYNC 0x00000001
|
||||
diff --git a/src/sanlock_internal.h b/src/sanlock_internal.h
|
||||
index ebb0a9c319c1..e57127b17233 100644
|
||||
--- a/src/sanlock_internal.h
|
||||
+++ b/src/sanlock_internal.h
|
||||
@@ -217,6 +217,7 @@ struct space {
|
||||
uint32_t renewal_read_extend_sec; /* defaults to io_timeout */
|
||||
uint32_t rindex_op;
|
||||
unsigned int set_max_sectors_kb;
|
||||
+ int nodelay;
|
||||
int sector_size;
|
||||
int align_size;
|
||||
int max_hosts;
|
||||
--
|
||||
2.46.2
|
||||
|
@ -1,6 +1,6 @@
|
||||
Name: sanlock
|
||||
Version: 3.9.5
|
||||
Release: 1%{?dist}
|
||||
Release: 2%{?dist}
|
||||
Summary: A shared storage lock manager
|
||||
License: GPL-2.0-only AND GPL-2.0-or-later AND LGPL-2.0-or-later
|
||||
URL: https://pagure.io/sanlock/
|
||||
@ -20,6 +20,7 @@ Requires(postun): systemd-units
|
||||
Source0: https://releases.pagure.org/sanlock/%{name}-%{version}.tar.gz
|
||||
|
||||
Patch0: 0001-systemd-wdmd-work-around-race-with-udev-setting-soft.patch
|
||||
Patch1: 0002-sanlock-new-NODELAY-flag-for-add_lockspace.patch
|
||||
|
||||
%description
|
||||
The sanlock daemon manages leases for applications on hosts using shared storage.
|
||||
@ -27,6 +28,7 @@ The sanlock daemon manages leases for applications on hosts using shared storage
|
||||
%prep
|
||||
%setup -q
|
||||
%patch0 -p1 -b .backup0
|
||||
%patch1 -p1 -b .backup1
|
||||
|
||||
%build
|
||||
%set_build_flags
|
||||
@ -126,6 +128,9 @@ developing applications that use %{name}.
|
||||
%{_libdir}/pkgconfig/libsanlock_client.pc
|
||||
|
||||
%changelog
|
||||
* Wed Oct 23 2024 David Teigland <teigland@redhat.com> - 3.9.5-2
|
||||
- new nodelay flag for add_lockspace
|
||||
|
||||
* Tue Oct 22 2024 David Teigland <teigland@redhat.com> - 3.9.5-1
|
||||
- new upstream release
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user