autobuild v6.0-27
Resolves: bz#1789447 Signed-off-by: Rinku Kothiya <rkothiya@redhat.com>
This commit is contained in:
		
							parent
							
								
									61de5f4d9d
								
							
						
					
					
						commit
						9d5f2fefff
					
				
							
								
								
									
										236
									
								
								0347-tools-glusterfind-handle-offline-bricks.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										236
									
								
								0347-tools-glusterfind-handle-offline-bricks.patch
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,236 @@ | |||||||
|  | From 87e6ea2cd63898c5d243b0f0c719f4f6347fb829 Mon Sep 17 00:00:00 2001 | ||||||
|  | From: Milind Changire <mchangir@redhat.com> | ||||||
|  | Date: Thu, 5 Jan 2017 19:53:19 +0530 | ||||||
|  | Subject: [PATCH 347/349] tools/glusterfind: handle offline bricks | ||||||
|  | 
 | ||||||
|  | Problem: | ||||||
|  | glusterfind is unable to copy remote output file to local node when a | ||||||
|  | remove-brick is in progress on the remote node. After copying remote | ||||||
|  | files, in the --full output listing path, a "sort -u" command is run on | ||||||
|  | the collected files. However, "sort" exits with an error code if it | ||||||
|  | finds any file missing. | ||||||
|  | 
 | ||||||
|  | Solution: | ||||||
|  | Maintain a map of (pid, output file) when the node commands are started | ||||||
|  | and remove the mapping for the pid for which the command returns an | ||||||
|  | error. Use the list of files present in the map for the "sort" command. | ||||||
|  | 
 | ||||||
|  | Backport of: | ||||||
|  | > Patch: https://review.gluster.org/16332
 | ||||||
|  | > Change-Id: Ie6e019037379f4cb163f24b1c65eb382efc2fb3b
 | ||||||
|  | > fixes: bz#1410439
 | ||||||
|  | > Signed-off-by: Milind Changire <mchangir@redhat.com>
 | ||||||
|  | > Signed-off-by: Shwetha K Acharya <sacharya@redhat.com>
 | ||||||
|  | 
 | ||||||
|  | BUG: 1789447 | ||||||
|  | Change-Id: Ie6e019037379f4cb163f24b1c65eb382efc2fb3b | ||||||
|  | Signed-off-by: Kotresh HR <khiremat@redhat.com> | ||||||
|  | Reviewed-on: https://code.engineering.redhat.com/gerrit/189214 | ||||||
|  | Tested-by: RHGS Build Bot <nigelb@redhat.com> | ||||||
|  | Reviewed-by: Sunny Kumar <sunkumar@redhat.com> | ||||||
|  | ---
 | ||||||
|  |  tools/glusterfind/src/gfind_py2py3.py | 25 ++++++++++++++ | ||||||
|  |  tools/glusterfind/src/main.py         | 61 +++++++++++++++++++++-------------- | ||||||
|  |  2 files changed, 61 insertions(+), 25 deletions(-) | ||||||
|  | 
 | ||||||
|  | diff --git a/tools/glusterfind/src/gfind_py2py3.py b/tools/glusterfind/src/gfind_py2py3.py
 | ||||||
|  | index 1d41ec5..87324fb 100644
 | ||||||
|  | --- a/tools/glusterfind/src/gfind_py2py3.py
 | ||||||
|  | +++ b/tools/glusterfind/src/gfind_py2py3.py
 | ||||||
|  | @@ -40,6 +40,19 @@ if sys.version_info >= (3,):
 | ||||||
|  |      def gfind_history_changelog_done(libgfc, clfile): | ||||||
|  |          return libgfc.gf_history_changelog_done(clfile.encode()) | ||||||
|  |   | ||||||
|  | +    def gfind_write_row(f, row, field_separator, p_rep, row_2_rep):
 | ||||||
