)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"2cbb61c7892c504f697df2f75660258e16626a75","unresolved":false,"context_lines":[{"line_number":19,"context_line":"environment about its presence. API accepting names try to find"},{"line_number":20,"context_line":"their resource first without, then with .json suffix."},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"The following endpoints are special-cased to support names with .json:"},{"line_number":23,"context_line":"* Node GET, PATCH and DELETE"},{"line_number":24,"context_line":"* Ramdisk heartbeat"},{"line_number":25,"context_line":"* Port group GET, PATCH and DELETE"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"3fa0c359_2693a5a5","line":22,"updated":"2018-02-07 18:18:54.000000000","message":"I was wondering if we even want to support this, and thinking that it might be worth microversioning just to get out of supporting it.","commit_id":"b3dd9911fb43346f20bcd5e49e8efe9908d2906f"},{"author":{"_account_id":10343,"name":"Jim Rollenhagen","email":"jim@jimrollenhagen.com","username":"jimrollenhagen"},"change_message_id":"10f6eb4fdf599c857b5a7b7267b9e486bb0c8e8f","unresolved":false,"context_lines":[{"line_number":19,"context_line":"environment about its presence. API accepting names try to find"},{"line_number":20,"context_line":"their resource first without, then with .json suffix."},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"The following endpoints are special-cased to support names with .json:"},{"line_number":23,"context_line":"* Node GET, PATCH and DELETE"},{"line_number":24,"context_line":"* Ramdisk heartbeat"},{"line_number":25,"context_line":"* Port group GET, PATCH and DELETE"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"3fa0c359_bc77c43a","line":22,"in_reply_to":"3fa0c359_2693a5a5","updated":"2018-02-07 19:32:27.000000000","message":"I believe the plan is to quickly fix this now in a backportable way, and then use a microversion (which would not be backportable) to phase out the workaround. Someone\u0027s customer recently hit this in production (and probably others) and so Dmitry is aiming to provide something they can deploy without major upgrades.","commit_id":"b3dd9911fb43346f20bcd5e49e8efe9908d2906f"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"19441fef22e65f7e18d58714173ee809d75036e4","unresolved":false,"context_lines":[{"line_number":27,"context_line":"VIF API is not updated, so VIF IDs still cannot have .json suffix."},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"Change-Id: I789ecfeac9b64a9c4105a20619f7bf5dfc133189"},{"line_number":30,"context_line":"Closes-Bug: #1643995"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"3fa0c359_17ffb134","line":30,"updated":"2018-02-07 20:13:58.000000000","message":"I kind of object to Closes-Bug. I get why, but this is just a short term backportable fix, not the long term solution, so the bug should still be open in my opinion.","commit_id":"b3dd9911fb43346f20bcd5e49e8efe9908d2906f"}],"ironic/api/controllers/v1/utils.py":[{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"f55d372dbd0f854a6eea79daceb1e95f05803ffc","unresolved":false,"context_lines":[{"line_number":188,"context_line":"    raise exception.NodeNotFound(node\u003dnode_ident)"},{"line_number":189,"context_line":""},{"line_number":190,"context_line":""},{"line_number":191,"context_line":"def get_rpc_node_with_suffix(node_ident):"},{"line_number":192,"context_line":"    \"\"\"Get the RPC node from the node uuid or logical name."},{"line_number":193,"context_line":""},{"line_number":194,"context_line":"    If HAS_JSON_SUFFIX flag is set in the pecan environment, try also looking"}],"source_content_type":"text/x-python","patch_set":3,"id":"3fa0c359_f2e91780","line":191,"updated":"2018-02-06 21:23:58.000000000","message":"this is just a thought, because it might make it easier to maintain going forward.\n\nWhat about making the above get_rpc_node() a helper function, eg _get_rpc_node(), and this one be get_rpc_node(). Then the rest of the code doesn\u0027t need to be changed. It does mean a bit of extra work in the \u0027normal\u0027 case where the _get_rpc_node() fails, but given that it fails, I don\u0027t think it matters.\n\nMy fear is that someone adds some new command later (although I don\u0027t know that it will happen) and forgets to call this.\n\n[i\u0027m OK with what you have.]","commit_id":"2e3cc5b84a2597ee30cab8a1058ae32ee6720616"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"2cbb61c7892c504f697df2f75660258e16626a75","unresolved":false,"context_lines":[{"line_number":188,"context_line":"    raise exception.NodeNotFound(node\u003dnode_ident)"},{"line_number":189,"context_line":""},{"line_number":190,"context_line":""},{"line_number":191,"context_line":"def get_rpc_node_with_suffix(node_ident):"},{"line_number":192,"context_line":"    \"\"\"Get the RPC node from the node uuid or logical name."},{"line_number":193,"context_line":""},{"line_number":194,"context_line":"    If HAS_JSON_SUFFIX flag is set in the pecan environment, try also looking"}],"source_content_type":"text/x-python","patch_set":3,"id":"3fa0c359_e6e13d2c","line":191,"in_reply_to":"3fa0c359_00f45b85","updated":"2018-02-07 18:18:54.000000000","message":"ugh. good point.","commit_id":"2e3cc5b84a2597ee30cab8a1058ae32ee6720616"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"719275028084829685d5200e3c6fa7ea17222ad2","unresolved":false,"context_lines":[{"line_number":188,"context_line":"    raise exception.NodeNotFound(node\u003dnode_ident)"},{"line_number":189,"context_line":""},{"line_number":190,"context_line":""},{"line_number":191,"context_line":"def get_rpc_node_with_suffix(node_ident):"},{"line_number":192,"context_line":"    \"\"\"Get the RPC node from the node uuid or logical name."},{"line_number":193,"context_line":""},{"line_number":194,"context_line":"    If HAS_JSON_SUFFIX flag is set in the pecan environment, try also looking"}],"source_content_type":"text/x-python","patch_set":3,"id":"3fa0c359_00f45b85","line":191,"in_reply_to":"3fa0c359_f2e91780","updated":"2018-02-07 11:51:19.000000000","message":"I\u0027m afraid to apply this logic to all cases where we call get_rpc_node. Imagine, for example /v1/nodes/\u003cnode\u003e/states.json. In this case we will try finding \u003cnode.json\u003e if \u003cnode\u003e does not exist.","commit_id":"2e3cc5b84a2597ee30cab8a1058ae32ee6720616"}],"ironic/api/middleware/json_ext.py":[{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"f55d372dbd0f854a6eea79daceb1e95f05803ffc","unresolved":false,"context_lines":[{"line_number":32,"context_line":""},{"line_number":33,"context_line":"    def __call__(self, env, start_response):"},{"line_number":34,"context_line":"        path \u003d utils.safe_rstrip(env.get(\u0027PATH_INFO\u0027), \u0027/\u0027)"},{"line_number":35,"context_line":"        if path and path.endswith(\u0027.json\u0027):"},{"line_number":36,"context_line":"            LOG.debug(\u0027Stripping .json prefix from %s for compatibility \u0027"},{"line_number":37,"context_line":"                      \u0027with pecan\u0027, path)"},{"line_number":38,"context_line":"            env[\u0027PATH_INFO\u0027] \u003d path[:-5]"}],"source_content_type":"text/x-python","patch_set":3,"id":"3fa0c359_ad3b34cf","line":35,"updated":"2018-02-06 21:23:58.000000000","message":"I don\u0027t think we need to handle \u0027.JSON\u0027 but thought I\u0027d mention it in case I\u0027m wrong.","commit_id":"2e3cc5b84a2597ee30cab8a1058ae32ee6720616"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"719275028084829685d5200e3c6fa7ea17222ad2","unresolved":false,"context_lines":[{"line_number":32,"context_line":""},{"line_number":33,"context_line":"    def __call__(self, env, start_response):"},{"line_number":34,"context_line":"        path \u003d utils.safe_rstrip(env.get(\u0027PATH_INFO\u0027), \u0027/\u0027)"},{"line_number":35,"context_line":"        if path and path.endswith(\u0027.json\u0027):"},{"line_number":36,"context_line":"            LOG.debug(\u0027Stripping .json prefix from %s for compatibility \u0027"},{"line_number":37,"context_line":"                      \u0027with pecan\u0027, path)"},{"line_number":38,"context_line":"            env[\u0027PATH_INFO\u0027] \u003d path[:-5]"}],"source_content_type":"text/x-python","patch_set":3,"id":"3fa0c359_0049bbce","line":35,"in_reply_to":"3fa0c359_ad3b34cf","updated":"2018-02-07 11:51:19.000000000","message":"Hmmmmm, I\u0027ll double-check","commit_id":"2e3cc5b84a2597ee30cab8a1058ae32ee6720616"},{"author":{"_account_id":10343,"name":"Jim Rollenhagen","email":"jim@jimrollenhagen.com","username":"jimrollenhagen"},"change_message_id":"ca34e8c4fee5716c20d37fd5b01512fbb3324015","unresolved":false,"context_lines":[{"line_number":31,"context_line":"        self.app \u003d app"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"    def __call__(self, env, start_response):"},{"line_number":34,"context_line":"        path \u003d utils.safe_rstrip(env.get(\u0027PATH_INFO\u0027), \u0027/\u0027)"},{"line_number":35,"context_line":"        if path and path.endswith(\u0027.json\u0027):"},{"line_number":36,"context_line":"            LOG.debug(\u0027Stripping .json prefix from %s for compatibility \u0027"},{"line_number":37,"context_line":"                      \u0027with pecan\u0027, path)"}],"source_content_type":"text/x-python","patch_set":4,"id":"3fa0c359_b0c12be7","line":34,"updated":"2018-02-07 17:33:39.000000000","message":"Hm, does /v1/nodes/foo.json/ trigger this? For some reason I would guess it doesn\u0027t, though I haven\u0027t tested. If not, we don\u0027t need this (though it doesn\u0027t hurt I guess). If it does, can we add a test for it? :)","commit_id":"b3dd9911fb43346f20bcd5e49e8efe9908d2906f"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"2cbb61c7892c504f697df2f75660258e16626a75","unresolved":false,"context_lines":[{"line_number":31,"context_line":"        self.app \u003d app"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"    def __call__(self, env, start_response):"},{"line_number":34,"context_line":"        path \u003d utils.safe_rstrip(env.get(\u0027PATH_INFO\u0027), \u0027/\u0027)"},{"line_number":35,"context_line":"        if path and path.endswith(\u0027.json\u0027):"},{"line_number":36,"context_line":"            LOG.debug(\u0027Stripping .json prefix from %s for compatibility \u0027"},{"line_number":37,"context_line":"                      \u0027with pecan\u0027, path)"}],"source_content_type":"text/x-python","patch_set":4,"id":"3fa0c359_06e78914","line":34,"in_reply_to":"3fa0c359_b0c12be7","updated":"2018-02-07 18:18:54.000000000","message":"I assumed it was triggered, but I didn\u0027t verify :)","commit_id":"b3dd9911fb43346f20bcd5e49e8efe9908d2906f"}],"ironic/tests/unit/api/controllers/v1/test_node.py":[{"author":{"_account_id":10343,"name":"Jim Rollenhagen","email":"jim@jimrollenhagen.com","username":"jimrollenhagen"},"change_message_id":"ca34e8c4fee5716c20d37fd5b01512fbb3324015","unresolved":false,"context_lines":[{"line_number":177,"context_line":"        self.assertEqual(node.uuid, data[\u0027uuid\u0027])"},{"line_number":178,"context_line":""},{"line_number":179,"context_line":"    def test_get_one_with_suffix(self):"},{"line_number":180,"context_line":"        # This tests that we don\u0027t mess with mime-like suffixes"},{"line_number":181,"context_line":"        node \u003d obj_utils.create_test_node(self.context,"},{"line_number":182,"context_line":"                                          name\u003d\u0027test.1\u0027,"},{"line_number":183,"context_line":"                                          chassis_id\u003dself.chassis.id)"}],"source_content_type":"text/x-python","patch_set":4,"id":"3fa0c359_503b07ea","line":180,"updated":"2018-02-07 17:33:39.000000000","message":"Probably should add a test with a node named \u0027test\u0027, and fetching /nodes/test.1, to make sure we 404 there. That\u0027s one of the bugs being fixed here.","commit_id":"b3dd9911fb43346f20bcd5e49e8efe9908d2906f"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"822ec2349dae3bd94e3cbe9cfdb06426bc618e7d","unresolved":false,"context_lines":[{"line_number":2849,"context_line":"        self.delete(\u0027/nodes/%s.json\u0027 % node.name,"},{"line_number":2850,"context_line":"                    headers\u003d{api_base.Version.string: \"1.5\"})"},{"line_number":2851,"context_line":"        mock_dn.assert_called_once_with(mock.ANY, node.uuid, \u0027test-topic\u0027)"},{"line_number":2852,"context_line":""},{"line_number":2853,"context_line":"    @mock.patch.object(objects.Node, \u0027get_by_uuid\u0027)"},{"line_number":2854,"context_line":"    def test_delete_node_not_found(self, mock_gbu):"},{"line_number":2855,"context_line":"        node \u003d obj_utils.get_test_node(self.context)"}],"source_content_type":"text/x-python","patch_set":4,"id":"3fa0c359_f773257f","line":2852,"updated":"2018-02-07 20:02:50.000000000","message":"might want a test for node named \u0027foo.json\u0027 to show that that works too (unless there is also node named \u0027foo\u0027, but I don\u0027t think we need to test this part)","commit_id":"b3dd9911fb43346f20bcd5e49e8efe9908d2906f"}],"ironic/tests/unit/api/controllers/v1/test_portgroup.py":[{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"822ec2349dae3bd94e3cbe9cfdb06426bc618e7d","unresolved":false,"context_lines":[{"line_number":1311,"context_line":"        self.delete(\u0027/portgroups/%s.json\u0027 % self.portgroup.name,"},{"line_number":1312,"context_line":"                    headers\u003dself.headers)"},{"line_number":1313,"context_line":"        self.assertTrue(mock_dpt.called)"},{"line_number":1314,"context_line":""},{"line_number":1315,"context_line":"    def test_delete_portgroup_byname_not_existed(self, mock_dpt):"},{"line_number":1316,"context_line":"        res \u003d self.delete(\u0027/portgroups/%s\u0027 % \u0027blah\u0027, expect_errors\u003dTrue,"},{"line_number":1317,"context_line":"                          headers\u003dself.headers)"}],"source_content_type":"text/x-python","patch_set":4,"id":"3fa0c359_17f491ce","line":1314,"updated":"2018-02-07 20:02:50.000000000","message":"maybe a test with a portgroup named \u0027foo.json\u0027","commit_id":"b3dd9911fb43346f20bcd5e49e8efe9908d2906f"}],"ironic/tests/unit/api/controllers/v1/test_ramdisk.py":[{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"822ec2349dae3bd94e3cbe9cfdb06426bc618e7d","unresolved":false,"context_lines":[{"line_number":213,"context_line":"        mock_heartbeat.assert_called_once_with(mock.ANY, mock.ANY,"},{"line_number":214,"context_line":"                                               node.uuid, \u0027url\u0027, None,"},{"line_number":215,"context_line":"                                               topic\u003d\u0027test-topic\u0027)"},{"line_number":216,"context_line":""},{"line_number":217,"context_line":"    @mock.patch.object(rpcapi.ConductorAPI, \u0027heartbeat\u0027, autospec\u003dTrue)"},{"line_number":218,"context_line":"    def test_ok_agent_version(self, mock_heartbeat):"},{"line_number":219,"context_line":"        node \u003d obj_utils.create_test_node(self.context)"}],"source_content_type":"text/x-python","patch_set":4,"id":"3fa0c359_37dd0d42","line":216,"updated":"2018-02-07 20:02:50.000000000","message":"and a node named \u0027test.json\u0027 ?","commit_id":"b3dd9911fb43346f20bcd5e49e8efe9908d2906f"}],"releasenotes/notes/name-suffix-47aea2d265fa75ae.yaml":[{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"822ec2349dae3bd94e3cbe9cfdb06426bc618e7d","unresolved":false,"context_lines":[{"line_number":9,"context_line":"    If you have two nodes or port groups with names that only differ in"},{"line_number":10,"context_line":"    a ``.json`` suffix (for example, ``test`` and ``test.json``) you won\u0027t be"},{"line_number":11,"context_line":"    able to get, update or delete the one with the suffix via the"},{"line_number":12,"context_line":"    ``/v1/nodes/\u003cnode\u003e`` endpoint (``/v1/portgroups/\u003cportgroup\u003e`` for port"},{"line_number":13,"context_line":"    groups)."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"    To work around it, add one more ``.json`` suffix (for example, use"}],"source_content_type":"text/x-yaml","patch_set":4,"id":"3fa0c359_3722eda5","line":12,"updated":"2018-02-07 20:02:50.000000000","message":"same issue with /v1/heartbeat/\u003cnode\u003e endpoint","commit_id":"b3dd9911fb43346f20bcd5e49e8efe9908d2906f"},{"author":{"_account_id":10343,"name":"Jim Rollenhagen","email":"jim@jimrollenhagen.com","username":"jimrollenhagen"},"change_message_id":"ca34e8c4fee5716c20d37fd5b01512fbb3324015","unresolved":false,"context_lines":[{"line_number":10,"context_line":"    a ``.json`` suffix (for example, ``test`` and ``test.json``) you won\u0027t be"},{"line_number":11,"context_line":"    able to get, update or delete the one with the suffix via the"},{"line_number":12,"context_line":"    ``/v1/nodes/\u003cnode\u003e`` endpoint (``/v1/portgroups/\u003cportgroup\u003e`` for port"},{"line_number":13,"context_line":"    groups)."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"    To work around it, add one more ``.json`` suffix (for example, use"},{"line_number":16,"context_line":"    ``/v1/nodes/test`` for node ``test`` and ``/v1/nodes/test.json.json``"}],"source_content_type":"text/x-yaml","patch_set":4,"id":"3fa0c359_834dcb73","line":13,"updated":"2018-02-07 17:33:39.000000000","message":"I think this is wrong, no?\n\n/v1/nodes/test will return the node named test.\n\n/v1/nodes/test.json will first try to get the node named test.json, and succeed. We only strip \".json\" in the case where it isn\u0027t found with \".json\" in the name.","commit_id":"b3dd9911fb43346f20bcd5e49e8efe9908d2906f"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"2cbb61c7892c504f697df2f75660258e16626a75","unresolved":false,"context_lines":[{"line_number":10,"context_line":"    a ``.json`` suffix (for example, ``test`` and ``test.json``) you won\u0027t be"},{"line_number":11,"context_line":"    able to get, update or delete the one with the suffix via the"},{"line_number":12,"context_line":"    ``/v1/nodes/\u003cnode\u003e`` endpoint (``/v1/portgroups/\u003cportgroup\u003e`` for port"},{"line_number":13,"context_line":"    groups)."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"    To work around it, add one more ``.json`` suffix (for example, use"},{"line_number":16,"context_line":"    ``/v1/nodes/test`` for node ``test`` and ``/v1/nodes/test.json.json``"}],"source_content_type":"text/x-yaml","patch_set":4,"id":"3fa0c359_868f1922","line":13,"in_reply_to":"3fa0c359_834dcb73","updated":"2018-02-07 18:18:54.000000000","message":"@Jim. No, the .json is stripped (all suffixes are stripped) via JsonExtensionMiddleware, so before it gets to our \u0027real\u0027 code. The code in api/v1/utils.py will try to get \u0027test\u0027 first and if that fails, it tries \u0027test.json\u0027","commit_id":"b3dd9911fb43346f20bcd5e49e8efe9908d2906f"},{"author":{"_account_id":10343,"name":"Jim Rollenhagen","email":"jim@jimrollenhagen.com","username":"jimrollenhagen"},"change_message_id":"10f6eb4fdf599c857b5a7b7267b9e486bb0c8e8f","unresolved":false,"context_lines":[{"line_number":10,"context_line":"    a ``.json`` suffix (for example, ``test`` and ``test.json``) you won\u0027t be"},{"line_number":11,"context_line":"    able to get, update or delete the one with the suffix via the"},{"line_number":12,"context_line":"    ``/v1/nodes/\u003cnode\u003e`` endpoint (``/v1/portgroups/\u003cportgroup\u003e`` for port"},{"line_number":13,"context_line":"    groups)."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"    To work around it, add one more ``.json`` suffix (for example, use"},{"line_number":16,"context_line":"    ``/v1/nodes/test`` for node ``test`` and ``/v1/nodes/test.json.json``"}],"source_content_type":"text/x-yaml","patch_set":4,"id":"3fa0c359_7cd37c39","line":13,"in_reply_to":"3fa0c359_868f1922","updated":"2018-02-07 19:32:27.000000000","message":"Dang, you\u0027re right. I have since had more coffee and see the error of my ways.","commit_id":"b3dd9911fb43346f20bcd5e49e8efe9908d2906f"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"2cbb61c7892c504f697df2f75660258e16626a75","unresolved":false,"context_lines":[{"line_number":15,"context_line":"    To work around it, add one more ``.json`` suffix (for example, use"},{"line_number":16,"context_line":"    ``/v1/nodes/test`` for node ``test`` and ``/v1/nodes/test.json.json``"},{"line_number":17,"context_line":"    for ``test.json``). This issue will be addressed in one of the future"},{"line_number":18,"context_line":"    API revisions."}],"source_content_type":"text/x-yaml","patch_set":4,"id":"3fa0c359_669c4d5d","line":18,"updated":"2018-02-07 18:18:54.000000000","message":"OHHHHH YUCKKKKKKKK","commit_id":"b3dd9911fb43346f20bcd5e49e8efe9908d2906f"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"19441fef22e65f7e18d58714173ee809d75036e4","unresolved":false,"context_lines":[{"line_number":15,"context_line":"    To work around it, add one more ``.json`` suffix (for example, use"},{"line_number":16,"context_line":"    ``/v1/nodes/test`` for node ``test`` and ``/v1/nodes/test.json.json``"},{"line_number":17,"context_line":"    for ``test.json``). This issue will be addressed in one of the future"},{"line_number":18,"context_line":"    API revisions."}],"source_content_type":"text/x-yaml","patch_set":4,"id":"3fa0c359_5703f973","line":18,"in_reply_to":"3fa0c359_669c4d5d","updated":"2018-02-07 20:13:58.000000000","message":"+1","commit_id":"b3dd9911fb43346f20bcd5e49e8efe9908d2906f"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"822ec2349dae3bd94e3cbe9cfdb06426bc618e7d","unresolved":false,"context_lines":[{"line_number":15,"context_line":"    To work around it, add one more ``.json`` suffix (for example, use"},{"line_number":16,"context_line":"    ``/v1/nodes/test`` for node ``test`` and ``/v1/nodes/test.json.json``"},{"line_number":17,"context_line":"    for ``test.json``). This issue will be addressed in one of the future"},{"line_number":18,"context_line":"    API revisions."}],"source_content_type":"text/x-yaml","patch_set":4,"id":"3fa0c359_bc2ee4a2","line":18,"in_reply_to":"3fa0c359_669c4d5d","updated":"2018-02-07 20:02:50.000000000","message":"The old behaviour was that you would only get \u0027test\u0027 node and I suspect this work around would have worked to address this situation w/o this code change. So that is same/consistent even if ucky.","commit_id":"b3dd9911fb43346f20bcd5e49e8efe9908d2906f"}]}
