)]}'
{".vscode/.ropeproject/config.py":[{"author":{"_account_id":11536,"name":"hongbin","email":"hongbin034@gmail.com","username":"hongbin"},"change_message_id":"a24323d9302c2cfa93c80f44b7306b8afd16a048","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# The default ``config.py``"},{"line_number":2,"context_line":"# flake8: noqa"},{"line_number":3,"context_line":""},{"line_number":4,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_68ec96ba","line":1,"updated":"2018-08-27 01:49:03.000000000","message":"This file is part of this patch?","commit_id":"33711049ad30d12f2b7bff63cf01f1af7f6cfda7"}],".vscode/.ropeproject/objectdb":[{"author":{"_account_id":11536,"name":"hongbin","email":"hongbin034@gmail.com","username":"hongbin"},"change_message_id":"a24323d9302c2cfa93c80f44b7306b8afd16a048","unresolved":false,"context_lines":[{"line_number":1,"context_line":"耂統."}],"source_content_type":"application/octet-stream","patch_set":2,"id":"3f79a3b5_c8328a5e","line":1,"updated":"2018-08-27 01:49:03.000000000","message":"This file is also part of this patch?","commit_id":"33711049ad30d12f2b7bff63cf01f1af7f6cfda7"}],"zun/common/quota.py":[{"author":{"_account_id":11536,"name":"hongbin","email":"hongbin034@gmail.com","username":"hongbin"},"change_message_id":"d447e274856299e8404c9267950691732f8e31eb","unresolved":false,"context_lines":[{"line_number":170,"context_line":""},{"line_number":171,"context_line":"        # Make sure we accounted for all of them..."},{"line_number":172,"context_line":"        LOG.debug(\u0027Getting quotas for project %(project_id)s. Resources:\u0027"},{"line_number":173,"context_line":"                  \u0027%(key)s\u0027, {\u0027project_id\u0027: project_id, \u0027keys\u0027: keys})"},{"line_number":174,"context_line":"        # Grab and return the quotas (without usages)"},{"line_number":175,"context_line":"        quotas \u003d self.get_project_quotas(context, sub_resources,"},{"line_number":176,"context_line":"                                         project_id,"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_a85187db","line":173,"range":{"start_line":173,"start_character":21,"end_line":173,"end_character":24},"updated":"2018-08-11 23:29:21.000000000","message":"keys (missed a \u0027s\u0027)","commit_id":"c3460e87598e68773b20760baee5e775fddb5589"},{"author":{"_account_id":22406,"name":"Kien Nguyen","email":"kiennt2609@gmail.com","username":"kiennt"},"change_message_id":"ccda137c88741d243c9305ec31779c13c60e00b1","unresolved":false,"context_lines":[{"line_number":170,"context_line":""},{"line_number":171,"context_line":"        # Make sure we accounted for all of them..."},{"line_number":172,"context_line":"        LOG.debug(\u0027Getting quotas for project %(project_id)s. Resources:\u0027"},{"line_number":173,"context_line":"                  \u0027%(key)s\u0027, {\u0027project_id\u0027: project_id, \u0027keys\u0027: keys})"},{"line_number":174,"context_line":"        # Grab and return the quotas (without usages)"},{"line_number":175,"context_line":"        quotas \u003d self.get_project_quotas(context, sub_resources,"},{"line_number":176,"context_line":"                                         project_id,"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_add163ce","line":173,"range":{"start_line":173,"start_character":21,"end_line":173,"end_character":24},"in_reply_to":"3f79a3b5_a85187db","updated":"2018-08-26 12:51:56.000000000","message":"Done","commit_id":"c3460e87598e68773b20760baee5e775fddb5589"},{"author":{"_account_id":11536,"name":"hongbin","email":"hongbin034@gmail.com","username":"hongbin"},"change_message_id":"5462d4817b1438c862340e4c0438ee2df482ebee","unresolved":false,"context_lines":[{"line_number":221,"context_line":"        # Check the quotas and construct a list of the resources that"},{"line_number":222,"context_line":"        # would be put over limit by the desired values"},{"line_number":223,"context_line":"        overs \u003d [key for key, val in values.items()"},{"line_number":224,"context_line":"                 if quotas[key] \u003e\u003d 0 and quotas[key] \u003c val]"},{"line_number":225,"context_line":""},{"line_number":226,"context_line":"        if overs:"},{"line_number":227,"context_line":"            headroom \u003d {}"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_d11b4ac7","line":224,"range":{"start_line":224,"start_character":20,"end_line":224,"end_character":58},"updated":"2018-08-12 19:09:11.000000000","message":"This will work for comparing \u0027int\u0027 value (i.e disk). The situation in Zun is a bit more complicated when comparing two \u0027float\u0027 value (i.e. cpu): https://stackoverflow.com/questions/5595425/what-is-the-best-way-to-compare-floats-for-almost-equality-in-python .","commit_id":"c3460e87598e68773b20760baee5e775fddb5589"},{"author":{"_account_id":22406,"name":"Kien Nguyen","email":"kiennt2609@gmail.com","username":"kiennt"},"change_message_id":"ccda137c88741d243c9305ec31779c13c60e00b1","unresolved":false,"context_lines":[{"line_number":221,"context_line":"        # Check the quotas and construct a list of the resources that"},{"line_number":222,"context_line":"        # would be put over limit by the desired values"},{"line_number":223,"context_line":"        overs \u003d [key for key, val in values.items()"},{"line_number":224,"context_line":"                 if quotas[key] \u003e\u003d 0 and quotas[key] \u003c val]"},{"line_number":225,"context_line":""},{"line_number":226,"context_line":"        if overs:"},{"line_number":227,"context_line":"            headroom \u003d {}"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_4ddc4fe3","line":224,"range":{"start_line":224,"start_character":20,"end_line":224,"end_character":58},"in_reply_to":"3f79a3b5_d11b4ac7","updated":"2018-08-26 12:51:56.000000000","message":"Done","commit_id":"c3460e87598e68773b20760baee5e775fddb5589"},{"author":{"_account_id":11536,"name":"hongbin","email":"hongbin034@gmail.com","username":"hongbin"},"change_message_id":"58af9a65586fb02eddd7c6ab9c36fc38fe36febb","unresolved":false,"context_lines":[{"line_number":302,"context_line":"                         reported if there is no specific value for"},{"line_number":303,"context_line":"                         the resource."},{"line_number":304,"context_line":"        :param usage: If True, the current counts will also be returned."},{"line_number":305,"context_line":"        :param remains: If True, the current remains of the project will"},{"line_number":306,"context_line":"                        be returned."},{"line_number":307,"context_line":"        \"\"\""},{"line_number":308,"context_line":"        quotas \u003d {}"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_118782b7","line":305,"range":{"start_line":305,"start_character":15,"end_line":305,"end_character":22},"updated":"2018-08-12 19:43:20.000000000","message":"It looks this parameter is unused? or you are planning to use it later?","commit_id":"c3460e87598e68773b20760baee5e775fddb5589"},{"author":{"_account_id":11536,"name":"hongbin","email":"hongbin034@gmail.com","username":"hongbin"},"change_message_id":"58af9a65586fb02eddd7c6ab9c36fc38fe36febb","unresolved":false,"context_lines":[{"line_number":424,"context_line":""},{"line_number":425,"context_line":"        The counting function will be passed the context, along with"},{"line_number":426,"context_line":"        the extra positional and keyword arguments that are passed to"},{"line_number":427,"context_line":"        Quota.count_(). It should return a integer specifying the"},{"line_number":428,"context_line":"        count scoped to a project."},{"line_number":429,"context_line":""},{"line_number":430,"context_line":"        Note that this counting is not performed a transaction-safe"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_117542cb","line":427,"range":{"start_line":427,"start_character":41,"end_line":427,"end_character":42},"updated":"2018-08-12 19:43:20.000000000","message":"an","commit_id":"c3460e87598e68773b20760baee5e775fddb5589"},{"author":{"_account_id":22406,"name":"Kien Nguyen","email":"kiennt2609@gmail.com","username":"kiennt"},"change_message_id":"ccda137c88741d243c9305ec31779c13c60e00b1","unresolved":false,"context_lines":[{"line_number":424,"context_line":""},{"line_number":425,"context_line":"        The counting function will be passed the context, along with"},{"line_number":426,"context_line":"        the extra positional and keyword arguments that are passed to"},{"line_number":427,"context_line":"        Quota.count_(). It should return a integer specifying the"},{"line_number":428,"context_line":"        count scoped to a project."},{"line_number":429,"context_line":""},{"line_number":430,"context_line":"        Note that this counting is not performed a transaction-safe"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_8de7c7ac","line":427,"range":{"start_line":427,"start_character":41,"end_line":427,"end_character":42},"in_reply_to":"3f79a3b5_117542cb","updated":"2018-08-26 12:51:56.000000000","message":"Done","commit_id":"c3460e87598e68773b20760baee5e775fddb5589"},{"author":{"_account_id":11536,"name":"hongbin","email":"hongbin034@gmail.com","username":"hongbin"},"change_message_id":"5462d4817b1438c862340e4c0438ee2df482ebee","unresolved":false,"context_lines":[{"line_number":593,"context_line":""},{"line_number":594,"context_line":""},{"line_number":595,"context_line":"def _cpu_count(context, project_id):"},{"line_number":596,"context_line":"    return objects.Container.get_count(context, project_id, flag\u003d\u0027cpu\u0027)"},{"line_number":597,"context_line":""},{"line_number":598,"context_line":""},{"line_number":599,"context_line":"def _disk_count(context, project_id):"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_71c83621","line":596,"range":{"start_line":596,"start_character":29,"end_line":596,"end_character":38},"updated":"2018-08-12 19:09:11.000000000","message":"Since cpu is a float number, I would suggest to take an additional step to round the number into a precision (i.e a precision of 3 - millicores). This would avoid returning a very long output (i.e. 0.10000000149011612) to end-users.","commit_id":"c3460e87598e68773b20760baee5e775fddb5589"},{"author":{"_account_id":22406,"name":"Kien Nguyen","email":"kiennt2609@gmail.com","username":"kiennt"},"change_message_id":"ccda137c88741d243c9305ec31779c13c60e00b1","unresolved":false,"context_lines":[{"line_number":593,"context_line":""},{"line_number":594,"context_line":""},{"line_number":595,"context_line":"def _cpu_count(context, project_id):"},{"line_number":596,"context_line":"    return objects.Container.get_count(context, project_id, flag\u003d\u0027cpu\u0027)"},{"line_number":597,"context_line":""},{"line_number":598,"context_line":""},{"line_number":599,"context_line":"def _disk_count(context, project_id):"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_edf43b5d","line":596,"range":{"start_line":596,"start_character":29,"end_line":596,"end_character":38},"in_reply_to":"3f79a3b5_71c83621","updated":"2018-08-26 12:51:56.000000000","message":"Done","commit_id":"c3460e87598e68773b20760baee5e775fddb5589"}],"zun/conf/quota.py":[{"author":{"_account_id":11536,"name":"hongbin","email":"hongbin034@gmail.com","username":"hongbin"},"change_message_id":"d447e274856299e8404c9267950691732f8e31eb","unresolved":false,"context_lines":[{"line_number":23,"context_line":"    cfg.IntOpt("},{"line_number":24,"context_line":"        \u0027containers\u0027,"},{"line_number":25,"context_line":"        min\u003d-1,"},{"line_number":26,"context_line":"        default\u003d10,"},{"line_number":27,"context_line":"        help\u003d\"\"\""},{"line_number":28,"context_line":"The number of containers allowed per project."},{"line_number":29,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_0212d909","line":26,"range":{"start_line":26,"start_character":16,"end_line":26,"end_character":18},"updated":"2018-08-11 23:29:21.000000000","message":"My intuition is that this default would be a bit too small, since containers are much lighter than VMs so it might be common to spin up a lot of containers within a project.\n\nI would say increasing the default to 20 or 40 might be better.","commit_id":"c3460e87598e68773b20760baee5e775fddb5589"},{"author":{"_account_id":22406,"name":"Kien Nguyen","email":"kiennt2609@gmail.com","username":"kiennt"},"change_message_id":"ccda137c88741d243c9305ec31779c13c60e00b1","unresolved":false,"context_lines":[{"line_number":23,"context_line":"    cfg.IntOpt("},{"line_number":24,"context_line":"        \u0027containers\u0027,"},{"line_number":25,"context_line":"        min\u003d-1,"},{"line_number":26,"context_line":"        default\u003d10,"},{"line_number":27,"context_line":"        help\u003d\"\"\""},{"line_number":28,"context_line":"The number of containers allowed per project."},{"line_number":29,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_6dd7cbc0","line":26,"range":{"start_line":26,"start_character":16,"end_line":26,"end_character":18},"in_reply_to":"3f79a3b5_0212d909","updated":"2018-08-26 12:51:56.000000000","message":"Done","commit_id":"c3460e87598e68773b20760baee5e775fddb5589"},{"author":{"_account_id":11536,"name":"hongbin","email":"hongbin034@gmail.com","username":"hongbin"},"change_message_id":"d447e274856299e8404c9267950691732f8e31eb","unresolved":false,"context_lines":[{"line_number":33,"context_line":"* -1 to disable the quota."},{"line_number":34,"context_line":"\"\"\"),"},{"line_number":35,"context_line":"    cfg.IntOpt("},{"line_number":36,"context_line":"        \u0027memory\u0027,"},{"line_number":37,"context_line":"        min\u003d-1,"},{"line_number":38,"context_line":"        default\u003d50 * 1024,"},{"line_number":39,"context_line":"        help\u003d\"\"\""}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_62d86d1d","line":36,"range":{"start_line":36,"start_character":9,"end_line":36,"end_character":15},"updated":"2018-08-11 23:29:21.000000000","message":"How about renaming it as \u0027ram\u0027 for consistency with nova.","commit_id":"c3460e87598e68773b20760baee5e775fddb5589"},{"author":{"_account_id":22406,"name":"Kien Nguyen","email":"kiennt2609@gmail.com","username":"kiennt"},"change_message_id":"ccda137c88741d243c9305ec31779c13c60e00b1","unresolved":false,"context_lines":[{"line_number":33,"context_line":"* -1 to disable the quota."},{"line_number":34,"context_line":"\"\"\"),"},{"line_number":35,"context_line":"    cfg.IntOpt("},{"line_number":36,"context_line":"        \u0027memory\u0027,"},{"line_number":37,"context_line":"        min\u003d-1,"},{"line_number":38,"context_line":"        default\u003d50 * 1024,"},{"line_number":39,"context_line":"        help\u003d\"\"\""}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_cdf13f6d","line":36,"range":{"start_line":36,"start_character":9,"end_line":36,"end_character":15},"in_reply_to":"3f79a3b5_62d86d1d","updated":"2018-08-26 12:51:56.000000000","message":"IMO, we should keep it as \u0027memory\u0027 and \u0027cpu\u0027 because we already used \u0027memory\u0027 and \u0027cpu\u0027 as container\u0027s resources - default_memory, default_cpu, maximum_memory, maximum_cpu...","commit_id":"c3460e87598e68773b20760baee5e775fddb5589"},{"author":{"_account_id":11536,"name":"hongbin","email":"hongbin034@gmail.com","username":"hongbin"},"change_message_id":"232f3e022b32c5a5404d35ff6e6ce4f24ab318e9","unresolved":false,"context_lines":[{"line_number":33,"context_line":"* -1 to disable the quota."},{"line_number":34,"context_line":"\"\"\"),"},{"line_number":35,"context_line":"    cfg.IntOpt("},{"line_number":36,"context_line":"        \u0027memory\u0027,"},{"line_number":37,"context_line":"        min\u003d-1,"},{"line_number":38,"context_line":"        default\u003d50 * 1024,"},{"line_number":39,"context_line":"        help\u003d\"\"\""}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_e800a668","line":36,"range":{"start_line":36,"start_character":9,"end_line":36,"end_character":15},"in_reply_to":"3f79a3b5_cdf13f6d","updated":"2018-08-27 01:47:23.000000000","message":"I see.","commit_id":"c3460e87598e68773b20760baee5e775fddb5589"},{"author":{"_account_id":11536,"name":"hongbin","email":"hongbin034@gmail.com","username":"hongbin"},"change_message_id":"d447e274856299e8404c9267950691732f8e31eb","unresolved":false,"context_lines":[{"line_number":46,"context_line":"\"\"\""},{"line_number":47,"context_line":"    ),"},{"line_number":48,"context_line":"    cfg.IntOpt("},{"line_number":49,"context_line":"        \u0027cpu\u0027,"},{"line_number":50,"context_line":"        min\u003d-1,"},{"line_number":51,"context_line":"        default\u003d20,"},{"line_number":52,"context_line":"        help\u003d\"\"\""}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_82d589e7","line":49,"range":{"start_line":49,"start_character":9,"end_line":49,"end_character":12},"updated":"2018-08-11 23:29:21.000000000","message":"How about renaming it to \"cores\" for consistency with nova.","commit_id":"c3460e87598e68773b20760baee5e775fddb5589"},{"author":{"_account_id":11536,"name":"hongbin","email":"hongbin034@gmail.com","username":"hongbin"},"change_message_id":"58af9a65586fb02eddd7c6ab9c36fc38fe36febb","unresolved":false,"context_lines":[{"line_number":72,"context_line":"\"\"\""},{"line_number":73,"context_line":"    ),"},{"line_number":74,"context_line":"    cfg.IntOpt("},{"line_number":75,"context_line":"        \u0027until_refresh\u0027,"},{"line_number":76,"context_line":"        min\u003d0,"},{"line_number":77,"context_line":"        default\u003d0,"},{"line_number":78,"context_line":"        help\u003d\"\"\""}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_b156ce29","line":75,"range":{"start_line":75,"start_character":9,"end_line":75,"end_character":22},"updated":"2018-08-12 19:43:20.000000000","message":"It looks this config is unused? or there is a plan to use it later?","commit_id":"c3460e87598e68773b20760baee5e775fddb5589"}]}