|  | +        f.write(u"{0}{1}{2}{3}{4}\n".format(row,
 | ||||||
|  | +                                            field_separator,
 | ||||||
|  | +                                            p_rep,
 | ||||||
|  | +                                            field_separator,
 | ||||||
|  | +                                            row_2_rep))
 | ||||||
|  | +
 | ||||||
|  | +    def gfind_write(f, row, field_separator, p_rep):
 | ||||||
|  | +        f.write(u"{0}{1}{2}\n".format(row,
 | ||||||
|  | +                                      field_separator,
 | ||||||
|  | +                                      p_rep))
 | ||||||
|  | +
 | ||||||
|  | +
 | ||||||
|  |  else: | ||||||
|  |   | ||||||
|  |      # Raw conversion of bytearray to string | ||||||
|  | @@ -61,3 +74,15 @@ else:
 | ||||||
|  |   | ||||||
|  |      def gfind_history_changelog_done(libgfc, clfile): | ||||||
|  |          return libgfc.gf_history_changelog_done(clfile) | ||||||
|  | +
 | ||||||
|  | +    def gfind_write_row(f, row, field_separator, p_rep, row_2_rep):
 | ||||||
|  | +        f.write(u"{0}{1}{2}{3}{4}\n".format(row,
 | ||||||
|  | +                                            field_separator,
 | ||||||
|  | +                                            p_rep,
 | ||||||
|  | +                                            field_separator,
 | ||||||
|  | +                                            row_2_rep).encode())
 | ||||||
|  | +
 | ||||||
|  | +    def gfind_write(f, row, field_separator, p_rep):
 | ||||||
|  | +        f.write(u"{0}{1}{2}\n".format(row,
 | ||||||
|  | +                                      field_separator,
 | ||||||
|  | +                                      p_rep).encode())
 | ||||||
|  | diff --git a/tools/glusterfind/src/main.py b/tools/glusterfind/src/main.py
 | ||||||
|  | index cc5a86f..fefe4a3 100644
 | ||||||
|  | --- a/tools/glusterfind/src/main.py
 | ||||||
|  | +++ b/tools/glusterfind/src/main.py
 | ||||||
|  | @@ -16,6 +16,7 @@ from multiprocessing import Process
 | ||||||
|  |  import os | ||||||
|  |  import xml.etree.cElementTree as etree | ||||||
|  |  from argparse import ArgumentParser, RawDescriptionHelpFormatter, Action | ||||||
|  | +from gfind_py2py3 import gfind_write_row, gfind_write
 | ||||||
|  |  import logging | ||||||
|  |  import shutil | ||||||
|  |  import tempfile | ||||||
|  | @@ -35,9 +36,9 @@ GlusterFS Incremental API
 | ||||||
|  |  ParseError = etree.ParseError if hasattr(etree, 'ParseError') else SyntaxError | ||||||
|  |   | ||||||
|  |  logger = logging.getLogger() | ||||||
|  | -node_outfiles = []
 | ||||||
|  |  vol_statusStr = "" | ||||||
|  |  gtmpfilename = None | ||||||
|  | +g_pid_nodefile_map = {}
 | ||||||
|  |   | ||||||
|  |   | ||||||
|  |  class StoreAbsPath(Action): | ||||||
|  | @@ -111,7 +112,7 @@ def node_cmd(host, host_uuid, task, cmd, args, opts):
 | ||||||
|  |   | ||||||
|  |   | ||||||
|  |  def run_cmd_nodes(task, args, **kwargs): | ||||||
|  | -    global node_outfiles
 | ||||||
|  | +    global g_pid_nodefile_map
 | ||||||
|  |      nodes = get_nodes(args.volume) | ||||||
|  |      pool = [] | ||||||
|  |      for num, node in enumerate(nodes): | ||||||
|  | @@ -142,7 +143,6 @@ def run_cmd_nodes(task, args, **kwargs):
 | ||||||
