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)
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():
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():
1177
1177
# now upgrade to metadata 3
1178
1178
self._upgrade_metadata_2(md_version)
1265
1265
# update the shares metadata
1266
1266
shares = LegacyShareFileShelf(self._shares_md_dir)
1267
for key in shares.keys():
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,
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')
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)
1337
old_udfs = LegacyShareFileShelf(self._udfs_md_dir)
1338
udfs = VMFileShelf(self._udfs_md_dir)
1339
for key in old_udfs.keys():
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')
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)
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()
1350
# something bad happend, remove partially upgraded metadata
1351
shutil.rmtree(new_md_dir)
1345
1354
def _upgrade_share_to_volume(self, share, shared=False):
1346
1355
"""Upgrade from _Share to new Volume hierarchy."""