Ticket #6774 (new defect)

Opened 6 years ago

Last modified 6 years ago

Read fails to transfer document when using salut

Reported by: marco Owned by: joe
Priority: blocker Milestone: 8.2.0 (was Update.2)
Component: wireless Version:
Keywords: release? Cc: rwh, Collabora, morgs
Action Needed: test in build Verified: no
Deployments affected: Blocked By:


I have been able to reproduce this consistently several times on 702. Chat and Write seem to work fine. Read works too when using gabble. I'll attach debug logs.


receiver.zip (18.5 kB) - added by marco 6 years ago.
sender.zip (13.6 kB) - added by marco 6 years ago.

Change History

Changed 6 years ago by marco

  • owner changed from jg to Collabora
  • component changed from distro to telepathy-salut

Changed 6 years ago by marco

Changed 6 years ago by marco

Changed 6 years ago by marco

  • summary changed from Read files to transfer document when using salut to Read fails to transfer document when using salut

Changed 6 years ago by gdesmott

You only have this problem when using the mesh network, not when you are connected to an AP, right?

Changed 6 years ago by marco


Changed 6 years ago by gdesmott

Wasn't able to reproduce using 2 XO's with build 702 connected to mesh 1.

Changed 6 years ago by cjb

  • cc rwh added
  • keywords release? added
  • priority changed from normal to blocker

There's a very interesting traceback in here:

<type 'exceptions.IOError'>               Traceback (most recent call last)

/home/olpc/Activities/Read.activity/readactivity.py in _download_document(self=<ReadActivity object at 0x84390cc (SugarActivity at 0x873f800)>, tube_id=dbus.UInt32(1048158443L))
    273         getter.connect("error", self._download_error_cb, tube_id)
    274         _logger.debug("Starting download to %s...", self._jobject.file_path)
--> 275         getter.start(self._jobject.file_path)
        getter.start = <bound method GlibURLDownloader.start of <GlibURLDownloader object at 0x86f92ac (sugar+network+GlibURLDownloader at 0x87ec310)>>
        self._jobject.file_path = '/home/olpc/isolation/1/uid_to_home_dir/10006/tmp/1206619576'
    276         return False

/usr/lib/python2.5/site-packages/sugar/network.py in start(self=<GlibURLDownloader object at 0x86f92ac (sugar+network+GlibURLDownloader at 0x87ec310)>, destfile='/home/olpc/isolation/1/uid_to_home_dir/10006/tmp/1206619576', destfd=None)
    201     def start(self, destfile=None, destfd=None):
--> 202         self._info = urllib.urlopen(self._url)
        self._info = undefined
        global urllib.urlopen = <function urlopen at 0x840ebfc>
        self._url = ''
    203         self._outf = None
    204         self._fname = None

/usr/lib/python2.5/urllib.py in urlopen(url='', data=None, proxies=None)
     80         opener = _urlopener
     81     if data is None:
---> 82         return opener.open(url)
        opener.open = <bound method FancyURLopener.open of <urllib.FancyURLopener instance at 0x86fd18c>>
        url = ''
     83     else:
     84         return opener.open(url, data)

/usr/lib/python2.5/urllib.py in open(self=<urllib.FancyURLopener instance at 0x86fd18c>, fullurl='', data=None)
    188         try:
    189             if data is None:
--> 190                 return getattr(self, name)(url)
        global getattr = undefined
        self = <urllib.FancyURLopener instance at 0x86fd18c>
        name = 'open_http'
        url = '//'
    191             else:
    192                 return getattr(self, name)(url, data)

/usr/lib/python2.5/urllib.py in open_http(self=<urllib.FancyURLopener instance at 0x86fd18c>, url='//', data=None)
    326         if data is not None:
    327             h.send(data)
--> 328         errcode, errmsg, headers = h.getreply()
        errcode = undefined
        errmsg = undefined
        headers = undefined
        h.getreply = <bound method HTTP.getreply of <httplib.HTTP instance at 0x86fd2ac>>
    329         fp = h.getfile()
    330         if errcode == 200:

/usr/lib/python2.5/httplib.py in getreply(self=<httplib.HTTP instance at 0x86fd2ac>)
   1193         """
   1194         try:
-> 1195             response = self._conn.getresponse()
        response = undefined
        self._conn.getresponse = <bound method HTTPConnection.getresponse of <httplib.HTTPConnection instance at 0x86fd28c>>
   1196         except BadStatusLine, e:
   1197             ### hmm. if getresponse() ever closes the socket on a bad request,

/usr/lib/python2.5/httplib.py in getresponse(self=<httplib.HTTPConnection instance at 0x86fd28c>)
    922                                            method=self._method)
--> 924         response.begin()
        response.begin = <bound method HTTPResponse.begin of <httplib.HTTPResponse instance at 0x86fd2cc>>
    925         assert response.will_close != _UNKNOWN
    926         self.__state = _CS_IDLE

/usr/lib/python2.5/httplib.py in begin(self=<httplib.HTTPResponse instance at 0x86fd2cc>)
    383         # read until we get a non-100 response
    384         while True:
--> 385             version, status, reason = self._read_status()
        version = undefined
        status = undefined
        reason = undefined
        self._read_status = <bound method HTTPResponse._read_status of <httplib.HTTPResponse instance at 0x86fd2cc>>
    386             if status != CONTINUE:
    387                 break

/usr/lib/python2.5/httplib.py in _read_status(self=<httplib.HTTPResponse instance at 0x86fd2cc>)
    341     def _read_status(self):
    342         # Initialize with Simple-Response defaults
--> 343         line = self.fp.readline()
        line = undefined
        self.fp.readline = <bound method _fileobject.readline of <socket._fileobject object at 0x86e617c>>
    344         if self.debuglevel > 0:
    345             print "reply:", repr(line)

/usr/lib/python2.5/socket.py in readline(self=<socket._fileobject object at 0x86e617c>, size=-1)
    328                 recv = self._sock.recv
    329                 while data != "\n":
--> 330                     data = recv(1)
        data = ''
        recv = <built-in method recv of _socket.socket object at 0x86fa170>
    331                     if not data:
    332                         break

<type 'exceptions.IOError'>: [Errno socket error] (104, 'Connection reset by peer')

Read doesn't appear to be doing any retrying, and it seems clear to me that it should. It could both retry the connection over the chosen Tube, and switch to a different Tube. What does everyone else think?

Changed 6 years ago by gdesmott

Seems to be a network suckage according receiver's salut log:

** (telepathy-salut:2226): DEBUG: gibber_ll_transport_open_sockaddr: Trying to connect to port 5298
** (telepathy-salut:2226): DEBUG: gibber_ll_transport_open_sockaddr: Connecting failed: No route to host

Changed 6 years ago by marco

Retested today and it works consistently. I used the same XO and the same steps to reproduce. Wireless environment is completely clean and constant here (just my AP and my laptop). I don't really understand what is changed.

Changed 6 years ago by gregorio

  • owner changed from Collabora to joe
  • next_action set to test in build

Hi Joe,

Can you retest this one? Please also write a test case so that we can try it out regularly.

Let me know if you have any questions or need more info.


Greg S

Changed 6 years ago by gdesmott

  • cc Collabora added
  • component changed from telepathy-salut to wireless

Changing component to "wireless" as that's really a network problem. Hopefully network guys could tell us more about this problem and if there is any chance it was fixed since the report.

Changed 6 years ago by morgs

  • cc morgs added
Note: See TracTickets for help on using tickets.