|  |                  if tag == "": | ||||||
|  |                      tag = '""' if not is_host_local(host_uuid) else "" | ||||||
|  |   | ||||||
|  | -            node_outfiles.append(node_outfile)
 | ||||||
|  |              # remote file will be copied into this directory | ||||||
|  |              mkdirp(os.path.dirname(node_outfile), | ||||||
|  |                     exit_on_err=True, logger=logger) | ||||||
|  | @@ -180,7 +180,6 @@ def run_cmd_nodes(task, args, **kwargs):
 | ||||||
|  |                  if tag == "": | ||||||
|  |                      tag = '""' if not is_host_local(host_uuid) else "" | ||||||
|  |   | ||||||
|  | -            node_outfiles.append(node_outfile)
 | ||||||
|  |              # remote file will be copied into this directory | ||||||
|  |              mkdirp(os.path.dirname(node_outfile), | ||||||
|  |                     exit_on_err=True, logger=logger) | ||||||
|  | @@ -264,6 +263,7 @@ def run_cmd_nodes(task, args, **kwargs):
 | ||||||
|  |                          args=(host, host_uuid, task, cmd, args, opts)) | ||||||
|  |              p.start() | ||||||
|  |              pool.append(p) | ||||||
|  | +            g_pid_nodefile_map[p.pid] = node_outfile
 | ||||||
|  |   | ||||||
|  |      for num, p in enumerate(pool): | ||||||
|  |          p.join() | ||||||
|  | @@ -271,8 +271,11 @@ def run_cmd_nodes(task, args, **kwargs):
 | ||||||
|  |              logger.warn("Command %s failed in %s" % (task, nodes[num][1])) | ||||||
|  |              if task in ["create", "delete"]: | ||||||
|  |                  fail("Command %s failed in %s" % (task, nodes[num][1])) | ||||||
|  | -            elif task == "pre" and args.disable_partial:
 | ||||||
|  | -                sys.exit(1)
 | ||||||
|  | +            elif task == "pre" or task == "query":
 | ||||||
|  | +                if args.disable_partial:
 | ||||||
|  | +                    sys.exit(1)
 | ||||||
|  | +                else:
 | ||||||
|  | +                    del g_pid_nodefile_map[p.pid]
 | ||||||
|  |   | ||||||
|  |   | ||||||
|  |  @cache_output | ||||||
|  | @@ -512,16 +515,10 @@ def write_output(outfile, outfilemerger, field_separator):
 | ||||||
|  |                      continue | ||||||
|  |   | ||||||
|  |                  if row_2_rep and row_2_rep != "": | ||||||
|  | -                    f.write(u"{0}{1}{2}{3}{4}\n".format(row[0],
 | ||||||
|  | -                                                        field_separator,
 | ||||||
|  | -                                                        p_rep,
 | ||||||
|  | -                                                        field_separator,
 | ||||||
|  | -                                                        row_2_rep).encode())
 | ||||||
|  | -                else:
 | ||||||
|  | -                    f.write(u"{0}{1}{2}\n".format(row[0],
 | ||||||
|  | -                                                  field_separator,
 | ||||||
|  | -                                                  p_rep).encode())
 | ||||||
|  | +                    gfind_write_row(f, row[0], field_separator, p_rep, field_separator, row_2_rep)
 | ||||||
|  |   | ||||||
|  | +                else:
 | ||||||
|  | +                    gfind_write(f, row[0], field_separator, p_rep)
 | ||||||
