[Bugs] #140 MINO: crash when joining a shared Read

SugarLabs Bugs bugtracker-noreply at sugarlabs.org
Tue Dec 23 16:38:30 EST 2008


#140: crash when joining a shared Read
-----------------------+----------------------------------------------------
  Reporter:  gdesmott  |       Owner:  tomeu   
      Type:  defect    |      Status:  assigned
  Priority:  minor     |   Milestone:          
 Component:  Read      |     Version:          
Resolution:            |    Keywords:          
-----------------------+----------------------------------------------------
Changes (by morgs):

 * cc: tomeu (removed)
 * cc: morgs, marcopg (added)
  * owner:  morgs => tomeu
  * status:  new => assigned


Comment:

 This seems to be an issue in the (new) datastore.

 I reproduced it now with Read, using two sugar-jhbuild sessions.

 Session A shared Read with a PDF file, over salut. Session B joined, and
 failed. The following is all from session B.

 The top of the Read log contained:
 {{{
 1230065496.266677 DEBUG root: datastore.get
 1230065496.271796 DEBUG root: dbus_helpers.get_properties:
 d6244570-41a2-4857
 -8bf2-e208b94505ee
 }}}

 The first issue is that the file referenced is left over from a previous
 activity - note the earlier date of d62..ee.txt:
 {{{
 morgan at vaio:~/.sugar/two/data$ ls -l d62*
 -rw----r-- 5 morgan morgan 811011 2008-12-23 22:51
 d6244570-41a2-4857-8bf2-e208b94505ee_1.txt
 -rw----r-- 5 morgan morgan 811011 2008-12-23 22:51
 d6244570-41a2-4857-8bf2-e208b94505ee_2.txt
 -rw----r-- 1 morgan morgan    438 2008-12-19 16:44
 d6244570-41a2-4857-8bf2-e208b94505ee.txt
 }}}

 It contains metadata from Browse:
 {{{
 $ cat d6244570-41a2-4857-8bf2-e208b94505ee.txt
 {"deleted":[],"shared_links":[],"history":[{"url":"http://www.google.co.za/","title":"Google"},{"url":"http://www.google.co.za/search?hl=en&q=PDF&btnG=Google+Search&meta=","title":"PDF
 - Google
 Search"},{"url":"http://www.google.co.za/search?hl=en&q=site%3Awiki.laptop.org+pdf&btnG=Search&meta=","title":"site:wiki.laptop.org
 pdf - Google
 Search"},{"url":"http://wiki.laptop.org/go/Image:XO_demo.pdf","title":"Image:XO
 demo.pdf - OLPC"}]}
 }}}

 The next problem is that Read tries to resume this entry, even though we
 are joining a different activity. The Read log shows:

 {{{
 1230065496.727491 DEBUG root: dbus_helpers.get_filename:
 d6244570-41a2-4857-8bf2-e208b94505ee,
 /home/morgan/.sugar/two/data/d6244570-41a2-4857-8bf2-e208b94505ee_3.txt
 1230065496.730018 DEBUG read-activity: ReadActivity.read_file:
 /home/morgan/.sugar/two/data/d6244570-41a2-4857-8bf2-e208b94505ee_3.txt
 ---------------------------------------------------------------------------
 GError                                    Traceback (most recent call
 last)

 /home/morgan/sugar-jhbuild/install/lib/python2.5/site-
 packages/sugar/activity/activity.pyc in __canvas_map_cb(self=<ReadActivity
 object at 0x9f7b784 (SugarActivity at 0x9fbd038)>,
 canvas=<gtk.ScrolledWindow object at 0x9fa19b4 (GtkScrolledWindow at
 0xa29cda0)>)
     626     def __canvas_map_cb(self, canvas):
     627         if self._jobject and self._jobject.file_path:
 --> 628             self.read_file(self._jobject.file_path)
     629
     630     def __jobject_create_cb(self):

 /home/morgan/sugar-
 jhbuild/install/share/sugar/activities/Read.activity/readactivity.pyc in
 read_file(self=<ReadActivity object at 0x9f7b784 (SugarActivity at
 0x9fbd038)>,
 file_path=dbus.String(u'/home/morgan/.sugar/two/data/d6244570-41a2-4857-8bf2-e208b94505ee_3.txt'))
     277         os.link(file_path, tempfile)
     278         self._tempfile = tempfile
 --> 279         self._load_document('file://' + self._tempfile)
     280
     281         # FIXME: This should obviously be fixed properly

 /home/morgan/sugar-
 jhbuild/install/share/sugar/activities/Read.activity/readactivity.pyc in
 _load_document(self=<ReadActivity object at 0x9f7b784 (SugarActivity at
 0x9fbd038)>,
 filepath='file:///home/morgan/.sugar/two/org.laptop.sugar.ReadActivity/instance/tmp1230065496')
     445
     446         """
 --> 447         self._document = evince.factory_get_document(filepath)
     448         self._want_document = False
     449         self._view.set_document(self._document)

 GError: File type unknown (application/octet-stream) is not supported
 }}}

 This all might be the same issue as when we saw recent problems with Marco
 sharing Write, and me seeing Browse metadata in the document when joining
 instead of the Write document. It seems the datastore is providing a file
 to resume from some unrelated previous activity, when you are expecting to
 join an activity and start a new file.

 Anyway, evince fails to load the document so we continue. The failure
 which Guillaume and I ultimately experienced seems to be a result of the
 above, as Read has the following code:

 {{{
         # Assign a file path to download if one doesn't exist yet
         if not self._jobject.file_path:
             path = os.path.join(self.get_activity_root(), 'instance',
                                 'tmp%i' % time.time())
         else:
             path = self._jobject.file_path
 }}}

 The expected code path on joining is the first option, creating a
 temporary filename for the download to be saved as, but the second option
 happened, populating the filename with the existing datastore entry.

 Read then downloaded the PDF into that file. I expected it to be
 ~/.sugar/two/org.laptop.sugar.ReadActivity/instance/tmp1230065496 but the
 file was saved as
 ~/.sugar/two/data/d6244570-41a2-4857-8bf2-e208b94505ee_3.txt which was
 then presumably clobbered by the datastore write. That file was then
 presumed to be intact, which it normally is at that point, and evince
 failed to load it.

 Read log:
 {{{
 1230065515.549483 DEBUG read-activity: Downloaded 811008 of 811011 bytes
 from tube 1303825112...
 1230065516.254343 DEBUG read-activity: Downloaded 811011 of 811011 bytes
 from tube 1303825112...
 1230065516.259600 DEBUG read-activity: Saving file
 /home/morgan/.sugar/two/org.laptop.sugar.ReadActivity/instance/1230065516
 to datastore...
 1230065516.261071 DEBUG root: datastore.write
 1230065516.264935 DEBUG root: dbus_helpers.update:
 d6244570-41a2-4857-8bf2-e208b94505ee,
 /home/morgan/.sugar/two/org.laptop.sugar.ReadActivity/instance/1230065516,
 {dbus.String(u'activity_id'):
 dbus.ByteArray('002b931dc7a7ef5d66c5b2e676fb7dd6896b8ff8',
 variant_level=1), dbus.String(u'title_set_by_user'): dbus.ByteArray('1',
 variant_level=1), dbus.String(u'uid'):
 dbus.ByteArray('d6244570-41a2-4857-8bf2-e208b94505ee', variant_level=1),
 dbus.String(u'title'): dbus.ByteArray('Image:XO demo.pdf - OLPC',
 variant_level=1), dbus.String(u'timestamp'): 1230065516,
 dbus.String(u'checksum'):
 dbus.ByteArray('d345268c3611085aab5804040356516a', variant_level=1),
 dbus.String(u'activity'): dbus.ByteArray('org.laptop.WebActivity',
 variant_level=1), dbus.String(u'share-scope'): 'public',
 dbus.String(u'keep'): dbus.ByteArray('0', variant_level=1), dbus.String(u
 'icon-color'): dbus.ByteArray('#5E008C,#00EA11', variant_level=1),
 dbus.String(u'mtime'): '2008-12-23T20:51:56.264701',
 dbus.String(u'preview'): '<omitted>', dbus.String(u'mime_type'):
 dbus.ByteArray('text/plain', variant_level=1)}, True
 1230065516.341989 DEBUG root: Written object
 d6244570-41a2-4857-8bf2-e208b94505ee to the datastore.
 }}}

 So in summary: The Read sharing download worked fine, but something
 provided the activity with the wrong datastore id when it wasn't supposed
 to be resuming at all, leading to all kinds of fail.

-- 
Ticket URL: <http://dev.sugarlabs.org/ticket/140#comment:2>
Sugar Labs <http://sugarlabs.org/>
Sugar Labs bug tracking system


More information about the Bugs mailing list