Compare commits

...
Sign in to create a new pull request.

2 commits

Author SHA1 Message Date
Ryan O'Hara
930bf19b1a Remove unused patches 2020-02-13 10:39:06 -06:00
Ryan O'Hara
5553108ebc Update to 2.0.20 (#1794135) 2020-02-12 18:39:47 -06:00
5 changed files with 10 additions and 221 deletions

1
.gitignore vendored
View file

@ -31,3 +31,4 @@
/keepalived-2.0.12.tar.gz
/keepalived-2.0.18.tar.gz
/keepalived-2.0.19.tar.gz
/keepalived-2.0.20.tar.gz

View file

@ -1,164 +0,0 @@
From 1c3c8eefd0a40d4938d6f05969c886988116a425 Mon Sep 17 00:00:00 2001
From: Quentin Armitage <quentin@armitage.org.uk>
Date: Wed, 6 Nov 2019 23:15:23 +0000
Subject: [PATCH] Resolve file descriptor errors on reload
If a read or write thread was on the thread reaady queue when a
reload was processed, the file descriptor was not removed from the
epoll instance.
This commit ensures that file descriptors relating to threads on
the thread ready queue are removed from the epoll instance during
a reload.
Signed-off-by: Quentin Armitage <quentin@armitage.org.uk>
---
keepalived/bfd/bfd_scheduler.c | 2 +-
keepalived/check/check_bfd.c | 2 +-
keepalived/vrrp/vrrp_scheduler.c | 2 +-
lib/scheduler.c | 31 +++++++++++++++++++------------
lib/scheduler.h | 3 ++-
5 files changed, 24 insertions(+), 16 deletions(-)
diff --git a/keepalived/bfd/bfd_scheduler.c b/keepalived/bfd/bfd_scheduler.c
index 5c3d0691..d51d420f 100644
--- a/keepalived/bfd/bfd_scheduler.c
+++ b/keepalived/bfd/bfd_scheduler.c
@@ -908,7 +908,7 @@ bfd_receiver_thread(thread_ref_t thread)
data->thread_in = NULL;
/* Ignore THREAD_READ_TIMEOUT */
- if (thread->type == THREAD_READY_FD) {
+ if (thread->type == THREAD_READY_READ_FD) {
if (!bfd_receive_packet(&pkt, fd, bfd_buffer, BFD_BUFFER_SIZE))
bfd_handle_packet(&pkt);
}
diff --git a/keepalived/check/check_bfd.c b/keepalived/check/check_bfd.c
index 4bd8af23..f9590c30 100644
--- a/keepalived/check/check_bfd.c
+++ b/keepalived/check/check_bfd.c
@@ -290,7 +290,7 @@ bfd_check_thread(thread_ref_t thread)
bfd_thread = thread_add_read(master, bfd_check_thread, NULL,
thread->u.f.fd, TIMER_NEVER, false);
- if (thread->type != THREAD_READY_FD)
+ if (thread->type != THREAD_READY_READ_FD)
return 0;
while (read(thread->u.f.fd, &evt, sizeof(bfd_event_t)) != -1)
diff --git a/keepalived/vrrp/vrrp_scheduler.c b/keepalived/vrrp/vrrp_scheduler.c
index 91a4898c..7e6da60a 100644
--- a/keepalived/vrrp/vrrp_scheduler.c
+++ b/keepalived/vrrp/vrrp_scheduler.c
@@ -762,7 +762,7 @@ vrrp_bfd_thread(thread_ref_t thread)
bfd_thread = thread_add_read(master, vrrp_bfd_thread, NULL,
thread->u.f.fd, TIMER_NEVER, false);
- if (thread->type != THREAD_READY_FD)
+ if (thread->type != THREAD_READY_READ_FD)
return 0;
while (read(thread->u.f.fd, &evt, sizeof(bfd_event_t)) != -1)
diff --git a/lib/scheduler.c b/lib/scheduler.c
index 8fc2a032..3cd7b65a 100644
--- a/lib/scheduler.c
+++ b/lib/scheduler.c
@@ -116,7 +116,8 @@ get_thread_type_str(thread_type_t id)
if (id == THREAD_CHILD_TERMINATED) return "CHILD_TERMINATED";
if (id == THREAD_TERMINATE_START) return "TERMINATE_START";
if (id == THREAD_TERMINATE) return "TERMINATE";
- if (id == THREAD_READY_FD) return "READY_FD";
+ if (id == THREAD_READY_READ_FD) return "READY_READ_FD";
+ if (id == THREAD_READY_WRITE_FD) return "READY_WRITE_FD";
if (id == THREAD_READ_ERROR) return "READ_ERROR";
if (id == THREAD_WRITE_ERROR) return "WRITE_ERROR";
#ifdef USE_SIGNAL_THREADS
@@ -859,7 +860,8 @@ thread_destroy_rb(thread_master_t *m, rb_root_cached_t *root)
if (thread->type == THREAD_READ ||
thread->type == THREAD_WRITE ||
- thread->type == THREAD_READY_FD ||
+ thread->type == THREAD_READY_READ_FD ||
+ thread->type == THREAD_READY_WRITE_FD ||
thread->type == THREAD_READ_TIMEOUT ||
thread->type == THREAD_WRITE_TIMEOUT ||
thread->type == THREAD_READ_ERROR ||
@@ -1409,14 +1411,18 @@ thread_cancel(thread_ref_t thread_cp)
rb_erase_cached(&thread->n, &m->child);
rb_erase(&thread->rb_data, &m->child_pid);
break;
- case THREAD_READY_FD:
+ case THREAD_READY_READ_FD:
case THREAD_READ_TIMEOUT:
+ if (thread->event)
+ thread_event_del(thread, THREAD_FL_EPOLL_READ_BIT);
+ list_head_del(&thread->next);
+ break;
+ case THREAD_READY_WRITE_FD:
case THREAD_WRITE_TIMEOUT:
- if (thread->event) {
- rb_erase(&thread->event->n, &m->io_events);
- FREE(thread->event);
- }
- /* ... falls through ... */
+ if (thread->event)
+ thread_event_del(thread, THREAD_FL_EPOLL_WRITE_BIT);
+ list_head_del(&thread->next);
+ break;
case THREAD_EVENT:
case THREAD_READY:
#ifdef USE_SIGNAL_THREADS
@@ -1735,7 +1741,7 @@ thread_fetch_next_queue(thread_master_t *m)
, ev->fd, ep_ev->events);
continue;
}
- thread_move_ready(m, &m->read, ev->read, THREAD_READY_FD);
+ thread_move_ready(m, &m->read, ev->read, THREAD_READY_READ_FD);
ev->read = NULL;
}
@@ -1746,7 +1752,7 @@ thread_fetch_next_queue(thread_master_t *m)
, ev->fd, ep_ev->events);
continue;
}
- thread_move_ready(m, &m->write, ev->write, THREAD_READY_FD);
+ thread_move_ready(m, &m->write, ev->write, THREAD_READY_WRITE_FD);
ev->write = NULL;
}
}
@@ -1804,7 +1810,8 @@ process_threads(thread_master_t *m)
* snmp_read, bfd_receiver, bfd pipe in vrrp/check, dbus pipe or netlink fds. */
thread = thread_trim_head(thread_list);
if (!shutting_down ||
- (thread->type == THREAD_READY_FD &&
+ ((thread->type == THREAD_READY_READ_FD ||
+ thread->type == THREAD_READY_WRITE_FD) &&
(thread->u.f.fd == m->timer_fd ||
thread->u.f.fd == m->signal_fd
#ifdef _WITH_SNMP_
@@ -1823,7 +1830,7 @@ process_threads(thread_master_t *m)
shutting_down = true;
}
- m->current_event = (thread->type == THREAD_READY_FD) ? thread->event : NULL;
+ m->current_event = (thread->type == THREAD_READY_READ_FD || thread->type == THREAD_READY_WRITE_FD) ? thread->event : NULL;
thread_type = thread->type;
thread_add_unuse(master, thread);
diff --git a/lib/scheduler.h b/lib/scheduler.h
index 69324fe0..fea99cd0 100644
--- a/lib/scheduler.h
+++ b/lib/scheduler.h
@@ -56,7 +56,8 @@ typedef enum {
THREAD_CHILD_TERMINATED,
THREAD_TERMINATE_START,
THREAD_TERMINATE,
- THREAD_READY_FD,
+ THREAD_READY_READ_FD,
+ THREAD_READY_WRITE_FD,
THREAD_READ_ERROR,
THREAD_WRITE_ERROR,
#ifdef USE_SIGNAL_THREADS
--
2.23.0

View file

@ -1,49 +0,0 @@
From 23a5b8113bf0b8ec4718443df0406882e8e4d831 Mon Sep 17 00:00:00 2001
From: Quentin Armitage <quentin@armitage.org.uk>
Date: Sat, 9 Nov 2019 10:07:48 +0000
Subject: [PATCH] Fix track_process with PIDs > 32767
Signed-off-by: Quentin Armitage <quentin@armitage.org.uk>
---
keepalived/core/track_process.c | 4 ++--
lib/scheduler.c | 2 +-
2 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/keepalived/core/track_process.c b/keepalived/core/track_process.c
index 550254b1..76ff6009 100644
--- a/keepalived/core/track_process.c
+++ b/keepalived/core/track_process.c
@@ -341,7 +341,7 @@ check_process(pid_t pid, char *comm, tracked_process_instance_t *tpi)
* swapped in to read it. */
if (!have_comm) {
if (vrrp_data->vrrp_use_process_cmdline) {
- snprintf(cmdline, sizeof(cmdline), "/proc/%hd/cmdline", pid);
+ snprintf(cmdline, sizeof(cmdline), "/proc/%d/cmdline", pid);
if ((fd = open(cmdline, O_RDONLY)) == -1)
return;
@@ -358,7 +358,7 @@ check_process(pid_t pid, char *comm, tracked_process_instance_t *tpi)
}
if (vrrp_data->vrrp_use_process_comm) {
- snprintf(cmdline, sizeof(cmdline), "/proc/%hd/comm", pid);
+ snprintf(cmdline, sizeof(cmdline), "/proc/%d/comm", pid);
fd = open(cmdline, O_RDONLY);
if (fd == -1) {
diff --git a/lib/scheduler.c b/lib/scheduler.c
index 3cd7b65a..de92c7d4 100644
--- a/lib/scheduler.c
+++ b/lib/scheduler.c
@@ -441,7 +441,7 @@ report_child_status(int status, pid_t pid, char const *prog_name)
prog_id = child_finder_name(pid);
if (!prog_id) {
- snprintf(pid_buf, sizeof(pid_buf), "pid %hd", pid);
+ snprintf(pid_buf, sizeof(pid_buf), "pid %d", pid);
prog_id = pid_buf;
}
--
2.23.0

View file

@ -9,17 +9,14 @@
Name: keepalived
Summary: High Availability monitor built upon LVS, VRRP and service pollers
Version: 2.0.19
Release: 5%{?dist}
Version: 2.0.20
Release: 2%{?dist}
License: GPLv2+
URL: http://www.keepalived.org/
Source0: http://www.keepalived.org/software/keepalived-%{version}.tar.gz
Source1: keepalived.service
Patch0: keepalived-fix-track_process-with-pids-32767.patch
Patch1: keepalived-fix-file-descriptor-errors-on-reload.patch
Requires(post): systemd
Requires(preun): systemd
Requires(postun): systemd
@ -54,8 +51,6 @@ infrastructures.
%prep
%setup -q
%patch0 -p1
%patch1 -p1
%build
%configure \
@ -105,6 +100,12 @@ mkdir -p %{buildroot}%{_libexecdir}/keepalived
%{_mandir}/man8/keepalived.8*
%changelog
* Thu Feb 13 2020 Ryan O'Hara <rohara@redhat.com> - 2.0.20-2
- Remove unused patches
* Wed Feb 12 2020 Ryan O'Hara <rohara@redhat.com> - 2.0.20-1
- Update to 2.0.20 (#1794135)
* Wed Jan 29 2020 Fedora Release Engineering <releng@fedoraproject.org> - 2.0.19-5
- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild

View file

@ -1 +1 @@
SHA512 (keepalived-2.0.19.tar.gz) = 68a510983bc043484e5edbc1d87563677a048282ec52873105f0af922e8b4de5b8e7176944010f9d4d6f65d1a4ebaf930c3d37273e28c1f115ed0fda245d8109
SHA512 (keepalived-2.0.20.tar.gz) = 36bbc4aa0a1045486e608c9f4ed73f4335b871dae88beaed10d86445474c462136885225cd6b61219a36fca2ff43771623bc6d072e406cf684acc2ca8f2a38f6