Merge ~barryprice/swoffsite-charms/+git/swoffsite-charm:master into ~swoffsite-charmers/swoffsite-charms/+git/swoffsite-charm:master

Proposed by Barry Price
Status: Merged
Merged at revision: 31dce45b74a38d359f2ec6c360569ebf59a09235
Proposed branch: ~barryprice/swoffsite-charms/+git/swoffsite-charm:master
Merge into: ~swoffsite-charmers/swoffsite-charms/+git/swoffsite-charm:master
Diff against target: 265 lines (+40/-24)
3 files modified
dev/null (+0/-7)
swoffsite/swoffsite/cli.py (+5/-2)
swoffsite/swoffsite/mirror.py (+35/-15)
Reviewer Review Type Date Requested Status
Haw Loeung +1 Approve
Review via email: mp+453393@code.launchpad.net

Commit message

Run 'make sync' to update swoffsite itself for keystone v3 support

To post a comment you must log in.
Revision history for this message
Haw Loeung (hloeung) wrote :

LGTM

review: Approve (+1)

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
diff --git a/swoffsite/.bzr/README b/swoffsite/.bzr/README
0deleted file mode 1006440deleted file mode 100644
index f82dc1c..0000000
--- a/swoffsite/.bzr/README
+++ /dev/null
@@ -1,3 +0,0 @@
1This is a Bazaar control directory.
2Do not change any files in this directory.
3See http://bazaar.canonical.com/ for more information about Bazaar.
diff --git a/swoffsite/.bzr/branch-format b/swoffsite/.bzr/branch-format
4deleted file mode 1006440deleted file mode 100644
index 9eb09b7..0000000
--- a/swoffsite/.bzr/branch-format
+++ /dev/null
@@ -1 +0,0 @@
1Bazaar-NG meta directory, format 1
diff --git a/swoffsite/.bzr/branch/branch.conf b/swoffsite/.bzr/branch/branch.conf
2deleted file mode 1006440deleted file mode 100644
index aace28c..0000000
--- a/swoffsite/.bzr/branch/branch.conf
+++ /dev/null
@@ -1 +0,0 @@
1parent_location = bzr+ssh://bazaar.launchpad.net/+branch/swoffsite/
diff --git a/swoffsite/.bzr/branch/format b/swoffsite/.bzr/branch/format
2deleted file mode 1006440deleted file mode 100644
index dc392f4..0000000
--- a/swoffsite/.bzr/branch/format
+++ /dev/null
@@ -1 +0,0 @@
1Bazaar Branch Format 7 (needs bzr 1.6)
diff --git a/swoffsite/.bzr/branch/last-revision b/swoffsite/.bzr/branch/last-revision
2deleted file mode 1006440deleted file mode 100644
index ee0a4d1..0000000
--- a/swoffsite/.bzr/branch/last-revision
+++ /dev/null
@@ -1 +0,0 @@
143 mergebot@juju-139df4-prod-is-toolbox-0.canonical.com-20190523063027-99vwgfct7fj0eo1z
diff --git a/swoffsite/.bzr/branch/tags b/swoffsite/.bzr/branch/tags
2deleted file mode 1006440deleted file mode 100644
index e69de29..0000000
--- a/swoffsite/.bzr/branch/tags
+++ /dev/null
diff --git a/swoffsite/.bzr/checkout/conflicts b/swoffsite/.bzr/checkout/conflicts
3deleted file mode 1006441deleted file mode 100644
index 0dc2d3a..0000000
--- a/swoffsite/.bzr/checkout/conflicts
+++ /dev/null
@@ -1 +0,0 @@
1BZR conflict list format 1
diff --git a/swoffsite/.bzr/checkout/dirstate b/swoffsite/.bzr/checkout/dirstate
2deleted file mode 1006440deleted file mode 100644
index 51ceaf5..0000000
3Binary files a/swoffsite/.bzr/checkout/dirstate and /dev/null differ1Binary files a/swoffsite/.bzr/checkout/dirstate and /dev/null differ
diff --git a/swoffsite/.bzr/checkout/format b/swoffsite/.bzr/checkout/format
4deleted file mode 1006442deleted file mode 100644
index e0261c7..0000000
--- a/swoffsite/.bzr/checkout/format
+++ /dev/null
@@ -1 +0,0 @@
1Bazaar Working Tree Format 6 (bzr 1.14)
diff --git a/swoffsite/.bzr/checkout/views b/swoffsite/.bzr/checkout/views
2deleted file mode 1006440deleted file mode 100644
index e69de29..0000000
--- a/swoffsite/.bzr/checkout/views
+++ /dev/null
diff --git a/swoffsite/.bzr/repository/format b/swoffsite/.bzr/repository/format
3deleted file mode 1006441deleted file mode 100644
index b200528..0000000
--- a/swoffsite/.bzr/repository/format
+++ /dev/null
@@ -1 +0,0 @@
1Bazaar repository format 2a (needs bzr 1.16 or later)
diff --git a/swoffsite/.bzr/repository/indices/80cdf3db9d80e5bed1a92485f6128aa2.cix b/swoffsite/.bzr/repository/indices/80cdf3db9d80e5bed1a92485f6128aa2.cix
2deleted file mode 1006440deleted file mode 100644
index bb19a90..0000000
3Binary files a/swoffsite/.bzr/repository/indices/80cdf3db9d80e5bed1a92485f6128aa2.cix and /dev/null differ1Binary files a/swoffsite/.bzr/repository/indices/80cdf3db9d80e5bed1a92485f6128aa2.cix and /dev/null differ
diff --git a/swoffsite/.bzr/repository/indices/80cdf3db9d80e5bed1a92485f6128aa2.iix b/swoffsite/.bzr/repository/indices/80cdf3db9d80e5bed1a92485f6128aa2.iix
4deleted file mode 1006442deleted file mode 100644
index 4cfef68..0000000
5Binary files a/swoffsite/.bzr/repository/indices/80cdf3db9d80e5bed1a92485f6128aa2.iix and /dev/null differ3Binary files a/swoffsite/.bzr/repository/indices/80cdf3db9d80e5bed1a92485f6128aa2.iix and /dev/null differ
diff --git a/swoffsite/.bzr/repository/indices/80cdf3db9d80e5bed1a92485f6128aa2.rix b/swoffsite/.bzr/repository/indices/80cdf3db9d80e5bed1a92485f6128aa2.rix
6deleted file mode 1006444deleted file mode 100644
index 3fb716f..0000000
7Binary files a/swoffsite/.bzr/repository/indices/80cdf3db9d80e5bed1a92485f6128aa2.rix and /dev/null differ5Binary files a/swoffsite/.bzr/repository/indices/80cdf3db9d80e5bed1a92485f6128aa2.rix and /dev/null differ
diff --git a/swoffsite/.bzr/repository/indices/80cdf3db9d80e5bed1a92485f6128aa2.six b/swoffsite/.bzr/repository/indices/80cdf3db9d80e5bed1a92485f6128aa2.six
8deleted file mode 1006446deleted file mode 100644
index cf4403b..0000000
9Binary files a/swoffsite/.bzr/repository/indices/80cdf3db9d80e5bed1a92485f6128aa2.six and /dev/null differ7Binary files a/swoffsite/.bzr/repository/indices/80cdf3db9d80e5bed1a92485f6128aa2.six and /dev/null differ
diff --git a/swoffsite/.bzr/repository/indices/80cdf3db9d80e5bed1a92485f6128aa2.tix b/swoffsite/.bzr/repository/indices/80cdf3db9d80e5bed1a92485f6128aa2.tix
10deleted file mode 1006448deleted file mode 100644
index 9e875bb..0000000
11Binary files a/swoffsite/.bzr/repository/indices/80cdf3db9d80e5bed1a92485f6128aa2.tix and /dev/null differ9Binary files a/swoffsite/.bzr/repository/indices/80cdf3db9d80e5bed1a92485f6128aa2.tix and /dev/null differ
diff --git a/swoffsite/.bzr/repository/pack-names b/swoffsite/.bzr/repository/pack-names
12deleted file mode 10064410deleted file mode 100644
index addd39f..0000000
--- a/swoffsite/.bzr/repository/pack-names
+++ /dev/null
@@ -1,7 +0,0 @@
1B+Tree Graph Index 2
2node_ref_lists=0
3key_elements=1
4len=1
5row_lengths=1
6x��1� PgO��
7C���������=�W�j��}����t�D8���`��R }D1� p%t���`
8\ No newline at end of file0\ No newline at end of file
diff --git a/swoffsite/.bzr/repository/packs/80cdf3db9d80e5bed1a92485f6128aa2.pack b/swoffsite/.bzr/repository/packs/80cdf3db9d80e5bed1a92485f6128aa2.pack
9deleted file mode 1006441deleted file mode 100644
index 92ef5ea..0000000
10Binary files a/swoffsite/.bzr/repository/packs/80cdf3db9d80e5bed1a92485f6128aa2.pack and /dev/null differ2Binary files a/swoffsite/.bzr/repository/packs/80cdf3db9d80e5bed1a92485f6128aa2.pack and /dev/null differ
diff --git a/swoffsite/swoffsite/cli.py b/swoffsite/swoffsite/cli.py
index aa6381f..a468c6b 100644
--- a/swoffsite/swoffsite/cli.py
+++ b/swoffsite/swoffsite/cli.py
@@ -26,10 +26,10 @@ import os
26import sys26import sys
27import tempfile27import tempfile
2828
29from .async import FakePool, Pool
30from .cleantemp import cleantemp29from .cleantemp import cleantemp
31from .log import configure_logging, log30from .log import configure_logging, log
32from .mirror import s3_walk, swift_walk, mirror31from .mirror import s3_walk, swift_walk, mirror
32from .pool import FakePool, Pool
3333
3434
35def s3_bucket_name():35def s3_bucket_name():
@@ -96,6 +96,9 @@ def parse_args():
96 parser.add_argument(96 parser.add_argument(
97 '--reduced-redundancy', dest='reduced_redundancy', action='store_true',97 '--reduced-redundancy', dest='reduced_redundancy', action='store_true',
98 help='Upload objects with REDUCED_REDUNDANCY class set.')98 help='Upload objects with REDUCED_REDUNDANCY class set.')
99 parser.add_argument(
100 '--no-delete', dest='delete', default=True, action='store_false',
101 help='Do not delete anything; only upload objects.')
99 group = parser.add_mutually_exclusive_group(required=True)102 group = parser.add_mutually_exclusive_group(required=True)
100 group.add_argument(103 group.add_argument(
101 '--to-s3', dest='direction', action='store_const', const='s3',104 '--to-s3', dest='direction', action='store_const', const='s3',
@@ -143,7 +146,7 @@ def main():
143 mirror(swift_walker, s3_walker, direction=args.direction,146 mirror(swift_walker, s3_walker, direction=args.direction,
144 bucket=args.bucket, gpg_key=args.gpg_key,147 bucket=args.bucket, gpg_key=args.gpg_key,
145 dry_run=args.dry_run, recent=args.recent, pool=pool,148 dry_run=args.dry_run, recent=args.recent, pool=pool,
146 reduced_redundancy=args.reduced_redundancy)149 reduced_redundancy=args.reduced_redundancy, delete=args.delete)
147 finally:150 finally:
148 pool.terminate()151 pool.terminate()
149152
diff --git a/swoffsite/swoffsite/mirror.py b/swoffsite/swoffsite/mirror.py
index cedd1ea..b256991 100644
--- a/swoffsite/swoffsite/mirror.py
+++ b/swoffsite/swoffsite/mirror.py
@@ -19,7 +19,7 @@
19__all__ = ['s3_walk', 'swift_walk', 'mirror_swift_to_s3']19__all__ = ['s3_walk', 'swift_walk', 'mirror_swift_to_s3']
2020
21from cStringIO import StringIO21from cStringIO import StringIO
22from datetime import datetime22from datetime import datetime, timedelta, tzinfo
23import fnmatch23import fnmatch
24import multiprocessing24import multiprocessing
25import os.path25import os.path
@@ -45,6 +45,23 @@ SWIFT_BATCHSIZE = 1000
45CHUNK_SIZE = 512*102445CHUNK_SIZE = 512*1024
4646
4747
48# In Python 3 we could just use datetime.timezone.utc, but since this is
49# still Python 2 we have to do it ourselves.
50class UTC(tzinfo):
51
52 def utcoffset(self, dt):
53 return timedelta(0)
54
55 def tzname(self, dt):
56 return 'UTC'
57
58 def dst(self, dt):
59 return timedelta(0)
60
61
62utc = UTC()
63
64
48def get_s3_name(container, name, md5):65def get_s3_name(container, name, md5):
49 assert '/' not in container, 'Container name must not contain / char'66 assert '/' not in container, 'Container name must not contain / char'
50 return '{}/{}.{}.gpg'.format(container, name, md5)67 return '{}/{}.{}.gpg'.format(container, name, md5)
@@ -150,7 +167,7 @@ def get_swift_con(_cons={}):
150 key=os.environ.get('OS_PASSWORD'),167 key=os.environ.get('OS_PASSWORD'),
151 retries=5,168 retries=5,
152 snet=False,169 snet=False,
153 auth_version='2.0',170 auth_version=os.environ.get('OS_IDENTITY_API_VERSION', '2.0'),
154 os_options=dict(171 os_options=dict(
155 tenant_id=os.environ.get('OS_TENANT_ID'),172 tenant_id=os.environ.get('OS_TENANT_ID'),
156 tenant_name=os.environ.get('OS_TENANT_NAME'),173 tenant_name=os.environ.get('OS_TENANT_NAME'),
@@ -424,7 +441,8 @@ def del_swift_task(dry_run, swift_obj):
424441
425442
426def mirror(swift_walker, s3_walker, direction, bucket,443def mirror(swift_walker, s3_walker, direction, bucket,
427 gpg_key, dry_run, recent, pool=None, reduced_redundancy=False):444 gpg_key, dry_run, recent, pool=None, reduced_redundancy=False,
445 delete=True):
428 next_swift_obj = next(swift_walker, None) # (container, dict)446 next_swift_obj = next(swift_walker, None) # (container, dict)
429 next_s3_key = next(s3_walker, None) # A modified boto.s3.key447 next_s3_key = next(s3_walker, None) # A modified boto.s3.key
430448
@@ -466,9 +484,8 @@ def mirror(swift_walker, s3_walker, direction, bucket,
466 # Object found in Swift that isn't in S3.484 # Object found in Swift that isn't in S3.
467 log.debug('{!r} in Swift but not S3'.format(swift_cmp))485 log.debug('{!r} in Swift but not S3'.format(swift_cmp))
468 if direction == 's3':486 if direction == 's3':
469 lm = iso8601.parse_date(next_swift_obj[1]['last_modified'],487 lm = iso8601.parse_date(next_swift_obj[1]['last_modified'])
470 None)488 if not recent or datetime.now(utc) > lm + recent:
471 if not recent or datetime.utcnow() > lm + recent:
472 num_new_files += 1489 num_new_files += 1
473 pool.do(to_s3_task, dry_run, lock, bucket, gpg_key,490 pool.do(to_s3_task, dry_run, lock, bucket, gpg_key,
474 next_swift_obj,491 next_swift_obj,
@@ -476,8 +493,9 @@ def mirror(swift_walker, s3_walker, direction, bucket,
476 else:493 else:
477 num_ignored_files += 1494 num_ignored_files += 1
478 elif direction == 'swift':495 elif direction == 'swift':
479 num_dead_files += 1496 if delete:
480 pool.do(del_swift_task, dry_run, next_swift_obj)497 num_dead_files += 1
498 pool.do(del_swift_task, dry_run, next_swift_obj)
481 else:499 else:
482 raise NotImplementedError(direction)500 raise NotImplementedError(direction)
483 next_swift_obj = next(swift_walker, None)501 next_swift_obj = next(swift_walker, None)
@@ -486,11 +504,12 @@ def mirror(swift_walker, s3_walker, direction, bucket,
486 # Object found in S3 that isn't in Swift.504 # Object found in S3 that isn't in Swift.
487 log.debug('{!r} in S3 but not Swift'.format(s3_cmp))505 log.debug('{!r} in S3 but not Swift'.format(s3_cmp))
488 if direction == 's3':506 if direction == 's3':
489 num_dead_files += 1507 if delete:
490 s3_deletions.append(next_s3_key.name)508 num_dead_files += 1
491 if len(s3_deletions) > 500:509 s3_deletions.append(next_s3_key.name)
492 pool.do(del_s3_task, dry_run, bucket, s3_deletions)510 if len(s3_deletions) > 500:
493 s3_deletions = []511 pool.do(del_s3_task, dry_run, bucket, s3_deletions)
512 s3_deletions = []
494 elif direction == 'swift':513 elif direction == 'swift':
495 num_new_files += 1514 num_new_files += 1
496 pool.do(to_swift_task,515 pool.do(to_swift_task,
@@ -506,14 +525,15 @@ def mirror(swift_walker, s3_walker, direction, bucket,
506 next_swift_obj = next(swift_walker, None)525 next_swift_obj = next(swift_walker, None)
507 next_s3_key = next(s3_walker, None)526 next_s3_key = next(s3_walker, None)
508527
509 if s3_deletions:528 if delete and s3_deletions:
510 # Do any remaining bulk deletions.529 # Do any remaining bulk deletions.
511 pool.do(del_s3_task, dry_run, bucket, s3_deletions)530 pool.do(del_s3_task, dry_run, bucket, s3_deletions)
512531
513 cdir = direction.capitalize()532 cdir = direction.capitalize()
514 log.info('{} files in sync'.format(num_unchanged_files))533 log.info('{} files in sync'.format(num_unchanged_files))
515 log.info('{} files to send to {}'.format(num_new_files, cdir))534 log.info('{} files to send to {}'.format(num_new_files, cdir))
516 log.info('{} files to remove from {}'.format(num_dead_files, cdir))535 if delete:
536 log.info('{} files to remove from {}'.format(num_dead_files, cdir))
517 if recent and direction == 's3':537 if recent and direction == 's3':
518 log.info('{} files ignored (younger than {})'.format(num_ignored_files,538 log.info('{} files ignored (younger than {})'.format(num_ignored_files,
519 recent))539 recent))
diff --git a/swoffsite/swoffsite/async.py b/swoffsite/swoffsite/pool.py
520similarity index 100%540similarity index 100%
521rename from swoffsite/swoffsite/async.py541rename from swoffsite/swoffsite/async.py
522rename to swoffsite/swoffsite/pool.py542rename to swoffsite/swoffsite/pool.py

Subscribers

People subscribed via source and target branches