Re: [AUTOTEST]telnet login fails in win2k8 DC 64. here are debug and other info

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Tue, Aug 4, 2009 at 10:06 PM, Michael Goldish<mgoldish@xxxxxxxxxx> wrote:
>
> ----- "sudhir kumar" <smalikphy@xxxxxxxxx> wrote:
>
>> On Tue, Aug 4, 2009 at 5:01 PM, Michael Goldish<mgoldish@xxxxxxxxxx>
>> wrote:
>> > Maybe the problem is related to how you implemented TAP support in
>> > your tree.  You're obviously not using user mode networking because
>> I do not understand what do you mean here. Yes the setup is a tap
>> network and I can login into the guest using the same command
>> manually. Here is the output
>> # telnet -l Administrator 10.0.99.100 23
>> Trying 10.0.99.100...
>> Connected to ichigo-dom100.linuxperf9025.net (10.0.99.100).
>> Escape character is '^]'.
>> Welcome to Microsoft Telnet Service
>>
>> password:
>>
>> *===============================================================
>> Microsoft Telnet Server.
>> *===============================================================
>> C:\Users\Administrator>
>>
>> > the guest's IP address is 10.0.99.100.  I'm not sure exactly what
>> the
>> > problem is, so can you print the connection command in
>> remote_login()?
>> > Add something like 'print "COMMAND: " + command' at the top of the
>> > function, and that might help us figure out what's wrong.
>> Here is the command:
>> 23:35:13 INFO | COMMAND: telnet -l Administrator 10.0.99.100 23
>>
>> So on further inspection the problem limits to that
>> read_nonblocking()
>>  is reading only 3 lines. So the culprit may be the following code
>>         data = ""
>>         while True:
>>             r, w, x = select.select([self.fd], [], [], timeout)
>>             if self.fd in r:
>>                 try:
>>                     data += os.read(self.fd, 1024)
>>                 except OSError:
>>                     return data
>>             else:
>>                 return data
>> in this function. Since all the 5 lines(including last empty line) do
>> not appear in one go it is possible that select() returns before the
>> whole lines have been writen to the file pointed by fd and read()
>> reads only those 3 lines(which looks to be less likely). I observe a
>> slight delay in printing the lines. First 3 lines are printed in one
>> go and the last two lines are printed after a very small(< 1 sec)
>> time. What do you say? I will try by putting one more call to read()
>> and see what happens.
>
> I don't think that'll help because it's OK to get 3 lines, wait a little,
> and then get 2 more lines.  read_until_output_matches() calls
> read_nonblocking() repeatedly to read output from the Telnet process, so
> pauses in output from the process are OK.
At this point my head is out of thoughts. Even putting a time.sleep()
before os.read() does not print any more lines. double read()
statement causes an indefinite wait after the telnet server starts
running in the guest. I am clueless now. Anyone else who faced the
same problem?
/me beats his head.....

