Merge lp:~verterok/ubuntuone-client/fix-632439 into lp:ubuntuone-client

Proposed by Guillermo Gonzalez
Status: Superseded
Proposed branch: lp:~verterok/ubuntuone-client/fix-632439
Merge into: lp:ubuntuone-client
Diff against target: 75 lines (+39/-2)
2 files modified
tests/syncdaemon/test_vm.py (+35/-0)
ubuntuone/syncdaemon/volume_manager.py (+4/-2)
To merge this branch: bzr merge lp:~verterok/ubuntuone-client/fix-632439
Reviewer Review Type Date Requested Status
Lucio Torre (community) Approve
John O'Brien (community) Approve
Review via email: mp+34791@code.launchpad.net

This proposal has been superseded by a proposal from 2010-09-08.

Commit message

Fix VolumeManager.subscribe_udf method to handle the error cases properly.

Description of the change

Fix a bug in volume manager subscribe_udf method, also improve error handling and propagate it in as a deferred with a failure.

To post a comment you must log in.
Revision history for this message
John O'Brien (jdobrien) wrote :

Looks good, nice catch

review: Approve
Revision history for this message
Lucio Torre (lucio.torre) wrote :

simple and nice fix. i wonder if
d = defer.fail(error)
and just one point of exit "return d" would have been better.

review: Approve
679. By Guillermo Gonzalez

merge with trunk

680. By Guillermo Gonzalez

make it nicer, remove multiple returns

681. By Guillermo Gonzalez

merge with trunk

682. By Guillermo Gonzalez

remove print

Unmerged revisions

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'tests/syncdaemon/test_vm.py'
2--- tests/syncdaemon/test_vm.py 2010-08-04 19:34:03 +0000
3+++ tests/syncdaemon/test_vm.py 2010-09-08 18:04:42 +0000
4@@ -1192,6 +1192,41 @@
5 self.assertTrue(os.path.exists(udf.path))
6
7 @defer.inlineCallbacks
8+ def test_subscribe_udf_missing_fsm_md(self):
9+ """Test VolumeManager.subscribe_udf with a missing node in fsm."""
10+ # create and add a UDF
11+ suggested_path = "suggested_path"
12+ udf, volume = self._create_udf(uuid.uuid4(), 'udf_node_id',
13+ '~/' + suggested_path, subscribed=False)
14+ yield self.vm.add_udf(udf)
15+ self.assertFalse(os.path.exists(udf.path))
16+ self.assertFalse(self.vm.udfs[udf.id].subscribed)
17+ yield self.vm.subscribe_udf(udf.id)
18+ yield self.vm.unsubscribe_udf(udf.id)
19+ # delete the fsm metadata
20+ self.main.fs.delete_metadata(udf.path)
21+ # subscribe to it and fail!
22+ try:
23+ yield self.vm.subscribe_udf(udf.id)
24+ except KeyError, e:
25+ self.assertIn(udf.path, e.args[0])
26+ else:
27+ self.fail('Must get a KeyError!')
28+
29+ @defer.inlineCallbacks
30+ def test_subscribe_udf_missing_volume(self):
31+ """Test VolumeManager.subscribe_udf with a invalid volume_id."""
32+ # create and add a UDF
33+ try:
34+ r = yield self.vm.subscribe_udf('invalid_udf_id')
35+ print r
36+ except VolumeDoesNotExist, e:
37+ self.assertEquals('DOES_NOT_EXIST', e.args[0])
38+ self.assertEquals('invalid_udf_id', e.args[1])
39+ else:
40+ self.fail('Must get a VolumeDoesNotExist!')
41+
42+ @defer.inlineCallbacks
43 def _test_subscribe_udf_generations(self, udf):
44 """Test subscribe_udf with a generation."""
45 scratch_d = defer.Deferred()
46
47=== modified file 'ubuntuone/syncdaemon/volume_manager.py'
48--- ubuntuone/syncdaemon/volume_manager.py 2010-08-04 19:34:03 +0000
49+++ ubuntuone/syncdaemon/volume_manager.py 2010-09-08 18:04:42 +0000
50@@ -1093,6 +1093,7 @@
51 udf = self.udfs[udf_id]
52 except KeyError:
53 push_error("DOES_NOT_EXIST")
54+ d = defer.fail(VolumeDoesNotExist(udf_id))
55 else:
56 if not os.path.exists(udf.path):
57 # the udf path isn't there, create it!
58@@ -1109,14 +1110,15 @@
59 return result
60 try:
61 d = self._scan_udf(udf)
62- except KeyError:
63+ except KeyError, e:
64 push_error("METADATA_DOES_NOT_EXIST")
65+ d = defer.fail(e)
66 else:
67 d.addCallback(subscribe)
68 d.addCallbacks(
69 lambda _: self.m.event_q.push('VM_UDF_SUBSCRIBED', udf),
70 lambda f: push_error(f.getErrorMessage()))
71- return d
72+ return d
73
74 def _scan_udf(self, udf):
75 """Local and server rescan of a UDF."""

Subscribers

People subscribed via source and target branches