previously applied successful patch is not recognized when file.patch is re-run the same patch file
Open
Nobody has claimed this yet.
bug
help-wanted
needs-testcase
severity-high
- Dominant language
- Python
- Stars
- 15.7k
- Forks
- 5.6k
- Avg merge
- 2d 44m
- Merged PRs (30d)
- 80
Description
Description of Issue/Question
since https://github.com/saltstack/salt/pull/47010 file.patch generate errors in minion log
Setup
example_of_issue:
file.patch:
- name: /usr/lib/python3/dist-packages/salt/transport/zeromq.py
- source: salt://salt/files/master/zeromq.patch
Steps to Reproduce Issue
salt 'host' state.highstate generate error in minion logs
Mar 22 20:14:33 elasticsearch-worker salt-minion[13232]: [ERROR ] Command '['/usr/bin/patch', '-N', '-r', '/tmp/__salt.tmp.fdbyaflo', '-o', '/tmp/__salt.tmp.pt62h1c2', '-i', '/tmp/__salt.tmp.t3i7qtxv', '/usr/lib/python3/dist-packages/salt/transport/zeromq.py']' failed with return code: 1
Mar 22 20:14:33 elasticsearch-worker salt-minion[13232]: [ERROR ] stdout: patching file /tmp/__salt.tmp.pt62h1c2 (read from /usr/lib/python3/dist-packages/salt/transport/zeromq.py)
Mar 22 20:14:33 elasticsearch-worker salt-minion[13232]: Reversed (or previously applied) patch detected! Skipping patch.
Mar 22 20:14:33 elasticsearch-worker salt-minion[13232]: 2 out of 2 hunks ignored -- saving rejects to file /tmp/__salt.tmp.fdbyaflo
Mar 22 20:14:33 elasticsearch-worker salt-minion[13232]: [ERROR ] retcode: 1
Versions Report
Salt Version:
Salt: 2019.2.0
Dependency Versions:
cffi: Not Installed
cherrypy: unknown
dateutil: 2.6.1
docker-py: Not Installed
gitdb: 2.0.3
gitpython: 2.1.8
ioflo: Not Installed
Jinja2: 2.10
libgit2: 0.26.0
libnacl: Not Installed
M2Crypto: 0.32.0
Mako: Not Installed
msgpack-pure: Not Installed
msgpack-python: 0.5.6
mysql-python: Not Installed
pycparser: Not Installed
pycrypto: 2.6.1
pycryptodome: Not Installed
pygit2: 0.26.2
Python: 3.6.7 (default, Oct 22 2018, 11:32:17)
python-gnupg: 0.4.1
PyYAML: 3.12
PyZMQ: 16.0.2
RAET: Not Installed
smmap: 2.0.3
timelib: Not Installed
Tornado: 4.5.3
ZMQ: 4.2.5
System Versions:
dist: Ubuntu 18.04 bionic
locale: UTF-8
machine: x86_64
release: 4.15.0-1031-aws
system: Linux
version: Ubuntu 18.04 bionic
Example:
zeromq.patch
--- /usr/lib/python3/dist-packages/salt/transport/zeromq.py 2019-03-05 15:50:35.198995571 -0500
+++ /usr/lib/python3/dist-packages/salt/transport/zeromq.py 2019-03-05 15:44:22.884853241 -0500
@@ -528,9 +528,9 @@
payload = self.serial.loads(messages[0])
# 2 includes a header which says who should do it
elif messages_len == 2:
- if (self.opts.get('__role') != 'syndic' and messages[0] not in ('broadcast', self.hexid)) or \
- (self.opts.get('__role') == 'syndic' and messages[0] not in ('broadcast', 'syndic')):
- log.debug('Publish received for not this minion: %s', messages[0])
+ if (self.opts.get('__role') != 'syndic' and messages[0].decode('utf-8') not in ('broadcast', self.hexid)) or \
+ (self.opts.get('__role') == 'syndic' and messages[0].decode('utf-8') not in ('broadcast', 'syndic')):
+ log.debug('Publish received for not this minion: %s', messages[0].decode('utf-8'))
raise tornado.gen.Return(None)
payload = self.serial.loads(messages[1])
else:
@@ -912,7 +912,7 @@
log.trace('Sending filtered data over publisher %s', pub_uri)
# zmq filters are substring match, hash the topic
# to avoid collisions
- htopic = salt.utils.stringutils.to_bytes(hashlib.sha1(topic).hexdigest())
+ htopic = salt.utils.stringutils.to_bytes(hashlib.sha1(topic.encode('utf-8')).hexdigest())
pub_sock.send(htopic, flags=zmq.SNDMORE)
pub_sock.send(payload)
log.trace('Filtered data has been sent')
sls
file.patch:
- name: /usr/lib/python3/dist-packages/salt/transport/zeromq.py
- source: salt://salt/files/master/zeromq.patch
- watch_in:
- service: salt_master_service
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start with the file.patch state using the provided zeromq.patch and reproduce the issue with salt 'host' state.highstate. Trace how the patch command handles a reversed or previously applied patch and its return code. Done means re-running the same patch is recognized as successful without the minion logging an error or creating rejects.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- python
- Domain
- infrastructure
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 35/100