)]}'
{"smaug/services/protection/checkpoint.py":[{"author":{"_account_id":19346,"name":"yinwei","email":"yinweiishere@icloud.com","username":"yinwei"},"change_message_id":"07f6d9f32f811ac39807572fb2a73b6e3c61a330","unresolved":false,"context_lines":[{"line_number":34,"context_line":"    def __init__(self, bank_section, checkpoint_id):"},{"line_number":35,"context_line":"        self._id \u003d checkpoint_id"},{"line_number":36,"context_line":"        self._index_file_path \u003d _checkpoint_id_to_index_file(checkpoint_id)"},{"line_number":37,"context_line":"        self._bank_section \u003d bank_section"},{"line_number":38,"context_line":"        self.refresh_meta_data()"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"    @property"}],"source_content_type":"text/x-python","patch_set":5,"id":"5aef4532_65cabe1c","line":37,"updated":"2016-03-10 03:51:30.000000000","message":"we need to persist the resource graph at the protection time to checkpoint as well.Otherwise, the resources under the same plan may vary by time.  What resources we re-build during restore should only be the the resources at the protection time.","commit_id":"3c68319fa1497db4f3adea40887860c448090ec1"},{"author":{"_account_id":2023,"name":"Saggi Mizrahi","email":"ficoos+osreview@gmail.com","username":"ficoos"},"change_message_id":"0f638855c7f60f8c24cca5be2518af650959b831","unresolved":false,"context_lines":[{"line_number":34,"context_line":"    def __init__(self, bank_section, checkpoint_id):"},{"line_number":35,"context_line":"        self._id \u003d checkpoint_id"},{"line_number":36,"context_line":"        self._index_file_path \u003d _checkpoint_id_to_index_file(checkpoint_id)"},{"line_number":37,"context_line":"        self._bank_section \u003d bank_section"},{"line_number":38,"context_line":"        self.refresh_meta_data()"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"    @property"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa0719c6_4ff82d7d","line":37,"in_reply_to":"5aef4532_65cabe1c","updated":"2016-03-20 22:13:55.000000000","message":"We will get this information from the plan. But as commented this will be done in a future patch.","commit_id":"3c68319fa1497db4f3adea40887860c448090ec1"},{"author":{"_account_id":19346,"name":"yinwei","email":"yinweiishere@icloud.com","username":"yinwei"},"change_message_id":"07f6d9f32f811ac39807572fb2a73b6e3c61a330","unresolved":false,"context_lines":[{"line_number":53,"context_line":"    @status.setter"},{"line_number":54,"context_line":"    def status(self, value):"},{"line_number":55,"context_line":"        self._md_cache \u003d value"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"    def _is_supported_version(self, version):"},{"line_number":58,"context_line":"        return version in self.SUPPORTED_VERSIONS"},{"line_number":59,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"5aef4532_c5d912f5","line":56,"updated":"2016-03-10 03:51:30.000000000","message":"need pair of functions to set/get one resource definition under this checkpoint.","commit_id":"3c68319fa1497db4f3adea40887860c448090ec1"},{"author":{"_account_id":2023,"name":"Saggi Mizrahi","email":"ficoos+osreview@gmail.com","username":"ficoos"},"change_message_id":"0f638855c7f60f8c24cca5be2518af650959b831","unresolved":false,"context_lines":[{"line_number":53,"context_line":"    @status.setter"},{"line_number":54,"context_line":"    def status(self, value):"},{"line_number":55,"context_line":"        self._md_cache \u003d value"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"    def _is_supported_version(self, version):"},{"line_number":58,"context_line":"        return version in self.SUPPORTED_VERSIONS"},{"line_number":59,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"fa0719c6_4f3f8d25","line":56,"in_reply_to":"5aef4532_c5d912f5","updated":"2016-03-20 22:13:55.000000000","message":"Will be done later. This is simply the skeleton.","commit_id":"3c68319fa1497db4f3adea40887860c448090ec1"},{"author":{"_account_id":19346,"name":"yinwei","email":"yinweiishere@icloud.com","username":"yinwei"},"change_message_id":"3fba65edab0c4c1b8d44ab235e5a647bd7ee208a","unresolved":false,"context_lines":[{"line_number":65,"context_line":"            raise RuntimeError("},{"line_number":66,"context_line":"                \"Checkpoint was created in an unsupported version\")"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"    def refresh_meta_data(self):"},{"line_number":69,"context_line":"        new_md \u003d self._bank_section.get_object(self._index_file_path)"},{"line_number":70,"context_line":"        self._assert_supported_version(new_md)"},{"line_number":71,"context_line":"        self._md_cache \u003d new_md"}],"source_content_type":"text/x-python","patch_set":5,"id":"7af24918_f0a0d392","line":68,"updated":"2016-03-02 03:11:49.000000000","message":"I have some confusion about this function name.  Refresh depends on which is the latest.  On initialization, disk content is the latest, while during update, memory is the latest content.  \nIs it better to use a pair of functions like load_meta_data() and commit_meta_data to indicate the refresh direction in the function name?","commit_id":"3c68319fa1497db4f3adea40887860c448090ec1"},{"author":{"_account_id":2023,"name":"Saggi Mizrahi","email":"ficoos+osreview@gmail.com","username":"ficoos"},"change_message_id":"de768d30ec884b843fad6f178a0f280feb66b300","unresolved":false,"context_lines":[{"line_number":65,"context_line":"            raise RuntimeError("},{"line_number":66,"context_line":"                \"Checkpoint was created in an unsupported version\")"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"    def refresh_meta_data(self):"},{"line_number":69,"context_line":"        new_md \u003d self._bank_section.get_object(self._index_file_path)"},{"line_number":70,"context_line":"        self._assert_supported_version(new_md)"},{"line_number":71,"context_line":"        self._md_cache \u003d new_md"}],"source_content_type":"text/x-python","patch_set":5,"id":"7af24918_2962eaad","line":68,"in_reply_to":"7af24918_f0a0d392","updated":"2016-03-06 15:12:05.000000000","message":"You are correct, I will fix that.","commit_id":"3c68319fa1497db4f3adea40887860c448090ec1"},{"author":{"_account_id":19346,"name":"yinwei","email":"yinweiishere@icloud.com","username":"yinwei"},"change_message_id":"3fba65edab0c4c1b8d44ab235e5a647bd7ee208a","unresolved":false,"context_lines":[{"line_number":79,"context_line":"        checkpoint_id \u003d checkpoint_id or cls._generate_id()"},{"line_number":80,"context_line":"        bank_section.create_object("},{"line_number":81,"context_line":"            key\u003d_checkpoint_id_to_index_file(checkpoint_id),"},{"line_number":82,"context_line":"            value\u003d{"},{"line_number":83,"context_line":"                \"version\": cls.VERSION,"},{"line_number":84,"context_line":"                \"id\": checkpoint_id,"},{"line_number":85,"context_line":"                \"status\": \"new\","}],"source_content_type":"text/x-python","patch_set":5,"id":"7af24918_f051f363","line":82,"updated":"2016-03-02 03:11:49.000000000","message":"better define the default value as a function and align it with current checkpoint attrs definition instead of hard coded.","commit_id":"3c68319fa1497db4f3adea40887860c448090ec1"},{"author":{"_account_id":2023,"name":"Saggi Mizrahi","email":"ficoos+osreview@gmail.com","username":"ficoos"},"change_message_id":"de768d30ec884b843fad6f178a0f280feb66b300","unresolved":false,"context_lines":[{"line_number":79,"context_line":"        checkpoint_id \u003d checkpoint_id or cls._generate_id()"},{"line_number":80,"context_line":"        bank_section.create_object("},{"line_number":81,"context_line":"            key\u003d_checkpoint_id_to_index_file(checkpoint_id),"},{"line_number":82,"context_line":"            value\u003d{"},{"line_number":83,"context_line":"                \"version\": cls.VERSION,"},{"line_number":84,"context_line":"                \"id\": checkpoint_id,"},{"line_number":85,"context_line":"                \"status\": \"new\","}],"source_content_type":"text/x-python","patch_set":5,"id":"7af24918_4949368e","line":82,"in_reply_to":"7af24918_f051f363","updated":"2016-03-06 15:12:05.000000000","message":"I don\u0027t understand the suggestion.","commit_id":"3c68319fa1497db4f3adea40887860c448090ec1"},{"author":{"_account_id":19346,"name":"yinwei","email":"yinweiishere@icloud.com","username":"yinwei"},"change_message_id":"3fba65edab0c4c1b8d44ab235e5a647bd7ee208a","unresolved":false,"context_lines":[{"line_number":82,"context_line":"            value\u003d{"},{"line_number":83,"context_line":"                \"version\": cls.VERSION,"},{"line_number":84,"context_line":"                \"id\": checkpoint_id,"},{"line_number":85,"context_line":"                \"status\": \"new\","},{"line_number":86,"context_line":"            }"},{"line_number":87,"context_line":"        )"},{"line_number":88,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"7af24918_f0929356","line":85,"updated":"2016-03-02 03:11:49.000000000","message":"Need confirm with you the status of checkpoint. We used to define \u0027protecting\u0027,\u0027available\u0027,\u0027restoring\u0027,\u0027deleted\u0027. Is it possible to merge the status \u0027new\u0027 with \u0027protecting\u0027?","commit_id":"3c68319fa1497db4f3adea40887860c448090ec1"},{"author":{"_account_id":2023,"name":"Saggi Mizrahi","email":"ficoos+osreview@gmail.com","username":"ficoos"},"change_message_id":"de768d30ec884b843fad6f178a0f280feb66b300","unresolved":false,"context_lines":[{"line_number":82,"context_line":"            value\u003d{"},{"line_number":83,"context_line":"                \"version\": cls.VERSION,"},{"line_number":84,"context_line":"                \"id\": checkpoint_id,"},{"line_number":85,"context_line":"                \"status\": \"new\","},{"line_number":86,"context_line":"            }"},{"line_number":87,"context_line":"        )"},{"line_number":88,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"7af24918_29678a26","line":85,"in_reply_to":"7af24918_f0929356","updated":"2016-03-06 15:12:05.000000000","message":"Will change.","commit_id":"3c68319fa1497db4f3adea40887860c448090ec1"},{"author":{"_account_id":19346,"name":"yinwei","email":"yinweiishere@icloud.com","username":"yinwei"},"change_message_id":"3fba65edab0c4c1b8d44ab235e5a647bd7ee208a","unresolved":false,"context_lines":[{"line_number":83,"context_line":"                \"version\": cls.VERSION,"},{"line_number":84,"context_line":"                \"id\": checkpoint_id,"},{"line_number":85,"context_line":"                \"status\": \"new\","},{"line_number":86,"context_line":"            }"},{"line_number":87,"context_line":"        )"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"        return Checkpoint(BankSection(bank_section, checkpoint_id))"}],"source_content_type":"text/x-python","patch_set":5,"id":"7af24918_eb3e24b7","line":86,"updated":"2016-03-02 03:11:49.000000000","message":"missing to create index logic? Like status, tenant id, etc.?\nShall we define a way to dynamically add index?","commit_id":"3c68319fa1497db4f3adea40887860c448090ec1"},{"author":{"_account_id":2023,"name":"Saggi Mizrahi","email":"ficoos+osreview@gmail.com","username":"ficoos"},"change_message_id":"de768d30ec884b843fad6f178a0f280feb66b300","unresolved":false,"context_lines":[{"line_number":83,"context_line":"                \"version\": cls.VERSION,"},{"line_number":84,"context_line":"                \"id\": checkpoint_id,"},{"line_number":85,"context_line":"                \"status\": \"new\","},{"line_number":86,"context_line":"            }"},{"line_number":87,"context_line":"        )"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"        return Checkpoint(BankSection(bank_section, checkpoint_id))"}],"source_content_type":"text/x-python","patch_set":5,"id":"7af24918_4962d617","line":86,"in_reply_to":"7af24918_eb3e24b7","updated":"2016-03-06 15:12:05.000000000","message":"I know, I will do it in a future patch since I want this in so people can build on it.","commit_id":"3c68319fa1497db4f3adea40887860c448090ec1"},{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"a4e8296fa65a525b2b8a89212dd9146479d1c223","unresolved":false,"context_lines":[{"line_number":133,"context_line":"        return Checkpoint(self._checkpoints_section, checkpoint_id)"},{"line_number":134,"context_line":""},{"line_number":135,"context_line":"    def create(self, plan):"},{"line_number":136,"context_line":"        # TODO(saggi): Serialize plan to checkpoint. Will be done in future patches."},{"line_number":137,"context_line":"        return Checkpoint.create_in_section(self._checkpoints_section)"}],"source_content_type":"text/x-python","patch_set":6,"id":"fa0719c6_795de7e8","line":136,"range":{"start_line":136,"start_character":76,"end_line":136,"end_character":83},"updated":"2016-03-21 13:53:07.000000000","message":"more then 80 char","commit_id":"6abb3075687e396cc0575f309b5d16fae3b99fa5"},{"author":{"_account_id":20883,"name":"Yuval Brik","email":"yuval@brik.org.il","username":"yuvalbr"},"change_message_id":"3d0974c86974d6b1e54c15c8449516eefba227c5","unresolved":false,"context_lines":[{"line_number":88,"context_line":""},{"line_number":89,"context_line":"        return Checkpoint(BankSection(bank_section, checkpoint_id))"},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"    def commmit(self):"},{"line_number":92,"context_line":"        self._bank_section.create_object("},{"line_number":93,"context_line":"            key\u003dself._index_file_path,"},{"line_number":94,"context_line":"            value\u003dself._md_cache,"}],"source_content_type":"text/x-python","patch_set":8,"id":"9a061dce_0a3a9e36","line":91,"range":{"start_line":91,"start_character":0,"end_line":91,"end_character":22},"updated":"2016-04-04 12:29:34.000000000","message":"commmit -\u003e commit","commit_id":"f41df08eaf4181f43ae667e9fcecf76cd8aa968c"},{"author":{"_account_id":20883,"name":"Yuval Brik","email":"yuval@brik.org.il","username":"yuvalbr"},"change_message_id":"40c41e0d15bbb42ebadced29074174094e5cc0b0","unresolved":false,"context_lines":[{"line_number":111,"context_line":"        self._bank_section.delete_object(self._index_file_path)"},{"line_number":112,"context_line":""},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"class CheckpointCollection(object):"},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"    def __init__(self, bank):"},{"line_number":117,"context_line":"        super(CheckpointCollection, self).__init__()"}],"source_content_type":"text/x-python","patch_set":8,"id":"9a061dce_74db41ee","line":114,"range":{"start_line":114,"start_character":0,"end_line":114,"end_character":35},"updated":"2016-04-04 11:53:19.000000000","message":"What about delete checkpoint?\nCan you add a stub if not implemented in this patch?","commit_id":"f41df08eaf4181f43ae667e9fcecf76cd8aa968c"}],"smaug/tests/unit/protection/test_checkpoint_collection.py":[{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"a4e8296fa65a525b2b8a89212dd9146479d1c223","unresolved":false,"context_lines":[{"line_number":20,"context_line":""},{"line_number":21,"context_line":"class CheckpointCollectionTest(base.TestCase):"},{"line_number":22,"context_line":"    def _create_test_collection(self):"},{"line_number":23,"context_line":"        return CheckpointCollection(Bank(_InMemoryBankPlugin()))"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"    def test_create_checkpoint(self):"},{"line_number":26,"context_line":"        collection \u003d self._create_test_collection()"}],"source_content_type":"text/x-python","patch_set":6,"id":"fa0719c6_59a103a9","line":23,"range":{"start_line":23,"start_character":15,"end_line":23,"end_character":63},"updated":"2016-03-21 13:53:07.000000000","message":"you are missing the lease_plugin param","commit_id":"6abb3075687e396cc0575f309b5d16fae3b99fa5"}]}
