Skip to content

Commit

Permalink
github: check downgrade to v4
Browse files Browse the repository at this point in the history
To downgrade correctly you must:

* Remove fluent-package in beforehand.
* Re-install td-agent v4.
* Manually migrate buffer or logs

Signed-off-by: Kentaro Hayashi <[email protected]>
  • Loading branch information
kenhys committed Dec 11, 2023
1 parent c3463c8 commit d71a2bb
Show file tree
Hide file tree
Showing 4 changed files with 178 additions and 0 deletions.
79 changes: 79 additions & 0 deletions fluent-package/apt/systemd-test/downgrade-to-v4.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
#!/bin/bash

set -exu

. $(dirname $0)/../commonvar.sh

# Install v4
sudo apt install -y curl ca-certificates
curl -fsSL https://toolbelt.treasuredata.com/sh/install-${distribution}-${code_name}-td-agent4.sh | sh

# td-agent is running
systemctl status --no-pager td-agent

# fluent-package 5 (LTS)
#curl -fsSL https://toolbelt.treasuredata.com/sh/install-${distribution}-${code_name}-fluent-package5-lts.sh | sh
#sudo apt purge -y fluent-lts-apt-source

# Ensure to install the current
sudo apt install -V -y \
/host/${distribution}/pool/${code_name}/${channel}/*/*/fluent-package_*_${architecture}.deb

# td-agent.service is already masked (link to /dev/null), and remove td-agent.service alias not to conflict with v4
sudo systemctl unmask td-agent

# Keep log and .conf and so on. dpkg reports "rc fluent-package" and "rc td-agent" status.
sudo apt remove -y fluent-package td-agent

# fluentd.service is already masked (link to /dev/null), then remove it.
sudo systemctl unmask fluentd

# Drop symbolic links and recreate real directory.
sudo rm -f /var/log/td-agent
sudo rm -f /etc/td-agent
sudo mkdir -p /var/log/td-agent
sudo chown td-agent:td-agent /var/log/td-agent

