)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"0e3406f09019229ebc9a8889b1b7e29bd9b93625","unresolved":false,"context_lines":[{"line_number":9,"context_line":"When we started Pluggable Backends, we meant to keep the common API"},{"line_number":10,"context_line":"(class), which supported all kinds of usage, like today. However,"},{"line_number":11,"context_line":"it soon became apparent that needs of auditors, replicators, and"},{"line_number":12,"context_line":"servers are different. The current AccoubtBroker and ContainerBroker"},{"line_number":13,"context_line":"are able to function only because they presume the specific"},{"line_number":14,"context_line":"implementation, in which a database filename exists. If filename"},{"line_number":15,"context_line":"is removed from the common API, the auditor has to do insane"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"1ae5cdf2_86533938","line":12,"updated":"2014-06-11 01:42:15.000000000","message":"AccountBroker rather then AccoubtBroker","commit_id":"59e97220c60822e087ec04036fe2f7d312f8c8af"}],"swift/account/backend.py":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"c6747133872ad4ca2c90181804f4f6b12d2e8e6a","unresolved":false,"context_lines":[{"line_number":434,"context_line":"    def __init__(self, path, device, partition, account, **kwargs):"},{"line_number":435,"context_line":"        hsh \u003d hash_path(account)"},{"line_number":436,"context_line":"        top_path \u003d os.path.join(path, device, DATADIR)"},{"line_number":437,"context_line":"        dir_path \u003d storage_directory(top_path, partition, hsh)"},{"line_number":438,"context_line":"        db_path \u003d os.path.join(dir_path, hsh + \u0027.db\u0027)"},{"line_number":439,"context_line":"        kwargs.setdefault(\u0027account\u0027, account)"},{"line_number":440,"context_line":"        super(AccountBackend, self).__init__(db_path, **kwargs)"}],"source_content_type":"text/x-python","patch_set":2,"id":"9ad9bd40_1eea2f0f","line":437,"updated":"2014-05-02 20:43:13.000000000","message":"everywhere else I see storage_directory used I see it joining datadir rather than root/device/datadir?  That\u0027s how the code in _get_account_broker in the account server used to work.  Is this change intentional?  better?","commit_id":"439b407080736c9e1ee496a4d0d0eff6b478bfc6"},{"author":{"_account_id":597,"name":"Pete Zaitcev","email":"zaitcev@kotori.zaitcev.us","username":"zaitcev"},"change_message_id":"8dfadc447f04cd42344350c2b70b63146c590bae","unresolved":false,"context_lines":[{"line_number":434,"context_line":"    def __init__(self, path, device, partition, account, **kwargs):"},{"line_number":435,"context_line":"        hsh \u003d hash_path(account)"},{"line_number":436,"context_line":"        top_path \u003d os.path.join(path, device, DATADIR)"},{"line_number":437,"context_line":"        dir_path \u003d storage_directory(top_path, partition, hsh)"},{"line_number":438,"context_line":"        db_path \u003d os.path.join(dir_path, hsh + \u0027.db\u0027)"},{"line_number":439,"context_line":"        kwargs.setdefault(\u0027account\u0027, account)"},{"line_number":440,"context_line":"        super(AccountBackend, self).__init__(db_path, **kwargs)"}],"source_content_type":"text/x-python","patch_set":2,"id":"9ad9bd40_c6139d5a","line":437,"in_reply_to":"9ad9bd40_1eea2f0f","updated":"2014-05-03 00:37:18.000000000","message":"Done","commit_id":"439b407080736c9e1ee496a4d0d0eff6b478bfc6"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"0e3406f09019229ebc9a8889b1b7e29bd9b93625","unresolved":false,"context_lines":[{"line_number":28,"context_line":"    PENDING_CAP, PICKLE_PROTOCOL, utf8encode"},{"line_number":29,"context_line":"from swift.common.utils import hash_path, lock_parent_directory, \\"},{"line_number":30,"context_line":"    normalize_timestamp, storage_directory"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"DATADIR \u003d \u0027accounts\u0027"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"1ae5cdf2_81b96317","line":31,"updated":"2014-06-11 01:42:15.000000000","message":"You could use the () syntax in importing if you don\u0027t want to use the \\\n\nE.g:\nfrom swift.common.utils import (\n    hash_path, lock_parent_directory,\n    normalize_timestamp, storage_directory )\n\nThis is just a suggestion, non blocking.","commit_id":"59e97220c60822e087ec04036fe2f7d312f8c8af"}],"swift/container/backend.py":[{"author":{"_account_id":7479,"name":"paul luse","email":"paul.e.luse@intel.com","username":"peluse"},"change_message_id":"01e18465bac24e2d5fd334194c8ee03b6dd60bdb","unresolved":false,"context_lines":[{"line_number":33,"context_line":""},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"class ContainerBroker(DatabaseBroker):"},{"line_number":36,"context_line":"    \"\"\"Encapsulates working with a container database for in-tree users.\"\"\""},{"line_number":37,"context_line":"    db_type \u003d \u0027container\u0027"},{"line_number":38,"context_line":"    db_contains_type \u003d \u0027object\u0027"},{"line_number":39,"context_line":"    db_reclaim_timestamp \u003d \u0027created_at\u0027"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAWn%2F%2F5aY%3D","line":36,"updated":"2014-04-08 17:00:17.000000000","message":"sorry, what\u0027s an \"in tree\" user?","commit_id":"bc214d4f27da676dfc96e51f7a24661bd43109dd"},{"author":{"_account_id":7479,"name":"paul luse","email":"paul.e.luse@intel.com","username":"peluse"},"change_message_id":"781a20cbbc352ed30b7411a8caf6282218ee0c0d","unresolved":false,"context_lines":[{"line_number":33,"context_line":""},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"class ContainerBroker(DatabaseBroker):"},{"line_number":36,"context_line":"    \"\"\"Encapsulates working with a container database for in-tree users.\"\"\""},{"line_number":37,"context_line":"    db_type \u003d \u0027container\u0027"},{"line_number":38,"context_line":"    db_contains_type \u003d \u0027object\u0027"},{"line_number":39,"context_line":"    db_reclaim_timestamp \u003d \u0027created_at\u0027"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAW3%2F%2Foeg%3D","line":36,"in_reply_to":"AAAAWn%2F%2F4zM%3D","updated":"2014-04-11 14:51:43.000000000","message":"OK, thanks.  If this is a familiar phrase for folks then I\u0027ll just chalk it up to my ongoing Swift education :)  Makes sense now that you explain it though","commit_id":"bc214d4f27da676dfc96e51f7a24661bd43109dd"},{"author":{"_account_id":597,"name":"Pete Zaitcev","email":"zaitcev@kotori.zaitcev.us","username":"zaitcev"},"change_message_id":"3f5fc8d858cbaefff0737f4c77cede93ec98ce41","unresolved":false,"context_lines":[{"line_number":33,"context_line":""},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"class ContainerBroker(DatabaseBroker):"},{"line_number":36,"context_line":"    \"\"\"Encapsulates working with a container database for in-tree users.\"\"\""},{"line_number":37,"context_line":"    db_type \u003d \u0027container\u0027"},{"line_number":38,"context_line":"    db_contains_type \u003d \u0027object\u0027"},{"line_number":39,"context_line":"    db_reclaim_timestamp \u003d \u0027created_at\u0027"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAWn%2F%2F4zM%3D","line":36,"in_reply_to":"AAAAWn%2F%2F5aY%3D","updated":"2014-04-08 18:00:45.000000000","message":"That would be expirer, auditor, and replicator. Do you have any suggestions?","commit_id":"bc214d4f27da676dfc96e51f7a24661bd43109dd"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"c6747133872ad4ca2c90181804f4f6b12d2e8e6a","unresolved":false,"context_lines":[{"line_number":521,"context_line":"        dir_path \u003d storage_directory(top_path, partition, hsh)"},{"line_number":522,"context_line":"        db_path \u003d os.path.join(dir_path, hsh + \u0027.db\u0027)"},{"line_number":523,"context_line":"        kwargs.setdefault(\u0027account\u0027, account)"},{"line_number":524,"context_line":"        kwargs.setdefault(\u0027container\u0027, container)"},{"line_number":525,"context_line":"        super(ContainerBackend, self).__init__(db_path, **kwargs)"}],"source_content_type":"text/x-python","patch_set":2,"id":"9ad9bd40_e30338b6","line":524,"updated":"2014-05-02 20:43:13.000000000","message":"I think i\u0027d prefer maybe account\u003d\u0027\u0027 in the signature and let python through the \"got multiple keyword args\" thing if you tried to pass in account as a positional argument and a kwarg.","commit_id":"439b407080736c9e1ee496a4d0d0eff6b478bfc6"},{"author":{"_account_id":597,"name":"Pete Zaitcev","email":"zaitcev@kotori.zaitcev.us","username":"zaitcev"},"change_message_id":"8dfadc447f04cd42344350c2b70b63146c590bae","unresolved":false,"context_lines":[{"line_number":521,"context_line":"        dir_path \u003d storage_directory(top_path, partition, hsh)"},{"line_number":522,"context_line":"        db_path \u003d os.path.join(dir_path, hsh + \u0027.db\u0027)"},{"line_number":523,"context_line":"        kwargs.setdefault(\u0027account\u0027, account)"},{"line_number":524,"context_line":"        kwargs.setdefault(\u0027container\u0027, container)"},{"line_number":525,"context_line":"        super(ContainerBackend, self).__init__(db_path, **kwargs)"}],"source_content_type":"text/x-python","patch_set":2,"id":"9ad9bd40_751c3978","line":524,"in_reply_to":"9ad9bd40_1e322f10","updated":"2014-05-03 00:37:18.000000000","message":"Oh yeah, I like it too. You can guess that this whole setdefault junk came from copying setting of logger above.","commit_id":"439b407080736c9e1ee496a4d0d0eff6b478bfc6"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"759d69246e8e6ca6a1355fea8a17e8305a303394","unresolved":false,"context_lines":[{"line_number":521,"context_line":"        dir_path \u003d storage_directory(top_path, partition, hsh)"},{"line_number":522,"context_line":"        db_path \u003d os.path.join(dir_path, hsh + \u0027.db\u0027)"},{"line_number":523,"context_line":"        kwargs.setdefault(\u0027account\u0027, account)"},{"line_number":524,"context_line":"        kwargs.setdefault(\u0027container\u0027, container)"},{"line_number":525,"context_line":"        super(ContainerBackend, self).__init__(db_path, **kwargs)"}],"source_content_type":"text/x-python","patch_set":2,"id":"9ad9bd40_1e322f10","line":524,"in_reply_to":"9ad9bd40_e30338b6","updated":"2014-05-02 20:51:14.000000000","message":"I take it back, it doesn\u0027t make any sense to set a default value for account \u0026 container - their mere existence as names in the positional argument list ensures you can\u0027t pass them in through kwargs.  So just say:\n\n    super().__init__(db_path, account\u003daccount, container\u003dcontainer, **kwargs)\n\neven better.","commit_id":"439b407080736c9e1ee496a4d0d0eff6b478bfc6"}]}