|  |   | ||||||
|  |  def mode_create(session_dir, args): | ||||||
|  |      logger.debug("Init is called - Session: %s, Volume: %s" | ||||||
|  | @@ -571,6 +568,7 @@ def mode_create(session_dir, args):
 | ||||||
|  |   | ||||||
|  |  def mode_query(session_dir, args): | ||||||
|  |      global gtmpfilename | ||||||
|  | +    global g_pid_nodefile_map
 | ||||||
|  |   | ||||||
|  |      # Verify volume status | ||||||
|  |      cmd = ["gluster", 'volume', 'info', args.volume, "--xml"] | ||||||
|  | @@ -634,14 +632,20 @@ def mode_query(session_dir, args):
 | ||||||
|  |   | ||||||
|  |      # Merger | ||||||
|  |      if args.full: | ||||||
|  | -        cmd = ["sort", "-u"] + node_outfiles + ["-o", args.outfile]
 | ||||||
|  | -        execute(cmd,
 | ||||||
|  | -                exit_msg="Failed to merge output files "
 | ||||||
|  | -                "collected from nodes", logger=logger)
 | ||||||
|  | +        if len(g_pid_nodefile_map) > 0:
 | ||||||
|  | +            cmd = ["sort", "-u"] + g_pid_nodefile_map.values() + \
 | ||||||
|  | +                  ["-o", args.outfile]
 | ||||||
|  | +            execute(cmd,
 | ||||||
|  | +                    exit_msg="Failed to merge output files "
 | ||||||
|  | +                    "collected from nodes", logger=logger)
 | ||||||
|  | +        else:
 | ||||||
|  | +            fail("Failed to collect any output files from peers. "
 | ||||||
|  | +                 "Looks like all bricks are offline.", logger=logger)
 | ||||||
|  |      else: | ||||||
|  |          # Read each Changelogs db and generate finaldb | ||||||
|  |          create_file(args.outfile, exit_on_err=True, logger=logger) | ||||||
|  | -        outfilemerger = OutputMerger(args.outfile + ".db", node_outfiles)
 | ||||||
|  | +        outfilemerger = OutputMerger(args.outfile + ".db",
 | ||||||
|  | +                                     g_pid_nodefile_map.values())
 | ||||||
|  |          write_output(args.outfile, outfilemerger, args.field_separator) | ||||||
|  |   | ||||||
|  |      try: | ||||||
|  | @@ -656,6 +660,7 @@ def mode_query(session_dir, args):
 | ||||||
|  |   | ||||||
|  |  def mode_pre(session_dir, args): | ||||||
|  |      global gtmpfilename | ||||||
|  | +    global g_pid_nodefile_map
 | ||||||
|  |   | ||||||
|  |      """ | ||||||
|  |      Read from Session file and write to session.pre file | ||||||
|  | @@ -696,14 +701,20 @@ def mode_pre(session_dir, args):
 | ||||||
|  |   | ||||||
|  |      # Merger | ||||||
|  |      if args.full: | ||||||
|  | -        cmd = ["sort", "-u"] + node_outfiles + ["-o", args.outfile]
 | ||||||
|  | -        execute(cmd,
 | ||||||
|  | -                exit_msg="Failed to merge output files "
 | ||||||
|  | -                "collected from nodes", logger=logger)
 | ||||||
|  | +        if len(g_pid_nodefile_map) > 0:
 | ||||||
|  | +            cmd = ["sort", "-u"] + g_pid_nodefile_map.values() + \
 | ||||||
|  | +                  ["-o", args.outfile]
 | ||||||
|  | +            execute(cmd,
 | ||||||
|  | +                    exit_msg="Failed to merge output files "
 | ||||||
|  | +                    "collected from nodes", logger=logger)
 | ||||||
|  | +        else:
 | ||||||
|  | +            fail("Failed to collect any output files from peers. "
 | ||||||
|  | +                 "Looks like all bricks are offline.", logger=logger)
 | ||||||
|  |      else: | ||||||
|  |          # Read each Changelogs db and generate finaldb | ||||||
|  |          create_file(args.outfile, exit_on_err=True, logger=logger) | ||||||
|  | -        outfilemerger = OutputMerger(args.outfile + ".db", node_outfiles)
 | ||||||
|  | +        outfilemerger = OutputMerger(args.outfile + ".db",
 | ||||||
|  | +                                     g_pid_nodefile_map.values())
 | ||||||
|  |          write_output(args.outfile, outfilemerger, args.field_separator) | ||||||
|  |   | ||||||
|  |      try: | ||||||
|  | -- 
 | ||||||
|  | 1.8.3.1 | ||||||
|  | 
 | ||||||
							
								
								
									
										113
									
								
								0348-glusterfind-Fix-py2-py3-issues.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										113
									
								
								0348-glusterfind-Fix-py2-py3-issues.patch
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,113 @@ | |||||||
|  | From 1ca8a545833e0a6e674984245338b8675ddc58bc Mon Sep 17 00:00:00 2001 | ||||||
|  | From: Kotresh HR <khiremat@redhat.com> | ||||||
|  | Date: Fri, 10 Jan 2020 16:48:14 +0530 | ||||||
|  | Subject: [PATCH 348/349] glusterfind: Fix py2/py3 issues | ||||||
|  | 
 | ||||||
|  | 1. In dictionary values(), returns list in py2 and not in py3. | ||||||
|  |    So explicitly convert it into list. | ||||||
|  | 2. xattr module returns values in bytes. So explicitly convert | ||||||
|  |    them to str to work both with py2 and py3 | ||||||
|  | 
 | ||||||
|  | Backport of: | ||||||
|  |  > Patch: https://review.gluster.org/23993 | ||||||
|  |  > fixes: bz#1789439 | ||||||
|  |  > Change-Id: I27a639cda4f7a4ece9744a97c3d16e247906bd94 | ||||||
|  |  > Signed-off-by: Kotresh HR <khiremat@redhat.com> | ||||||
|  | 
 | ||||||
|  | BUG: 1789447 | ||||||
|  | Change-Id: I27a639cda4f7a4ece9744a97c3d16e247906bd94 | ||||||
|  | Signed-off-by: Kotresh HR <khiremat@redhat.com> | ||||||
|  | Reviewed-on: https://code.engineering.redhat.com/gerrit/189215 | ||||||
|  | Reviewed-by: Shwetha Acharya <sacharya@redhat.com> | ||||||
|  | Tested-by: RHGS Build Bot <nigelb@redhat.com> | ||||||
|  | Reviewed-by: Hari Gowtham Gopal <hgowtham@redhat.com> | ||||||
|  | Reviewed-by: Sunny Kumar <sunkumar@redhat.com> | ||||||
|  | ---
 | ||||||
|  |  tools/glusterfind/src/changelog.py | 14 +++++++++----- | ||||||
|  |  tools/glusterfind/src/main.py      |  8 ++++---- | ||||||
|  |  2 files changed, 13 insertions(+), 9 deletions(-) | ||||||
|  | 
 | ||||||
|  | diff --git a/tools/glusterfind/src/changelog.py b/tools/glusterfind/src/changelog.py
 | ||||||
|  | index d8f97e0..d972fb5 100644
 | ||||||
|  | --- a/tools/glusterfind/src/changelog.py
 | ||||||
|  | +++ b/tools/glusterfind/src/changelog.py
 | ||||||
|  | @@ -14,6 +14,7 @@ import sys
 | ||||||
|  |  import time | ||||||
|  |  import xattr | ||||||
|  |  import logging | ||||||
|  | +from gfind_py2py3 import bytearray_to_str
 | ||||||
|  |  from argparse import ArgumentParser, RawDescriptionHelpFormatter | ||||||
|  |  import hashlib | ||||||
|  |  try: | ||||||
|  | @@ -105,9 +106,10 @@ def populate_pgfid_and_inodegfid(brick, changelog_data):
 | ||||||
|  |                  changelog_data.inodegfid_add(os.stat(p).st_ino, gfid) | ||||||
|  |                  file_xattrs = xattr.list(p) | ||||||
|  |                  for x in file_xattrs: | ||||||
|  | -                    if x.startswith("trusted.pgfid."):
 | ||||||
|  | +                    x_str = bytearray_to_str(x)
 | ||||||
|  | +                    if x_str.startswith("trusted.pgfid."):
 | ||||||
|  |                          # PGFID in pgfid table | ||||||
|  | -                        changelog_data.pgfid_add(x.split(".")[-1])
 | ||||||
|  | +                        changelog_data.pgfid_add(x_str.split(".")[-1])
 | ||||||
|  |              except (IOError, OSError): | ||||||
|  |                  # All OS Errors ignored, since failures will be logged | ||||||
|  |                  # in End. All GFIDs present in gfidpath table | ||||||
|  | @@ -122,10 +124,12 @@ def enum_hard_links_using_gfid2path(brick, gfid, args):
 | ||||||
|  |          try: | ||||||
|  |              file_xattrs = xattr.list(p) | ||||||
|  |              for x in file_xattrs: | ||||||
|  | -                if x.startswith("trusted.gfid2path."):
 | ||||||
|  | +                x_str = bytearray_to_str(x)
 | ||||||
|  | +                if x_str.startswith("trusted.gfid2path."):
 | ||||||
|  |                      # get the value for the xattr i.e. <PGFID>/<BN> | ||||||
|  | -                    v = xattr.getxattr(p, x)
 | ||||||
|  | -                    pgfid, bn = v.split(os.sep)
 | ||||||
|  | +                    v = xattr.getxattr(p, x_str)
 | ||||||
|  | +                    v_str = bytearray_to_str(v)
 | ||||||
|  | +                    pgfid, bn = v_str.split(os.sep)
 | ||||||
|  |                      try: | ||||||
|  |                          path = symlink_gfid_to_path(brick, pgfid) | ||||||
|  |                          fullpath = os.path.join(path, bn) | ||||||
|  | diff --git a/tools/glusterfind/src/main.py b/tools/glusterfind/src/main.py
 | ||||||
|  | index fefe4a3..dfc9d07 100644
 | ||||||
|  | --- a/tools/glusterfind/src/main.py
 | ||||||
|  | +++ b/tools/glusterfind/src/main.py
 | ||||||
|  | @@ -633,7 +633,7 @@ def mode_query(session_dir, args):
 | ||||||
|  |      # Merger | ||||||
|  |      if args.full: | ||||||
|  |          if len(g_pid_nodefile_map) > 0: | ||||||
|  | -            cmd = ["sort", "-u"] + g_pid_nodefile_map.values() + \
 | ||||||
|  | +            cmd = ["sort", "-u"] + list(g_pid_nodefile_map.values()) + \
 | ||||||
|  |                    ["-o", args.outfile] | ||||||
|  |              execute(cmd, | ||||||
|  |                      exit_msg="Failed to merge output files " | ||||||
|  | @@ -645,7 +645,7 @@ def mode_query(session_dir, args):
 | ||||||
|  |          # Read each Changelogs db and generate finaldb | ||||||
|  |          create_file(args.outfile, exit_on_err=True, logger=logger) | ||||||
|  |          outfilemerger = OutputMerger(args.outfile + ".db", | ||||||
|  | -                                     g_pid_nodefile_map.values())
 | ||||||
|  | +                                     list(g_pid_nodefile_map.values()))
 | ||||||
|  |          write_output(args.outfile, outfilemerger, args.field_separator) | ||||||
|  |   | ||||||
|  |      try: | ||||||
|  | @@ -702,7 +702,7 @@ def mode_pre(session_dir, args):
 | ||||||
|  |      # Merger | ||||||
|  |      if args.full: | ||||||
|  |          if len(g_pid_nodefile_map) > 0: | ||||||
|  | -            cmd = ["sort", "-u"] + g_pid_nodefile_map.values() + \
 | ||||||
|  | +            cmd = ["sort", "-u"] + list(g_pid_nodefile_map.values()) + \
 | ||||||
|  |                    ["-o", args.outfile] | ||||||
|  |              execute(cmd, | ||||||
|  |                      exit_msg="Failed to merge output files " | ||||||
|  | @@ -714,7 +714,7 @@ def mode_pre(session_dir, args):
 | ||||||
|  |          # Read each Changelogs db and generate finaldb | ||||||
|  |          create_file(args.outfile, exit_on_err=True, logger=logger) | ||||||
|  |          outfilemerger = OutputMerger(args.outfile + ".db", | ||||||
|  | -                                     g_pid_nodefile_map.values())
 | ||||||
|  | +                                     list(g_pid_nodefile_map.values()))
 | ||||||
|  |          write_output(args.outfile, outfilemerger, args.field_separator) | ||||||
|  |   | ||||||
|  |      try: | ||||||
|  | -- 
 | ||||||
|  | 1.8.3.1 | ||||||
|  | 
 | ||||||
							
								
								
									
										56
									
								
								0349-glusterfind-python3-compatibility.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										56
									
								
								0349-glusterfind-python3-compatibility.patch
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,56 @@ | |||||||
|  | From 1354a492cbc758f9801568153380ca896fab7765 Mon Sep 17 00:00:00 2001 | ||||||
|  | From: Sunny Kumar <sunkumar@redhat.com> | ||||||
|  | Date: Fri, 10 Jan 2020 14:28:35 +0000 | ||||||
|  | Subject: [PATCH 349/349] glusterfind: python3 compatibility | ||||||
|  | 
 | ||||||
|  | Problem: | ||||||
|  | While we delete gluster volume the hook script 'S57glusterfind-delete-post.py' | ||||||
|  | is failed to execute and error message can be observed in glusterd log. | ||||||
|  | 
 | ||||||
|  | Traceback: | ||||||
|  |   File "/var/lib/glusterd/hooks/1/delete/post/S57glusterfind-delete-post", line 69, in <module> | ||||||
|  |     main() | ||||||
|  |   File "/var/lib/glusterd/hooks/1/delete/post/S57glusterfind-delete-post", line 39, in main | ||||||
|  |     glusterfind_dir = os.path.join(get_glusterd_workdir(), "glusterfind") | ||||||
|  |   File "/usr/lib64/python3.7/posixpath.py", line 94, in join | ||||||
|  |     genericpath._check_arg_types('join', a, *p) | ||||||
|  |   File "/usr/lib64/python3.7/genericpath.py", line 155, in _check_arg_types | ||||||
|  |     raise TypeError("Can't mix strings and bytes in path components") from None | ||||||
|  | TypeError: Can't mix strings and bytes in path components | ||||||
|  | 
 | ||||||
|  | Solution: | ||||||
|  | 
 | ||||||
|  | Added the 'universal_newlines' flag to Popen to support backward compatibility. | ||||||
|  | 
 | ||||||
|  | Backport of: | ||||||
|  |  > Patch: https://review.gluster.org/23994 | ||||||
|  |  > Change-Id: Ie5655b11b55535c5ad2338108d0448e6fdaacf4f | ||||||
|  |  > Fixes: bz#1789478 | ||||||
|  |  > Signed-off-by: Sunny Kumar <sunkumar@redhat.com> | ||||||
|  | 
 | ||||||
|  | Change-Id: Ie5655b11b55535c5ad2338108d0448e6fdaacf4f | ||||||
|  | BUG: 1789447 | ||||||
|  | Signed-off-by: Sunny Kumar <sunkumar@redhat.com> | ||||||
|  | Signed-off-by: Kotresh HR <khiremat@redhat.com> | ||||||
|  | Reviewed-on: https://code.engineering.redhat.com/gerrit/189216 | ||||||
|  | Tested-by: RHGS Build Bot <nigelb@redhat.com> | ||||||
|  | ---
 | ||||||
|  |  tools/glusterfind/S57glusterfind-delete-post.py | 2 +- | ||||||
|  |  1 file changed, 1 insertion(+), 1 deletion(-) | ||||||
|  | 
 | ||||||
|  | diff --git a/tools/glusterfind/S57glusterfind-delete-post.py b/tools/glusterfind/S57glusterfind-delete-post.py
 | ||||||
|  | index 5b5142d..5beece2 100755
 | ||||||
|  | --- a/tools/glusterfind/S57glusterfind-delete-post.py
 | ||||||
|  | +++ b/tools/glusterfind/S57glusterfind-delete-post.py
 | ||||||
|  | @@ -18,7 +18,7 @@ def handle_rm_error(func, path, exc_info):
 | ||||||
|  |   | ||||||
|  |  def get_glusterd_workdir(): | ||||||
|  |      p = Popen(["gluster", "system::", "getwd"], | ||||||
|  | -              stdout=PIPE, stderr=PIPE)
 | ||||||
|  | +              stdout=PIPE, stderr=PIPE, universal_newlines=True)
 | ||||||
|  |   | ||||||
|  |      out, _ = p.communicate() | ||||||
|  |   | ||||||
|  | -- 
 | ||||||
|  | 1.8.3.1 | ||||||
|  | 
 | ||||||
| @ -231,7 +231,7 @@ Release:          0.1%{?prereltag:.%{prereltag}}%{?dist} | |||||||
| %else | %else | ||||||
| Name:             glusterfs | Name:             glusterfs | ||||||
| Version:          6.0 | Version:          6.0 | ||||||
| Release:          26%{?dist} | Release:          27%{?dist} | ||||||
| ExcludeArch:      i686 | ExcludeArch:      i686 | ||||||
| %endif | %endif | ||||||
| License:          GPLv2 or LGPLv3+ | License:          GPLv2 or LGPLv3+ | ||||||
| @ -655,6 +655,9 @@ Patch0343: 0343-extras-hooks-syntactical-errors-in-SELinux-hooks-sci.patch | |||||||
| Patch0344: 0344-Revert-all-fixes-to-include-SELinux-hook-scripts.patch | Patch0344: 0344-Revert-all-fixes-to-include-SELinux-hook-scripts.patch | ||||||
| Patch0345: 0345-read-ahead-io-cache-turn-off-by-default.patch | Patch0345: 0345-read-ahead-io-cache-turn-off-by-default.patch | ||||||
| Patch0346: 0346-fuse-degrade-logging-of-write-failure-to-fuse-device.patch | Patch0346: 0346-fuse-degrade-logging-of-write-failure-to-fuse-device.patch | ||||||
|  | Patch0347: 0347-tools-glusterfind-handle-offline-bricks.patch | ||||||
|  | Patch0348: 0348-glusterfind-Fix-py2-py3-issues.patch | ||||||
|  | Patch0349: 0349-glusterfind-python3-compatibility.patch | ||||||
| 
 | 
 | ||||||
| %description | %description | ||||||
| GlusterFS is a distributed file-system capable of scaling to several | GlusterFS is a distributed file-system capable of scaling to several | ||||||
| @ -2382,6 +2385,9 @@ fi | |||||||
| %endif | %endif | ||||||
| 
 | 
 | ||||||
| %changelog | %changelog | ||||||
|  | * Mon Jan 13 2020 Rinku Kothiya <rkothiya@redhat.com> - 6.0-27 | ||||||
|  | - fixes bugs bz#1789447 | ||||||
|  | 
 | ||||||
| * Fri Jan 10 2020 Rinku Kothiya <rkothiya@redhat.com> - 6.0-26 | * Fri Jan 10 2020 Rinku Kothiya <rkothiya@redhat.com> - 6.0-26 | ||||||
| - fixes bugs bz#1763208 bz#1788656 | - fixes bugs bz#1763208 bz#1788656 | ||||||
| 
 | 
 | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user