Project

Profile

Help

Issue #2684

closed

pulp-manage-db sometimes runs when it shouldn't

Added by Ichimonji10 almost 7 years ago. Updated almost 5 years ago.

Status:
CLOSED - WONTFIX
Priority:
High
Assignee:
-
Category:
-
Sprint/Milestone:
-
Start date:
Due date:
Estimated time:
Severity:
2. Medium
Version:
Platform Release:
OS:
Triaged:
Yes
Groomed:
No
Sprint Candidate:
No
Tags:
Pulp 2
Sprint:
Quarter:

Description

pulp-manage-db should refuse to run when any of pulp_celerybeat, pulp_resource_manager or pulp_workers are running, or when mongod is not running. It has built-in checks that enforce this behaviour, and the work on that is documented in https://pulp.plan.io/issues/2186.

I've written some tests that verify this behaviour. The negative tests are as follows:

1. Do one of the following:

  • Stop mongod.
  • Let all Pulp services run.
  • Stop pulp_resource_manager and pulp_workers, but not pulp_celerybeat.
  • Stop pulp_celerybeat and pulp_resource_manager, but not pulp_workers.
  • Stop pulp_celerybeat and pulp_workers, but no pulp_pulp_resource_manager.

2. Run pulp-manage-db. Assert a non-zero exit code is returned. (A non-zero exit code indicates that pulp-manage-db refused to run.)

In my manual testing, I've found that the tests where pulp_resource_manager and pulp_workers are left running are especially likely to fail. However, the failures aren't completely consistent. Sometimes, all of the tests will pass.

Here's a summary of results from a particularly bad run. For context, test_required_stopped stops mongod and test_conflicting_running lets all Pulp services run. You can intuit the meaning of the remaining test names.

=============================  ========  ========  ========  ========  ==========
Test                           F24-2.12  F24-2.13  F25-2.12  F25-2.13  RHEL7-2.12
=============================  ========  ========  ========  ========  ==========
test_required_stopped          ✓         ✓         ✓         ✓         ✓
test_conflicting_running       ✓         ✓         ✓         ✓         ✓
test_celerybeat_running        ✓         ✓         ✓         ✓         ✓
test_resource_manager_running  ✗         ✗         ✗         ✗         ✗
test_workers_running           ✗         ✓         ✗         ✓         ✗
=============================  ========  ========  ========  ========  ==========

In an attempt to figure out why this is so, I've set the tests to capture the responses from pulp-manage-db and systemctl status. pulp-manage-db sometimes prints to stdout, and always prints to stderr.

A concrete example would be helpful. The following is the result of the test_workers_running test from the RHEL 7 2.12 system, above. Here stdout:

The following processes might still be running:
    reserved_resource_worker-0@rhel-7-3-pulp-2-12
Please wait 1 seconds while Pulp confirms this.

Note that Pulp did correctly count down for 90 seconds, above. It just doesn't show up in the prettified output as interpreted by a terminal or by IDLE. Here's stderr:

