[LU-15874] RHEL 9.0 support Created: 19/May/22  Updated: 17/Oct/22  Resolved: 19/Aug/22

Status: Resolved
Project: Lustre
Component/s: None
Affects Version/s: None
Fix Version/s: Lustre 2.16.0, Lustre 2.15.2

Type: Improvement Priority: Minor
Reporter: Jian Yu Assignee: Jian Yu
Resolution: Fixed Votes: 1
Labels: None

Issue Links:
Related
is related to LU-15521 RPM 4.16 support Resolved
is related to LU-16020 sanity test_244a: FAIL: sendfile+grou... Resolved
is related to LU-15797 RHEL9 rpm spec updates Resolved
is related to LU-16088 kernel update [RHEL9.0 5.14.0-70.22.1... Resolved
is related to LU-16177 kernel update [RHEL9.0 5.14.0-70.26.1... Resolved
is related to LU-16242 Self-built lustre-client-dkms require... Resolved
Rank (Obsolete): 9223372036854775807

 Description   

Announcing the GA release of Red Hat Enterprise Linux 9.0:

With Red Hat Enterprise Linux 9, you can:

Innovate - ships with GCC 11 (GNU Compiler Collection) and the latest versions of LLVM, Rust, and Go compilers, empowering developers to modernize their applications continually. Python 3.9 is included in Red Hat Enterprise Linux 9, bringing a faster release schedule, performance boosts, dictionary union operators, and more consistent and stable internal APIs.

Optimize - provides new Image Builder capabilities, including support for bare-metal deployments and customized file system settings to help organizations save time and ensure consistency when deploying and managing systems at scale. Red Hat Enterprise Linux 9 now offers Image Builder service to allow organizations to build a standardized and optimized operating system image through our hosted service and deploy it to your cloud provider of choice.

Protect - provides enhanced user authentication logs (via SSSD), web console support for smart card authentication with Sudo and SSH (Secure Shell client), disabled root login via SSH by default, and improved SELinux performance. Red Hat Enterprise Linux 9 also offers integrated OpenSSL 3 cryptographic framework, enhanced OpenSCAP profile, and integrity measurement architecture (IMA) digital hashes and signatures - to assist how organizations manage security and remain compliant when deploying new systems or managing existing infrastructures.

Trust - offers enhanced web console performance metrics, including Kernel live patching management through the web console, new System Roles for Postfix, Firewall, HA Cluster - to make it easier for organizations to automate manual tasks, standardize deployment at scale, and simplify day-to-day administration of systems. Red Hat Enterprise Linux 9 also offers improved scalability of Performance Co-Pilot (PCP) and Link Time Optimization (LTO) to help organizations identify, analyze and optimize the performance of their Red Hat Enterprise Linux systems with complete confidence.

https://access.redhat.com/announcements/6958409



 Comments   
Comment by Jian Yu [ 19/May/22 ]

Kernel version: 5.14.0-70.13.1.el9_0

Comment by Gerrit Updater [ 30/Jun/22 ]

"Jian Yu <yujian@whamcloud.com>" uploaded a new patch: https://review.whamcloud.com/47847
Subject: LU-15874 kernel: new kernel [RHEL 9.0 5.14.0-70.17.1.el9_0]
Project: fs/lustre-release
Branch: master
Current Patch Set: 1
Commit: 55e556e853285f9de55caa8b44b72c3fa3217de9

Comment by Gerrit Updater [ 02/Jul/22 ]

"Jian Yu <yujian@whamcloud.com>" uploaded a new patch: https://review.whamcloud.com/47857
Subject: LU-15874 kernel: new kernel [RHEL 9.0 5.14.0-70.17.1.el9_0]
Project: fs/lustre-release
Branch: b2_15
Current Patch Set: 1
Commit: 69f96cd9653a26e5838c8d9b1b580c56cea0daed

Comment by Alex Deiter [ 15/Jul/22 ]

Please let me fix few trivial Python3-related issues:

stack@k8s-node1:~/src/lustre-release$ find lipe -type f -name '*.py' -exec  python3 -m py_compile {} ';'
  File "lipe/pybuild/lipe_expression_tests.py", line 1163
    expected_value = 00170000 & value
                            ^
SyntaxError: invalid token

  File "lipe/pylipe/lipe_find.py", line 2003
    if mode > 07777:
                  ^
SyntaxError: invalid token

  File "lipe/pylipe/lipe.py", line 142
    self.fac_start_index = -1L
                             ^
SyntaxError: invalid syntax

  File "lipe/pylipe/lipe_flist_handle.py", line 410
    start = -1L
              ^
SyntaxError: invalid syntax

  File "lipe/pylipe/lipe_convert_expr.py", line 1573
    if mode > 07777:
                  ^
SyntaxError: invalid token

Comment by Alex Deiter [ 15/Jul/22 ]

And few other Python3-related issues:

stack@k8s-node1:~/src/lustre-release$ find lipe -type f -name '*.py' | xargs -L1 -rt pylint3
pylint3 lipe/pybuild/__init__.py 
Using config file /opt/stack/.pylintrc

--------------------------------------------------------------------
Your code has been rated at 10.00/10 (previous run: 10.00/10, +0.00)

pylint3 lipe/pybuild/lipe_expression_tests.py 
Using config file /opt/stack/.pylintrc
************* Module pybuild.lipe_expression_tests
C:1136, 0: Line too long (101/100) (line-too-long)
C:1137, 0: Line too long (101/100) (line-too-long)
E: 15, 0: No name 'lipe_constant' in module 'pylipe' (no-name-in-module)
E:169,22: Instance of 'dict' has no 'iteritems' member (no-member)
C:1259, 8: Variable name "find_xtime_greater_10days_prefix" doesn't conform to snake_case naming style (invalid-name)
C:1344, 8: Variable name "fd" doesn't conform to snake_case naming style (invalid-name)

------------------------------------------------------------------
Your code has been rated at 9.85/10 (previous run: 9.85/10, +0.00)

pylint3 lipe/pylipe/lipe_find.py 
Using config file /opt/stack/.pylintrc
************* Module pylipe.lipe_find
C:624, 0: Line too long (141/100) (line-too-long)
C:629, 0: Line too long (114/100) (line-too-long)
C:630, 0: Line too long (110/100) (line-too-long)
C:632, 0: Line too long (111/100) (line-too-long)
C:633, 0: Line too long (115/100) (line-too-long)
C:637, 0: Line too long (116/100) (line-too-long)
C:638, 0: Line too long (125/100) (line-too-long)
C:640, 0: Line too long (115/100) (line-too-long)
C:712, 0: Line too long (104/100) (line-too-long)
C:715, 0: Line too long (108/100) (line-too-long)
C:716, 0: Line too long (104/100) (line-too-long)
C:1086, 0: Unnecessary parens after 'while' keyword (superfluous-parens)
C:1829, 0: Unnecessary parens after 'return' keyword (superfluous-parens)
W:418, 0: Anomalous backslash in string: '\='. String constant might be missing an r prefix. (anomalous-backslash-in-string)
W:461, 0: Anomalous backslash in string: '\='. String constant might be missing an r prefix. (anomalous-backslash-in-string)
W:461, 0: Anomalous backslash in string: '\ '. String constant might be missing an r prefix. (anomalous-backslash-in-string)
E: 23, 0: No name 'lipe_constant' in module 'pylipe' (no-name-in-module)
C: 45, 0: Function name "lipe_find_parse_predefined_action" doesn't conform to snake_case naming style (invalid-name)
C:103,35: Variable name "fd" doesn't conform to snake_case naming style (invalid-name)
C:118,35: Variable name "fd" doesn't conform to snake_case naming style (invalid-name)
R:283, 4: Unnecessary "else" after "return" (no-else-return)
R:131, 0: Too many return statements (8/6) (too-many-return-statements)
R:332, 8: Unnecessary "else" after "return" (no-else-return)
R:355, 8: Unnecessary "else" after "return" (no-else-return)
R:383, 8: Unnecessary "else" after "return" (no-else-return)
R:405, 8: Unnecessary "else" after "return" (no-else-return)
R:449, 8: Unnecessary "else" after "return" (no-else-return)
R:524, 8: Unnecessary "else" after "return" (no-else-return)
C:578,11: Do not use `len(SEQUENCE)` to determine if a sequence is empty (len-as-condition)
C:603,11: Variable name "v" doesn't conform to snake_case naming style (invalid-name)
C:607,11: Variable name "v" doesn't conform to snake_case naming style (invalid-name)
C:611,11: Variable name "v" doesn't conform to snake_case naming style (invalid-name)
C:774,20: Variable name "cl" doesn't conform to snake_case naming style (invalid-name)
C:775,23: Do not use `len(SEQUENCE)` to determine if a sequence is empty (len-as-condition)
C:788,12: Variable name "rc" doesn't conform to snake_case naming style (invalid-name)
C:800,12: Variable name "rc" doesn't conform to snake_case naming style (invalid-name)
R:884, 4: Unnecessary "else" after "return" (no-else-return)
R:880, 0: Too many return statements (8/6) (too-many-return-statements)
R:906, 4: Unnecessary "else" after "return" (no-else-return)
R:902, 0: Too many return statements (8/6) (too-many-return-statements)
R:937, 8: Unnecessary "else" after "return" (no-else-return)
R:1004, 8: Unnecessary "else" after "return" (no-else-return)
R:1049, 8: Unnecessary "else" after "return" (no-else-return)
C:1069, 0: Function name "lipe_find_user_expression_format" doesn't conform to snake_case naming style (invalid-name)
R:1130, 8: Unnecessary "else" after "return" (no-else-return)
R:1175, 8: Unnecessary "else" after "return" (no-else-return)
R:1238, 8: Unnecessary "else" after "return" (no-else-return)
R:1254, 8: Unnecessary "else" after "return" (no-else-return)
R:1375, 8: Unnecessary "else" after "return" (no-else-return)
R:1376,12: Unnecessary "else" after "return" (no-else-return)
R:1386,12: Unnecessary "else" after "return" (no-else-return)
R:1401, 8: Unnecessary "else" after "return" (no-else-return)
R:1518, 8: Unnecessary "else" after "return" (no-else-return)
R:1532, 8: Unnecessary "else" after "return" (no-else-return)
R:1595, 8: Unnecessary "else" after "return" (no-else-return)
R:1616, 8: Unnecessary "else" after "return" (no-else-return)
R:1661, 8: Unnecessary "else" after "return" (no-else-return)
R:1675, 8: Unnecessary "else" after "return" (no-else-return)
R:1736, 8: Unnecessary "else" after "return" (no-else-return)
R:1757, 8: Unnecessary "else" after "return" (no-else-return)
R:1790, 8: Unnecessary "else" after "return" (no-else-return)
R:1824, 8: Unnecessary "else" after "return" (no-else-return)
R:1873, 8: Unnecessary "else" after "return" (no-else-return)
R:1887, 8: Unnecessary "else" after "return" (no-else-return)
R:1946, 8: Unnecessary "else" after "return" (no-else-return)
E:2328, 4: Undefined variable 'reload' (undefined-variable)
E:2329, 4: Module 'sys' has no 'setdefaultencoding' member; maybe 'getdefaultencoding'? (no-member)

------------------------------------------------------------------
Your code has been rated at 9.39/10 (previous run: 9.39/10, +0.00)

pylint3 lipe/pylipe/__init__.py 
Using config file /opt/stack/.pylintrc
************* Module pylipe
E:  6,11: Undefined variable name 'lipe_constant' in __all__ (undefined-all-variable)

----------------------------------------------------------------------
Your code has been rated at -40.00/10 (previous run: -40.00/10, +0.00)

pylint3 lipe/pylipe/lipe_launch.py 
Using config file /opt/stack/.pylintrc

--------------------------------------------------------------------
Your code has been rated at 10.00/10 (previous run: 10.00/10, +0.00)

pylint3 lipe/pylipe/ldsync.py 
Using config file /opt/stack/.pylintrc
************* Module pylipe.ldsync
C: 18, 0: Constant name "dry_run" doesn't conform to UPPER_CASE naming style (invalid-name)
C: 19, 0: Constant name "content" doesn't conform to UPPER_CASE naming style (invalid-name)
C: 20, 0: Constant name "delete" doesn't conform to UPPER_CASE naming style (invalid-name)
C: 21, 0: Constant name "acls" doesn't conform to UPPER_CASE naming style (invalid-name)
C: 22, 0: Constant name "verbose" doesn't conform to UPPER_CASE naming style (invalid-name)
C: 23, 0: Constant name "mpi_opts" doesn't conform to UPPER_CASE naming style (invalid-name)
C: 24, 0: Constant name "src_dir" doesn't conform to UPPER_CASE naming style (invalid-name)
C: 25, 0: Constant name "tgt_dir" doesn't conform to UPPER_CASE naming style (invalid-name)
C: 26, 0: Constant name "logdir" doesn't conform to UPPER_CASE naming style (invalid-name)
E: 99, 8: Undefined variable 'reload' (undefined-variable)
C:108, 4: Constant name "dry_run" doesn't conform to UPPER_CASE naming style (invalid-name)
C:109, 4: Constant name "content" doesn't conform to UPPER_CASE naming style (invalid-name)
C:110, 4: Constant name "delete" doesn't conform to UPPER_CASE naming style (invalid-name)
C:111, 4: Constant name "acls" doesn't conform to UPPER_CASE naming style (invalid-name)
C:112, 4: Constant name "verbose" doesn't conform to UPPER_CASE naming style (invalid-name)
C:113, 4: Constant name "mpi_opts" doesn't conform to UPPER_CASE naming style (invalid-name)
C:114, 4: Constant name "src_dir" doesn't conform to UPPER_CASE naming style (invalid-name)
C:115, 4: Constant name "tgt_dir" doesn't conform to UPPER_CASE naming style (invalid-name)

------------------------------------------------------------------
Your code has been rated at 7.98/10 (previous run: 7.98/10, +0.00)

pylint3 lipe/pylipe/lipe.py 
Using config file /opt/stack/.pylintrc
************* Module pylipe.lipe
C:308, 0: Function name "flist_archive_action_result_files" doesn't conform to snake_case naming style (invalid-name)
R:490, 0: Too many return statements (7/6) (too-many-return-statements)
E:675,44: Instance of 'dict' has no 'iteritems' member (no-member)
W:791, 8: No exception type(s) specified (bare-except)
C:816,52: Variable name "fd" doesn't conform to snake_case naming style (invalid-name)

------------------------------------------------------------------
Your code has been rated at 9.81/10 (previous run: 9.81/10, +0.00)

pylint3 lipe/pylipe/lipe_flist_handle.py 
Using config file /opt/stack/.pylintrc
************* Module pylipe.lipe_flist_handle
C:515, 0: Line too long (104/100) (line-too-long)
C:516, 0: Line too long (107/100) (line-too-long)
C:518, 0: Line too long (101/100) (line-too-long)
C:141,15: Variable name "v" doesn't conform to snake_case naming style (invalid-name)
C:156, 4: Argument name "fp" doesn't conform to snake_case naming style (invalid-name)
W:189, 8: No exception type(s) specified (bare-except)
W:264, 4: No exception type(s) specified (bare-except)
C:270, 0: Function name "lipe_flist_handle_exec_cmd_batch" doesn't conform to snake_case naming style (invalid-name)
C:285, 4: Variable name "rc" doesn't conform to snake_case naming style (invalid-name)
C:297,12: Variable name "rc" doesn't conform to snake_case naming style (invalid-name)
C:322,19: Variable name "v" doesn't conform to snake_case naming style (invalid-name)
C:337,20: Variable name "rc" doesn't conform to snake_case naming style (invalid-name)
C:348,15: Variable name "v" doesn't conform to snake_case naming style (invalid-name)
C:364,12: Variable name "rc" doesn't conform to snake_case naming style (invalid-name)
E:379, 8: Undefined variable 'reload' (undefined-variable)
E:445,20: Undefined variable 'long' (undefined-variable)
E:447,18: Undefined variable 'long' (undefined-variable)

------------------------------------------------------------------
Your code has been rated at 9.15/10 (previous run: 9.15/10, +0.00)

pylint3 lipe/pylipe/lipe_convert_expr.py 
Using config file /opt/stack/.pylintrc
************* Module pylipe.lipe_convert_expr
C:394, 0: Line too long (104/100) (line-too-long)
C:397, 0: Line too long (108/100) (line-too-long)
C:398, 0: Line too long (104/100) (line-too-long)
C:656, 0: Unnecessary parens after 'while' keyword (superfluous-parens)
C:1399, 0: Unnecessary parens after 'return' keyword (superfluous-parens)
W:132, 0: Anomalous backslash in string: '\='. String constant might be missing an r prefix. (anomalous-backslash-in-string)
W:175, 0: Anomalous backslash in string: '\='. String constant might be missing an r prefix. (anomalous-backslash-in-string)
W:175, 0: Anomalous backslash in string: '\ '. String constant might be missing an r prefix. (anomalous-backslash-in-string)
E: 21, 0: No name 'lipe_constant' in module 'pylipe' (no-name-in-module)
R: 46, 8: Unnecessary "else" after "return" (no-else-return)
R: 69, 8: Unnecessary "else" after "return" (no-else-return)
R: 97, 8: Unnecessary "else" after "return" (no-else-return)
R:119, 8: Unnecessary "else" after "return" (no-else-return)
R:163, 8: Unnecessary "else" after "return" (no-else-return)
R:238, 8: Unnecessary "else" after "return" (no-else-return)
C:281,11: Do not use `len(SEQUENCE)` to determine if a sequence is empty (len-as-condition)
C:306,11: Variable name "v" doesn't conform to snake_case naming style (invalid-name)
C:310,11: Variable name "v" doesn't conform to snake_case naming style (invalid-name)
C:314,11: Variable name "v" doesn't conform to snake_case naming style (invalid-name)
R:454, 4: Unnecessary "else" after "return" (no-else-return)
R:450, 0: Too many return statements (8/6) (too-many-return-statements)
R:476, 4: Unnecessary "else" after "return" (no-else-return)
R:472, 0: Too many return statements (8/6) (too-many-return-statements)
R:507, 8: Unnecessary "else" after "return" (no-else-return)
R:574, 8: Unnecessary "else" after "return" (no-else-return)
R:619, 8: Unnecessary "else" after "return" (no-else-return)
C:639, 0: Function name "lipe_find_user_expression_format" doesn't conform to snake_case naming style (invalid-name)
R:700, 8: Unnecessary "else" after "return" (no-else-return)
R:745, 8: Unnecessary "else" after "return" (no-else-return)
R:808, 8: Unnecessary "else" after "return" (no-else-return)
R:824, 8: Unnecessary "else" after "return" (no-else-return)
R:945, 8: Unnecessary "else" after "return" (no-else-return)
R:946,12: Unnecessary "else" after "return" (no-else-return)
R:956,12: Unnecessary "else" after "return" (no-else-return)
R:971, 8: Unnecessary "else" after "return" (no-else-return)
R:1088, 8: Unnecessary "else" after "return" (no-else-return)
R:1102, 8: Unnecessary "else" after "return" (no-else-return)
R:1165, 8: Unnecessary "else" after "return" (no-else-return)
R:1186, 8: Unnecessary "else" after "return" (no-else-return)
R:1231, 8: Unnecessary "else" after "return" (no-else-return)
R:1245, 8: Unnecessary "else" after "return" (no-else-return)
R:1306, 8: Unnecessary "else" after "return" (no-else-return)
R:1327, 8: Unnecessary "else" after "return" (no-else-return)
R:1360, 8: Unnecessary "else" after "return" (no-else-return)
R:1394, 8: Unnecessary "else" after "return" (no-else-return)
R:1443, 8: Unnecessary "else" after "return" (no-else-return)
R:1457, 8: Unnecessary "else" after "return" (no-else-return)
R:1516, 8: Unnecessary "else" after "return" (no-else-return)
E:1898, 4: Undefined variable 'reload' (undefined-variable)
E:1899, 4: Module 'sys' has no 'setdefaultencoding' member; maybe 'getdefaultencoding'? (no-member)

------------------------------------------------------------------
Your code has been rated at 9.37/10 (previous run: 9.37/10, +0.00)

pylint3 lipe/pyloris/__init__.py 
Using config file /opt/stack/.pylintrc

--------------------------------------------------------------------
Your code has been rated at 10.00/10 (previous run: 10.00/10, +0.00)

pylint3 lipe/pyloris/loris_backup.py 
Using config file /opt/stack/.pylintrc
************* Module pyloris.loris_backup
E: 11, 0: Unable to import 'filelock' (import-error)
R: 23, 0: Either all return statements in a function should return an expression, or none of them should. (inconsistent-return-statements)
E:174, 8: Undefined variable 'reload' (undefined-variable)
C: 12, 0: third party import "import yaml" should be placed before "import filelock" (wrong-import-order)

------------------------------------------------------------------
Your code has been rated at 9.15/10 (previous run: 9.15/10, +0.00)

pylint3 lipe/pyloris/loris_test.py 
Using config file /opt/stack/.pylintrc
************* Module pyloris.loris_test
R: 77, 4: Either all return statements in a function should return an expression, or none of them should. (inconsistent-return-statements)
C:205, 7: Do not use `len(SEQUENCE)` to determine if a sequence is empty (len-as-condition)
C:209, 7: Do not use `len(SEQUENCE)` to determine if a sequence is empty (len-as-condition)
R:286, 0: Either all return statements in a function should return an expression, or none of them should. (inconsistent-return-statements)
E:349, 8: Undefined variable 'reload' (undefined-variable)

------------------------------------------------------------------
Your code has been rated at 9.63/10 (previous run: 9.63/10, +0.00)

pylint3 lipe/pyloris/lustre_device.py 
Using config file /opt/stack/.pylintrc

--------------------------------------------------------------------
Your code has been rated at 10.00/10 (previous run: 10.00/10, +0.00)

pylint3 lipe/pyloris/lustre_cluster.py 
Using config file /opt/stack/.pylintrc

--------------------------------------------------------------------
Your code has been rated at 10.00/10 (previous run: 10.00/10, +0.00)

pylint3 lipe/pyloris/lbackup.py 
Using config file /opt/stack/.pylintrc
************* Module pyloris.lbackup
E:1139, 0: Bad option value 'redefined-variable-type' (bad-option-value)
C:301,11: Do not use `len(SEQUENCE)` to determine if a sequence is empty (len-as-condition)
R:572, 4: Either all return statements in a function should return an expression, or none of them should. (inconsistent-return-statements)
W:915, 4: Parameters differ from overridden 'bs_recover_single_file_func' method (arguments-differ)
W:987, 4: Parameters differ from overridden 'bs_recover_single_file_func' method (arguments-differ)
W:1097, 4: Parameters differ from overridden 'bs_recover_single_file_func' method (arguments-differ)

------------------------------------------------------------------
Your code has been rated at 9.84/10 (previous run: 9.84/10, +0.00)

pylint3 lipe/pylustre/__init__.py 
Using config file /opt/stack/.pylintrc

--------------------------------------------------------------------
Your code has been rated at 10.00/10 (previous run: 10.00/10, +0.00)

pylint3 lipe/pylustre/cstr.py 
Using config file /opt/stack/.pylintrc
************* Module pylustre.cstr
C: 37, 0: Trailing newlines (trailing-newlines)

------------------------------------------------------------------
Your code has been rated at 9.67/10 (previous run: 9.67/10, +0.00)

pylint3 lipe/pylustre/watched_io.py 
Using config file /opt/stack/.pylintrc
************* Module pylustre.watched_io
E: 27,30: Undefined variable 'basestring' (undefined-variable)
E: 64,15: Undefined variable 'unicode' (undefined-variable)
C: 77, 7: Do not use `len(SEQUENCE)` to determine if a sequence is empty (len-as-condition)
C: 88, 7: Do not use `len(SEQUENCE)` to determine if a sequence is empty (len-as-condition)
C: 99, 7: Do not use `len(SEQUENCE)` to determine if a sequence is empty (len-as-condition)
C:110, 7: Do not use `len(SEQUENCE)` to determine if a sequence is empty (len-as-condition)
C:122, 7: Do not use `len(SEQUENCE)` to determine if a sequence is empty (len-as-condition)

------------------------------------------------------------------
Your code has been rated at 7.62/10 (previous run: 7.62/10, +0.00)

pylint3 lipe/pylustre/cmd_general.py 
Using config file /opt/stack/.pylintrc
************* Module pylustre.cmd_general
E: 12, 0: Unable to import 'filelock' (import-error)
E: 35, 8: Undefined variable 'reload' (undefined-variable)
C: 62, 7: Do not use `len(SEQUENCE)` to determine if a sequence is empty (len-as-condition)
W:108,12: No exception type(s) specified (bare-except)

------------------------------------------------------------------
Your code has been rated at 8.29/10 (previous run: 8.29/10, +0.00)

pylint3 lipe/pylustre/lustre.py 
Using config file /opt/stack/.pylintrc
************* Module pylustre.lustre
R:147, 4: Too many return statements (10/6) (too-many-return-statements)
C:799,11: Do not use `len(SEQUENCE)` to determine if a sequence is empty (len-as-condition)
C:845,11: Do not use `len(SEQUENCE)` to determine if a sequence is empty (len-as-condition)
R:862, 8: Unnecessary "else" after "return" (no-else-return)
C:862,11: Do not use `len(SEQUENCE)` to determine if a sequence is empty (len-as-condition)
C:921,11: Do not use `len(SEQUENCE)` to determine if a sequence is empty (len-as-condition)
R:958,12: Unnecessary "else" after "return" (no-else-return)
R:959,16: Unnecessary "else" after "return" (no-else-return)
R:1126, 8: Unnecessary "else" after "return" (no-else-return)
C:1249,11: Do not use `len(SEQUENCE)` to determine if a sequence is empty (len-as-condition)
E:1254,33: Instance of 'dict' has no 'iteritems' member (no-member)
E:1261,33: Instance of 'dict' has no 'iteritems' member (no-member)
E:1283,33: Instance of 'dict' has no 'iteritems' member (no-member)
E:1290,33: Instance of 'dict' has no 'iteritems' member (no-member)
E:1297,36: Instance of 'dict' has no 'iteritems' member (no-member)
E:1403,36: Instance of 'dict' has no 'iteritems' member (no-member)
E:1410,33: Instance of 'dict' has no 'iteritems' member (no-member)
E:1417,33: Instance of 'dict' has no 'iteritems' member (no-member)
C:1502,41: Variable name "fd" doesn't conform to snake_case naming style (invalid-name)
C:1782,11: Do not use `len(SEQUENCE)` to determine if a sequence is empty (len-as-condition)
C:1945,11: Do not use `len(SEQUENCE)` to determine if a sequence is empty (len-as-condition)
R:2047,12: Unnecessary "else" after "return" (no-else-return)
C:2164, 7: Do not use `len(SEQUENCE)` to determine if a sequence is empty (len-as-condition)
C:2576, 4: Method name "lsh_get_mdt_readpage_tbf_rule_list" doesn't conform to snake_case naming style (invalid-name)
C:2582, 4: Method name "lsh_get_mdt_setattr_tbf_rule_list" doesn't conform to snake_case naming style (invalid-name)
C:3673,15: Do not use `len(SEQUENCE)` to determine if a sequence is empty (len-as-condition)
C:3675,15: Do not use `len(SEQUENCE)` to determine if a sequence is empty (len-as-condition)
C:3677,15: Do not use `len(SEQUENCE)` to determine if a sequence is empty (len-as-condition)
C:3691,11: Do not use `len(SEQUENCE)` to determine if a sequence is empty (len-as-condition)
C:3698,11: Do not use `len(SEQUENCE)` to determine if a sequence is empty (len-as-condition)
C:3705,11: Do not use `len(SEQUENCE)` to determine if a sequence is empty (len-as-condition)
C:3891, 4: Variable name "rc" doesn't conform to snake_case naming style (invalid-name)
C:4378,11: Do not use `len(SEQUENCE)` to determine if a sequence is empty (len-as-condition)

------------------------------------------------------------------
Your code has been rated at 9.73/10 (previous run: 9.73/10, +0.00)

pylint3 lipe/pylustre/ssh_host.py 
Using config file /opt/stack/.pylintrc
************* Module pylustre.ssh_host
E:127,31: Undefined variable 'basestring' (undefined-variable)
R:246,12: Unnecessary "else" after "return" (no-else-return)
R:251,16: Unnecessary "else" after "return" (no-else-return)
R:278, 8: Unnecessary "else" after "return" (no-else-return)
R:281,12: Unnecessary "else" after "return" (no-else-return)
C:330,39: Do not use `len(SEQUENCE)` to determine if a sequence is empty (len-as-condition)
C:471,11: Do not use `len(SEQUENCE)` to determine if a sequence is empty (len-as-condition)
C:481,23: Do not use `len(SEQUENCE)` to determine if a sequence is empty (len-as-condition)
R:496, 8: Unnecessary "else" after "return" (no-else-return)
E:592,30: Undefined variable 'basestring' (undefined-variable)
C:728,11: Do not use `len(SEQUENCE)` to determine if a sequence is empty (len-as-condition)
C:750,11: Do not use `len(SEQUENCE)` to determine if a sequence is empty (len-as-condition)
E:784,30: Undefined variable 'basestring' (undefined-variable)
C:888,14: Do not use `len(SEQUENCE)` to determine if a sequence is empty (len-as-condition)
R:1100,16: Unnecessary "else" after "return" (no-else-return)
R:1547, 8: Unnecessary "else" after "return" (no-else-return)
C:1547,30: Do not use `len(SEQUENCE)` to determine if a sequence is empty (len-as-condition)

------------------------------------------------------------------
Your code has been rated at 9.77/10 (previous run: 9.77/10, +0.00)

pylint3 lipe/pylustre/time_util.py 
Using config file /opt/stack/.pylintrc

--------------------------------------------------------------------
Your code has been rated at 10.00/10 (previous run: 10.00/10, +0.00)

pylint3 lipe/pylustre/rwlock.py 
Using config file /opt/stack/.pylintrc
************* Module pylustre.rwlock
C: 38,14: Do not use `len(SEQUENCE)` to determine if a sequence is empty (len-as-condition)
C: 47,19: Do not use `len(SEQUENCE)` to determine if a sequence is empty (len-as-condition)
C:116,17: Do not use `len(SEQUENCE)` to determine if a sequence is empty (len-as-condition)
C:117,35: Do not use `len(SEQUENCE)` to determine if a sequence is empty (len-as-condition)

------------------------------------------------------------------
Your code has been rated at 9.50/10 (previous run: 9.50/10, +0.00)

pylint3 lipe/pylustre/lyaml.py 
Using config file /opt/stack/.pylintrc

--------------------------------------------------------------------
Your code has been rated at 10.00/10 (previous run: 10.00/10, +0.00)

pylint3 lipe/pylustre/daemon.py 
Using config file /opt/stack/.pylintrc

--------------------------------------------------------------------
Your code has been rated at 10.00/10 (previous run: 10.00/10, +0.00)

pylint3 lipe/pylustre/clog.py 
Using config file /opt/stack/.pylintrc
************* Module pylustre.clog
E:157,31: Undefined variable 'basestring' (undefined-variable)

------------------------------------------------------------------
Your code has been rated at 9.78/10 (previous run: 9.78/10, +0.00)

pylint3 lipe/pylustre/utils.py 
Using config file /opt/stack/.pylintrc
************* Module pylustre.utils
E: 18, 0: Unable to import 'StringIO' (import-error)
R: 91, 0: Either all return statements in a function should return an expression, or none of them should. (inconsistent-return-statements)
E:153,29: Undefined variable 'basestring' (undefined-variable)
C:286,19: Do not use `len(SEQUENCE)` to determine if a sequence is empty (len-as-condition)
E:385,49: Undefined variable 'basestring' (undefined-variable)
E:416,33: Module 'string' has no 'lowercase' member (no-member)
R:513, 4: Unnecessary "else" after "return" (no-else-return)
R:509, 0: Too many return statements (8/6) (too-many-return-statements)
C:622, 8: Variable name "st" doesn't conform to snake_case naming style (invalid-name)
E:627, 8: Undefined variable 'log' (undefined-variable)

------------------------------------------------------------------
Your code has been rated at 9.12/10 (previous run: 9.12/10, +0.00)

pylint3 lipe/pylustre/parallel.py 
Using config file /opt/stack/.pylintrc
************* Module pylustre.parallel
C:161,19: Do not use `len(SEQUENCE)` to determine if a sequence is empty (len-as-condition)
C:185,15: Do not use `len(SEQUENCE)` to determine if a sequence is empty (len-as-condition)
C:185,45: Do not use `len(SEQUENCE)` to determine if a sequence is empty (len-as-condition)

------------------------------------------------------------------
Your code has been rated at 9.76/10 (previous run: 9.76/10, +0.00)
Comment by Alex Deiter [ 15/Jul/22 ]

Notes:

  • There is no 'long integer' in Python 3 anymore.
  • The long() function is no longer supported by Python 3. It only has one built-in integral type, named int()
  • Octal literals are no longer of the form 0720- use 0o720 instead.
  • The print statement has been replaced with a print() function, with keyword arguments to replace most of the special syntax of the old print statement (PEP 3105).
  • Also, the dict.iterkeys(), dict.iteritems() and dict.itervalues() methods are no longer supported.
  • The StringIO and cStringIO modules are gone. Instead, import the io module and use io.StringIO or io.BytesIO for text and data respectively.
  • The builtin basestring abstract type was removed. Use str instead.
  • In Python 3, use string.ascii_lowercase instead of string.lowercase.

Reference: https://docs.python.org/3.0/whatsnew/3.0.html

Comment by Jian Yu [ 15/Jul/22 ]

Thank you, Alex.

Comment by Alex Deiter [ 15/Jul/22 ]

Hello yujian,

I rebased the original patch (2.14.0-ddn53) and add only minimum syntax changes - required for py_compile.
But I'll continue to fix it - because I found a lot of issues related to Python2 -> Python3 migration.

Thank you very much!

Comment by Sebastien Buisson [ 29/Jul/22 ]

I finally managed to reproduce on my test cluster the error seen with sanity-pcc test_21j on RHEL 9.0 client. It turns out this problem is due to the use of mrsh for pdsh rcmd module, instead of ssh, in the cfg file used to run auster (PDSH env variable).

So this problem is exactly the same as what we hit when we introduced CentOS/RHEL8, see LU-14443 and ATM-1962. I just opened ATM-2490 to tackle this issue on RHEL9.

Comment by Sebastien Buisson [ 01/Aug/22 ]

As can be seen from test results at https://testing.whamcloud.com/test_sessions/03219e38-5c17-43c2-9e90-b34b1f642021, sanity-pcc test_21j is now passing on RHEL9.0 client.

Comment by Jian Yu [ 15/Aug/22 ]

The new kernel version is 5.14.0-70.22.1.el9_0:
https://access.redhat.com/errata/RHSA-2022:6003

Comment by Gerrit Updater [ 19/Aug/22 ]

"Oleg Drokin <green@whamcloud.com>" merged in patch https://review.whamcloud.com/47847/
Subject: LU-15874 kernel: new kernel [RHEL 9.0 5.14.0-70.22.1.el9_0]
Project: fs/lustre-release
Branch: master
Current Patch Set:
Commit: bbe5e9818053e43ebf97e2d3fa240917bfbd8336

Comment by Peter Jones [ 19/Aug/22 ]

Landed for 2.16

Comment by Gerrit Updater [ 20/Aug/22 ]

"Oleg Drokin <green@whamcloud.com>" merged in patch https://review.whamcloud.com/47857/
Subject: LU-15874 kernel: new kernel [RHEL 9.0 5.14.0-70.22.1.el9_0]
Project: fs/lustre-release
Branch: b2_15
Current Patch Set:
Commit: 2d50865d2457ee4570aa4a5829c2e87ea69dd4c0

Generated at Sat Feb 10 03:22:02 UTC 2024 using Jira 9.4.14#940014-sha1:734e6822bbf0d45eff9af51f82432957f73aa32c.