Skip to main content

PATCH for Vertica 7 vertica/network/SSH.py in nicInfoFromIfconfig in getNetworkProfiles, fix for reg

  • January 16, 2014
  • 3 replies
  • 18 views

Stig_1
Hello,
 
I was having problems with a clean install of Vertica 7 on RHEL6 hosts.  Initially as an error when creating a new database after the install:
 https://community.vertica.com/vertica/topics/error_when_creating_database_after_clean_install_of_ver...
spread was not running, the vertica.log showed it either failing to start or only starting on one host, the spread config which as of Veritca 7 is named spread.conf, auto-generated by vertica and located in the database catalog directory looked to be incorrect as it just had entries for 127.0.0.1 and not the 3 hosts/nodes I was passing to the install script.
 
The problem was because in vertica/network/SSH.py in nicInfoFromIfconfig in getNetworkProfiles the regexp for ifconfig is:
  
parsed = re.findall(r'^(\S+).*?inet addr:(\S+).*?Bcast:(\S+).*?Mask:(\S+)', ifconfig, re.S | re.M)
 
The ".*" between "inet addr" and "Bcast" causes it to match incorrectly on the loopback interface, this is because of module content "re.S" (DOTALL) which makes the "." special character match any character at all, including a newline.  Here is a reproducer and two ways to fix it:

import re # regular expressionsdef nicInfoFromIfconfig(host,ifconfig):
    parsed = re.findall(r'^(\S+).*?inet addr:(\S+).*?Bcast:(\S+).*?Mask:(\S+)', ifconfig, re.S | re.M)
    answer = None
    print "parsed=%s" % (parsed)
    for interface,addr,bcast,mask in parsed:
        print "interface=%s addr=%s bcast=%s mask=%s" % (interface,addr,bcast,mask)
        # pick an bcast if addr matches host addr, or bcast matches spec'd bcast addr
        if bcast == subnet or (not answer and addr == host):
            answer = [addr, bcast]
    return answermy_ifconfig = '''eth0       Link encap:Ethernet
          inet addr:15.216.151.36  Bcast:15.216.151.255  Mask:255.255.255.0lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0p3p2      Link encap:Ethernet  HWaddr 00:10:18:D3:FB:5D
          inet addr:192.168.20.20  Bcast:192.168.20.255  Mask:255.255.255.0
'''subnet='192.168.20.255'print nicInfoFromIfconfig('192.168.20.20',my_ifconfig)
# incorrectly returns '127.0.0.1', '192.168.20.255']def FixFornicInfoFromIfconfig(host,ifconfig):
    parsed = re.findall(r'^(\S+).*?inet addr:(\S+)[^\n]*?Bcast:(\S+).*?Mask:(\S+)', ifconfig, re.S | re.M)
    answer = None
    print "parsed=%s" % (parsed)
    for interface,addr,bcast,mask in parsed:
        print "interface=%s addr=%s bcast=%s mask=%s" % (interface,addr,bcast,mask)
        # pick an bcast if addr matches host addr, or bcast matches spec'd bcast addr
        if bcast == subnet or (not answer and addr == host):
            answer = [addr, bcast]
    return answerprint FixFornicInfoFromIfconfig('192.168.20.20',my_ifconfig)
# correctly returns '192.168.20.20', '192.168.20.255']def AltFixFornicInfoFromIfconfig(host,ifconfig):
    parsed = re.findall(r'inet addr:(\S+).*?Bcast:(\S+).*?Mask:(\S+)', ifconfig, re.M)
    answer = None
    print "parsed=%s" % (parsed)
    for addr,bcast,mask in parsed:
        print "addr=%s bcast=%s mask=%s" % (addr,bcast,mask)
        # pick an bcast if addr matches host addr, or bcast matches spec'd bcast addr
        if bcast == subnet or (not answer and addr == host):
            answer = [addr, bcast]
    return answerprint AltFixFornicInfoFromIfconfig('192.168.20.20',my_ifconfig)
# correctly returns '192.168.20.20', '192.168.20.255']
 Output when run with /opt/vertica/oss/python/bin/python
 
parsed=[('eth0', '15.216.151.36', '15.216.151.255', '255.255.255.0'), ('lo', '127.0.0.1', '192.168.20.255', '255.255.255.0')]
interface=eth0 addr=15.216.151.36 bcast=15.216.151.255 mask=255.255.255.0
interface=lo addr=127.0.0.1 bcast=192.168.20.255 mask=255.255.255.0
['127.0.0.1', '192.168.20.255']
parsed=[('eth0', '15.216.151.36', '15.216.151.255', '255.255.255.0'), ('lo', '192.168.20.20', '192.168.20.255', '255.255.255.0')]
interface=eth0 addr=15.216.151.36 bcast=15.216.151.255 mask=255.255.255.0
interface=lo addr=192.168.20.20 bcast=192.168.20.255 mask=255.255.255.0
['192.168.20.20', '192.168.20.255']
parsed=[('15.216.151.36', '15.216.151.255', '255.255.255.0'), ('192.168.20.20', '192.168.20.255', '255.255.255.0')]
addr=15.216.151.36 bcast=15.216.151.255 mask=255.255.255.0
addr=192.168.20.20 bcast=192.168.20.255 mask=255.255.255.0
['192.168.20.20', '192.168.20.255']
 
Cheers.

3 replies

Forum|alt.badge.img+2
  • Participating Frequently
  • January 21, 2014
Thank you for reporting this problem and providing the detail required to address it quickly.  We are working on a fix for this issue.

Stig_1
  • Author
  • New Participant
  • March 5, 2014
SP1 release notes mention VER-30632, which looks like it could be a fix for this:
 https://my.vertica.com/docs/7.0.x/PDF/HP_Vertica_7.0.1_Release_Notes.pdf
Thanks.

Forum|alt.badge.img+2
  • Participating Frequently
  • March 5, 2014
This should be resolved in 7.0 SP1, yes. Please let us know if the problem persists.