Attempting to connect to localhost:27017
Attempting to connect to localhost:27017
Write concern for Mongo connection: {}
Loading content types.
Loading type descriptors []
Parsing type descriptors
Validating type descriptor syntactic integrity
Validating type descriptor semantic integrity
Loading unit model: erratum = pulp_rpm.plugins.db.models:Errata
Loading unit model: distribution = pulp_rpm.plugins.db.models:Distribution
Loading unit model: srpm = pulp_rpm.plugins.db.models:SRPM
Loading unit model: package_group = pulp_rpm.plugins.db.models:PackageGroup
Loading unit model: package_category = pulp_rpm.plugins.db.models:PackageCategory
Loading unit model: iso = pulp_rpm.plugins.db.models:ISO
Loading unit model: package_environment = pulp_rpm.plugins.db.models:PackageEnvironment
Loading unit model: drpm = pulp_rpm.plugins.db.models:DRPM
Loading unit model: package_langpacks = pulp_rpm.plugins.db.models:PackageLangpacks
Loading unit model: rpm = pulp_rpm.plugins.db.models:RPM
Loading unit model: yum_repo_metadata_file = pulp_rpm.plugins.db.models:YumMetadataFile
Loading unit model: docker_blob = pulp_docker.plugins.models:Blob
Loading unit model: docker_manifest = pulp_docker.plugins.models:Manifest
Loading unit model: docker_image = pulp_docker.plugins.models:Image
Loading unit model: docker_tag = pulp_docker.plugins.models:Tag
Loading unit model: puppet_module = pulp_puppet.plugins.db.models:Module
Loading unit model: ostree = pulp_ostree.plugins.db.model:Branch
Loading unit model: python_package = pulp_python.plugins.models:Package
Updating the database with types []
Found the following type definitions that were not present in the update collection [puppet_module, docker_tag, ostree, package_langpacks, erratum, docker_blob, docker_manifest, yum_repo_metadata_file, package_group, package_category, iso, package_environment, drpm, python_package, srpm, rpm, distribution, docker_image]
Updating the database with types [puppet_module, docker_tag, ostree, package_langpacks, erratum, docker_blob, docker_manifest, yum_repo_metadata_file, package_group, package_category, iso, package_environment, drpm, python_package, distribution, rpm, srpm, docker_image]
Content types loaded.
Ensuring the admin role and user are in place.
Admin role and user are in place.
Beginning database migrations.
Migration package pulp.server.db.migrations is up to date at version 27
Migration package pulp_docker.plugins.migrations is up to date at version 2
Migration package pulp_puppet.plugins.migrations is up to date at version 5
Migration package pulp_python.plugins.migrations is up to date at version 1
Migration package pulp_rpm.plugins.migrations is up to date at version 39
Loading unit model: erratum = pulp_rpm.plugins.db.models:Errata
Loading unit model: distribution = pulp_rpm.plugins.db.models:Distribution
Loading unit model: srpm = pulp_rpm.plugins.db.models:SRPM
Loading unit model: package_group = pulp_rpm.plugins.db.models:PackageGroup
Loading unit model: package_category = pulp_rpm.plugins.db.models:PackageCategory
Loading unit model: iso = pulp_rpm.plugins.db.models:ISO
Loading unit model: package_environment = pulp_rpm.plugins.db.models:PackageEnvironment
Loading unit model: drpm = pulp_rpm.plugins.db.models:DRPM
Loading unit model: package_langpacks = pulp_rpm.plugins.db.models:PackageLangpacks
Loading unit model:rpm = pulp_rpm.plugins.db.models:RPM
Loading unit model: yum_repo_metadata_file = pulp_rpm.plugins.db.models:YumMetadataFile
Loading unit model: docker_blob = pulp_docker.plugins.models:Blob
Loading unit model: docker_manifest = pulp_docker.plugins.models:Manifest
Loading unit model: docker_image = pulp_docker.plugins.models:Image
Loading unit model: docker_tag = pulp_docker.plugins.models:Tag
Loading unit model: puppet_module = pulp_puppet.plugins.db.models:Module
Loading unit model: ostree = pulp_ostree.plugins.db.model:Branch
Loading unit model: python_package = pulp_python.plugins.models:Package
Database migrations complete.

So far, everything looks totally normal. What about systemctl status? Is there any funny business in there? Yes! pulp_worker-0.service is active. That's not good.

