Skip to content

Handle mkdir in State.py properly #152

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 2 commits into from
May 18, 2017
Merged

Handle mkdir in State.py properly #152

merged 2 commits into from
May 18, 2017

Conversation

timvaillancourt
Copy link
Contributor

@timvaillancourt timvaillancourt commented May 18, 2017

os.makedirs() is used in State.py to create the state dir, however this fails if you don't own the entire tree from / (root) up.

This PR tries a regular mkdir (os.mkdir) first and falls back to a recursive makedir (os.makedirs) if it fails. Also exceptions are caught properly now, this issue caused a large stacktrace.

Example of the original error:

...
[Errno 13] Permission denied: '/mnt/mongobackup/default'
Traceback (most recent call last):
  File "/var/lib/mongodb-consistent-backup/.pex/install/mongodb_consistent_backup-1.0.1-py2-none-any.whl.50d2483f9d3c33ae9bb528471e56ca495b2758f3/mongodb_consistent_backup-1.0.1-py2-none-any.whl/mongodb_consistent_backup/__init__.py", line 14, in run
    m = MongodbConsistentBackup()
  File "/var/lib/mongodb-consistent-backup/.pex/install/mongodb_consistent_backup-1.0.1-py2-none-any.whl.50d2483f9d3c33ae9bb528471e56ca495b2758f3/mongodb_consistent_backup-1.0.1-py2-none-any.whl/mongodb_consistent_backup/Main.py", line 62, in __init__
    self.setup_state()
  File "/var/lib/mongodb-consistent-backup/.pex/install/mongodb_consistent_backup-1.0.1-py2-none-any.whl.50d2483f9d3c33ae9bb528471e56ca495b2758f3/mongodb_consistent_backup-1.0.1-py2-none-any.whl/mongodb_consistent_backup/Main.py", line 96, in setup_state
    StateRoot(self.backup_root_directory, self.config).write(True)
  File "/var/lib/mongodb-consistent-backup/.pex/install/mongodb_consistent_backup-1.0.1-py2-none-any.whl.50d2483f9d3c33ae9bb528471e56ca495b2758f3/mongodb_consistent_backup-1.0.1-py2-none-any.whl/mongodb_consistent_backup/State.py", line 120, in __init__
    StateBase.__init__(self, base_dir, config)
  File "/var/lib/mongodb-consistent-backup/.pex/install/mongodb_consistent_backup-1.0.1-py2-none-any.whl.50d2483f9d3c33ae9bb528471e56ca495b2758f3/mongodb_consistent_backup-1.0.1-py2-none-any.whl/mongodb_consistent_backup/State.py", line 25, in __init__
    os.makedirs(self.state_dir)
  File "/usr/lib64/python2.7/os.py", line 150, in makedirs
    makedirs(head, mode)
  File "/usr/lib64/python2.7/os.py", line 157, in makedirs
    mkdir(name, mode)
OSError: [Errno 13] Permission denied: '/mnt/mongobackup/default'

This user owns /mnt/mongobackup but not /mnt, causing this error on os.makedirs(). The new logic would have avoided this.

@timvaillancourt timvaillancourt requested a review from dbmurphy May 18, 2017 11:21
@timvaillancourt timvaillancourt merged commit eb0c0be into Percona-Lab:master May 18, 2017
@timvaillancourt timvaillancourt deleted the state_mkdir_fix branch May 18, 2017 14:13
@timvaillancourt timvaillancourt mentioned this pull request May 18, 2017
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants