He's a simple example to (hopefully) make it clear:

$ cd /srv/node/vdc/quarantined/containers/3a7b4bae41a17d0f54b247c727b4f0cd

$ ls -l

total 20
-rw------- 1 swift swift 18432 Aug 15 2016 3a7b4bae41a17d0f54b247c727b4f0cd.db

$ sudo swift-container-info ./3a7b4bae41a17d0f54b247c727b4f0cd.db
Traceback (most recent call last):
  File "/usr/bin/swift-container-info", line 32, in <module>
    print_info('container', *args, **vars(options))
File "/usr/lib/python2.7/dist-packages/swift/cli/info.py", line 327, in print_info
    info = broker.get_info()
File "/usr/lib/python2.7/dist-packages/swift/container/backend.py", line 501, in get_info
    with self.get() as conn:
  File "/usr/lib/python2.7/contextlib.py", line 17, in __enter__
    return self.gen.next()
File "/usr/lib/python2.7/dist-packages/swift/common/db.py", line 366, in get
    self.possibly_quarantine(*sys.exc_info())
File "/usr/lib/python2.7/dist-packages/swift/common/db.py", line 347, in possibly_quarantine
    renamer(self.db_dir, quar_path, fsync=False)
File "/usr/lib/python2.7/dist-packages/swift/common/utils.py", line 1094, in renamer
    os.rename(old, new)
OSError: [Errno 16] Device or resource busy


On 15/06/17 14:06, Mark Kirkwood wrote:
Thanks for the explanation Clay!


As to why, well suppose you have a quarantined container...and want to see where it thinks it should be. - you'll call swift-container-info on it right? That calls get_info - so will attempt to re-quarantine the file...which is unexpected - and scary (it will try to move away the directory too)! Also means you can't get the metadata as the script bails before printing it.

regards

Mark


On 15/06/17 13:55, Clay Gerrard wrote:
Pretty sure that's true and mostly optimistic on the part of the db replicator which is more in the data path for replication - than say rsync object replication.

If you look at ssync or ec reconstructor you'll see it's quite possible for them to trip built in DiskFile quarantine behavior during replication as well!

I wouldn't say it's "by design" but we've never been shy to quarantine anytime we encounter invalid data - the storage wsgi servers can quarantine for example - if you happen to hit the right object at the right time.

Why?  ;)

-Clay

On Wed, Jun 14, 2017 at 6:16 PM Mark Kirkwood <[email protected] <mailto:[email protected]>> wrote:

    This was highlighted to me recently, and after doing some
    experiments it
    seems that the 'job descriptions' for replicators vs auditors is
    different for objects vs containers (and probably accounts).

    For objects:

    - replicator will move objects to where they should go

    - auditor will check validity + quarantine as required


For containers (and possibly accounts - haven't checked but code looks
    similar)

    - replicator will move objects to where they should go and check
    validity + quarantine as required

    - auditor will check validity and quarantine as required


    This looks a bit like the container replicator is treading on the
    auditors toes - is this intended and/or am I missing something?


    In terms of *why* this happens, it seems to be due to:

    - ContainerBroker.get_info using a self.get which resolves to
    DatabaseBroker.get

    - DatabaseBroker.get calls self.possibly_quarantine

So anywhere that these brokers call 'get_info' results in a potential
    quarantine...this *looks* like it might be accidental function
    creepage
    - thoughts?

    (This code analysis done on Mitaka/2.7.0)


    regards

    Mark



    _______________________________________________
    Mailing list:
http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack
    Post to     : [email protected]
    <mailto:[email protected]>
    Unsubscribe :
http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack



_______________________________________________
Mailing list: http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack
Post to     : [email protected]
Unsubscribe : http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack


_______________________________________________
Mailing list: http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack
Post to     : [email protected]
Unsubscribe : http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack

Reply via email to