● rhel-7-3-pulp-2-12
    State: running
     Jobs: 0 queued
   Failed: 0 units
   Since: Thu 2017-03-30 23:44:46 EDT; 7h left
   CGroup: /
           ├─1 /usr/lib/systemd/systemd --switched-root --system --deserialize 21
           ├─user.slice
           │ └─user-0.slice
           │   ├─session-25.scope
           │   │ ├─5563 sshd: root@notty 
           │   │ └─5566 -bash
           │   ├─session-21.scope
           │   │ ├─5145 sshd: root@notty 
           │   │ └─5149 -bash
           │   └─session-17.scope
           │     ├─4247 sshd: root@notty 
           │     ├─5160 -bash
           │     ├─5614 bash -c cd /root && /usr/bin/systemctl status
           │     └─5619 /usr/bin/systemctl status
           └─system.slice
             ├─pulp_worker-0.service
             │ ├─5469 /usr/bin/python /usr/bin/celery worker -n reserved_resource_worker-0@%h -A pulp.server.async.app -c 1 --events --umask 18 --pidfile=/var/run/pulp/reserved_resource_worker-0.pid --heartbeat-interval=5
             │ └─5547 /usr/bin/python /usr/bin/celery worker -n reserved_resource_worker-0@%h -A pulp.server.async.app -c 1 --events --umask 18 --pidfile=/var/run/pulp/reserved_resource_worker-0.pid --heartbeat-interval=5
             ├─mongod.service
             │ └─5291 /usr/bin/mongod --quiet -f /etc/mongod.conf run
             ├─httpd.service
             │ ├─4443 /usr/sbin/httpd -DFOREGROUND
             │ ├─4456 (wsgi:pulp)     -DFOREGROUND
             │ ├─4457 (wsgi:pulp)     -DFOREGROUND
             │ ├─4458 (wsgi:pulp)     -DFOREGROUND
             │ ├─4459 (wsgi:pulp-cont -DFOREGROUND
             │ ├─4460 (wsgi:pulp-cont -DFOREGROUND
             │ ├─4461 (wsgi:pulp-cont -DFOREGROUND
             │ ├─4462 (wsgi:pulp_forg -DFOREGROUND
             │ ├─4463 (wsgi:pulp_forg -DFOREGROUND
             │ ├─4464 (wsgi:pulp_forg -DFOREGROUND
             │ ├─4465 /usr/sbin/httpd -DFOREGROUND
             │ ├─4467 /usr/sbin/httpd -DFOREGROUND
             │ ├─4468 /usr/sbin/httpd -DFOREGROUND
             │ ├─4469 /usr/sbin/httpd -DFOREGROUND
             │ └─4470 /usr/sbin/httpd -DFOREGROUND
             ├─rhnsd.service
             │ └─1011 rhnsd
             ├─pulp_streamer.service
             │ └─982 /usr/bin/python /usr/bin/pulp_streamer --nodaemon --syslog --prefix=pulp_streamer --pidfile= --python /usr/share/pulp/wsgi/streamer.tac
             ├─tuned.service
             │ └─978 /usr/bin/python -Es /usr/sbin/tuned -l -P
             ├─rhsmcertd.service
             │ └─981 /usr/bin/rhsmcertd
             ├─rsyslog.service
             │ └─974 /usr/sbin/rsyslogd -n
             ├─qpidd.service
             │ └─972 /usr/sbin/qpidd --config /etc/qpid/qpidd.conf
             ├─squid.service
             │ ├─1053 /usr/sbin/squid -f /etc/squid/squid.conf
             │ ├─1058 (squid-1) -f /etc/squid/squid.conf
             │ └─1111 (logfile-daemon) /var/log/squid/access.log
             ├─postfix.service
             │ ├─1579 /usr/libexec/postfix/master -w
             │ ├─1584 pickup -l -t unix -u
             │ └─1585 qmgr -l -t unix -u
             ├─sshd.service
             │ └─1000 /usr/sbin/sshd
             ├─NetworkManager.service
             │ ├─663 /usr/sbin/NetworkManager --no-daemon
             │ └─767 /sbin/dhclient -d -q -sf /usr/libexec/nm-dhcp-helper -pf /var/run/dhclient-eth0.pid -lf /var/lib/NetworkManager/dhclient-3ec3ad7d-e0ef-4a81-911f-d7a77852abbe-eth0.lease -cf /var/lib/NetworkManager/dhclient-eth0.conf eth0
             ├─firewalld.service
             │ └─662 /usr/bin/python -Es /usr/sbin/firewalld --nofork --nopid
             ├─crond.service
             │ └─645 /usr/sbin/crond -n
             ├─polkit.service
             │ └─628 /usr/lib/polkit-1/polkitd --no-debug
             ├─chronyd.service
             │ └─631 /usr/sbin/chronyd
             ├─systemd-logind.service
             │ └─624 /usr/lib/systemd/systemd-logind
             ├─dbus.service
             │ └─615 /bin/dbus-daemon --system --address=systemd: --nofork --nopidfile --systemd-activation
             ├─auditd.service
             │ └─596 /sbin/auditd -n
             ├─systemd-udevd.service
             │ └─492 /usr/lib/systemd/systemd-udevd
             ├─lvm2-lvmetad.service
             │ └─483 /usr/sbin/lvmetad -f
             ├─system-getty.slice
             │ └─getty@tty1.service
             │   └─651 /sbin/agetty --noclear tty1 linux
             └─systemd-journald.service
               └─465 /usr/lib/systemd/systemd-journald

Here's the packages installed on this particular system:

# rpm  -qa | grep -i pulp | sort
pulp-admin-client-2.12.3-0.1.alpha.git.1198.db2de38.el7.noarch
pulp-docker-admin-extensions-2.3.1-0.1.alpha.git.5.052c506.el7.noarch
pulp-docker-plugins-2.3.1-0.1.alpha.git.5.052c506.el7.noarch
pulp-ostree-admin-extensions-1.2.2-0.1.alpha.git.3.809be44.el7.noarch
pulp-ostree-plugins-1.2.2-0.1.alpha.git.3.809be44.el7.noarch
pulp-puppet-admin-extensions-2.12.3-0.1.alpha.git.1.6953897.el7.noarch
pulp-puppet-plugins-2.12.3-0.1.alpha.git.1.6953897.el7.noarch
pulp-python-admin-extensions-1.1.4-0.1.alpha.git.31.36b75e3.el7.noarch
pulp-python-plugins-1.1.4-0.1.alpha.git.31.36b75e3.el7.noarch
pulp-rpm-admin-extensions-2.12.3-0.1.alpha.git.11.d8adbfa.el7.noarch
pulp-rpm-plugins-2.12.3-0.1.alpha.git.11.d8adbfa.el7.noarch
pulp-selinux-2.12.3-0.1.alpha.git.1198.db2de38.el7.noarch
pulp-server-2.12.3-0.1.alpha.git.1198.db2de38.el7.noarch
python-isodate-0.5.0-4.pulp.el7.noarch
python-kombu-3.0.33-6.pulp.el7.noarch
python-pulp-bindings-2.12.3-0.1.alpha.git.1198.db2de38.el7.noarch
python-pulp-client-lib-2.12.3-0.1.alpha.git.1198.db2de38.el7.noarch
python-pulp-common-2.12.3-0.1.alpha.git.1198.db2de38.el7.noarch
python-pulp-docker-common-2.3.1-0.1.alpha.git.5.052c506.el7.noarch
python-pulp-oid_validation-2.12.3-0.1.alpha.git.1198.db2de38.el7.noarch
python-pulp-ostree-common-1.2.2-0.1.alpha.git.3.809be44.el7.noarch
python-pulp-puppet-common-2.12.3-0.1.alpha.git.1.6953897.el7.noarch
python-pulp-python-common-1.1.4-0.1.alpha.git.31.36b75e3.el7.noarch
python-pulp-repoauth-2.12.3-0.1.alpha.git.1198.db2de38.el7.noarch
python-pulp-rpm-common-2.12.3-0.1.alpha.git.11.d8adbfa.el7.noarch
python-pulp-streamer-2.12.3-0.1.alpha.git.1198.db2de38.el7.noarch
# rpm  -qa | grep -i mongo | sort
mongodb-2.6.12-4.el7.x86_64
mongodb-server-2.6.12-4.el7.x86_64
python-mongoengine-0.10.5-1.el7.noarch
python-pymongo-3.2-1.el7.x86_64
python-pymongo-gridfs-3.2-1.el7.x86_64

Also available in: Atom PDF