)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6648,"name":"Changbin Liu","email":"changbin.liu@gmail.com","username":"changbl"},"change_message_id":"7a713044e03c285f02acd89292fa6b433483f6b7","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Introduce a CorrelatedFailure exception"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This exception has a releated cause which can"},{"line_number":10,"context_line":"provide more details about the root issue that"},{"line_number":11,"context_line":"caused the exception to be triggered. Use it"},{"line_number":12,"context_line":"in the places where its applicable to have"},{"line_number":13,"context_line":"such functionality."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"AAAAWH%2F%2Fyo4%3D","line":10,"updated":"2014-03-13 19:45:03.000000000","message":"releated \u003d\u003e related","commit_id":"332e733b8021d3506d43bf6e413d6098cb11b126"}],"taskflow/exceptions.py":[{"author":{"_account_id":6648,"name":"Changbin Liu","email":"changbin.liu@gmail.com","username":"changbl"},"change_message_id":"8f425dde918240e9cddff5485722af1b3b69a6ea","unresolved":false,"context_lines":[{"line_number":44,"context_line":"# Errors related to storage or operations on storage units."},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"class StorageError(TaskFlowException):"},{"line_number":47,"context_line":"    \"\"\"Raised when storage backends can not be read/saved/deleted...\"\"\""},{"line_number":48,"context_line":""},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"# Generic errors that do not belong in any category and can be used for"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAWH%2F%2FqmM%3D","line":47,"updated":"2014-03-14 16:05:11.000000000","message":"Sometimes it is XXFailure, sometimes is XXError. Can we just keep one for simplicity? :)","commit_id":"6062454512eebfaba45f81d35571f571c18444a1"},{"author":{"_account_id":7366,"name":"Ivan Melnikov","email":"imelnikov@griddynamics.com","username":"imelnikov"},"change_message_id":"98f472a6c89fe427ad0dcdcd84ed8717ad8b06b3","unresolved":false,"context_lines":[{"line_number":55,"context_line":"    \"\"\"Raised when some type of invariant violation occurs.\"\"\""},{"line_number":56,"context_line":""},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"class Timeout(InvariantViolation):"},{"line_number":59,"context_line":"    \"\"\"Raised when something was not finished within an allotted timeout.\"\"\""},{"line_number":60,"context_line":""},{"line_number":61,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAWH%2F%2FtXU%3D","line":58,"updated":"2014-03-14 10:17:41.000000000","message":"Timeout is currently used only by worker-based engine, and it\u0027s use does not look like InvariantViolation to me.","commit_id":"6062454512eebfaba45f81d35571f571c18444a1"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"ea845d273182af59e120d76383236cc27b685269","unresolved":false,"context_lines":[{"line_number":55,"context_line":"    \"\"\"Raised when some type of invariant violation occurs.\"\"\""},{"line_number":56,"context_line":""},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"class Timeout(InvariantViolation):"},{"line_number":59,"context_line":"    \"\"\"Raised when something was not finished within an allotted timeout.\"\"\""},{"line_number":60,"context_line":""},{"line_number":61,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAWH%2F%2FoaU%3D","line":58,"in_reply_to":"AAAAWH%2F%2FtXU%3D","updated":"2014-03-14 21:08:21.000000000","message":"Sounds good.","commit_id":"6062454512eebfaba45f81d35571f571c18444a1"},{"author":{"_account_id":6648,"name":"Changbin Liu","email":"changbin.liu@gmail.com","username":"changbl"},"change_message_id":"8f425dde918240e9cddff5485722af1b3b69a6ea","unresolved":false,"context_lines":[{"line_number":73,"context_line":""},{"line_number":74,"context_line":"class AlreadyExists(InvariantViolation):"},{"line_number":75,"context_line":"    \"\"\"Raised when some entry in some other object/item already exists.\"\"\""},{"line_number":76,"context_line":""},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"class DependencyFailure(InvariantViolation):"},{"line_number":79,"context_line":"    \"\"\"Raised when some dependency can\u0027t be resolved.\"\"\""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAWH%2F%2Fqm0%3D","line":76,"updated":"2014-03-14 16:05:11.000000000","message":"What is the difference between Duplicate and AlreadyExists?","commit_id":"6062454512eebfaba45f81d35571f571c18444a1"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"ea845d273182af59e120d76383236cc27b685269","unresolved":false,"context_lines":[{"line_number":73,"context_line":""},{"line_number":74,"context_line":"class AlreadyExists(InvariantViolation):"},{"line_number":75,"context_line":"    \"\"\"Raised when some entry in some other object/item already exists.\"\"\""},{"line_number":76,"context_line":""},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"class DependencyFailure(InvariantViolation):"},{"line_number":79,"context_line":"    \"\"\"Raised when some dependency can\u0027t be resolved.\"\"\""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAWH%2F%2Foac%3D","line":76,"in_reply_to":"AAAAWH%2F%2Fqm0%3D","updated":"2014-03-14 21:08:21.000000000","message":"Good point, more consolation.","commit_id":"6062454512eebfaba45f81d35571f571c18444a1"},{"author":{"_account_id":6648,"name":"Changbin Liu","email":"changbin.liu@gmail.com","username":"changbl"},"change_message_id":"8f425dde918240e9cddff5485722af1b3b69a6ea","unresolved":false,"context_lines":[{"line_number":106,"context_line":""},{"line_number":107,"context_line":"class JobAlreadyExists(InvalidJobOperation):"},{"line_number":108,"context_line":"    \"\"\"Raised when a job entry already exists.\"\"\""},{"line_number":109,"context_line":""},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"# Errors related to flows or operations on flows."},{"line_number":112,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAWH%2F%2FqoM%3D","line":109,"updated":"2014-03-14 16:05:11.000000000","message":"Do we need to differentiate NotFound and JobNotFound, and also AlreadyExists and JobAlreadyExists? That seems potentially lead to many more exceptions like XXNotFound, XXAlreadyExists...","commit_id":"6062454512eebfaba45f81d35571f571c18444a1"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"ea845d273182af59e120d76383236cc27b685269","unresolved":false,"context_lines":[{"line_number":106,"context_line":""},{"line_number":107,"context_line":"class JobAlreadyExists(InvalidJobOperation):"},{"line_number":108,"context_line":"    \"\"\"Raised when a job entry already exists.\"\"\""},{"line_number":109,"context_line":""},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"# Errors related to flows or operations on flows."},{"line_number":112,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAWH%2F%2FobA%3D","line":109,"in_reply_to":"AAAAWH%2F%2FqoM%3D","updated":"2014-03-14 21:08:21.000000000","message":"Agreed, let\u0027s consolidate.","commit_id":"6062454512eebfaba45f81d35571f571c18444a1"},{"author":{"_account_id":6648,"name":"Changbin Liu","email":"changbin.liu@gmail.com","username":"changbl"},"change_message_id":"8f425dde918240e9cddff5485722af1b3b69a6ea","unresolved":false,"context_lines":[{"line_number":112,"context_line":""},{"line_number":113,"context_line":"class EmptyFlow(InvariantViolation):"},{"line_number":114,"context_line":"    \"\"\"Raised when flow doesn\u0027t contain tasks.\"\"\""},{"line_number":115,"context_line":""},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"# Others."},{"line_number":118,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAWH%2F%2Fqnk%3D","line":115,"updated":"2014-03-14 16:05:11.000000000","message":"Place EmptyFlow under InvariantViolation code section?","commit_id":"6062454512eebfaba45f81d35571f571c18444a1"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"ea845d273182af59e120d76383236cc27b685269","unresolved":false,"context_lines":[{"line_number":112,"context_line":""},{"line_number":113,"context_line":"class EmptyFlow(InvariantViolation):"},{"line_number":114,"context_line":"    \"\"\"Raised when flow doesn\u0027t contain tasks.\"\"\""},{"line_number":115,"context_line":""},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"# Others."},{"line_number":118,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAWH%2F%2Foak%3D","line":115,"in_reply_to":"AAAAWH%2F%2Fqnk%3D","updated":"2014-03-14 21:08:21.000000000","message":"Was thinking it deserves its own group.","commit_id":"6062454512eebfaba45f81d35571f571c18444a1"},{"author":{"_account_id":6648,"name":"Changbin Liu","email":"changbin.liu@gmail.com","username":"changbl"},"change_message_id":"441bd95c05b078a1cbbe2e706d7224a6062c402b","unresolved":false,"context_lines":[{"line_number":100,"context_line":""},{"line_number":101,"context_line":"class EmptyFlow(InvariantViolation):"},{"line_number":102,"context_line":"    \"\"\"Raised when flow doesn\u0027t contain tasks.\"\"\""},{"line_number":103,"context_line":""},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"# Others."},{"line_number":106,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAWH%2F%2FkRM%3D","line":103,"updated":"2014-03-16 21:33:46.000000000","message":"How about this?\n\nTaskFlowException -\u003e  JobException -\u003e UnClaimableJob\n\nTaskFlowException -\u003e  FlowException -\u003e EmptyFlow","commit_id":"7bd0f7f5efe560a845e511c4c91c8b16bc2bcc5a"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"c09c333857b5b7faf585a7bf431af4ab0b33aa7f","unresolved":false,"context_lines":[{"line_number":100,"context_line":""},{"line_number":101,"context_line":"class EmptyFlow(InvariantViolation):"},{"line_number":102,"context_line":"    \"\"\"Raised when flow doesn\u0027t contain tasks.\"\"\""},{"line_number":103,"context_line":""},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"# Others."},{"line_number":106,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAWH%2F%2Fj0E%3D","line":103,"in_reply_to":"AAAAWH%2F%2FkRM%3D","updated":"2014-03-17 02:00:06.000000000","message":"Agreed, sounds great :)","commit_id":"7bd0f7f5efe560a845e511c4c91c8b16bc2bcc5a"}],"taskflow/persistence/backends/impl_zookeeper.py":[{"author":{"_account_id":7366,"name":"Ivan Melnikov","email":"imelnikov@griddynamics.com","username":"imelnikov"},"change_message_id":"f5ee8d9a09cbf26bd58e7b29369178b5819fe695","unresolved":false,"context_lines":[{"line_number":93,"context_line":"            self._client.start()"},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"    def validate(self):"},{"line_number":96,"context_line":"        with self._exc_wrapper():"},{"line_number":97,"context_line":"            k_utils.check_compatible(self._client, MIN_ZK_VERSION)"},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"    @property"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAWH%2F%2ByFo%3D","line":96,"updated":"2014-03-24 12:01:23.000000000","message":"How about wrapping IncompatibleVersion with StorageFailure here?","commit_id":"6e2590c35e976c8b3c7d830fb307cb57f35d19da"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"52dbef237aa7b072eee68729d1f698c325ea8bc8","unresolved":false,"context_lines":[{"line_number":93,"context_line":"            self._client.start()"},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"    def validate(self):"},{"line_number":96,"context_line":"        with self._exc_wrapper():"},{"line_number":97,"context_line":"            k_utils.check_compatible(self._client, MIN_ZK_VERSION)"},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"    @property"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAWH%2F%2Buow%3D","line":96,"in_reply_to":"AAAAWH%2F%2ByFo%3D","updated":"2014-03-24 19:28:15.000000000","message":"Done","commit_id":"6e2590c35e976c8b3c7d830fb307cb57f35d19da"}],"taskflow/states.py":[{"author":{"_account_id":8895,"name":"Stanislav Kudriashev","email":"stas.kudriashev@gmail.com","username":"skudriashev"},"change_message_id":"dc6a0348059140d3cae277823fb130e9b5c8f722","unresolved":false,"context_lines":[{"line_number":110,"context_line":""},{"line_number":111,"context_line":"    If transition can be performed, it returns True. If transition"},{"line_number":112,"context_line":"    should be ignored, it returns False. If transition is not"},{"line_number":113,"context_line":"    valid, it raises a InvalidState exception."},{"line_number":114,"context_line":"    \"\"\""},{"line_number":115,"context_line":"    if old_state \u003d\u003d new_state:"},{"line_number":116,"context_line":"        return False"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAWH%2F%2BtJs%3D","line":113,"updated":"2014-03-24 23:12:22.000000000","message":"`a`, `an` or even `the`?)","commit_id":"a5a856eeff1ce4f103fc7c31b8c97106fc3d38ce"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"b43c1b6ed19cb9c96dbc2039becbc57e83bd86b9","unresolved":false,"context_lines":[{"line_number":110,"context_line":""},{"line_number":111,"context_line":"    If transition can be performed, it returns True. If transition"},{"line_number":112,"context_line":"    should be ignored, it returns False. If transition is not"},{"line_number":113,"context_line":"    valid, it raises a InvalidState exception."},{"line_number":114,"context_line":"    \"\"\""},{"line_number":115,"context_line":"    if old_state \u003d\u003d new_state:"},{"line_number":116,"context_line":"        return False"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAWH%2F%2Br2Q%3D","line":113,"in_reply_to":"AAAAWH%2F%2BtJs%3D","updated":"2014-03-25 03:32:49.000000000","message":"lets go with \u0027an\u0027 (not really sure, all sound ok to me).","commit_id":"a5a856eeff1ce4f103fc7c31b8c97106fc3d38ce"}]}
