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

Proposed by Guillermo Gonzalez
Status: Merged
Approved by: John O'Brien
Approved revision: 747
Merged at revision: 753
Proposed branch: lp:~verterok/ubuntuone-client/fix-674092
Merge into: lp:ubuntuone-client
Diff against target: 102 lines (+81/-0)
2 files modified
tests/syncdaemon/test_vm.py (+77/-0)
ubuntuone/syncdaemon/volume_manager.py (+4/-0)
To merge this branch: bzr merge lp:~verterok/ubuntuone-client/fix-674092
Reviewer Review Type Date Requested Status
John O'Brien (community) Approve
dobey (community) Approve
Review via email: mp+41668@code.launchpad.net

Commit message

This branch fix server rescan to also cleanup dead volumes after the actual volumes rescan.

Description of the change

This branch fix server rescan to also cleanup dead volumes after the actual volumes rescan.

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

good to go!

review: Approve

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-11-15 12:58:38 +0000
3+++ tests/syncdaemon/test_vm.py 2010-11-24 00:01:52 +0000
4@@ -2321,6 +2321,83 @@
5 test_refresh_shares_called_after_server_rescan.timeout = 1
6
7 @defer.inlineCallbacks
8+ def test_server_rescan_clean_dead_udf(self):
9+ """Test cleanup of dead volumes after server_rescan method."""
10+ # the UDF part makes sense if UDF autosubscribe is True
11+ user_conf = config.get_user_config()
12+ user_conf.set_udf_autosubscribe(True)
13+ share_id = uuid.uuid4()
14+ share_volume = volumes.ShareVolume(share_id, 'fake_share_uuid', 1, 100,
15+ 'to_me', 'fake_share', 'username',
16+ 'visible_username', True, 'View')
17+ udf_id = uuid.uuid4()
18+ udf_volume = volumes.UDFVolume(udf_id, 'udf_node_id', 1, 200, u'~/UDF')
19+ root_id = uuid.uuid4()
20+ root_volume = volumes.RootVolume(root_id, 1, 500)
21+ response = [share_volume, udf_volume, root_volume]
22+
23+ # patch fake action queue
24+ self.main.action_q.query_volumes = lambda: defer.succeed(response)
25+ server_rescan_d = defer.Deferred()
26+ self._listen_for('SYS_SERVER_RESCAN_DONE', server_rescan_d.callback)
27+ with environ('HOME', self.home_dir):
28+ yield self.vm.server_rescan()
29+ yield server_rescan_d
30+ self.assertIn(request.ROOT, self.vm.shares)
31+ self.assertIn(str(share_volume.volume_id), self.vm.shares)
32+ self.assertEquals(1, len(self.vm.udfs))
33+ self.assertEquals(2, len(self.vm.shares))
34+ # remove the udf from the response list
35+ response = [share_volume, root_volume]
36+ server_rescan_d = defer.Deferred()
37+ self._listen_for('SYS_SERVER_RESCAN_DONE', server_rescan_d.callback)
38+ with environ('HOME', self.home_dir):
39+ yield self.vm.server_rescan()
40+ yield server_rescan_d
41+ self.assertIn(request.ROOT, self.vm.shares)
42+ self.assertIn(str(share_volume.volume_id), self.vm.shares)
43+ self.assertEquals(0, len(self.vm.udfs))
44+ self.assertEquals(2, len(self.vm.shares))
45+
46+ @defer.inlineCallbacks
47+ def test_server_rescan_clean_dead_shares(self):
48+ """Test cleanup of dead volumes after server_rescan method."""
49+ # the UDF part makes sense if UDF autosubscribe is True
50+ user_conf = config.get_user_config()
51+ user_conf.set_udf_autosubscribe(True)
52+ share_id = uuid.uuid4()
53+ share_volume = volumes.ShareVolume(share_id, 'fake_share_uuid', 1, 100,
54+ 'to_me', 'fake_share', 'username',
55+ 'visible_username', True, 'View')
56+ udf_id = uuid.uuid4()
57+ udf_volume = volumes.UDFVolume(udf_id, 'udf_node_id', 1, 200, u'~/UDF')
58+ root_id = uuid.uuid4()
59+ root_volume = volumes.RootVolume(root_id, 1, 500)
60+ response = [share_volume, udf_volume, root_volume]
61+ # patch fake action queue
62+ self.main.action_q.query_volumes = lambda: defer.succeed(response)
63+ server_rescan_d = defer.Deferred()
64+ self._listen_for('SYS_SERVER_RESCAN_DONE', server_rescan_d.callback)
65+ with environ('HOME', self.home_dir):
66+ yield self.vm.server_rescan()
67+ yield server_rescan_d
68+ self.assertIn(request.ROOT, self.vm.shares)
69+ self.assertIn(str(udf_volume.volume_id), self.vm.udfs)
70+ self.assertEquals(1, len(self.vm.udfs))
71+ self.assertEquals(2, len(self.vm.shares))
72+ # remove the share from the response list
73+ response = [udf_volume, root_volume]
74+ server_rescan_d = defer.Deferred()
75+ self._listen_for('SYS_SERVER_RESCAN_DONE', server_rescan_d.callback)
76+ with environ('HOME', self.home_dir):
77+ yield self.vm.server_rescan()
78+ yield server_rescan_d
79+ self.assertIn(request.ROOT, self.vm.shares)
80+ self.assertIn(str(udf_volume.volume_id), self.vm.udfs)
81+ self.assertEquals(1, len(self.vm.udfs))
82+ self.assertEquals(1, len(self.vm.shares))
83+
84+ @defer.inlineCallbacks
85 def test_volumes_rescan_cb(self):
86 """Test for _volumes_rescan_cb."""
87 # the UDF part makes sense if UDF autosubscribe is True
88
89=== modified file 'ubuntuone/syncdaemon/volume_manager.py'
90--- ubuntuone/syncdaemon/volume_manager.py 2010-11-12 22:01:23 +0000
91+++ ubuntuone/syncdaemon/volume_manager.py 2010-11-24 00:01:52 +0000
92@@ -481,6 +481,10 @@
93 """Do the 'server rescan'"""
94 d = self.m.action_q.query_volumes()
95 d.addCallback(self._volumes_rescan_cb)
96+ def cleanup(result):
97+ shares, udfs = result
98+ self._cleanup_volumes(shares=shares, udfs=udfs)
99+ d.addCallbacks(cleanup)
100 def done(_):
101 self.m.event_q.push('SYS_SERVER_RESCAN_DONE')
102 def error(failure):

Subscribers

People subscribed via source and target branches