Opened 9 years ago

Last modified 9 years ago

#6774 new defect

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
Blocked By: Blocking:
Deployments affected: Action Needed: test in build
Verified: no


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.

Attachments (2) (18.5 KB) - added by marco 9 years ago. (13.6 KB) - added by marco 9 years ago.

Download all attachments as: .zip

Change History (13)

comment:1 Changed 9 years ago by marco

  • Component changed from distro to telepathy-salut
  • Owner changed from jg to Collabora

Changed 9 years ago by marco

Changed 9 years ago by marco

comment:2 Changed 9 years ago by marco

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

comment:3 Changed 9 years ago by gdesmott

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

comment:4 Changed 9 years ago by marco


comment:5 Changed 9 years ago by gdesmott

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

comment:6 Changed 9 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/ 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/ 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/ in urlopen(url='', data=None, proxies=None)
     80         opener = _urlopener
     81     if data is None:
---> 82         return = <bound method of <urllib.FancyURLopener instance at 0x86fd18c>>
        url = ''
     83     else:
     84         return, data)

/usr/lib/python2.5/ 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/ 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/ 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/ 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/ 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/ 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/ 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?

comment:7 Changed 9 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

comment:8 Changed 9 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.

comment:9 Changed 9 years ago by gregorio

  • Action Needed set to test in build
  • Owner changed from Collabora to joe

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

comment:10 Changed 9 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.

comment:11 Changed 9 years ago by morgs

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