)]}'
{
  "commit": "483e64bacd81b06d17fb179deb9b8def90017b07",
  "tree": "72969df5dae4031170a9b8c5306f6aa9aa1b5a62",
  "parents": [
    "793c23e72f8d733144a354cb61cc655497f5c54c"
  ],
  "author": {
    "name": "Peter Razumovsky",
    "email": "prazumovsky@mirantis.com",
    "time": "Fri Mar 04 17:04:28 2016 +0300"
  },
  "committer": {
    "name": "Peter Razumovsky",
    "email": "prazumovsky@mirantis.com",
    "time": "Tue Mar 15 17:58:31 2016 +0000"
  },
  "message": "Fix race condition in reload_on_sighup functional\n\nRace condition appears in next situation:\n\n  1. First thread calls _set_config_value for one section.\n  2. Second thread calls _set_config_value for another section.\n  3. First thread. Config option value set, calls\n     open(self.config_file, \u0027wb\u0027), which erases all file content.\n  4. Second thread. In previous point moment second thread tries to\n     set config option value to self.config_file, which is empty (see 3).\n     So, NoSectionError exception raised.\n\nThis patch adds ten retries for setting option value, if NoSectionError\nraised, i.e. try to wait until self.config_file is busy.\n\nChange-Id: Ic54ea287ebe4724511f75d42677cae5dfdec4e57\nCloses-bug: #1535766\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "f8ae075d3773bc985b919a945fb416d252a950ec",
      "old_mode": 33188,
      "old_path": "common/config.py",
      "new_id": "3aee48f00c98870beef53854be670e5ab908fd5a",
      "new_mode": 33188,
      "new_path": "common/config.py"
    },
    {
      "type": "modify",
      "old_id": "cba5386264ad95d7480e598d06236a990752f954",
      "old_mode": 33188,
      "old_path": "functional/test_reload_on_sighup.py",
      "new_id": "b014f49c2b40d2d697044fb843002090e3efbd18",
      "new_mode": 33188,
      "new_path": "functional/test_reload_on_sighup.py"
    }
  ]
}
