)]}'
{"doc/source/developing_drivers.rst":[{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"3e7eead334fed802d68c9922b6d30f1017edecc8","unresolved":false,"context_lines":[{"line_number":21,"context_line":"component of Keystone. It is an abstraction around the data access"},{"line_number":22,"context_line":"needed by a particular subsystem. This pluggable implementation is not"},{"line_number":23,"context_line":"only how Keystone implements its own data access, but how you can"},{"line_number":24,"context_line":"implement your own!"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"Each major subsystem (that has data access needs) implements the data access"},{"line_number":27,"context_line":"by using drivers. Some examples of Keystone\u0027s drivers:"}],"source_content_type":"text/x-rst","patch_set":2,"id":"da20952f_81d5151d","line":24,"updated":"2015-08-28 22:26:59.000000000","message":"Needs more !!!!!!!!!!!!! (not really)\n\nNice paragraph.","commit_id":"0fade695c53af99464a40694b8e4229b27ccbef9"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"3e7eead334fed802d68c9922b6d30f1017edecc8","unresolved":false,"context_lines":[{"line_number":34,"context_line":"--------------"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"It\u0027s best to start developing your custom driver outside of the Keystone"},{"line_number":37,"context_line":"ecosystem. This is better for you because it gives you more freedom and"},{"line_number":38,"context_line":"you are not bound to the strict OpenStack development rules. You can"},{"line_number":39,"context_line":"iterate faster and take whatever shortcuts you need to get your product"},{"line_number":40,"context_line":"out of the door."}],"source_content_type":"text/x-rst","patch_set":2,"id":"da20952f_41b29d07","line":37,"updated":"2015-08-28 22:26:59.000000000","message":"suggest \"outside of ecosystem\" is a bit broad. It is still probably part of the keystone ecosystem, maybe rephrase.","commit_id":"0fade695c53af99464a40694b8e4229b27ccbef9"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"7b2c447f49e81552b382f4173b964762abca0d23","unresolved":false,"context_lines":[{"line_number":34,"context_line":"--------------"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"It\u0027s best to start developing your custom driver outside of the Keystone"},{"line_number":37,"context_line":"ecosystem. This is better for you because it gives you more freedom and"},{"line_number":38,"context_line":"you are not bound to the strict OpenStack development rules. You can"},{"line_number":39,"context_line":"iterate faster and take whatever shortcuts you need to get your product"},{"line_number":40,"context_line":"out of the door."}],"source_content_type":"text/x-rst","patch_set":2,"id":"da20952f_b0ece92a","line":37,"in_reply_to":"da20952f_41b29d07","updated":"2015-08-31 16:05:19.000000000","message":"Done. Maybe. I\u0027m not sure I like my new phrasing either.","commit_id":"0fade695c53af99464a40694b8e4229b27ccbef9"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"3e7eead334fed802d68c9922b6d30f1017edecc8","unresolved":false,"context_lines":[{"line_number":59,"context_line":"The TLDR; steps (and too long didn\u0027t write yet):"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"1. Determine which subsystem you would like write a driver for"},{"line_number":62,"context_line":"2. Subclass the most current version of the driver interface"},{"line_number":63,"context_line":"3. Implement each of the abstract methods for that driver"},{"line_number":64,"context_line":"   a. Guess at the inputs/outputs or maybe do some debugging to figure"},{"line_number":65,"context_line":"      it out"}],"source_content_type":"text/x-rst","patch_set":2,"id":"da20952f_41a93d8f","line":62,"updated":"2015-08-28 22:26:59.000000000","message":"Yes!","commit_id":"0fade695c53af99464a40694b8e4229b27ccbef9"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"3e7eead334fed802d68c9922b6d30f1017edecc8","unresolved":false,"context_lines":[{"line_number":62,"context_line":"2. Subclass the most current version of the driver interface"},{"line_number":63,"context_line":"3. Implement each of the abstract methods for that driver"},{"line_number":64,"context_line":"   a. Guess at the inputs/outputs or maybe do some debugging to figure"},{"line_number":65,"context_line":"      it out"},{"line_number":66,"context_line":"   b. Definitely cross your fingers!"},{"line_number":67,"context_line":"4. Register your new driver as an entry point"},{"line_number":68,"context_line":"5. Configure your new driver in ``keystone.conf``"}],"source_content_type":"text/x-rst","patch_set":2,"id":"da20952f_017fc515","line":65,"updated":"2015-08-28 22:26:59.000000000","message":"a and b are a bit snarky. suggest rephrase","commit_id":"0fade695c53af99464a40694b8e4229b27ccbef9"},{"author":{"_account_id":11215,"name":"Vivek Dhayaal","email":"vivekdhayaal@gmail.com","username":"vivekdhayaal"},"change_message_id":"406ea44941cf1ce970534e64f6562fd83cdb717e","unresolved":false,"context_lines":[{"line_number":62,"context_line":"2. Subclass the most current version of the driver interface"},{"line_number":63,"context_line":"3. Implement each of the abstract methods for that driver"},{"line_number":64,"context_line":"   a. Guess at the inputs/outputs or maybe do some debugging to figure"},{"line_number":65,"context_line":"      it out"},{"line_number":66,"context_line":"   b. Definitely cross your fingers!"},{"line_number":67,"context_line":"4. Register your new driver as an entry point"},{"line_number":68,"context_line":"5. Configure your new driver in ``keystone.conf``"}],"source_content_type":"text/x-rst","patch_set":2,"id":"da20952f_e69b9564","line":65,"updated":"2015-08-31 11:35:52.000000000","message":"indentation issue","commit_id":"0fade695c53af99464a40694b8e4229b27ccbef9"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"3e7eead334fed802d68c9922b6d30f1017edecc8","unresolved":false,"context_lines":[{"line_number":67,"context_line":"4. Register your new driver as an entry point"},{"line_number":68,"context_line":"5. Configure your new driver in ``keystone.conf``"},{"line_number":69,"context_line":"6. Sit back and profit!"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"Driver Versioning"},{"line_number":72,"context_line":"-----------------"},{"line_number":73,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"da20952f_a196193d","line":70,"updated":"2015-08-28 22:26:59.000000000","message":"You need the \u0027???\u0027 step if you want to be true to the meme, but this is generally good. Suggest moving to \"sit back and enjoy\" (strictly speaking \"profit\" is not something we imply in OpenSource)","commit_id":"0fade695c53af99464a40694b8e4229b27ccbef9"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"3e7eead334fed802d68c9922b6d30f1017edecc8","unresolved":false,"context_lines":[{"line_number":76,"context_line":"contracts. To help alleviate some of the issues we are now creating"},{"line_number":77,"context_line":"version driver classes, e.g. ``Driver11``."},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"We\u0027ll be supporting the current driver version for typically 1 version back."},{"line_number":80,"context_line":"This will give developers a full cycle to update their drivers. There"},{"line_number":81,"context_line":"may be some cases where we have to make a breaking change and we do"},{"line_number":82,"context_line":"reserve that right."}],"source_content_type":"text/x-rst","patch_set":2,"id":"da20952f_01a6e5ad","line":79,"updated":"2015-08-28 22:26:59.000000000","message":"I\u0027d remove \"typically here\" and replace with \"at least\"","commit_id":"0fade695c53af99464a40694b8e4229b27ccbef9"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"7b2c447f49e81552b382f4173b964762abca0d23","unresolved":false,"context_lines":[{"line_number":76,"context_line":"contracts. To help alleviate some of the issues we are now creating"},{"line_number":77,"context_line":"version driver classes, e.g. ``Driver11``."},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"We\u0027ll be supporting the current driver version for typically 1 version back."},{"line_number":80,"context_line":"This will give developers a full cycle to update their drivers. There"},{"line_number":81,"context_line":"may be some cases where we have to make a breaking change and we do"},{"line_number":82,"context_line":"reserve that right."}],"source_content_type":"text/x-rst","patch_set":2,"id":"da20952f_304f7938","line":79,"in_reply_to":"da20952f_01a6e5ad","updated":"2015-08-31 16:05:19.000000000","message":"Done","commit_id":"0fade695c53af99464a40694b8e4229b27ccbef9"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"3e7eead334fed802d68c9922b6d30f1017edecc8","unresolved":false,"context_lines":[{"line_number":77,"context_line":"version driver classes, e.g. ``Driver11``."},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"We\u0027ll be supporting the current driver version for typically 1 version back."},{"line_number":80,"context_line":"This will give developers a full cycle to update their drivers. There"},{"line_number":81,"context_line":"may be some cases where we have to make a breaking change and we do"},{"line_number":82,"context_line":"reserve that right."},{"line_number":83,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"da20952f_21a3e99e","line":80,"updated":"2015-08-28 22:26:59.000000000","message":"(NIT): will give -\u003e gives","commit_id":"0fade695c53af99464a40694b8e4229b27ccbef9"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"7b2c447f49e81552b382f4173b964762abca0d23","unresolved":false,"context_lines":[{"line_number":77,"context_line":"version driver classes, e.g. ``Driver11``."},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"We\u0027ll be supporting the current driver version for typically 1 version back."},{"line_number":80,"context_line":"This will give developers a full cycle to update their drivers. There"},{"line_number":81,"context_line":"may be some cases where we have to make a breaking change and we do"},{"line_number":82,"context_line":"reserve that right."},{"line_number":83,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"da20952f_105035d3","line":80,"in_reply_to":"da20952f_21a3e99e","updated":"2015-08-31 16:05:19.000000000","message":"Done","commit_id":"0fade695c53af99464a40694b8e4229b27ccbef9"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"3e7eead334fed802d68c9922b6d30f1017edecc8","unresolved":false,"context_lines":[{"line_number":79,"context_line":"We\u0027ll be supporting the current driver version for typically 1 version back."},{"line_number":80,"context_line":"This will give developers a full cycle to update their drivers. There"},{"line_number":81,"context_line":"may be some cases where we have to make a breaking change and we do"},{"line_number":82,"context_line":"reserve that right."},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"As new driver interface versions are added old ones will be modified to"},{"line_number":85,"context_line":"output deprecation messages when used. Unsupported versions will just be"}],"source_content_type":"text/x-rst","patch_set":2,"id":"da20952f_61ea41ae","line":82,"updated":"2015-08-28 22:26:59.000000000","message":"Explain what you mean by this in the sentence or drop it. What are the potential breaking changes, why wouldn\u0027t it just be another version?\n\nI would change to \"Some cases, such as critical security flaws, may require a change to be introduced that breaks compatibility. These special cases will be communicated as widely as possible via the typical OpenStack communication channels.\"","commit_id":"0fade695c53af99464a40694b8e4229b27ccbef9"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"7b2c447f49e81552b382f4173b964762abca0d23","unresolved":false,"context_lines":[{"line_number":79,"context_line":"We\u0027ll be supporting the current driver version for typically 1 version back."},{"line_number":80,"context_line":"This will give developers a full cycle to update their drivers. There"},{"line_number":81,"context_line":"may be some cases where we have to make a breaking change and we do"},{"line_number":82,"context_line":"reserve that right."},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"As new driver interface versions are added old ones will be modified to"},{"line_number":85,"context_line":"output deprecation messages when used. Unsupported versions will just be"}],"source_content_type":"text/x-rst","patch_set":2,"id":"da20952f_d064fdb9","line":82,"in_reply_to":"da20952f_61ea41ae","updated":"2015-08-31 16:05:19.000000000","message":"Done","commit_id":"0fade695c53af99464a40694b8e4229b27ccbef9"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"3e7eead334fed802d68c9922b6d30f1017edecc8","unresolved":false,"context_lines":[{"line_number":84,"context_line":"As new driver interface versions are added old ones will be modified to"},{"line_number":85,"context_line":"output deprecation messages when used. Unsupported versions will just be"},{"line_number":86,"context_line":"deleted altogether."},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"Removing Methods"},{"line_number":89,"context_line":"~~~~~~~~~~~~~~~~"},{"line_number":90,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"da20952f_a10b798d","line":87,"updated":"2015-08-28 22:26:59.000000000","message":"(NIT) Suggest: When a driver version moves from \"deprecated\" to \"unsupported\" it will be removed from the keystone source tree.","commit_id":"0fade695c53af99464a40694b8e4229b27ccbef9"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"7b2c447f49e81552b382f4173b964762abca0d23","unresolved":false,"context_lines":[{"line_number":84,"context_line":"As new driver interface versions are added old ones will be modified to"},{"line_number":85,"context_line":"output deprecation messages when used. Unsupported versions will just be"},{"line_number":86,"context_line":"deleted altogether."},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"Removing Methods"},{"line_number":89,"context_line":"~~~~~~~~~~~~~~~~"},{"line_number":90,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"da20952f_30b4597e","line":87,"in_reply_to":"da20952f_a10b798d","updated":"2015-08-31 16:05:19.000000000","message":"Done","commit_id":"0fade695c53af99464a40694b8e4229b27ccbef9"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"3e7eead334fed802d68c9922b6d30f1017edecc8","unresolved":false,"context_lines":[{"line_number":91,"context_line":"Newer driver interface may remove methods that are currently required."},{"line_number":92,"context_line":"When the method is removed it will no longer be called by Keystone. If"},{"line_number":93,"context_line":"you rely on it being called, maybe for auditing, this will no longer"},{"line_number":94,"context_line":"work."},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"There is no reason why you have to remove the method from your"},{"line_number":97,"context_line":"implementation just because we remove it from ours."}],"source_content_type":"text/x-rst","patch_set":2,"id":"da20952f_41585d8a","line":94,"updated":"2015-08-28 22:26:59.000000000","message":"The \"it will no longer work\" and \"maybe for auditing\" seem a bit awkward and could be rephrased (NIT)","commit_id":"0fade695c53af99464a40694b8e4229b27ccbef9"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"7b2c447f49e81552b382f4173b964762abca0d23","unresolved":false,"context_lines":[{"line_number":91,"context_line":"Newer driver interface may remove methods that are currently required."},{"line_number":92,"context_line":"When the method is removed it will no longer be called by Keystone. If"},{"line_number":93,"context_line":"you rely on it being called, maybe for auditing, this will no longer"},{"line_number":94,"context_line":"work."},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"There is no reason why you have to remove the method from your"},{"line_number":97,"context_line":"implementation just because we remove it from ours."}],"source_content_type":"text/x-rst","patch_set":2,"id":"da20952f_d01e3d6f","line":94,"in_reply_to":"da20952f_41585d8a","updated":"2015-08-31 16:05:19.000000000","message":"Done","commit_id":"0fade695c53af99464a40694b8e4229b27ccbef9"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"3e7eead334fed802d68c9922b6d30f1017edecc8","unresolved":false,"context_lines":[{"line_number":94,"context_line":"work."},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"There is no reason why you have to remove the method from your"},{"line_number":97,"context_line":"implementation just because we remove it from ours."},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"Adding Methods"},{"line_number":100,"context_line":"--------------"}],"source_content_type":"text/x-rst","patch_set":2,"id":"da20952f_e1e09198","line":97,"updated":"2015-08-28 22:26:59.000000000","message":"(NIT) Suggest rephrasing to something less \"yours\" vs \"ours\" but ephasising that there should be minimal (or zero) impact keeping a method on the driver even if the new driver version doesn\u0027t use it.","commit_id":"0fade695c53af99464a40694b8e4229b27ccbef9"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"7b2c447f49e81552b382f4173b964762abca0d23","unresolved":false,"context_lines":[{"line_number":94,"context_line":"work."},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"There is no reason why you have to remove the method from your"},{"line_number":97,"context_line":"implementation just because we remove it from ours."},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"Adding Methods"},{"line_number":100,"context_line":"--------------"}],"source_content_type":"text/x-rst","patch_set":2,"id":"da20952f_d3d96758","line":97,"in_reply_to":"da20952f_e1e09198","updated":"2015-08-31 16:05:19.000000000","message":"Done","commit_id":"0fade695c53af99464a40694b8e4229b27ccbef9"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"3e7eead334fed802d68c9922b6d30f1017edecc8","unresolved":false,"context_lines":[{"line_number":104,"context_line":"compatible. The new version of the driver will define the new method as"},{"line_number":105,"context_line":"an ``abc.abstractmethod`` that must be implemented by driver"},{"line_number":106,"context_line":"implementations. We\u0027ll also go back to our supported drivers and add the"},{"line_number":107,"context_line":"method, with a default implementation, when possible."},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"For example, given a ``thing.DriverV11`` that added a new method"},{"line_number":110,"context_line":"``list_things_by_name()``, we\u0027d go back to ``thing.Driver10`` and"}],"source_content_type":"text/x-rst","patch_set":2,"id":"da20952f_819755eb","line":107,"updated":"2015-08-28 22:26:59.000000000","message":"Would move \"When possible\" to the start of the sentence example:\n\nWhen possible, we will provide a default implementation of the new method which will be added to previous supported driver versions.","commit_id":"0fade695c53af99464a40694b8e4229b27ccbef9"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"7b2c447f49e81552b382f4173b964762abca0d23","unresolved":false,"context_lines":[{"line_number":104,"context_line":"compatible. The new version of the driver will define the new method as"},{"line_number":105,"context_line":"an ``abc.abstractmethod`` that must be implemented by driver"},{"line_number":106,"context_line":"implementations. We\u0027ll also go back to our supported drivers and add the"},{"line_number":107,"context_line":"method, with a default implementation, when possible."},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"For example, given a ``thing.DriverV11`` that added a new method"},{"line_number":110,"context_line":"``list_things_by_name()``, we\u0027d go back to ``thing.Driver10`` and"}],"source_content_type":"text/x-rst","patch_set":2,"id":"da20952f_73aadb86","line":107,"in_reply_to":"da20952f_819755eb","updated":"2015-08-31 16:05:19.000000000","message":"Done","commit_id":"0fade695c53af99464a40694b8e4229b27ccbef9"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"3e7eead334fed802d68c9922b6d30f1017edecc8","unresolved":false,"context_lines":[{"line_number":107,"context_line":"method, with a default implementation, when possible."},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"For example, given a ``thing.DriverV11`` that added a new method"},{"line_number":110,"context_line":"``list_things_by_name()``, we\u0027d go back to ``thing.Driver10`` and"},{"line_number":111,"context_line":"implement that method. This is good because in many cases your driver"},{"line_number":112,"context_line":"will just work, but there are a couple of unfortunate side effects."},{"line_number":113,"context_line":"First if you have already used that method name you will have to rename"}],"source_content_type":"text/x-rst","patch_set":2,"id":"da20952f_2189a9c9","line":110,"updated":"2015-08-28 22:26:59.000000000","message":"(NIT) don\u0027t use the we\u0027d contraction use \"we will\" in this case (or past tense)","commit_id":"0fade695c53af99464a40694b8e4229b27ccbef9"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"7b2c447f49e81552b382f4173b964762abca0d23","unresolved":false,"context_lines":[{"line_number":107,"context_line":"method, with a default implementation, when possible."},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"For example, given a ``thing.DriverV11`` that added a new method"},{"line_number":110,"context_line":"``list_things_by_name()``, we\u0027d go back to ``thing.Driver10`` and"},{"line_number":111,"context_line":"implement that method. This is good because in many cases your driver"},{"line_number":112,"context_line":"will just work, but there are a couple of unfortunate side effects."},{"line_number":113,"context_line":"First if you have already used that method name you will have to rename"}],"source_content_type":"text/x-rst","patch_set":2,"id":"da20952f_537b1728","line":110,"in_reply_to":"da20952f_2189a9c9","updated":"2015-08-31 16:05:19.000000000","message":"Done","commit_id":"0fade695c53af99464a40694b8e4229b27ccbef9"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"3e7eead334fed802d68c9922b6d30f1017edecc8","unresolved":false,"context_lines":[{"line_number":112,"context_line":"will just work, but there are a couple of unfortunate side effects."},{"line_number":113,"context_line":"First if you have already used that method name you will have to rename"},{"line_number":114,"context_line":"your method and cut a new version. Second is that the default"},{"line_number":115,"context_line":"implementation may cause a performance penalty due to it naive"},{"line_number":116,"context_line":"implementation."},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"Updating Methods"}],"source_content_type":"text/x-rst","patch_set":2,"id":"da20952f_a1c379ec","line":115,"updated":"2015-08-28 22:26:59.000000000","message":"I think you accidentally a word before naive","commit_id":"0fade695c53af99464a40694b8e4229b27ccbef9"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"7b2c447f49e81552b382f4173b964762abca0d23","unresolved":false,"context_lines":[{"line_number":112,"context_line":"will just work, but there are a couple of unfortunate side effects."},{"line_number":113,"context_line":"First if you have already used that method name you will have to rename"},{"line_number":114,"context_line":"your method and cut a new version. Second is that the default"},{"line_number":115,"context_line":"implementation may cause a performance penalty due to it naive"},{"line_number":116,"context_line":"implementation."},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"Updating Methods"}],"source_content_type":"text/x-rst","patch_set":2,"id":"da20952f_13ed9fb6","line":115,"in_reply_to":"da20952f_a1c379ec","updated":"2015-08-31 16:05:19.000000000","message":"Done","commit_id":"0fade695c53af99464a40694b8e4229b27ccbef9"},{"author":{"_account_id":15640,"name":"Roxana Gherle","email":"roxana.gherle@hpe.com","username":"roxana-gherle"},"change_message_id":"7ccb85b0720867ba740146ad59f48d8ed0dd72b5","unresolved":false,"context_lines":[{"line_number":59,"context_line":""},{"line_number":60,"context_line":"The TLDR; steps (and too long didn\u0027t write yet):"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"1. Determine which subsystem you would like write a driver for"},{"line_number":63,"context_line":"2. Subclass the most current version of the driver interface"},{"line_number":64,"context_line":"3. Implement each of the abstract methods for that driver"},{"line_number":65,"context_line":"   a. Guess at the inputs/outputs or maybe do some debugging to figure"}],"source_content_type":"text/x-rst","patch_set":3,"id":"da20952f_22a40606","line":62,"updated":"2015-08-31 17:26:10.000000000","message":"would like *to write...","commit_id":"f543f91939afc659bc55af63a210d17b109386b5"},{"author":{"_account_id":15640,"name":"Roxana Gherle","email":"roxana.gherle@hpe.com","username":"roxana-gherle"},"change_message_id":"7ccb85b0720867ba740146ad59f48d8ed0dd72b5","unresolved":false,"context_lines":[{"line_number":92,"context_line":"~~~~~~~~~~~~~~~~"},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"Newer driver interfaces may remove methods that are currently required."},{"line_number":95,"context_line":"Methods are removed when the are no longer required or invoked by Keystone."},{"line_number":96,"context_line":"There is no reason why methods removed from the Keystone interface need to be"},{"line_number":97,"context_line":"removed from custom drivers."},{"line_number":98,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"da20952f_221f265c","line":95,"updated":"2015-08-31 17:26:10.000000000","message":"...when *they are...","commit_id":"f543f91939afc659bc55af63a210d17b109386b5"},{"author":{"_account_id":15640,"name":"Roxana Gherle","email":"roxana.gherle@hpe.com","username":"roxana-gherle"},"change_message_id":"7ccb85b0720867ba740146ad59f48d8ed0dd72b5","unresolved":false,"context_lines":[{"line_number":122,"context_line":"driver implementations. That means that:"},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"* we will respect existing parameters and not just delete them. If they are"},{"line_number":125,"context_line":"  to be removed we will respect their behavior and deprecate then in older"},{"line_number":126,"context_line":"  versions."},{"line_number":127,"context_line":"* we will add new parameters as optional with backward compatible defaults."}],"source_content_type":"text/x-rst","patch_set":3,"id":"da20952f_e26b6eb5","line":125,"updated":"2015-08-31 17:26:10.000000000","message":"deprecate *them ...","commit_id":"f543f91939afc659bc55af63a210d17b109386b5"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"8596c009f166ad75a0a4aeb839704435e798b452","unresolved":false,"context_lines":[{"line_number":128,"context_line":"* we will respect existing parameters and not just delete them. If they are"},{"line_number":129,"context_line":"  to be removed we will respect their behavior and deprecate then in older"},{"line_number":130,"context_line":"  versions."},{"line_number":131,"context_line":"* we will add new parameters as optional with backward compatible defaults."}],"source_content_type":"text/x-rst","patch_set":4,"id":"da20952f_8134e7fb","line":131,"updated":"2015-08-31 21:39:52.000000000","message":"As a followup can we also add a note about using the positional decorator (see implementation in Keystoneclient) that forces all arguments to be passed as kwargs to ensure that we don\u0027t break things because of positional-argument use by accident","commit_id":"cc68bf39d3723678314fd66602bc6bd5ae4bdfeb"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"ef4c045bd5da4daf5c5df49ff9909dbfecbe9bf9","unresolved":false,"context_lines":[{"line_number":27,"context_line":""},{"line_number":28,"context_line":"- keystone.identity.backends.ldap:Identity"},{"line_number":29,"context_line":"- keystone.token.providers.fernet:Provider"},{"line_number":30,"context_line":"- keystone.contrib.federation.backends.sql:Federation"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"In/Out of Tree"},{"line_number":33,"context_line":"--------------"}],"source_content_type":"text/x-rst","patch_set":5,"id":"da20952f_98850caf","line":30,"updated":"2015-09-01 16:48:45.000000000","message":"will these get preformatted?","commit_id":"84cf741fbe19d7d4e29a09e65d5dff5d7ebb7ccd"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"877f9c622266d980b5106f8cbcb9cd0da393773d","unresolved":false,"context_lines":[{"line_number":27,"context_line":""},{"line_number":28,"context_line":"- keystone.identity.backends.ldap:Identity"},{"line_number":29,"context_line":"- keystone.token.providers.fernet:Provider"},{"line_number":30,"context_line":"- keystone.contrib.federation.backends.sql:Federation"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"In/Out of Tree"},{"line_number":33,"context_line":"--------------"}],"source_content_type":"text/x-rst","patch_set":5,"id":"da20952f_3b02bab5","line":30,"in_reply_to":"da20952f_98850caf","updated":"2015-09-01 16:53:32.000000000","message":"Done","commit_id":"84cf741fbe19d7d4e29a09e65d5dff5d7ebb7ccd"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"ef4c045bd5da4daf5c5df49ff9909dbfecbe9bf9","unresolved":false,"context_lines":[{"line_number":37,"context_line":"repository and not worrying about getting it upstream (for now)."},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"This is better for you because it gives you more freedom and you are not bound"},{"line_number":40,"context_line":"to the strict OpenStack development rules. You can iterate faster and take"},{"line_number":41,"context_line":"whatever shortcuts you need to get your product out of the door."},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"This is also good for Keystone because it will limit the amount of drivers"}],"source_content_type":"text/x-rst","patch_set":5,"id":"da20952f_b8b49082","line":40,"updated":"2015-09-01 16:48:45.000000000","message":"rules or schedules","commit_id":"84cf741fbe19d7d4e29a09e65d5dff5d7ebb7ccd"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"877f9c622266d980b5106f8cbcb9cd0da393773d","unresolved":false,"context_lines":[{"line_number":37,"context_line":"repository and not worrying about getting it upstream (for now)."},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"This is better for you because it gives you more freedom and you are not bound"},{"line_number":40,"context_line":"to the strict OpenStack development rules. You can iterate faster and take"},{"line_number":41,"context_line":"whatever shortcuts you need to get your product out of the door."},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"This is also good for Keystone because it will limit the amount of drivers"}],"source_content_type":"text/x-rst","patch_set":5,"id":"da20952f_bb248a60","line":40,"in_reply_to":"da20952f_b8b49082","updated":"2015-09-01 16:53:32.000000000","message":"Done","commit_id":"84cf741fbe19d7d4e29a09e65d5dff5d7ebb7ccd"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"ef4c045bd5da4daf5c5df49ff9909dbfecbe9bf9","unresolved":false,"context_lines":[{"line_number":81,"context_line":"contracts. To help alleviate some of the issues we are now creating"},{"line_number":82,"context_line":"version driver classes, e.g. ``Driver11``."},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"We\u0027ll be supporting the current driver version for at least 1 version back."},{"line_number":85,"context_line":"This gives developers a full cycle to update their drivers. Some cases, such"},{"line_number":86,"context_line":"as critical security flaws, may require a change to be introduced that breaks"},{"line_number":87,"context_line":"compatibility. These special cases will be communicated as widely as possible"}],"source_content_type":"text/x-rst","patch_set":5,"id":"da20952f_3b4aba56","line":84,"updated":"2015-09-01 16:48:45.000000000","message":"nit: s/1/one/","commit_id":"84cf741fbe19d7d4e29a09e65d5dff5d7ebb7ccd"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"877f9c622266d980b5106f8cbcb9cd0da393773d","unresolved":false,"context_lines":[{"line_number":81,"context_line":"contracts. To help alleviate some of the issues we are now creating"},{"line_number":82,"context_line":"version driver classes, e.g. ``Driver11``."},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"We\u0027ll be supporting the current driver version for at least 1 version back."},{"line_number":85,"context_line":"This gives developers a full cycle to update their drivers. Some cases, such"},{"line_number":86,"context_line":"as critical security flaws, may require a change to be introduced that breaks"},{"line_number":87,"context_line":"compatibility. These special cases will be communicated as widely as possible"}],"source_content_type":"text/x-rst","patch_set":5,"id":"da20952f_9b1c2615","line":84,"in_reply_to":"da20952f_3b4aba56","updated":"2015-09-01 16:53:32.000000000","message":"Done","commit_id":"84cf741fbe19d7d4e29a09e65d5dff5d7ebb7ccd"},{"author":{"_account_id":1941,"name":"Lin Hua Cheng","email":"os.lcheng@gmail.com","username":"lin-hua-cheng"},"change_message_id":"d5234a31dc44fff3525f8b0a60c9c1844e965de8","unresolved":false,"context_lines":[{"line_number":78,"context_line":"In the past the driver class was named ``Driver`` and changes would"},{"line_number":79,"context_line":"sometimes be devastating to developers that depend on our driver"},{"line_number":80,"context_line":"contracts. To help alleviate some of the issues we are now creating"},{"line_number":81,"context_line":"version driver classes, e.g. ``Driver11``."},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"We\u0027ll be supporting the current driver version for at least one version back."},{"line_number":84,"context_line":"This gives developers a full cycle to update their drivers. Some cases, such"}],"source_content_type":"text/x-rst","patch_set":7,"id":"da20952f_0a542352","line":81,"updated":"2015-09-02 19:07:14.000000000","message":"nit: DriverV11","commit_id":"c8e236424034112620e827572a0d12d362396451"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"c090125ca076931d3a7478ef934f668d59c24cb5","unresolved":false,"context_lines":[{"line_number":94,"context_line":"Removing Methods"},{"line_number":95,"context_line":"~~~~~~~~~~~~~~~~"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"Newer driver interfaces may remove methods that are currently required."},{"line_number":98,"context_line":"Methods are removed when the are no longer required or invoked by Keystone."},{"line_number":99,"context_line":"There is no reason why methods removed from the Keystone interface need to be"},{"line_number":100,"context_line":"removed from custom drivers."}],"source_content_type":"text/x-rst","patch_set":7,"id":"da20952f_629e1509","line":97,"updated":"2015-09-02 13:27:52.000000000","message":"required by the current driver, right? so, new drivers are allowed to break backwards compatibility?","commit_id":"c8e236424034112620e827572a0d12d362396451"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"a8949ed6bd06cba6dbfa087a46493f34ff888baf","unresolved":false,"context_lines":[{"line_number":94,"context_line":"Removing Methods"},{"line_number":95,"context_line":"~~~~~~~~~~~~~~~~"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"Newer driver interfaces may remove methods that are currently required."},{"line_number":98,"context_line":"Methods are removed when the are no longer required or invoked by Keystone."},{"line_number":99,"context_line":"There is no reason why methods removed from the Keystone interface need to be"},{"line_number":100,"context_line":"removed from custom drivers."}],"source_content_type":"text/x-rst","patch_set":7,"id":"da20952f_9b039476","line":97,"in_reply_to":"da20952f_629e1509","updated":"2015-09-02 14:20:28.000000000","message":"Yes, sorta. We should do our best to make sure old drivers still work though.","commit_id":"c8e236424034112620e827572a0d12d362396451"},{"author":{"_account_id":1941,"name":"Lin Hua Cheng","email":"os.lcheng@gmail.com","username":"lin-hua-cheng"},"change_message_id":"d5234a31dc44fff3525f8b0a60c9c1844e965de8","unresolved":false,"context_lines":[{"line_number":95,"context_line":"~~~~~~~~~~~~~~~~"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"Newer driver interfaces may remove methods that are currently required."},{"line_number":98,"context_line":"Methods are removed when the are no longer required or invoked by Keystone."},{"line_number":99,"context_line":"There is no reason why methods removed from the Keystone interface need to be"},{"line_number":100,"context_line":"removed from custom drivers."},{"line_number":101,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"da20952f_8ac6f314","line":98,"updated":"2015-09-02 19:07:14.000000000","message":"the -\u003e there","commit_id":"c8e236424034112620e827572a0d12d362396451"},{"author":{"_account_id":1941,"name":"Lin Hua Cheng","email":"os.lcheng@gmail.com","username":"lin-hua-cheng"},"change_message_id":"d5234a31dc44fff3525f8b0a60c9c1844e965de8","unresolved":false,"context_lines":[{"line_number":110,"context_line":"add the method, with a default implementation."},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"For example, given a ``thing.DriverV11`` that added a new method"},{"line_number":113,"context_line":"``list_things_by_name()``, we will go back to ``thing.Driver10`` and"},{"line_number":114,"context_line":"implement that method. This is good because in many cases your driver"},{"line_number":115,"context_line":"will just work, but there are a couple of unfortunate side effects."},{"line_number":116,"context_line":"First if you have already used that method name you will have to rename"}],"source_content_type":"text/x-rst","patch_set":7,"id":"da20952f_aacbb71d","line":113,"updated":"2015-09-02 19:07:14.000000000","message":"DriverV10","commit_id":"c8e236424034112620e827572a0d12d362396451"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"c090125ca076931d3a7478ef934f668d59c24cb5","unresolved":false,"context_lines":[{"line_number":125,"context_line":"driver implementations. That means that:"},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"* we will respect existing parameters and not just delete them. If they are"},{"line_number":128,"context_line":"  to be removed we will respect their behavior and deprecate then in older"},{"line_number":129,"context_line":"  versions."},{"line_number":130,"context_line":"* we will add new parameters as optional with backward compatible defaults."}],"source_content_type":"text/x-rst","patch_set":7,"id":"da20952f_e2054514","line":128,"updated":"2015-09-02 13:27:52.000000000","message":"them*","commit_id":"c8e236424034112620e827572a0d12d362396451"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"a8949ed6bd06cba6dbfa087a46493f34ff888baf","unresolved":false,"context_lines":[{"line_number":125,"context_line":"driver implementations. That means that:"},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"* we will respect existing parameters and not just delete them. If they are"},{"line_number":128,"context_line":"  to be removed we will respect their behavior and deprecate then in older"},{"line_number":129,"context_line":"  versions."},{"line_number":130,"context_line":"* we will add new parameters as optional with backward compatible defaults."}],"source_content_type":"text/x-rst","patch_set":7,"id":"da20952f_3b3cc82e","line":128,"in_reply_to":"da20952f_e2054514","updated":"2015-09-02 14:20:28.000000000","message":"Follow up patch? Feel free to create as I won\u0027t be near a computer for a few more hours.","commit_id":"c8e236424034112620e827572a0d12d362396451"}],"keystone/catalog/backends/kvs.py":[{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"ef4c045bd5da4daf5c5df49ff9909dbfecbe9bf9","unresolved":false,"context_lines":[{"line_number":18,"context_line":"from keystone.common import kvs"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"class Catalog(kvs.Base, catalog.CatalogDriverV12):"},{"line_number":22,"context_line":"    # Public interface"},{"line_number":23,"context_line":"    def get_catalog(self, user_id, tenant_id):"},{"line_number":24,"context_line":"        return self.db.get(\u0027catalog-%s-%s\u0027 % (tenant_id, user_id))"}],"source_content_type":"text/x-python","patch_set":5,"id":"da20952f_1bed7625","line":21,"updated":"2015-09-01 16:48:45.000000000","message":"quick stupid question, but why 12?","commit_id":"84cf741fbe19d7d4e29a09e65d5dff5d7ebb7ccd"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"877f9c622266d980b5106f8cbcb9cd0da393773d","unresolved":false,"context_lines":[{"line_number":18,"context_line":"from keystone.common import kvs"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"class Catalog(kvs.Base, catalog.CatalogDriverV12):"},{"line_number":22,"context_line":"    # Public interface"},{"line_number":23,"context_line":"    def get_catalog(self, user_id, tenant_id):"},{"line_number":24,"context_line":"        return self.db.get(\u0027catalog-%s-%s\u0027 % (tenant_id, user_id))"}],"source_content_type":"text/x-python","patch_set":5,"id":"da20952f_dbe05efd","line":21,"in_reply_to":"da20952f_1bed7625","updated":"2015-09-01 16:53:32.000000000","message":"Liberty is the 12th release: http://lists.openstack.org/pipermail/openstack-dev/2015-May/065211.html","commit_id":"84cf741fbe19d7d4e29a09e65d5dff5d7ebb7ccd"}],"keystone/catalog/core.py":[{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"3e7eead334fed802d68c9922b6d30f1017edecc8","unresolved":false,"context_lines":[{"line_number":278,"context_line":""},{"line_number":279,"context_line":""},{"line_number":280,"context_line":"@six.add_metaclass(abc.ABCMeta)"},{"line_number":281,"context_line":"class DriverV12(object):"},{"line_number":282,"context_line":"    \"\"\"Interface description for an Catalog driver.\"\"\""},{"line_number":283,"context_line":""},{"line_number":284,"context_line":"    def _get_list_limit(self):"}],"source_content_type":"text/x-python","patch_set":2,"id":"da20952f_c17f8da9","line":281,"updated":"2015-08-28 22:26:59.000000000","message":"(feel free to ignore) Suggest renaming these to:\n\nCatalogDriverBaseV12 or similar, i know... we are in catalog.core, but it will be more explicit. Same applies elsewhere.","commit_id":"0fade695c53af99464a40694b8e4229b27ccbef9"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"7b2c447f49e81552b382f4173b964762abca0d23","unresolved":false,"context_lines":[{"line_number":278,"context_line":""},{"line_number":279,"context_line":""},{"line_number":280,"context_line":"@six.add_metaclass(abc.ABCMeta)"},{"line_number":281,"context_line":"class DriverV12(object):"},{"line_number":282,"context_line":"    \"\"\"Interface description for an Catalog driver.\"\"\""},{"line_number":283,"context_line":""},{"line_number":284,"context_line":"    def _get_list_limit(self):"}],"source_content_type":"text/x-python","patch_set":2,"id":"da20952f_d3c2c7e8","line":281,"in_reply_to":"da20952f_c17f8da9","updated":"2015-08-31 16:05:19.000000000","message":"I like your suggestion, but removed the \"Base\" part.","commit_id":"0fade695c53af99464a40694b8e4229b27ccbef9"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"15db91236c758ee65c04175b776fa34423339f90","unresolved":false,"context_lines":[{"line_number":278,"context_line":""},{"line_number":279,"context_line":""},{"line_number":280,"context_line":"@six.add_metaclass(abc.ABCMeta)"},{"line_number":281,"context_line":"class CatalogDriverV8(object):"},{"line_number":282,"context_line":"    \"\"\"Interface description for the Catalog driver.\"\"\""},{"line_number":283,"context_line":""},{"line_number":284,"context_line":"    def _get_list_limit(self):"}],"source_content_type":"text/x-python","patch_set":7,"id":"da20952f_2226dd16","line":281,"updated":"2015-09-02 13:24:08.000000000","message":"so we will change these to the version keystone is on, not OpenStack, right?\n\nAlso, does this mean we *have* to update these every release? Or can we release M with CatalogDriverV8?","commit_id":"c8e236424034112620e827572a0d12d362396451"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"62ac200bc7fbda86e4b119dffbd2f119a974e8c6","unresolved":false,"context_lines":[{"line_number":278,"context_line":""},{"line_number":279,"context_line":""},{"line_number":280,"context_line":"@six.add_metaclass(abc.ABCMeta)"},{"line_number":281,"context_line":"class CatalogDriverV8(object):"},{"line_number":282,"context_line":"    \"\"\"Interface description for the Catalog driver.\"\"\""},{"line_number":283,"context_line":""},{"line_number":284,"context_line":"    def _get_list_limit(self):"}],"source_content_type":"text/x-python","patch_set":7,"id":"da20952f_84a81079","line":281,"in_reply_to":"da20952f_2226dd16","updated":"2015-09-02 15:36:27.000000000","message":"I would assume you can release m with catalog driver v8. This isnjust a starting place.","commit_id":"c8e236424034112620e827572a0d12d362396451"}],"keystone/common/manager.py":[{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"3e7eead334fed802d68c9922b6d30f1017edecc8","unresolved":false,"context_lines":[{"line_number":106,"context_line":"        return f"},{"line_number":107,"context_line":""},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"def create_legacy_driver(driver_class):"},{"line_number":110,"context_line":"    module_name \u003d driver_class.__module__"},{"line_number":111,"context_line":"    class_name \u003d driver_class.__name__"},{"line_number":112,"context_line":"    class Driver(driver_class):"}],"source_content_type":"text/x-python","patch_set":2,"id":"da20952f_41429d69","line":109,"updated":"2015-08-28 22:26:59.000000000","message":"Suggest docstring","commit_id":"0fade695c53af99464a40694b8e4229b27ccbef9"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"7b2c447f49e81552b382f4173b964762abca0d23","unresolved":false,"context_lines":[{"line_number":106,"context_line":"        return f"},{"line_number":107,"context_line":""},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"def create_legacy_driver(driver_class):"},{"line_number":110,"context_line":"    module_name \u003d driver_class.__module__"},{"line_number":111,"context_line":"    class_name \u003d driver_class.__name__"},{"line_number":112,"context_line":"    class Driver(driver_class):"}],"source_content_type":"text/x-python","patch_set":2,"id":"da20952f_69c98858","line":109,"in_reply_to":"da20952f_41429d69","updated":"2015-08-31 16:05:19.000000000","message":"Done","commit_id":"0fade695c53af99464a40694b8e4229b27ccbef9"}],"keystone/tests/unit/common/test_manager.py":[{"author":{"_account_id":16523,"name":"ZhangLei","display_name":"ZhangLei","email":"zhang.lei@99cloud.net","username":"zhang.lei"},"change_message_id":"779f3d7dc90dff509df5a5169c9ac1c129989623","unresolved":false,"context_lines":[{"line_number":11,"context_line":"# under the License."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"import mock"},{"line_number":14,"context_line":"from oslo_log.tests.unit import test_versionutils"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"from keystone import catalog"},{"line_number":17,"context_line":"from keystone.common import manager"}],"source_content_type":"text/x-python","patch_set":2,"id":"da20952f_f63ef489","line":14,"updated":"2015-08-31 04:20:08.000000000","message":"unused, please remove","commit_id":"0fade695c53af99464a40694b8e4229b27ccbef9"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"7b2c447f49e81552b382f4173b964762abca0d23","unresolved":false,"context_lines":[{"line_number":11,"context_line":"# under the License."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"import mock"},{"line_number":14,"context_line":"from oslo_log.tests.unit import test_versionutils"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"from keystone import catalog"},{"line_number":17,"context_line":"from keystone.common import manager"}],"source_content_type":"text/x-python","patch_set":2,"id":"da20952f_09c48c3d","line":14,"in_reply_to":"da20952f_f63ef489","updated":"2015-08-31 16:05:19.000000000","message":"Done","commit_id":"0fade695c53af99464a40694b8e4229b27ccbef9"}]}
