~rodrigo-moya/ubuntuone-client/share-my-picked-contacts

« back to all changes in this revision

Viewing changes to ubuntuone/syncdaemon/volume_manager.py

  • Committer: Tarmac
  • Author(s): guillermo.gonzalez at canonical
  • Date: 2010-03-29 20:49:14 UTC
  • mfrom: (445.3.5 safe-md-v5-migration)
  • Revision ID: john.lenton@canonical.com-20100329204914-by1k64lrmnu3wxw0
Backup volume manager metadata before doing the migration to v6 and restore it in case of error.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1156
1156
        if not os.path.exists(self._shares_dir):
1157
1157
            os.makedirs(self._shares_dir)
1158
1158
        new_shelf = LegacyShareFileShelf(self._shares_md_dir)
1159
 
        for key in old_shelf.keys():
1160
 
            new_shelf[key] = old_shelf[key]
 
1159
        for key, share in old_shelf.iteritems():
 
1160
            new_shelf[key] = share
1161
1161
        # now upgrade to metadata 2
1162
1162
        self._upgrade_metadata_2(md_version)
1163
1163
 
1169
1169
        """
1170
1170
        self.log.debug('upgrading share shelfs from metadata 1')
1171
1171
        shares = LegacyShareFileShelf(self._shares_md_dir)
1172
 
        for key in shares.keys():
1173
 
            shares[key] = shares[key]
 
1172
        for key, share in shares.iteritems():
 
1173
            shares[key] = share
1174
1174
        shared = LegacyShareFileShelf(self._shared_md_dir)
1175
 
        for key in shared.keys():
1176
 
            shared[key] = shared[key]
 
1175
        for key, share in shared.iteritems():
 
1176
            shared[key] = share
1177
1177
        # now upgrade to metadata 3
1178
1178
        self._upgrade_metadata_2(md_version)
1179
1179
 
1264
1264
 
1265
1265
        # update the shares metadata
1266
1266
        shares = LegacyShareFileShelf(self._shares_md_dir)
1267
 
        for key in shares.keys():
1268
 
            share = shares[key]
 
1267
        for key, share in shares.iteritems():
1269
1268
            if share.path is not None:
1270
1269
                if share.path == old_root_dir:
1271
1270
                    share.path = share.path.replace(old_root_dir,
1276
1275
                shares[key] = share
1277
1276
 
1278
1277
        shared = LegacyShareFileShelf(self._shared_md_dir)
1279
 
        for key in shared.keys():
1280
 
            share = shared[key]
 
1278
        for key, share in shared.iteritems():
1281
1279
            if share.path is not None:
1282
1280
                share.path = share.path.replace(old_root_dir, self._root_dir)
1283
1281
            shared[key] = share
1321
1319
    def _upgrade_metadata_5(self, md_version):
1322
1320
        """Upgrade to version 6 (plain dict storage)."""
1323
1321
        self.log.debug('upgrading from metadata 5')
1324
 
        # upgrade shares
1325
 
        old_shares = LegacyShareFileShelf(self._shares_md_dir)
1326
 
        shares = VMFileShelf(self._shares_md_dir)
1327
 
        for key in old_shares.keys():
1328
 
            share = old_shares[key]
1329
 
            shares[key] = self._upgrade_share_to_volume(share)
1330
 
        # upgrade shared folders
1331
 
        old_shared = LegacyShareFileShelf(self._shared_md_dir)
1332
 
        shared = VMFileShelf(self._shared_md_dir)
1333
 
        for key in shared.keys():
1334
 
            share = old_shared[key]
1335
 
            shared[key] = self._upgrade_share_to_volume(share, shared=True)
1336
 
        # upgrade the udfs
1337
 
        old_udfs = LegacyShareFileShelf(self._udfs_md_dir)
1338
 
        udfs = VMFileShelf(self._udfs_md_dir)
1339
 
        for key in old_udfs.keys():
1340
 
            udf = old_udfs[key]
1341
 
            udfs[key] = UDF(udf.id, udf.node_id, udf.suggested_path,
1342
 
                            udf.path, udf.subscribed)
1343
 
        self.update_metadata_version()
 
1322
        bkp_dir = os.path.join(os.path.dirname(self._data_dir), '5.bkp')
 
1323
        new_md_dir = os.path.join(os.path.dirname(self._data_dir), 'md_6.new')
 
1324
        new_shares_md_dir = os.path.join(new_md_dir, 'shares')
 
1325
        new_shared_md_dir = os.path.join(new_md_dir, 'shared')
 
1326
        new_udfs_md_dir = os.path.join(new_md_dir, 'udfs')
 
1327
        try:
 
1328
            # upgrade shares
 
1329
            old_shares = LegacyShareFileShelf(self._shares_md_dir)
 
1330
            shares = VMFileShelf(new_shares_md_dir)
 
1331
            for key, share in old_shares.iteritems():
 
1332
                shares[key] = self._upgrade_share_to_volume(share)
 
1333
            # upgrade shared folders
 
1334
            old_shared = LegacyShareFileShelf(self._shared_md_dir)
 
1335
            shared = VMFileShelf(new_shared_md_dir)
 
1336
            for key, share in old_shared.iteritems():
 
1337
                shared[key] = self._upgrade_share_to_volume(share, shared=True)
 
1338
            # upgrade the udfs
 
1339
            old_udfs = LegacyShareFileShelf(self._udfs_md_dir)
 
1340
            udfs = VMFileShelf(new_udfs_md_dir)
 
1341
            for key, udf in old_udfs.iteritems():
 
1342
                udfs[key] = UDF(udf.id, udf.node_id, udf.suggested_path,
 
1343
                                udf.path, udf.subscribed)
 
1344
            # move md dir to bkp
 
1345
            os.rename(self._data_dir, bkp_dir)
 
1346
            # move new to md dir
 
1347
            os.rename(new_md_dir, self._data_dir)
 
1348
            self.update_metadata_version()
 
1349
        except Exception:
 
1350
            # something bad happend, remove partially upgraded metadata
 
1351
            shutil.rmtree(new_md_dir)
 
1352
            raise
1344
1353
 
1345
1354
    def _upgrade_share_to_volume(self, share, shared=False):
1346
1355
        """Upgrade from _Share to new Volume hierarchy."""