> I thought it was a good idea to print the login command because although
> the IP is OK, maybe the port isn't, and in the logs we don't see what
> port ssh_login() is actually trying to connect to.
>
>> >
>> > ----- Original Message -----
>> > From: "sudhir kumar" <smalikphy@xxxxxxxxx>
>> > To: "Michael Goldish" <mgoldish@xxxxxxxxxx>
>> > Cc: "Lucas Meneghel Rodrigues" <mrodrigu@xxxxxxxxxx>, "Ryan Harper"
>> <ryanh@xxxxxxxxxx>, "kvm-devel" <kvm@xxxxxxxxxxxxxxx>
>> > Sent: Tuesday, August 4, 2009 9:43:42 AM (GMT+0200) Auto-Detected
>> > Subject: Re: [AUTOTEST]telnet login fails in win2k8 DC 64. here are
>> debug and  other info
>> >
>> > For making it more clear here are the timoeout debug prints
>> >
>> > 14:31:04 INFO | ('DEBUG: timeout in read_until_output_matches =%d',
>> 30)
>> > 14:31:04 INFO | ('DEBUG: internal_timeout in
>> read_until_output_matches
>> > =%d', 3.5)
>> > {sorry with little syntax typo :(  }
>> >
>> > On Tue, Aug 4, 2009 at 12:12 PM, sudhir kumar<smalikphy@xxxxxxxxx>
>> wrote:
>> >> On Tue, Aug 4, 2009 at 11:23 AM, Michael
>> Goldish<mgoldish@xxxxxxxxxx> wrote:
>> >>> Looks like there really are only 3 lines to read.
>> >>> Telnet is printing those lines, not windows. It's just indicating
>> >>> that it successfully connected. Windows is saying nothing.
>> >>>
>> >>> This is a little weird, because:
>> >>> - It can happen when the telnet server isn't running at all,
>> >>>  but it seemed to be running fine when you connected manually.
>> >>> - It can happen when trying to connect to the wrong port, but I
>> >>>  see you set the port to 23.
>> >>>
>> >>> It can also happen due to the short default timeout of 10
>> seconds.
>> >>> Windows can take longer than that to send something.
>> >> My manual observation also says that it does not take that much.
>> >>> Are you sure you increased the timeout? You only sent a log of 4
>> >> I increased the timeout and did not send the complete log. here
>> are
>> >> the start and end of the complete log
>> >>
>> >> 12:26:44 INFO | Waiting for guest to be up...
>> >> 12:26:44 INFO | DEBUG: in ssh_login ssh_prompt =
>> C:\Users\Administrator>
>> >> 12:26:44 INFO | DEBUG: in ssh_login timeout = 20
>> >> 12:26:47 INFO | DEBUG: Printing data read by read_nonblocking from
>> output:
>> >> 12:26:47 INFO | DEBUG: data read from output is Trying
>> 10.0.99.100...
>> >> 12:26:47 INFO | telnet: connect to address 10.0.99.100: No route to
>> host
>> >> 12:26:47 INFO | telnet: Unable to connect to remote host: No route
>> to host
>> >>
>> >> <snip>
>> >>
>> >> 12:30:48 INFO | DEBUG: Printing accumulated data read from output
>> done.
>> >> 12:30:48 INFO | DEBUG: Printing data after filter:
>> >> 12:30:48 INFO | DEBUG: filtered data is Escape character is '^]'.
>> >> 12:30:48 INFO | DEBUG: Printing data after filter done:
>> >> 12:30:50 ERROR| Test failed: Could not log into guest
>> >>
>> >>
>> >>> seconds (starting at 12:27:25). How long does
>> >>> read_until_output_matches() wait before it gives up?
>> >>
>> >> Here is the complete code flow with parameters.
>> >> in kvm_tests.py
>> >>    session = kvm_utils.wait_for(vm.ssh_login, 240, 0, 2)
>> >> which calls in kvm_utils.py
>> >>        output = func()
>> >> This calls ssh_login() in kvm_vm.py with default parameters and
>> the
>> >> default def is changed to have timeout 20 second instead of 10
>> >> seconds.
>> >>    def ssh_login(self, timeout=20):
>> >> This calls the telnet which calls remote_login() in kvm_utils.py
>> >>        if use_telnet:
>> >>            session = kvm_utils.telnet(address, port, username,
>> password,
>> >>                                       prompt, timeout)
>> >> So timeout is 20 now. This calls remote_login
>> >>    return remote_login(command, password, prompt, "\r\n", timeout)
>> >> PS: A dumb Question: Does "\r\n" have to do something with the
>> failure ?
>> >> So timeout is still 20. The next call is
>> >>    while True:
>> >>        (match, text) = sub.read_until_last_line_matches(
>> >>                [r"[Aa]re you sure", r"[Pp]assword:\s*$",
>> r"^\s*[Ll]ogin:\s*$",
>> >>                 r"[Cc]onnection.*closed",
>> r"[Cc]onnection.*refused", prompt],
>> >>                 timeout=timeout, internal_timeout=3.5)
>> >> which calls to
>> >>        return self.read_until_output_matches(patterns,
>> self.get_last_line,
>> >>                                              timeout,
>> internal_timeout,
>> >>                                              print_func)
>> >>
>> >> Hence this function waits for 20 seconds in each try. i think that
>> is
>> >> good enough.
>> >>
>> >> In my manual observation there is no delay between the above all
>> the
>> >> lines printed. So this should not be an issue. I can bet that there
>> is
>> >> not even a delay of 2 secs between these two lines:
>> >>  Escape character is '^]'.
>> >>  Welcome to Microsoft Telnet Service
>> >>
>> >> But yes there is a very small delay(looks < 1 second), which should
>> be
>> >> taken care by increased internal_timeout which i have increased to
>> >> around 3 seconds.
>> >>
>> >>>
>> >>> ----- Original Message -----
>> >>> From: "sudhir kumar" <smalikphy@xxxxxxxxx>
>> >>> To: "kvm-devel" <kvm@xxxxxxxxxxxxxxx>
>> >>> Cc: "Lucas Meneghel Rodrigues" <mrodrigu@xxxxxxxxxx>, "Michael
>> Goldish" <mgoldish@xxxxxxxxxx>, "Ryan Harper" <ryanh@xxxxxxxxxx>
>> >>> Sent: Tuesday, August 4, 2009 8:06:32 AM (GMT+0200) Auto-Detected
>> >>> Subject: [AUTOTEST]telnet login fails in win2k8 DC 64. here are
>> debug and  other info
>> >>>
>> >>> Hi,
>> >>> I am seeing a telnet failure in autotest to a win2k8 DC 64 bit
>> guest.
>> >>> I have tried some debugging and came to a conclusion that
>> >>> read_nonblocking() is reading only 3 lines. let me first print
>> the
>> >>> output of manual login
>> >>>
>> >>>  # telnet -l Administrator 10.0.99.100 23
>> >>> Trying 10.0.99.100...
>> >>> Connected to ichigo-dom100.linuxperf9025.net (10.0.99.100).
>> >>> Escape character is '^]'.
>> >>> Welcome to Microsoft Telnet Service
>> >>>
>> >>> password:
>> >>>
>> >>> *===============================================================
>> >>> Microsoft Telnet Server.
>> >>> *===============================================================
>> >>> C:\Users\Administrator>
>> >>>
>> >>> Now autotest only reads the first 3 lines(upto Escape.....). It
>> seems
>> >>> windows is doing something nasty here. I have put some debug
>> prints in
>> >>> the code and here is the output. let me first put the code
>> snippet
>> >>> from kvm_utils.py with added debug prints.
>> >>>
>> >>>    def read_until_output_matches(self, patterns,
>> filter=lambda(x):x,
>> >>>                                  timeout=30.0,
>> internal_timeout=3.0,
>> >>>                                  print_func=None):
>> >>> <snip>
>> >>>        end_time = time.time() + timeout
>> >>>        while time.time() < end_time:
>> >>>            # Read data from child
>> >>>            newdata = self.read_nonblocking(internal_timeout)
>> >>>            print("DEBUG: Printing data read by read_nonblocking
>> from output:")
>> >>>            print("DEBUG: data read from output is %s" % newdata)
>> >>>            print("DEBUG: Printing data read by read_nonblocking
>> from
>> >>> output done.")
>> >>>            # Print it if necessary
>> >>>            if print_func and newdata:
>> >>>                map(print_func, newdata.splitlines())
>> >>>            data += newdata
>> >>>            print("DEBUG: Printing accumulated data read from
>> output:")
>> >>>            print("DEBUG: accumulated data read from output is %s"
>> % data)
>> >>>            print("DEBUG: Printing accumulated data read from
>> output done.")
>> >>>
>> >>>            done = False
>> >>>            # Look for patterns
>> >>>            print("DEBUG: Printing data after filter:")
>> >>>            print("DEBUG: filtered data is %s" % filter(data))
>> >>>            print("DEBUG: Printing data after filter done:")
>> >>>            match = self.match_patterns(filter(data), patterns)
>> >>>            if match != None:
>> >>>                done = True
>> >>>            # Check if child has died
>> >>>            if self.poll() != None:
>> >>>                logging.debug("Process terminated with status %d",
>> self.poll())
>> >>>                done = True
>> >>>            # Are we done?
>> >>>            if done: break
>> >>> <snip>
>> >>>
>> >>> Here is the output once the guest comes up.
>> >>>
>> >>> 12:27:25 INFO | DEBUG: Printing data read by read_nonblocking from
>> output:
>> >>> 12:27:25 INFO | DEBUG: data read from output is Trying
>> 10.0.99.100...
>> >>> 12:27:25 INFO | Connected to ichigo-dom100.linuxperf9025.net
>> (10.0.99.100).
>> >>> 12:27:25 INFO | Escape character is '^]'.
>> >>> 12:27:25 INFO |
>> >>> 12:27:25 INFO | DEBUG: Printing data read by read_nonblocking from
>> output done.
>> >>> 12:27:25 INFO | DEBUG: Printing accumulated data read from
>> output:
>> >>> 12:27:25 INFO | DEBUG: accumulated data read from output is
>> Trying
>> >>> 10.0.99.100...
>> >>> 12:27:25 INFO | Connected to ichigo-dom100.linuxperf9025.net
>> (10.0.99.100).
>> >>> 12:27:25 INFO | Escape character is '^]'.
>> >>> 12:27:25 INFO |
>> >>> 12:27:25 INFO | DEBUG: Printing accumulated data read from output
>> done.
>> >>> 12:27:25 INFO | DEBUG: Printing data after filter:
>> >>> 12:27:25 INFO | DEBUG: filtered data is Escape character is '^]'.
>> >>> 12:27:25 INFO | DEBUG: Printing data after filter done:
>> >>> 12:27:29 INFO | DEBUG: Printing data read by read_nonblocking from
>> output:
>> >>> 12:27:29 INFO | DEBUG: data read from output is
>> >>> 12:27:29 INFO | DEBUG: Printing data read by read_nonblocking from
>> output done.
>> >>> 12:27:29 INFO | DEBUG: Printing accumulated data read from
>> output:
>> >>> 12:27:29 INFO | DEBUG: accumulated data read from output is
>> Trying
>> >>> 10.0.99.100...
>> >>> 12:27:29 INFO | Connected to ichigo-dom100.linuxperf9025.net
>> (10.0.99.100).
>> >>> 12:27:29 INFO | Escape character is '^]'.
>> >>> 12:27:29 INFO |
>> >>> 12:27:29 INFO | DEBUG: Printing accumulated data read from output
>> done.
>> >>> 12:27:29 INFO | DEBUG: Printing data after filter:
>> >>> 12:27:29 INFO | DEBUG: filtered data is Escape character is '^]'.
>> >>> 12:27:29 INFO | DEBUG: Printing data after filter done:
>> >>>
>> >>> and so on... timeout elapses and test fails.
>> >>>
>> >>> I am not able to find out why read_nonblocking() is reading only
>> 3
>> >>> lines. I have tried increasing the timeouts and internal_timeouts
>> as
>> >>> well. But no luck.
>> >>>
>> >>> Here is how my kvm_tests.cfg looks like.
>> >>> # colorful prompt, so migration_test_command will fail, try with
>> telnet
>> >>>                ssh_prompt = "C:\Users\Administrator>"
>> >>>                ssh_port = 23
>> >>>                use_telnet = yes
>> >>> Any clues ?
>> >>>
>> >>> --
>> >>> Sudhir Kumar
>> >>>
>> >>
>> >>
>> >>
>> >> --
>> >> Sudhir Kumar
>> >>
>> >
>> >
>> >
>> > --
>> > Sudhir Kumar
>> >
>>
>>
>>
>> --
>> Sudhir Kumar
>> --
>> To unsubscribe from this list: send the line "unsubscribe kvm" in
>> the body of a message to majordomo@xxxxxxxxxxxxxxx
>> More majordomo info at  http://vger.kernel.org/majordomo-info.html
>



-- 
Sudhir Kumar
--
To unsubscribe from this list: send the line "unsubscribe kvm" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [KVM ARM]     [KVM ia64]     [KVM ppc]     [Virtualization Tools]     [Spice Development]     [Libvirt]     [Libvirt Users]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite Questions]     [Linux Kernel]     [Linux SCSI]     [XFree86]
  Powered by Linux