# Migrate logs
sudo mv /var/log/fluent/* /var/log/td-agent/

# Reinstall v4, but /etc/td-agent is empty.
curl -fsSL https://toolbelt.treasuredata.com/sh/install-${distribution}-${code_name}-td-agent4.sh | sh
sudo mv /etc/fluent/td-agent.conf /etc/td-agent/

sudo systemctl enable td-agent
sudo systemctl start td-agent

# Test: service status
(! systemctl status --no-pager fluentd)
(systemctl status --no-pager td-agent)

# Test: config migration
test -d /etc/td-agent
(! test -h /etc/td-agent/fluentd.conf)
test -e /etc/td-agent/td-agent.conf

# Test: log file migration
test -d /var/log/td-agent
test -e /var/log/td-agent/td-agent.log

# Test: bin file migration
test -x /usr/sbin/td-agent
test -x /usr/sbin/td-agent-gem

# Test: environmental variables
pid=$(systemctl show td-agent --property=MainPID --value)
env_vars=$(sudo sed -e 's/\x0/\n/g' /proc/$pid/environ)
test $(eval $env_vars && echo $HOME) = "/var/lib/td-agent"
test $(eval $env_vars && echo $LOGNAME) = "td-agent"
test $(eval $env_vars && echo $USER) = "td-agent"
test $(eval $env_vars && echo $FLUENT_CONF) = "/etc/td-agent/td-agent.conf"
test $(eval $env_vars && echo $TD_AGENT_LOG_FILE) = "/var/log/td-agent/td-agent.log"
test $(eval $env_vars && echo $FLUENT_PLUGIN) = "/etc/td-agent/plugin"
test $(eval $env_vars && echo $FLUENT_SOCKET) = "/var/run/td-agent/td-agent.sock"

# Test: No error logs
# (v4 default config outputs 'warn' log, so we should check only 'error' and 'fatal' logs)
sleep 3
test -e /var/log/td-agent/td-agent.log
(! grep -e '\[error\]' -e '\[fatal\]' /var/log/td-agent/td-agent.log)
1 change: 1 addition & 0 deletions fluent-package/apt/systemd-test/test.sh
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ if [ ! $image = "images:debian/12" ]; then
test_filenames+=(
update-from-v4.sh
update-to-next-version-with-backward-compat-for-v4.sh
downgrade-to-v4.sh
)
fi

Expand Down
97 changes: 97 additions & 0 deletions fluent-package/yum/systemd-test/downgrade-to-v4.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,97 @@
#!/bin/bash

set -exu

. $(dirname $0)/commonvar.sh

# Install v4
case ${distribution} in
amazon)
curl -fsSL https://toolbelt.treasuredata.com/sh/install-amazon2-td-agent4.sh | sh
;;
*)
curl -fsSL https://toolbelt.treasuredata.com/sh/install-redhat-td-agent4.sh | sh
;;
esac

# Not auto started
(! systemctl status --no-pager td-agent)

# Start service to generate log
sudo systemctl enable --now td-agent
sudo systemctl stop td-agent

# Install the current
sudo $DNF install -y \
/host/${distribution}/${DISTRIBUTION_VERSION}/x86_64/Packages/fluent-package-[0-9]*.rpm

sudo systemctl daemon-reload
sudo systemctl enable --now fluentd
sudo systemctl stop fluentd

# Remove td-agent.service alias not to conflict with v4
sudo systemctl disable td-agent

sudo $DNF remove -y fluent-package

sudo rm -f /var/log/td-agent
sudo rm -f /etc/td-agent
sudo mkdir -p /var/log/td-agent
sudo chown td-agent:td-agent /var/log/td-agent

sudo mv /var/log/fluent/* /var/log/td-agent/

# Downgrade to v4
case ${distribution} in
amazon)
curl -fsSL https://toolbelt.treasuredata.com/sh/install-amazon2-td-agent4.sh | sh
;;
*)
curl -fsSL https://toolbelt.treasuredata.com/sh/install-redhat-td-agent4.sh | sh
;;
esac

sudo systemctl daemon-reload
sudo systemctl enable --now td-agent

# Test: service status
(! systemctl status --no-pager fluentd)
(systemctl status --no-pager td-agent)

# Test: config migration
test -d /etc/td-agent
(! test -h /etc/td-agent/fluentd.conf)
test -e /etc/td-agent/td-agent.conf

# Test: log file migration
test -d /var/log/td-agent
test -e /var/log/td-agent/td-agent.log

# Test: bin file migration
test -x /usr/sbin/td-agent
test -x /usr/sbin/td-agent-gem

# Test: environmental variables
case ${distribution} in
centos)
# --value is not supported yet
pid=$(systemctl show td-agent --property=MainPID | cut -d'=' -f2)
;;
*)
pid=$(systemctl show td-agent --property=MainPID --value)
;;
esac
env_vars=$(sudo sed -e 's/\x0/\n/g' /proc/$pid/environ)
test $(eval $env_vars && echo $HOME) = "/var/lib/td-agent"
test $(eval $env_vars && echo $LOGNAME) = "td-agent"
test $(eval $env_vars && echo $USER) = "td-agent"
test $(eval $env_vars && echo $FLUENT_CONF) = "/etc/td-agent/td-agent.conf"
test $(eval $env_vars && echo $TD_AGENT_LOG_FILE) = "/var/log/td-agent/td-agent.log"
test $(eval $env_vars && echo $FLUENT_PLUGIN) = "/etc/td-agent/plugin"
test $(eval $env_vars && echo $FLUENT_SOCKET) = "/var/run/td-agent/td-agent.sock"

# Test: No error logs
# (v4 default config outputs 'warn' log, so we should check only 'error' and 'fatal' logs)
sleep 3
test -e /var/log/td-agent/td-agent.log
(! grep -e '\[error\]' -e '\[fatal\]' /var/log/td-agent/td-agent.log)
1 change: 1 addition & 0 deletions fluent-package/yum/systemd-test/test.sh
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ if [ ! $image = "images:amazonlinux/2023" ]; then
test_filenames+=(
update-from-v4.sh
update-to-next-version-with-backward-compat-for-v4.sh
downgrade-to-v4.sh
)
fi

Expand Down

0 comments on commit d71a2bb

Please sign in to comment.