)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"f0534f02f0a958a98fb1eee7df5822097280284c","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"libvirt: Enable driver configures PMEM namespace"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Add one configure option CONF.libvirt.pmem_namespaces:"},{"line_number":10,"context_line":"\"$LABEL:$NSNAME[|$NSNAME][,$LABEL:$NSNAME[|$NSNAME]]\""},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"e.g. \"128G:ns0|ns1|ns2|ns3,262144MB:ns4|ns5,MEDIUM:ns6|ns7\""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":13,"id":"7faddb67_4eeaab75","line":9,"range":{"start_line":9,"start_character":8,"end_line":9,"end_character":17},"updated":"2019-07-08 22:05:02.000000000","message":"configuration","commit_id":"b5bb5ada95b538c69cfd3c4d4bbcdc59f979f43c"},{"author":{"_account_id":23598,"name":"Zhong Luyao","email":"luyao.zhong@intel.com","username":"ZhongLuyao"},"change_message_id":"731203656f3f16c5eb783d64cc9cebb4c955e1ea","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"libvirt: Enable driver configures PMEM namespace"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Add one configure option CONF.libvirt.pmem_namespaces:"},{"line_number":10,"context_line":"\"$LABEL:$NSNAME[|$NSNAME][,$LABEL:$NSNAME[|$NSNAME]]\""},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"e.g. \"128G:ns0|ns1|ns2|ns3,262144MB:ns4|ns5,MEDIUM:ns6|ns7\""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":13,"id":"7faddb67_f25f9f3e","line":9,"range":{"start_line":9,"start_character":8,"end_line":9,"end_character":17},"in_reply_to":"7faddb67_4eeaab75","updated":"2019-07-10 10:07:05.000000000","message":"Done","commit_id":"b5bb5ada95b538c69cfd3c4d4bbcdc59f979f43c"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"9bddbd2af7447d7dac18e6466d51e1dcacfdef20","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Luyao Zhong \u003cluyao.zhong@intel.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2019-07-10 17:21:50 +0800"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"libvirt: Enable driver configures PMEM namespace"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Suppose that the configuration option CONF.libvirt.pmem_namespaces"},{"line_number":10,"context_line":"is introduced. Libvirt driver will get and update PMEM namespaces info"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":14,"id":"7faddb67_87b9402f","line":7,"range":{"start_line":7,"start_character":9,"end_line":7,"end_character":48},"updated":"2019-07-10 17:20:32.000000000","message":"I think this should probably be:\n\n Enable configuring PMEM namespaces","commit_id":"7226501c202eb3a78ed64e066435f0145b555eb6"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"9bddbd2af7447d7dac18e6466d51e1dcacfdef20","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"libvirt: Enable driver configures PMEM namespace"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Suppose that the configuration option CONF.libvirt.pmem_namespaces"},{"line_number":10,"context_line":"is introduced. Libvirt driver will get and update PMEM namespaces info"},{"line_number":11,"context_line":"from host and configuration."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Change-Id: I146cc9d4caafd0abd6b2642edb6eb59cd7e339b7"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":14,"id":"7faddb67_2782cc50","line":10,"range":{"start_line":9,"start_character":0,"end_line":10,"end_character":14},"updated":"2019-07-10 17:20:32.000000000","message":"\"Introduce the configuration option CONF.libvirt.pmem_namespaces\"","commit_id":"7226501c202eb3a78ed64e066435f0145b555eb6"},{"author":{"_account_id":23598,"name":"Zhong Luyao","email":"luyao.zhong@intel.com","username":"ZhongLuyao"},"change_message_id":"c210c2b1b540127387a893e4e8bed0d983ea82fb","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"libvirt: Enable driver configures PMEM namespace"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Suppose that the configuration option CONF.libvirt.pmem_namespaces"},{"line_number":10,"context_line":"is introduced. Libvirt driver will get and update PMEM namespaces info"},{"line_number":11,"context_line":"from host and configuration."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Change-Id: I146cc9d4caafd0abd6b2642edb6eb59cd7e339b7"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":14,"id":"7faddb67_c787270f","line":10,"range":{"start_line":9,"start_character":0,"end_line":10,"end_character":14},"in_reply_to":"7faddb67_2782cc50","updated":"2019-07-11 14:28:31.000000000","message":"We will enable this configuration in the last patch after all functions completed","commit_id":"7226501c202eb3a78ed64e066435f0145b555eb6"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"e8e2b1925caf3e064c86139de73b77e4ed045b25","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"libvirt: Enable driver configures PMEM namespace"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Suppose that the configuration option CONF.libvirt.pmem_namespaces"},{"line_number":10,"context_line":"is introduced. Libvirt driver will get and update PMEM namespaces info"},{"line_number":11,"context_line":"from host and configuration."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Change-Id: I146cc9d4caafd0abd6b2642edb6eb59cd7e339b7"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":14,"id":"7faddb67_fd1d1673","line":10,"range":{"start_line":9,"start_character":0,"end_line":10,"end_character":14},"in_reply_to":"7faddb67_c787270f","updated":"2019-07-11 15:50:45.000000000","message":"This needs a re-word regardless.","commit_id":"7226501c202eb3a78ed64e066435f0145b555eb6"}],"nova/conf/libvirt.py":[{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"e86ca46663b6f7cc40b01be188743e0e7e621b07","unresolved":false,"context_lines":[{"line_number":1309,"context_line":"                help\u003d\"\"\""},{"line_number":1310,"context_line":"The pmem namespace name and the namespace sizes of each."},{"line_number":1311,"context_line":"e.g.ns_name0:4GB,ns_name1:SMALL,ns_name2:MIDDLE,ns_name3:LARGE"},{"line_number":1312,"context_line":"\"\"\"),"},{"line_number":1313,"context_line":"]"},{"line_number":1314,"context_line":""},{"line_number":1315,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"9fb8cfa7_c33869ef","line":1312,"updated":"2019-06-10 07:15:38.000000000","message":"I\u0027m expecting more at here, like the operator whether can this value.","commit_id":"f1d484ec0b3ff4ec6aff66e7a48bd21eeb4e5e1d"},{"author":{"_account_id":23598,"name":"Zhong Luyao","email":"luyao.zhong@intel.com","username":"ZhongLuyao"},"change_message_id":"e28cb1c9a5de5970904c64e58069ab015f096bf7","unresolved":false,"context_lines":[{"line_number":1309,"context_line":"                help\u003d\"\"\""},{"line_number":1310,"context_line":"The pmem namespace name and the namespace sizes of each."},{"line_number":1311,"context_line":"e.g.ns_name0:4GB,ns_name1:SMALL,ns_name2:MIDDLE,ns_name3:LARGE"},{"line_number":1312,"context_line":"\"\"\"),"},{"line_number":1313,"context_line":"]"},{"line_number":1314,"context_line":""},{"line_number":1315,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"9fb8cfa7_d38b4065","line":1312,"in_reply_to":"9fb8cfa7_c33869ef","updated":"2019-06-11 07:57:32.000000000","message":"I guess you miss a verb after \"can\". Is it \"edit\"? :)","commit_id":"f1d484ec0b3ff4ec6aff66e7a48bd21eeb4e5e1d"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"f0534f02f0a958a98fb1eee7df5822097280284c","unresolved":false,"context_lines":[{"line_number":1306,"context_line":"    cfg.ListOpt(\u0027pmem_namespaces\u0027,"},{"line_number":1307,"context_line":"                item_type\u003dcfg.types.String(),"},{"line_number":1308,"context_line":"                default\u003d[],"},{"line_number":1309,"context_line":"                help\u003d\"\"\""},{"line_number":1310,"context_line":"Configure pmem namespaces. These namespaces must have been already created."},{"line_number":1311,"context_line":""},{"line_number":1312,"context_line":"This config option is in below format:"}],"source_content_type":"text/x-python","patch_set":13,"id":"7faddb67_2e72cfe4","line":1309,"updated":"2019-07-08 22:05:02.000000000","message":"We should rst-ify this help a little more. Use ``double backticks`` for literals, and put samples in::\n\n code block format","commit_id":"b5bb5ada95b538c69cfd3c4d4bbcdc59f979f43c"},{"author":{"_account_id":23598,"name":"Zhong Luyao","email":"luyao.zhong@intel.com","username":"ZhongLuyao"},"change_message_id":"731203656f3f16c5eb783d64cc9cebb4c955e1ea","unresolved":false,"context_lines":[{"line_number":1306,"context_line":"    cfg.ListOpt(\u0027pmem_namespaces\u0027,"},{"line_number":1307,"context_line":"                item_type\u003dcfg.types.String(),"},{"line_number":1308,"context_line":"                default\u003d[],"},{"line_number":1309,"context_line":"                help\u003d\"\"\""},{"line_number":1310,"context_line":"Configure pmem namespaces. These namespaces must have been already created."},{"line_number":1311,"context_line":""},{"line_number":1312,"context_line":"This config option is in below format:"}],"source_content_type":"text/x-python","patch_set":13,"id":"7faddb67_92342bfd","line":1309,"in_reply_to":"7faddb67_2e72cfe4","updated":"2019-07-10 10:07:05.000000000","message":"Updates in this file will be separated to another patch.","commit_id":"b5bb5ada95b538c69cfd3c4d4bbcdc59f979f43c"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"f0534f02f0a958a98fb1eee7df5822097280284c","unresolved":false,"context_lines":[{"line_number":1307,"context_line":"                item_type\u003dcfg.types.String(),"},{"line_number":1308,"context_line":"                default\u003d[],"},{"line_number":1309,"context_line":"                help\u003d\"\"\""},{"line_number":1310,"context_line":"Configure pmem namespaces. These namespaces must have been already created."},{"line_number":1311,"context_line":""},{"line_number":1312,"context_line":"This config option is in below format:"},{"line_number":1313,"context_line":"\"$LABEL:$NSNAME[|$NSNAME][,$LABEL:$NSNAME[|$NSNAME]]\""}],"source_content_type":"text/x-python","patch_set":13,"id":"7faddb67_eef8374a","line":1310,"range":{"start_line":1310,"start_character":10,"end_line":1310,"end_character":14},"updated":"2019-07-08 22:05:02.000000000","message":"This should be spelled out the first time.\n\n\"Configure virtual persistent memory (pmem) namespaces.\"","commit_id":"b5bb5ada95b538c69cfd3c4d4bbcdc59f979f43c"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"f0534f02f0a958a98fb1eee7df5822097280284c","unresolved":false,"context_lines":[{"line_number":1309,"context_line":"                help\u003d\"\"\""},{"line_number":1310,"context_line":"Configure pmem namespaces. These namespaces must have been already created."},{"line_number":1311,"context_line":""},{"line_number":1312,"context_line":"This config option is in below format:"},{"line_number":1313,"context_line":"\"$LABEL:$NSNAME[|$NSNAME][,$LABEL:$NSNAME[|$NSNAME]]\""},{"line_number":1314,"context_line":""},{"line_number":1315,"context_line":"\"$NSNAME\" is the name of the persistent memory namespace, A name can be given"}],"source_content_type":"text/x-python","patch_set":13,"id":"7faddb67_4e9f0b03","line":1312,"range":{"start_line":1312,"start_character":25,"end_line":1312,"end_character":30},"updated":"2019-07-08 22:05:02.000000000","message":"the following","commit_id":"b5bb5ada95b538c69cfd3c4d4bbcdc59f979f43c"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"f0534f02f0a958a98fb1eee7df5822097280284c","unresolved":false,"context_lines":[{"line_number":1312,"context_line":"This config option is in below format:"},{"line_number":1313,"context_line":"\"$LABEL:$NSNAME[|$NSNAME][,$LABEL:$NSNAME[|$NSNAME]]\""},{"line_number":1314,"context_line":""},{"line_number":1315,"context_line":"\"$NSNAME\" is the name of the persistent memory namespace, A name can be given"},{"line_number":1316,"context_line":"to a persitent memory namespace upon creation by the \"-n/--name\" option to"},{"line_number":1317,"context_line":"the ndctl command. \"LABEL\" represents one resouce class."},{"line_number":1318,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"7faddb67_4eb86b75","line":1315,"range":{"start_line":1315,"start_character":29,"end_line":1315,"end_character":46},"updated":"2019-07-08 22:05:02.000000000","message":"...and having introduced the term as above, you can then abbreviate this to \u0027pmem\u0027 here and below","commit_id":"b5bb5ada95b538c69cfd3c4d4bbcdc59f979f43c"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"f0534f02f0a958a98fb1eee7df5822097280284c","unresolved":false,"context_lines":[{"line_number":1313,"context_line":"\"$LABEL:$NSNAME[|$NSNAME][,$LABEL:$NSNAME[|$NSNAME]]\""},{"line_number":1314,"context_line":""},{"line_number":1315,"context_line":"\"$NSNAME\" is the name of the persistent memory namespace, A name can be given"},{"line_number":1316,"context_line":"to a persitent memory namespace upon creation by the \"-n/--name\" option to"},{"line_number":1317,"context_line":"the ndctl command. \"LABEL\" represents one resouce class."},{"line_number":1318,"context_line":""},{"line_number":1319,"context_line":"e.g. pmem_namespaces\u003d128G:ns0|ns1|ns2|ns3,262144MB:ns4|ns5,MEDIUM:ns6|ns7"}],"source_content_type":"text/x-python","patch_set":13,"id":"7faddb67_8ebe6363","line":1316,"range":{"start_line":1316,"start_character":5,"end_line":1316,"end_character":14},"updated":"2019-07-08 22:05:02.000000000","message":"persistent","commit_id":"b5bb5ada95b538c69cfd3c4d4bbcdc59f979f43c"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"f0534f02f0a958a98fb1eee7df5822097280284c","unresolved":false,"context_lines":[{"line_number":1314,"context_line":""},{"line_number":1315,"context_line":"\"$NSNAME\" is the name of the persistent memory namespace, A name can be given"},{"line_number":1316,"context_line":"to a persitent memory namespace upon creation by the \"-n/--name\" option to"},{"line_number":1317,"context_line":"the ndctl command. \"LABEL\" represents one resouce class."},{"line_number":1318,"context_line":""},{"line_number":1319,"context_line":"e.g. pmem_namespaces\u003d128G:ns0|ns1|ns2|ns3,262144MB:ns4|ns5,MEDIUM:ns6|ns7"},{"line_number":1320,"context_line":"\"\"\"),"}],"source_content_type":"text/x-python","patch_set":13,"id":"7faddb67_0eb27395","line":1317,"range":{"start_line":1317,"start_character":20,"end_line":1317,"end_character":25},"updated":"2019-07-08 22:05:02.000000000","message":"for consistency, spell this $LABEL (with the $)","commit_id":"b5bb5ada95b538c69cfd3c4d4bbcdc59f979f43c"}],"nova/privsep/libvirt.py":[{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"e86ca46663b6f7cc40b01be188743e0e7e621b07","unresolved":false,"context_lines":[{"line_number":251,"context_line":"@nova.privsep.sys_admin_pctxt.entrypoint"},{"line_number":252,"context_line":"def get_pmem_namespaces():"},{"line_number":253,"context_line":"    cmd \u003d ("},{"line_number":254,"context_line":"        \u0027sudo ndctl list \u0027,"},{"line_number":255,"context_line":"        \u0027-X \u0027,"},{"line_number":256,"context_line":"    )"},{"line_number":257,"context_line":"    existed_nss_info \u003d processutils.execute(\"\".join(cmd),"}],"source_content_type":"text/x-python","patch_set":10,"id":"9fb8cfa7_f6d3e95e","line":254,"range":{"start_line":254,"start_character":9,"end_line":254,"end_character":14},"updated":"2019-06-10 07:15:38.000000000","message":"so you shouldn\u0027t need \u0027sudo\u0027?","commit_id":"f1d484ec0b3ff4ec6aff66e7a48bd21eeb4e5e1d"},{"author":{"_account_id":23598,"name":"Zhong Luyao","email":"luyao.zhong@intel.com","username":"ZhongLuyao"},"change_message_id":"7cd4fb048f0e2787da75a1921f276d6801c895ed","unresolved":false,"context_lines":[{"line_number":251,"context_line":"@nova.privsep.sys_admin_pctxt.entrypoint"},{"line_number":252,"context_line":"def get_pmem_namespaces():"},{"line_number":253,"context_line":"    cmd \u003d ("},{"line_number":254,"context_line":"        \u0027sudo ndctl list \u0027,"},{"line_number":255,"context_line":"        \u0027-X \u0027,"},{"line_number":256,"context_line":"    )"},{"line_number":257,"context_line":"    existed_nss_info \u003d processutils.execute(\"\".join(cmd),"}],"source_content_type":"text/x-python","patch_set":10,"id":"9fb8cfa7_19f81779","line":254,"range":{"start_line":254,"start_character":9,"end_line":254,"end_character":14},"in_reply_to":"9fb8cfa7_f6d3e95e","updated":"2019-06-11 09:09:46.000000000","message":"I think it depends on how ndctl is installed. But we\u0027re sure we can use ndctl by \u0027sudo\u0027.","commit_id":"f1d484ec0b3ff4ec6aff66e7a48bd21eeb4e5e1d"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"e86ca46663b6f7cc40b01be188743e0e7e621b07","unresolved":false,"context_lines":[{"line_number":255,"context_line":"        \u0027-X \u0027,"},{"line_number":256,"context_line":"    )"},{"line_number":257,"context_line":"    existed_nss_info \u003d processutils.execute(\"\".join(cmd),"},{"line_number":258,"context_line":"                                            shell\u003dTrue)[0]"},{"line_number":259,"context_line":"    return existed_nss_info if existed_nss_info else \u0027[]\u0027"}],"source_content_type":"text/x-python","patch_set":10,"id":"9fb8cfa7_b657b1ca","line":258,"range":{"start_line":258,"start_character":44,"end_line":258,"end_character":54},"updated":"2019-06-10 07:15:38.000000000","message":"emm...why we need shell\u003dTrue?","commit_id":"f1d484ec0b3ff4ec6aff66e7a48bd21eeb4e5e1d"},{"author":{"_account_id":23598,"name":"Zhong Luyao","email":"luyao.zhong@intel.com","username":"ZhongLuyao"},"change_message_id":"e28cb1c9a5de5970904c64e58069ab015f096bf7","unresolved":false,"context_lines":[{"line_number":255,"context_line":"        \u0027-X \u0027,"},{"line_number":256,"context_line":"    )"},{"line_number":257,"context_line":"    existed_nss_info \u003d processutils.execute(\"\".join(cmd),"},{"line_number":258,"context_line":"                                            shell\u003dTrue)[0]"},{"line_number":259,"context_line":"    return existed_nss_info if existed_nss_info else \u0027[]\u0027"}],"source_content_type":"text/x-python","patch_set":10,"id":"9fb8cfa7_33b3bc0c","line":258,"range":{"start_line":258,"start_character":44,"end_line":258,"end_character":54},"in_reply_to":"9fb8cfa7_b657b1ca","updated":"2019-06-11 07:57:32.000000000","message":"I‘m not sure about this. I just think we need a shell to run the command. Actually, I tried to run w/ or w/o \"shell\u003dTrue\", and got the same results.","commit_id":"f1d484ec0b3ff4ec6aff66e7a48bd21eeb4e5e1d"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"f0534f02f0a958a98fb1eee7df5822097280284c","unresolved":false,"context_lines":[{"line_number":251,"context_line":"@nova.privsep.sys_admin_pctxt.entrypoint"},{"line_number":252,"context_line":"def get_pmem_namespaces():"},{"line_number":253,"context_line":"    cmd \u003d ("},{"line_number":254,"context_line":"        \u0027ndctl list \u0027,"},{"line_number":255,"context_line":"        \u0027-X \u0027,"},{"line_number":256,"context_line":"    )"},{"line_number":257,"context_line":"    existed_nss_info \u003d processutils.execute(\"\".join(cmd),"}],"source_content_type":"text/x-python","patch_set":13,"id":"7faddb67_914d2674","line":254,"range":{"start_line":254,"start_character":8,"end_line":254,"end_character":22},"updated":"2019-07-08 22:05:02.000000000","message":"these should be separate list items","commit_id":"b5bb5ada95b538c69cfd3c4d4bbcdc59f979f43c"},{"author":{"_account_id":23598,"name":"Zhong Luyao","email":"luyao.zhong@intel.com","username":"ZhongLuyao"},"change_message_id":"731203656f3f16c5eb783d64cc9cebb4c955e1ea","unresolved":false,"context_lines":[{"line_number":251,"context_line":"@nova.privsep.sys_admin_pctxt.entrypoint"},{"line_number":252,"context_line":"def get_pmem_namespaces():"},{"line_number":253,"context_line":"    cmd \u003d ("},{"line_number":254,"context_line":"        \u0027ndctl list \u0027,"},{"line_number":255,"context_line":"        \u0027-X \u0027,"},{"line_number":256,"context_line":"    )"},{"line_number":257,"context_line":"    existed_nss_info \u003d processutils.execute(\"\".join(cmd),"}],"source_content_type":"text/x-python","patch_set":13,"id":"7faddb67_323bf7eb","line":254,"range":{"start_line":254,"start_character":8,"end_line":254,"end_character":22},"in_reply_to":"7faddb67_914d2674","updated":"2019-07-10 10:07:05.000000000","message":"Done","commit_id":"b5bb5ada95b538c69cfd3c4d4bbcdc59f979f43c"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"f0534f02f0a958a98fb1eee7df5822097280284c","unresolved":false,"context_lines":[{"line_number":254,"context_line":"        \u0027ndctl list \u0027,"},{"line_number":255,"context_line":"        \u0027-X \u0027,"},{"line_number":256,"context_line":"    )"},{"line_number":257,"context_line":"    existed_nss_info \u003d processutils.execute(\"\".join(cmd),"},{"line_number":258,"context_line":"                                            shell\u003dTrue)[0]"},{"line_number":259,"context_line":"    return existed_nss_info if existed_nss_info else \u0027[]\u0027"}],"source_content_type":"text/x-python","patch_set":13,"id":"7faddb67_919be6c7","line":257,"range":{"start_line":257,"start_character":4,"end_line":257,"end_character":20},"updated":"2019-07-08 22:05:02.000000000","message":"existing\n\nbut that seems a bit unnecessary; why couldn\u0027t this just be called nss_info?\n\nfor that matter, what\u0027s the second \u0027s\u0027 for? Could it be ns_info?","commit_id":"b5bb5ada95b538c69cfd3c4d4bbcdc59f979f43c"},{"author":{"_account_id":23598,"name":"Zhong Luyao","email":"luyao.zhong@intel.com","username":"ZhongLuyao"},"change_message_id":"731203656f3f16c5eb783d64cc9cebb4c955e1ea","unresolved":false,"context_lines":[{"line_number":254,"context_line":"        \u0027ndctl list \u0027,"},{"line_number":255,"context_line":"        \u0027-X \u0027,"},{"line_number":256,"context_line":"    )"},{"line_number":257,"context_line":"    existed_nss_info \u003d processutils.execute(\"\".join(cmd),"},{"line_number":258,"context_line":"                                            shell\u003dTrue)[0]"},{"line_number":259,"context_line":"    return existed_nss_info if existed_nss_info else \u0027[]\u0027"}],"source_content_type":"text/x-python","patch_set":13,"id":"7faddb67_721acf7d","line":257,"range":{"start_line":257,"start_character":4,"end_line":257,"end_character":20},"in_reply_to":"7faddb67_919be6c7","updated":"2019-07-10 10:07:05.000000000","message":"The second \u0027s\u0027 is for plural form. ns_info is for single namespace info and nss_info is for multiple namespaces info.","commit_id":"b5bb5ada95b538c69cfd3c4d4bbcdc59f979f43c"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"f0534f02f0a958a98fb1eee7df5822097280284c","unresolved":false,"context_lines":[{"line_number":254,"context_line":"        \u0027ndctl list \u0027,"},{"line_number":255,"context_line":"        \u0027-X \u0027,"},{"line_number":256,"context_line":"    )"},{"line_number":257,"context_line":"    existed_nss_info \u003d processutils.execute(\"\".join(cmd),"},{"line_number":258,"context_line":"                                            shell\u003dTrue)[0]"},{"line_number":259,"context_line":"    return existed_nss_info if existed_nss_info else \u0027[]\u0027"}],"source_content_type":"text/x-python","patch_set":13,"id":"7faddb67_715aea2a","line":258,"range":{"start_line":257,"start_character":44,"end_line":258,"end_character":54},"updated":"2019-07-08 22:05:02.000000000","message":"you should use the argv form of processutils.execute, like the other methods above.","commit_id":"b5bb5ada95b538c69cfd3c4d4bbcdc59f979f43c"},{"author":{"_account_id":23598,"name":"Zhong Luyao","email":"luyao.zhong@intel.com","username":"ZhongLuyao"},"change_message_id":"731203656f3f16c5eb783d64cc9cebb4c955e1ea","unresolved":false,"context_lines":[{"line_number":254,"context_line":"        \u0027ndctl list \u0027,"},{"line_number":255,"context_line":"        \u0027-X \u0027,"},{"line_number":256,"context_line":"    )"},{"line_number":257,"context_line":"    existed_nss_info \u003d processutils.execute(\"\".join(cmd),"},{"line_number":258,"context_line":"                                            shell\u003dTrue)[0]"},{"line_number":259,"context_line":"    return existed_nss_info if existed_nss_info else \u0027[]\u0027"}],"source_content_type":"text/x-python","patch_set":13,"id":"7faddb67_921d0b75","line":258,"range":{"start_line":257,"start_character":44,"end_line":258,"end_character":54},"in_reply_to":"7faddb67_715aea2a","updated":"2019-07-10 10:07:05.000000000","message":"Done","commit_id":"b5bb5ada95b538c69cfd3c4d4bbcdc59f979f43c"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"f0534f02f0a958a98fb1eee7df5822097280284c","unresolved":false,"context_lines":[{"line_number":256,"context_line":"    )"},{"line_number":257,"context_line":"    existed_nss_info \u003d processutils.execute(\"\".join(cmd),"},{"line_number":258,"context_line":"                                            shell\u003dTrue)[0]"},{"line_number":259,"context_line":"    return existed_nss_info if existed_nss_info else \u0027[]\u0027"}],"source_content_type":"text/x-python","patch_set":13,"id":"7faddb67_b19e22b6","line":259,"updated":"2019-07-08 22:05:02.000000000","message":"This should have some kind of error handling.","commit_id":"b5bb5ada95b538c69cfd3c4d4bbcdc59f979f43c"},{"author":{"_account_id":23598,"name":"Zhong Luyao","email":"luyao.zhong@intel.com","username":"ZhongLuyao"},"change_message_id":"731203656f3f16c5eb783d64cc9cebb4c955e1ea","unresolved":false,"context_lines":[{"line_number":256,"context_line":"    )"},{"line_number":257,"context_line":"    existed_nss_info \u003d processutils.execute(\"\".join(cmd),"},{"line_number":258,"context_line":"                                            shell\u003dTrue)[0]"},{"line_number":259,"context_line":"    return existed_nss_info if existed_nss_info else \u0027[]\u0027"}],"source_content_type":"text/x-python","patch_set":13,"id":"7faddb67_ed126058","line":259,"in_reply_to":"7faddb67_b19e22b6","updated":"2019-07-10 10:07:05.000000000","message":"Actually I don\u0027t know what error may be here. Do I need to catch all exceptions and print a friendly error message?","commit_id":"b5bb5ada95b538c69cfd3c4d4bbcdc59f979f43c"}],"nova/tests/functional/libvirt/base.py":[{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"f0534f02f0a958a98fb1eee7df5822097280284c","unresolved":false,"context_lines":[{"line_number":48,"context_line":"            fakelibvirt))"},{"line_number":49,"context_line":"        self.useFixture(fakelibvirt.FakeLibvirtFixture())"},{"line_number":50,"context_line":"        self.useFixture(func_fixtures.PlacementFixture())"},{"line_number":51,"context_line":"        self.useFixture(fixtures.MonkeyPatch("},{"line_number":52,"context_line":"            \u0027nova.virt.libvirt.driver.LibvirtDriver._check_pmem_namespaces\u0027,"},{"line_number":53,"context_line":"            self.fake_check_pmems))"},{"line_number":54,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"7faddb67_31aa32d2","line":51,"range":{"start_line":51,"start_character":33,"end_line":51,"end_character":44},"updated":"2019-07-08 22:05:02.000000000","message":"You could use MockPatch here...","commit_id":"b5bb5ada95b538c69cfd3c4d4bbcdc59f979f43c"},{"author":{"_account_id":23598,"name":"Zhong Luyao","email":"luyao.zhong@intel.com","username":"ZhongLuyao"},"change_message_id":"731203656f3f16c5eb783d64cc9cebb4c955e1ea","unresolved":false,"context_lines":[{"line_number":48,"context_line":"            fakelibvirt))"},{"line_number":49,"context_line":"        self.useFixture(fakelibvirt.FakeLibvirtFixture())"},{"line_number":50,"context_line":"        self.useFixture(func_fixtures.PlacementFixture())"},{"line_number":51,"context_line":"        self.useFixture(fixtures.MonkeyPatch("},{"line_number":52,"context_line":"            \u0027nova.virt.libvirt.driver.LibvirtDriver._check_pmem_namespaces\u0027,"},{"line_number":53,"context_line":"            self.fake_check_pmems))"},{"line_number":54,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"7faddb67_cd176445","line":51,"range":{"start_line":51,"start_character":33,"end_line":51,"end_character":44},"in_reply_to":"7faddb67_31aa32d2","updated":"2019-07-10 10:07:05.000000000","message":"Done","commit_id":"b5bb5ada95b538c69cfd3c4d4bbcdc59f979f43c"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"f0534f02f0a958a98fb1eee7df5822097280284c","unresolved":false,"context_lines":[{"line_number":50,"context_line":"        self.useFixture(func_fixtures.PlacementFixture())"},{"line_number":51,"context_line":"        self.useFixture(fixtures.MonkeyPatch("},{"line_number":52,"context_line":"            \u0027nova.virt.libvirt.driver.LibvirtDriver._check_pmem_namespaces\u0027,"},{"line_number":53,"context_line":"            self.fake_check_pmems))"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"        self.stub_out(\u0027nova.privsep.utils.supports_direct_io\u0027, lambda _: True)"},{"line_number":56,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"7faddb67_517ece6b","line":53,"range":{"start_line":53,"start_character":12,"end_line":53,"end_character":33},"updated":"2019-07-08 22:05:02.000000000","message":"...and then you wouldn\u0027t need a no-op substitution here.\n\nAlternatively, you could use\n\n lambda *a, **k: None\n\nhere instead of defining a whole method to swap in.","commit_id":"b5bb5ada95b538c69cfd3c4d4bbcdc59f979f43c"},{"author":{"_account_id":23598,"name":"Zhong Luyao","email":"luyao.zhong@intel.com","username":"ZhongLuyao"},"change_message_id":"731203656f3f16c5eb783d64cc9cebb4c955e1ea","unresolved":false,"context_lines":[{"line_number":50,"context_line":"        self.useFixture(func_fixtures.PlacementFixture())"},{"line_number":51,"context_line":"        self.useFixture(fixtures.MonkeyPatch("},{"line_number":52,"context_line":"            \u0027nova.virt.libvirt.driver.LibvirtDriver._check_pmem_namespaces\u0027,"},{"line_number":53,"context_line":"            self.fake_check_pmems))"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"        self.stub_out(\u0027nova.privsep.utils.supports_direct_io\u0027, lambda _: True)"},{"line_number":56,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"7faddb67_6d28b085","line":53,"range":{"start_line":53,"start_character":12,"end_line":53,"end_character":33},"in_reply_to":"7faddb67_517ece6b","updated":"2019-07-10 10:07:05.000000000","message":"Done","commit_id":"b5bb5ada95b538c69cfd3c4d4bbcdc59f979f43c"}],"nova/tests/functional/notification_sample_tests/notification_sample_base.py":[{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"f0534f02f0a958a98fb1eee7df5822097280284c","unresolved":false,"context_lines":[{"line_number":82,"context_line":""},{"line_number":83,"context_line":"        self.useFixture(utils_fixture.TimeFixture(test_services.fake_utcnow()))"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"        self.useFixture(fixtures.MonkeyPatch("},{"line_number":86,"context_line":"            \u0027nova.virt.libvirt.driver.LibvirtDriver._check_pmem_namespaces\u0027,"},{"line_number":87,"context_line":"            self.fake_check_pmems))"},{"line_number":88,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"7faddb67_71818a4a","line":85,"updated":"2019-07-08 22:05:02.000000000","message":"ditto","commit_id":"b5bb5ada95b538c69cfd3c4d4bbcdc59f979f43c"},{"author":{"_account_id":23598,"name":"Zhong Luyao","email":"luyao.zhong@intel.com","username":"ZhongLuyao"},"change_message_id":"731203656f3f16c5eb783d64cc9cebb4c955e1ea","unresolved":false,"context_lines":[{"line_number":82,"context_line":""},{"line_number":83,"context_line":"        self.useFixture(utils_fixture.TimeFixture(test_services.fake_utcnow()))"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"        self.useFixture(fixtures.MonkeyPatch("},{"line_number":86,"context_line":"            \u0027nova.virt.libvirt.driver.LibvirtDriver._check_pmem_namespaces\u0027,"},{"line_number":87,"context_line":"            self.fake_check_pmems))"},{"line_number":88,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"7faddb67_8d2bac80","line":85,"in_reply_to":"7faddb67_71818a4a","updated":"2019-07-10 10:07:05.000000000","message":"Done","commit_id":"b5bb5ada95b538c69cfd3c4d4bbcdc59f979f43c"}],"nova/tests/functional/regressions/test_bug_1595962.py":[{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"f0534f02f0a958a98fb1eee7df5822097280284c","unresolved":false,"context_lines":[{"line_number":52,"context_line":"           \u0027nova.virt.libvirt.guest.libvirt\u0027,"},{"line_number":53,"context_line":"           fakelibvirt))"},{"line_number":54,"context_line":"        self.useFixture(fakelibvirt.FakeLibvirtFixture())"},{"line_number":55,"context_line":"        self.useFixture(fixtures.MonkeyPatch("},{"line_number":56,"context_line":"            \u0027nova.virt.libvirt.driver.LibvirtDriver._check_pmem_namespaces\u0027,"},{"line_number":57,"context_line":"            self.fake_check_pmems))"},{"line_number":58,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"7faddb67_119856be","line":55,"updated":"2019-07-08 22:05:02.000000000","message":"ditto","commit_id":"b5bb5ada95b538c69cfd3c4d4bbcdc59f979f43c"},{"author":{"_account_id":23598,"name":"Zhong Luyao","email":"luyao.zhong@intel.com","username":"ZhongLuyao"},"change_message_id":"731203656f3f16c5eb783d64cc9cebb4c955e1ea","unresolved":false,"context_lines":[{"line_number":52,"context_line":"           \u0027nova.virt.libvirt.guest.libvirt\u0027,"},{"line_number":53,"context_line":"           fakelibvirt))"},{"line_number":54,"context_line":"        self.useFixture(fakelibvirt.FakeLibvirtFixture())"},{"line_number":55,"context_line":"        self.useFixture(fixtures.MonkeyPatch("},{"line_number":56,"context_line":"            \u0027nova.virt.libvirt.driver.LibvirtDriver._check_pmem_namespaces\u0027,"},{"line_number":57,"context_line":"            self.fake_check_pmems))"},{"line_number":58,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"7faddb67_2d22b8a5","line":55,"in_reply_to":"7faddb67_119856be","updated":"2019-07-10 10:07:05.000000000","message":"Done","commit_id":"b5bb5ada95b538c69cfd3c4d4bbcdc59f979f43c"}],"nova/tests/unit/virt/libvirt/test_driver.py":[{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"f0534f02f0a958a98fb1eee7df5822097280284c","unresolved":false,"context_lines":[{"line_number":887,"context_line":"                      imagebackend.Image._get_driver_format)"},{"line_number":888,"context_line":""},{"line_number":889,"context_line":"        self.useFixture(fakelibvirt.FakeLibvirtFixture())"},{"line_number":890,"context_line":"        self.useFixture(fixtures.MonkeyPatch("},{"line_number":891,"context_line":"            \u0027nova.virt.libvirt.driver.LibvirtDriver._check_pmem_namespaces\u0027,"},{"line_number":892,"context_line":"            self.fake_check_pmems))"},{"line_number":893,"context_line":"        self.test_instance \u003d _create_test_instance()"}],"source_content_type":"text/x-python","patch_set":13,"id":"7faddb67_319312a6","line":890,"updated":"2019-07-08 22:05:02.000000000","message":"ditto","commit_id":"b5bb5ada95b538c69cfd3c4d4bbcdc59f979f43c"},{"author":{"_account_id":23598,"name":"Zhong Luyao","email":"luyao.zhong@intel.com","username":"ZhongLuyao"},"change_message_id":"731203656f3f16c5eb783d64cc9cebb4c955e1ea","unresolved":false,"context_lines":[{"line_number":887,"context_line":"                      imagebackend.Image._get_driver_format)"},{"line_number":888,"context_line":""},{"line_number":889,"context_line":"        self.useFixture(fakelibvirt.FakeLibvirtFixture())"},{"line_number":890,"context_line":"        self.useFixture(fixtures.MonkeyPatch("},{"line_number":891,"context_line":"            \u0027nova.virt.libvirt.driver.LibvirtDriver._check_pmem_namespaces\u0027,"},{"line_number":892,"context_line":"            self.fake_check_pmems))"},{"line_number":893,"context_line":"        self.test_instance \u003d _create_test_instance()"}],"source_content_type":"text/x-python","patch_set":13,"id":"7faddb67_4d25b4aa","line":890,"in_reply_to":"7faddb67_319312a6","updated":"2019-07-10 10:07:05.000000000","message":"Done","commit_id":"b5bb5ada95b538c69cfd3c4d4bbcdc59f979f43c"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"f0534f02f0a958a98fb1eee7df5822097280284c","unresolved":false,"context_lines":[{"line_number":18951,"context_line":"        self.flags(sysinfo_serial\u003d\"none\", group\u003d\"libvirt\")"},{"line_number":18952,"context_line":"        self.flags(instances_path\u003dself.useFixture(fixtures.TempDir()).path)"},{"line_number":18953,"context_line":"        self.useFixture(fakelibvirt.FakeLibvirtFixture())"},{"line_number":18954,"context_line":"        self.useFixture(fixtures.MonkeyPatch("},{"line_number":18955,"context_line":"            \u0027nova.virt.libvirt.driver.LibvirtDriver._check_pmem_namespaces\u0027,"},{"line_number":18956,"context_line":"            self.fake_check_pmems))"},{"line_number":18957,"context_line":"        os_vif.initialize()"}],"source_content_type":"text/x-python","patch_set":13,"id":"7faddb67_91e9a61b","line":18954,"updated":"2019-07-08 22:05:02.000000000","message":"ditto\n\nBUT\n\nDo you really need to mock this everywhere? I assume the fake driver responds appropriately (doesn\u0027t error) when asked for a list of instances. Whether that list is empty or not, this should result in an empty list of assigned namespaces, so _check_pmem_namespaces should pass without error by default.","commit_id":"b5bb5ada95b538c69cfd3c4d4bbcdc59f979f43c"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"f0534f02f0a958a98fb1eee7df5822097280284c","unresolved":false,"context_lines":[{"line_number":23394,"context_line":""},{"line_number":23395,"context_line":"    @mock.patch(\u0027nova.privsep.libvirt.get_pmem_namespaces\u0027)"},{"line_number":23396,"context_line":"    def test_get_pmem_nss_on_host(self, mock_get_nss):"},{"line_number":23397,"context_line":"        mock_get_nss.return_value \u003d \\"},{"line_number":23398,"context_line":"            \u0027[{\"dev\":\"namespace0.0\",\u0027 + \\"},{"line_number":23399,"context_line":"            \u0027\"mode\":\"devdax\",\u0027 + \\"},{"line_number":23400,"context_line":"            \u0027\"map\":\"mem\",\u0027 + \\"}],"source_content_type":"text/x-python","patch_set":13,"id":"7faddb67_b11dc274","line":23397,"updated":"2019-07-08 22:05:02.000000000","message":"Please find a way to format this without backslashes.\n\nFor a JSON blob like this, it\u0027s probably best to use a \u0027\u0027\u0027 block.","commit_id":"b5bb5ada95b538c69cfd3c4d4bbcdc59f979f43c"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"9bddbd2af7447d7dac18e6466d51e1dcacfdef20","unresolved":false,"context_lines":[{"line_number":23389,"context_line":""},{"line_number":23390,"context_line":"    @mock.patch(\u0027nova.privsep.libvirt.get_pmem_namespaces\u0027)"},{"line_number":23391,"context_line":"    def test_get_pmem_nss_on_host(self, mock_get_nss):"},{"line_number":23392,"context_line":"        mock_get_nss.return_value \u003d \u0027\u0027\u0027"},{"line_number":23393,"context_line":"            [{\"dev\":\"namespace0.0\","},{"line_number":23394,"context_line":"            \"mode\":\"devdax\","},{"line_number":23395,"context_line":"            \"map\":\"mem\","}],"source_content_type":"text/x-python","patch_set":14,"id":"7faddb67_07423011","line":23392,"range":{"start_line":23392,"start_character":36,"end_line":23392,"end_character":39},"updated":"2019-07-10 17:20:32.000000000","message":"This should be \"\"\"","commit_id":"7226501c202eb3a78ed64e066435f0145b555eb6"}],"nova/virt/libvirt/driver.py":[{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"e86ca46663b6f7cc40b01be188743e0e7e621b07","unresolved":false,"context_lines":[{"line_number":291,"context_line":""},{"line_number":292,"context_line":""},{"line_number":293,"context_line":"# This is used to save the pmem namespace info temporarily"},{"line_number":294,"context_line":"PMEMNamespace \u003d collections.namedtuple(\u0027PMEMNamespace\u0027,"},{"line_number":295,"context_line":"        [\u0027tag\u0027, \u0027name\u0027, \u0027dev\u0027, \u0027size\u0027,"},{"line_number":296,"context_line":"         \u0027align\u0027, \u0027numa_node\u0027])"},{"line_number":297,"context_line":""},{"line_number":298,"context_line":""},{"line_number":299,"context_line":"class LibvirtDriver(driver.ComputeDriver):"}],"source_content_type":"text/x-python","patch_set":10,"id":"9fb8cfa7_b60c91ec","line":296,"range":{"start_line":294,"start_character":16,"end_line":296,"end_character":31},"updated":"2019-06-10 07:15:38.000000000","message":"probably, we can use the VPMEM object directly.","commit_id":"f1d484ec0b3ff4ec6aff66e7a48bd21eeb4e5e1d"},{"author":{"_account_id":23598,"name":"Zhong Luyao","email":"luyao.zhong@intel.com","username":"ZhongLuyao"},"change_message_id":"e28cb1c9a5de5970904c64e58069ab015f096bf7","unresolved":false,"context_lines":[{"line_number":291,"context_line":""},{"line_number":292,"context_line":""},{"line_number":293,"context_line":"# This is used to save the pmem namespace info temporarily"},{"line_number":294,"context_line":"PMEMNamespace \u003d collections.namedtuple(\u0027PMEMNamespace\u0027,"},{"line_number":295,"context_line":"        [\u0027tag\u0027, \u0027name\u0027, \u0027dev\u0027, \u0027size\u0027,"},{"line_number":296,"context_line":"         \u0027align\u0027, \u0027numa_node\u0027])"},{"line_number":297,"context_line":""},{"line_number":298,"context_line":""},{"line_number":299,"context_line":"class LibvirtDriver(driver.ComputeDriver):"}],"source_content_type":"text/x-python","patch_set":10,"id":"9fb8cfa7_73b934ca","line":296,"range":{"start_line":294,"start_character":16,"end_line":296,"end_character":31},"in_reply_to":"9fb8cfa7_b60c91ec","updated":"2019-06-11 07:57:32.000000000","message":"It\u0027s for storing real pmem namespaces info on host. Mixing the PMEMNamespace and VPMEM object can be confusing.","commit_id":"f1d484ec0b3ff4ec6aff66e7a48bd21eeb4e5e1d"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"e86ca46663b6f7cc40b01be188743e0e7e621b07","unresolved":false,"context_lines":[{"line_number":425,"context_line":"        self.provider_tree \u003d None"},{"line_number":426,"context_line":""},{"line_number":427,"context_line":"        # get pmem namespaces info"},{"line_number":428,"context_line":"        self._pmem_namespaces \u003d self._get_pmem_namespaces()"},{"line_number":429,"context_line":""},{"line_number":430,"context_line":"    def _get_pmem_namespaces(self):"},{"line_number":431,"context_line":"        pmem_nss \u003d []  # PMEMNamespace list"}],"source_content_type":"text/x-python","patch_set":10,"id":"9fb8cfa7_b6a8118c","line":428,"updated":"2019-06-10 07:15:38.000000000","message":"you should have check whether this host already configued with nvdimm before, and ensure they aren\u0027t assign to any instance.","commit_id":"f1d484ec0b3ff4ec6aff66e7a48bd21eeb4e5e1d"},{"author":{"_account_id":23598,"name":"Zhong Luyao","email":"luyao.zhong@intel.com","username":"ZhongLuyao"},"change_message_id":"e28cb1c9a5de5970904c64e58069ab015f096bf7","unresolved":false,"context_lines":[{"line_number":425,"context_line":"        self.provider_tree \u003d None"},{"line_number":426,"context_line":""},{"line_number":427,"context_line":"        # get pmem namespaces info"},{"line_number":428,"context_line":"        self._pmem_namespaces \u003d self._get_pmem_namespaces()"},{"line_number":429,"context_line":""},{"line_number":430,"context_line":"    def _get_pmem_namespaces(self):"},{"line_number":431,"context_line":"        pmem_nss \u003d []  # PMEMNamespace list"}],"source_content_type":"text/x-python","patch_set":10,"id":"9fb8cfa7_361f2a5c","line":428,"in_reply_to":"9fb8cfa7_b6a8118c","updated":"2019-06-11 07:57:32.000000000","message":"The _pmem_namespaces will contain all pmem namespaces configured in the conf file and already created on the host, not including the assign status info. \n\nI think it\u0027s not proper to calculate the assigned pmems when initializing the libvirt driver, because we need to get all instances and update the _pmem_namespaces, is that possible? \n\nI don\u0027t track if the pmem namespace is consumed or not here, it will be done when allocating the pmems to instances. Is this ok for you?","commit_id":"f1d484ec0b3ff4ec6aff66e7a48bd21eeb4e5e1d"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"e86ca46663b6f7cc40b01be188743e0e7e621b07","unresolved":false,"context_lines":[{"line_number":431,"context_line":"        pmem_nss \u003d []  # PMEMNamespace list"},{"line_number":432,"context_line":"        if CONF.libvirt.pmem_namespace_sizes:"},{"line_number":433,"context_line":"            pmem_nss_host \u003d self._get_pmem_namespaces_on_host()"},{"line_number":434,"context_line":"            for ns_conf in CONF.libvirt.pmem_namespace_sizes:"},{"line_number":435,"context_line":"                ns_name \u003d ns_conf.split(\":\")[0].strip()"},{"line_number":436,"context_line":"                ns_tag \u003d ns_conf.split(\":\")[1].strip()"},{"line_number":437,"context_line":"                if pmem_nss_host.get(ns_name):"}],"source_content_type":"text/x-python","patch_set":10,"id":"9fb8cfa7_56fd15af","line":434,"range":{"start_line":434,"start_character":16,"end_line":434,"end_character":23},"updated":"2019-06-10 07:15:38.000000000","message":"I feel we need some validation on the value of this config\u0027s format and valid char of tag.","commit_id":"f1d484ec0b3ff4ec6aff66e7a48bd21eeb4e5e1d"},{"author":{"_account_id":23598,"name":"Zhong Luyao","email":"luyao.zhong@intel.com","username":"ZhongLuyao"},"change_message_id":"e28cb1c9a5de5970904c64e58069ab015f096bf7","unresolved":false,"context_lines":[{"line_number":431,"context_line":"        pmem_nss \u003d []  # PMEMNamespace list"},{"line_number":432,"context_line":"        if CONF.libvirt.pmem_namespace_sizes:"},{"line_number":433,"context_line":"            pmem_nss_host \u003d self._get_pmem_namespaces_on_host()"},{"line_number":434,"context_line":"            for ns_conf in CONF.libvirt.pmem_namespace_sizes:"},{"line_number":435,"context_line":"                ns_name \u003d ns_conf.split(\":\")[0].strip()"},{"line_number":436,"context_line":"                ns_tag \u003d ns_conf.split(\":\")[1].strip()"},{"line_number":437,"context_line":"                if pmem_nss_host.get(ns_name):"}],"source_content_type":"text/x-python","patch_set":10,"id":"9fb8cfa7_930ce8a5","line":434,"range":{"start_line":434,"start_character":16,"end_line":434,"end_character":23},"in_reply_to":"9fb8cfa7_56fd15af","updated":"2019-06-11 07:57:32.000000000","message":"Yes, you\u0027re right. Get it.","commit_id":"f1d484ec0b3ff4ec6aff66e7a48bd21eeb4e5e1d"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"e86ca46663b6f7cc40b01be188743e0e7e621b07","unresolved":false,"context_lines":[{"line_number":435,"context_line":"                ns_name \u003d ns_conf.split(\":\")[0].strip()"},{"line_number":436,"context_line":"                ns_tag \u003d ns_conf.split(\":\")[1].strip()"},{"line_number":437,"context_line":"                if pmem_nss_host.get(ns_name):"},{"line_number":438,"context_line":"                    pmem_ns \u003d pmem_nss_host[ns_name]._replace(tag\u003dns_tag)"},{"line_number":439,"context_line":"                    pmem_nss.append(pmem_ns)"},{"line_number":440,"context_line":"                else:"},{"line_number":441,"context_line":"                    raise exception.PMEMNamespaceNotFound(namespace\u003dns_name)"}],"source_content_type":"text/x-python","patch_set":10,"id":"9fb8cfa7_16da3d4b","line":438,"range":{"start_line":438,"start_character":19,"end_line":438,"end_character":73},"updated":"2019-06-10 07:15:38.000000000","message":"so _replace is a private method? we shouldn\u0027t use it.\n\nYou can just write as \"pmem_ns.tag \u003d ns_tag\".","commit_id":"f1d484ec0b3ff4ec6aff66e7a48bd21eeb4e5e1d"},{"author":{"_account_id":23598,"name":"Zhong Luyao","email":"luyao.zhong@intel.com","username":"ZhongLuyao"},"change_message_id":"e28cb1c9a5de5970904c64e58069ab015f096bf7","unresolved":false,"context_lines":[{"line_number":435,"context_line":"                ns_name \u003d ns_conf.split(\":\")[0].strip()"},{"line_number":436,"context_line":"                ns_tag \u003d ns_conf.split(\":\")[1].strip()"},{"line_number":437,"context_line":"                if pmem_nss_host.get(ns_name):"},{"line_number":438,"context_line":"                    pmem_ns \u003d pmem_nss_host[ns_name]._replace(tag\u003dns_tag)"},{"line_number":439,"context_line":"                    pmem_nss.append(pmem_ns)"},{"line_number":440,"context_line":"                else:"},{"line_number":441,"context_line":"                    raise exception.PMEMNamespaceNotFound(namespace\u003dns_name)"}],"source_content_type":"text/x-python","patch_set":10,"id":"9fb8cfa7_33597c8d","line":438,"range":{"start_line":438,"start_character":19,"end_line":438,"end_character":73},"in_reply_to":"9fb8cfa7_16da3d4b","updated":"2019-06-11 07:57:32.000000000","message":"Yes, It\u0027s private. I can\u0027t modify the pmem_ns, because the collections.namedtuple is immutable. I know it\u0027s not encouraged to use private method, I can create a new namedtuple, is that ok?","commit_id":"f1d484ec0b3ff4ec6aff66e7a48bd21eeb4e5e1d"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"f0534f02f0a958a98fb1eee7df5822097280284c","unresolved":false,"context_lines":[{"line_number":298,"context_line":""},{"line_number":299,"context_line":"# This is used to save the pmem namespace info temporarily"},{"line_number":300,"context_line":"PMEMNamespace \u003d collections.namedtuple(\u0027PMEMNamespace\u0027,"},{"line_number":301,"context_line":"        [\u0027label\u0027, \u0027name\u0027, \u0027dev\u0027, \u0027size\u0027,"},{"line_number":302,"context_line":"         \u0027align\u0027, \u0027numa_node\u0027])"},{"line_number":303,"context_line":""},{"line_number":304,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"7faddb67_11f936c7","line":301,"updated":"2019-07-08 22:05:02.000000000","message":"nit: join lines","commit_id":"b5bb5ada95b538c69cfd3c4d4bbcdc59f979f43c"},{"author":{"_account_id":23598,"name":"Zhong Luyao","email":"luyao.zhong@intel.com","username":"ZhongLuyao"},"change_message_id":"731203656f3f16c5eb783d64cc9cebb4c955e1ea","unresolved":false,"context_lines":[{"line_number":298,"context_line":""},{"line_number":299,"context_line":"# This is used to save the pmem namespace info temporarily"},{"line_number":300,"context_line":"PMEMNamespace \u003d collections.namedtuple(\u0027PMEMNamespace\u0027,"},{"line_number":301,"context_line":"        [\u0027label\u0027, \u0027name\u0027, \u0027dev\u0027, \u0027size\u0027,"},{"line_number":302,"context_line":"         \u0027align\u0027, \u0027numa_node\u0027])"},{"line_number":303,"context_line":""},{"line_number":304,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"7faddb67_ed3b40ce","line":301,"in_reply_to":"7faddb67_11f936c7","updated":"2019-07-10 10:07:05.000000000","message":"Done","commit_id":"b5bb5ada95b538c69cfd3c4d4bbcdc59f979f43c"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"c4237147fd77912bc330c35cf1a75f6b5432747e","unresolved":false,"context_lines":[{"line_number":299,"context_line":"# This is used to save the pmem namespace info temporarily"},{"line_number":300,"context_line":"PMEMNamespace \u003d collections.namedtuple(\u0027PMEMNamespace\u0027,"},{"line_number":301,"context_line":"        [\u0027label\u0027, \u0027name\u0027, \u0027dev\u0027, \u0027size\u0027,"},{"line_number":302,"context_line":"         \u0027align\u0027, \u0027numa_node\u0027])"},{"line_number":303,"context_line":""},{"line_number":304,"context_line":""},{"line_number":305,"context_line":"class LibvirtDriver(driver.ComputeDriver):"}],"source_content_type":"text/x-python","patch_set":13,"id":"7faddb67_59b57ecc","line":302,"range":{"start_line":302,"start_character":18,"end_line":302,"end_character":29},"updated":"2019-07-10 05:57:10.000000000","message":"nit, currently, we don\u0027t need this.","commit_id":"b5bb5ada95b538c69cfd3c4d4bbcdc59f979f43c"},{"author":{"_account_id":23598,"name":"Zhong Luyao","email":"luyao.zhong@intel.com","username":"ZhongLuyao"},"change_message_id":"731203656f3f16c5eb783d64cc9cebb4c955e1ea","unresolved":false,"context_lines":[{"line_number":299,"context_line":"# This is used to save the pmem namespace info temporarily"},{"line_number":300,"context_line":"PMEMNamespace \u003d collections.namedtuple(\u0027PMEMNamespace\u0027,"},{"line_number":301,"context_line":"        [\u0027label\u0027, \u0027name\u0027, \u0027dev\u0027, \u0027size\u0027,"},{"line_number":302,"context_line":"         \u0027align\u0027, \u0027numa_node\u0027])"},{"line_number":303,"context_line":""},{"line_number":304,"context_line":""},{"line_number":305,"context_line":"class LibvirtDriver(driver.ComputeDriver):"}],"source_content_type":"text/x-python","patch_set":13,"id":"7faddb67_0d37bce5","line":302,"range":{"start_line":302,"start_character":18,"end_line":302,"end_character":29},"in_reply_to":"7faddb67_59b57ecc","updated":"2019-07-10 10:07:05.000000000","message":"Done","commit_id":"b5bb5ada95b538c69cfd3c4d4bbcdc59f979f43c"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"c4237147fd77912bc330c35cf1a75f6b5432747e","unresolved":false,"context_lines":[{"line_number":431,"context_line":"        self.provider_tree \u003d None"},{"line_number":432,"context_line":""},{"line_number":433,"context_line":"        # get pmem namespaces info"},{"line_number":434,"context_line":"        self._pmem_namespaces \u003d self._get_pmem_namespaces()"},{"line_number":435,"context_line":""},{"line_number":436,"context_line":"    def _get_pmem_namespaces(self):"},{"line_number":437,"context_line":"        # pmem namespace dict {ns_name:PMEMNamespace,...}"}],"source_content_type":"text/x-python","patch_set":13,"id":"7faddb67_d9d5eee6","line":434,"range":{"start_line":434,"start_character":8,"end_line":434,"end_character":59},"updated":"2019-07-10 05:57:10.000000000","message":"I think you need to check the libvirt version and qemu version in the beginning of the check. And has a hard failure if the version doesn\u0027t match and the vpmem configure option set.","commit_id":"b5bb5ada95b538c69cfd3c4d4bbcdc59f979f43c"},{"author":{"_account_id":23598,"name":"Zhong Luyao","email":"luyao.zhong@intel.com","username":"ZhongLuyao"},"change_message_id":"731203656f3f16c5eb783d64cc9cebb4c955e1ea","unresolved":false,"context_lines":[{"line_number":431,"context_line":"        self.provider_tree \u003d None"},{"line_number":432,"context_line":""},{"line_number":433,"context_line":"        # get pmem namespaces info"},{"line_number":434,"context_line":"        self._pmem_namespaces \u003d self._get_pmem_namespaces()"},{"line_number":435,"context_line":""},{"line_number":436,"context_line":"    def _get_pmem_namespaces(self):"},{"line_number":437,"context_line":"        # pmem namespace dict {ns_name:PMEMNamespace,...}"}],"source_content_type":"text/x-python","patch_set":13,"id":"7faddb67_0d933ca5","line":434,"range":{"start_line":434,"start_character":8,"end_line":434,"end_character":59},"in_reply_to":"7faddb67_d9d5eee6","updated":"2019-07-10 10:07:05.000000000","message":"Do you mean doing the libvirt and qemu check in _check_pmem_namespace? This is gathering namespaces info.","commit_id":"b5bb5ada95b538c69cfd3c4d4bbcdc59f979f43c"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"f0534f02f0a958a98fb1eee7df5822097280284c","unresolved":false,"context_lines":[{"line_number":437,"context_line":"        # pmem namespace dict {ns_name:PMEMNamespace,...}"},{"line_number":438,"context_line":"        pmems_by_name \u003d {}"},{"line_number":439,"context_line":"        # pmem name list group by label"},{"line_number":440,"context_line":"        pmem_names_by_label \u003d collections.defaultdict(list)"},{"line_number":441,"context_line":"        if CONF.libvirt.pmem_namespaces:"},{"line_number":442,"context_line":"            pmems_host \u003d self._get_pmem_namespaces_on_host()"},{"line_number":443,"context_line":"            for ns_conf in CONF.libvirt.pmem_namespaces:"}],"source_content_type":"text/x-python","patch_set":13,"id":"7faddb67_71a2ea4d","line":440,"range":{"start_line":440,"start_character":54,"end_line":440,"end_character":58},"updated":"2019-07-08 22:05:02.000000000","message":"I would make this a set instead of a list, for faster lookups","commit_id":"b5bb5ada95b538c69cfd3c4d4bbcdc59f979f43c"},{"author":{"_account_id":23598,"name":"Zhong Luyao","email":"luyao.zhong@intel.com","username":"ZhongLuyao"},"change_message_id":"731203656f3f16c5eb783d64cc9cebb4c955e1ea","unresolved":false,"context_lines":[{"line_number":437,"context_line":"        # pmem namespace dict {ns_name:PMEMNamespace,...}"},{"line_number":438,"context_line":"        pmems_by_name \u003d {}"},{"line_number":439,"context_line":"        # pmem name list group by label"},{"line_number":440,"context_line":"        pmem_names_by_label \u003d collections.defaultdict(list)"},{"line_number":441,"context_line":"        if CONF.libvirt.pmem_namespaces:"},{"line_number":442,"context_line":"            pmems_host \u003d self._get_pmem_namespaces_on_host()"},{"line_number":443,"context_line":"            for ns_conf in CONF.libvirt.pmem_namespaces:"}],"source_content_type":"text/x-python","patch_set":13,"id":"7faddb67_8d508c0c","line":440,"range":{"start_line":440,"start_character":54,"end_line":440,"end_character":58},"in_reply_to":"7faddb67_71a2ea4d","updated":"2019-07-10 10:07:05.000000000","message":"Done","commit_id":"b5bb5ada95b538c69cfd3c4d4bbcdc59f979f43c"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"f0534f02f0a958a98fb1eee7df5822097280284c","unresolved":false,"context_lines":[{"line_number":438,"context_line":"        pmems_by_name \u003d {}"},{"line_number":439,"context_line":"        # pmem name list group by label"},{"line_number":440,"context_line":"        pmem_names_by_label \u003d collections.defaultdict(list)"},{"line_number":441,"context_line":"        if CONF.libvirt.pmem_namespaces:"},{"line_number":442,"context_line":"            pmems_host \u003d self._get_pmem_namespaces_on_host()"},{"line_number":443,"context_line":"            for ns_conf in CONF.libvirt.pmem_namespaces:"},{"line_number":444,"context_line":"                ns_label \u003d ns_conf.split(\":\")[0].strip()"}],"source_content_type":"text/x-python","patch_set":13,"id":"7faddb67_71cf4ab0","line":441,"range":{"start_line":441,"start_character":8,"end_line":441,"end_character":40},"updated":"2019-07-08 22:05:02.000000000","message":"I would just put this first\n\n if not CONF.libvirt.pmem_namespaces:\n     return {}, {}\n\nand save an indent.","commit_id":"b5bb5ada95b538c69cfd3c4d4bbcdc59f979f43c"},{"author":{"_account_id":23598,"name":"Zhong Luyao","email":"luyao.zhong@intel.com","username":"ZhongLuyao"},"change_message_id":"731203656f3f16c5eb783d64cc9cebb4c955e1ea","unresolved":false,"context_lines":[{"line_number":438,"context_line":"        pmems_by_name \u003d {}"},{"line_number":439,"context_line":"        # pmem name list group by label"},{"line_number":440,"context_line":"        pmem_names_by_label \u003d collections.defaultdict(list)"},{"line_number":441,"context_line":"        if CONF.libvirt.pmem_namespaces:"},{"line_number":442,"context_line":"            pmems_host \u003d self._get_pmem_namespaces_on_host()"},{"line_number":443,"context_line":"            for ns_conf in CONF.libvirt.pmem_namespaces:"},{"line_number":444,"context_line":"                ns_label \u003d ns_conf.split(\":\")[0].strip()"}],"source_content_type":"text/x-python","patch_set":13,"id":"7faddb67_2d571805","line":441,"range":{"start_line":441,"start_character":8,"end_line":441,"end_character":40},"in_reply_to":"7faddb67_71cf4ab0","updated":"2019-07-10 10:07:05.000000000","message":"Done","commit_id":"b5bb5ada95b538c69cfd3c4d4bbcdc59f979f43c"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"f0534f02f0a958a98fb1eee7df5822097280284c","unresolved":false,"context_lines":[{"line_number":441,"context_line":"        if CONF.libvirt.pmem_namespaces:"},{"line_number":442,"context_line":"            pmems_host \u003d self._get_pmem_namespaces_on_host()"},{"line_number":443,"context_line":"            for ns_conf in CONF.libvirt.pmem_namespaces:"},{"line_number":444,"context_line":"                ns_label \u003d ns_conf.split(\":\")[0].strip()"},{"line_number":445,"context_line":"                ns_names \u003d ns_conf.split(\":\")[1].split(\"|\")"},{"line_number":446,"context_line":"                for ns_name in ns_names:"},{"line_number":447,"context_line":"                    if pmems_host.get(ns_name):"},{"line_number":448,"context_line":"                        pmem_ns \u003d pmems_host[ns_name]"}],"source_content_type":"text/x-python","patch_set":13,"id":"7faddb67_d1f07ecc","line":445,"range":{"start_line":444,"start_character":16,"end_line":445,"end_character":59},"updated":"2019-07-08 22:05:02.000000000","message":"You should do each split only once, and use maxsplit to make sure you don\u0027t break (or rather, break predictably) if there\u0027s a : in the ns_names portion.\n\n ns_label, ns_names \u003d ns_conf.split(\":\", 1)\n ns_names \u003d ns_names.split(\"|\")\n\n\u003d\u003d\u003d\u003d\n\nAlso consider checking for duplicates. (You could ignore/collapse them, but it\u0027s probably better to generate an error since it\u0027s probably not what was intended by the operator.)","commit_id":"b5bb5ada95b538c69cfd3c4d4bbcdc59f979f43c"},{"author":{"_account_id":23598,"name":"Zhong Luyao","email":"luyao.zhong@intel.com","username":"ZhongLuyao"},"change_message_id":"731203656f3f16c5eb783d64cc9cebb4c955e1ea","unresolved":false,"context_lines":[{"line_number":441,"context_line":"        if CONF.libvirt.pmem_namespaces:"},{"line_number":442,"context_line":"            pmems_host \u003d self._get_pmem_namespaces_on_host()"},{"line_number":443,"context_line":"            for ns_conf in CONF.libvirt.pmem_namespaces:"},{"line_number":444,"context_line":"                ns_label \u003d ns_conf.split(\":\")[0].strip()"},{"line_number":445,"context_line":"                ns_names \u003d ns_conf.split(\":\")[1].split(\"|\")"},{"line_number":446,"context_line":"                for ns_name in ns_names:"},{"line_number":447,"context_line":"                    if pmems_host.get(ns_name):"},{"line_number":448,"context_line":"                        pmem_ns \u003d pmems_host[ns_name]"}],"source_content_type":"text/x-python","patch_set":13,"id":"7faddb67_4d5a942a","line":445,"range":{"start_line":444,"start_character":16,"end_line":445,"end_character":59},"in_reply_to":"7faddb67_d1f07ecc","updated":"2019-07-10 10:07:05.000000000","message":"Done","commit_id":"b5bb5ada95b538c69cfd3c4d4bbcdc59f979f43c"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"c4237147fd77912bc330c35cf1a75f6b5432747e","unresolved":false,"context_lines":[{"line_number":441,"context_line":"        if CONF.libvirt.pmem_namespaces:"},{"line_number":442,"context_line":"            pmems_host \u003d self._get_pmem_namespaces_on_host()"},{"line_number":443,"context_line":"            for ns_conf in CONF.libvirt.pmem_namespaces:"},{"line_number":444,"context_line":"                ns_label \u003d ns_conf.split(\":\")[0].strip()"},{"line_number":445,"context_line":"                ns_names \u003d ns_conf.split(\":\")[1].split(\"|\")"},{"line_number":446,"context_line":"                for ns_name in ns_names:"},{"line_number":447,"context_line":"                    if pmems_host.get(ns_name):"},{"line_number":448,"context_line":"                        pmem_ns \u003d pmems_host[ns_name]"}],"source_content_type":"text/x-python","patch_set":13,"id":"7faddb67_f93eaa27","line":445,"range":{"start_line":444,"start_character":16,"end_line":445,"end_character":59},"in_reply_to":"7faddb67_d1f07ecc","updated":"2019-07-10 05:57:10.000000000","message":"you also need to check if there is no \":\", then you will get a ValueError if you use Eric\u0027s method. You can catch that exception and print a friendly error message.","commit_id":"b5bb5ada95b538c69cfd3c4d4bbcdc59f979f43c"},{"author":{"_account_id":23598,"name":"Zhong Luyao","email":"luyao.zhong@intel.com","username":"ZhongLuyao"},"change_message_id":"731203656f3f16c5eb783d64cc9cebb4c955e1ea","unresolved":false,"context_lines":[{"line_number":441,"context_line":"        if CONF.libvirt.pmem_namespaces:"},{"line_number":442,"context_line":"            pmems_host \u003d self._get_pmem_namespaces_on_host()"},{"line_number":443,"context_line":"            for ns_conf in CONF.libvirt.pmem_namespaces:"},{"line_number":444,"context_line":"                ns_label \u003d ns_conf.split(\":\")[0].strip()"},{"line_number":445,"context_line":"                ns_names \u003d ns_conf.split(\":\")[1].split(\"|\")"},{"line_number":446,"context_line":"                for ns_name in ns_names:"},{"line_number":447,"context_line":"                    if pmems_host.get(ns_name):"},{"line_number":448,"context_line":"                        pmem_ns \u003d pmems_host[ns_name]"}],"source_content_type":"text/x-python","patch_set":13,"id":"7faddb67_ed402038","line":445,"range":{"start_line":444,"start_character":16,"end_line":445,"end_character":59},"in_reply_to":"7faddb67_f93eaa27","updated":"2019-07-10 10:07:05.000000000","message":"Done","commit_id":"b5bb5ada95b538c69cfd3c4d4bbcdc59f979f43c"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"f0534f02f0a958a98fb1eee7df5822097280284c","unresolved":false,"context_lines":[{"line_number":444,"context_line":"                ns_label \u003d ns_conf.split(\":\")[0].strip()"},{"line_number":445,"context_line":"                ns_names \u003d ns_conf.split(\":\")[1].split(\"|\")"},{"line_number":446,"context_line":"                for ns_name in ns_names:"},{"line_number":447,"context_line":"                    if pmems_host.get(ns_name):"},{"line_number":448,"context_line":"                        pmem_ns \u003d pmems_host[ns_name]"},{"line_number":449,"context_line":"                        pmem_ns_updated \u003d PMEMNamespace("},{"line_number":450,"context_line":"                                label\u003dns_label,"}],"source_content_type":"text/x-python","patch_set":13,"id":"7faddb67_51b6cefc","line":447,"range":{"start_line":447,"start_character":20,"end_line":447,"end_character":47},"updated":"2019-07-08 22:05:02.000000000","message":"again I would reverse this\n\n if ns_name not in pmems_host:\n     raise ...\n\nand then unindent the rest","commit_id":"b5bb5ada95b538c69cfd3c4d4bbcdc59f979f43c"},{"author":{"_account_id":23598,"name":"Zhong Luyao","email":"luyao.zhong@intel.com","username":"ZhongLuyao"},"change_message_id":"731203656f3f16c5eb783d64cc9cebb4c955e1ea","unresolved":false,"context_lines":[{"line_number":444,"context_line":"                ns_label \u003d ns_conf.split(\":\")[0].strip()"},{"line_number":445,"context_line":"                ns_names \u003d ns_conf.split(\":\")[1].split(\"|\")"},{"line_number":446,"context_line":"                for ns_name in ns_names:"},{"line_number":447,"context_line":"                    if pmems_host.get(ns_name):"},{"line_number":448,"context_line":"                        pmem_ns \u003d pmems_host[ns_name]"},{"line_number":449,"context_line":"                        pmem_ns_updated \u003d PMEMNamespace("},{"line_number":450,"context_line":"                                label\u003dns_label,"}],"source_content_type":"text/x-python","patch_set":13,"id":"7faddb67_0d3c9cbd","line":447,"range":{"start_line":447,"start_character":20,"end_line":447,"end_character":47},"in_reply_to":"7faddb67_51b6cefc","updated":"2019-07-10 10:07:05.000000000","message":"Done","commit_id":"b5bb5ada95b538c69cfd3c4d4bbcdc59f979f43c"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"f0534f02f0a958a98fb1eee7df5822097280284c","unresolved":false,"context_lines":[{"line_number":446,"context_line":"                for ns_name in ns_names:"},{"line_number":447,"context_line":"                    if pmems_host.get(ns_name):"},{"line_number":448,"context_line":"                        pmem_ns \u003d pmems_host[ns_name]"},{"line_number":449,"context_line":"                        pmem_ns_updated \u003d PMEMNamespace("},{"line_number":450,"context_line":"                                label\u003dns_label,"},{"line_number":451,"context_line":"                                name\u003dpmem_ns.name,"},{"line_number":452,"context_line":"                                dev\u003dpmem_ns.dev,"}],"source_content_type":"text/x-python","patch_set":13,"id":"7faddb67_918a0619","line":449,"range":{"start_line":449,"start_character":24,"end_line":449,"end_character":39},"updated":"2019-07-08 22:05:02.000000000","message":"use namedtuple._replace here instead\n\n pmems_by_name[ns_name] \u003d pmems_host[ns_name]._replace(label\u003dns_label)","commit_id":"b5bb5ada95b538c69cfd3c4d4bbcdc59f979f43c"},{"author":{"_account_id":23598,"name":"Zhong Luyao","email":"luyao.zhong@intel.com","username":"ZhongLuyao"},"change_message_id":"731203656f3f16c5eb783d64cc9cebb4c955e1ea","unresolved":false,"context_lines":[{"line_number":446,"context_line":"                for ns_name in ns_names:"},{"line_number":447,"context_line":"                    if pmems_host.get(ns_name):"},{"line_number":448,"context_line":"                        pmem_ns \u003d pmems_host[ns_name]"},{"line_number":449,"context_line":"                        pmem_ns_updated \u003d PMEMNamespace("},{"line_number":450,"context_line":"                                label\u003dns_label,"},{"line_number":451,"context_line":"                                name\u003dpmem_ns.name,"},{"line_number":452,"context_line":"                                dev\u003dpmem_ns.dev,"}],"source_content_type":"text/x-python","patch_set":13,"id":"7faddb67_ad4a2852","line":449,"range":{"start_line":449,"start_character":24,"end_line":449,"end_character":39},"in_reply_to":"7faddb67_918a0619","updated":"2019-07-10 10:07:05.000000000","message":"Done","commit_id":"b5bb5ada95b538c69cfd3c4d4bbcdc59f979f43c"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"c4237147fd77912bc330c35cf1a75f6b5432747e","unresolved":false,"context_lines":[{"line_number":458,"context_line":"                    else:"},{"line_number":459,"context_line":"                        raise exception.PMEMNamespaceNotFound("},{"line_number":460,"context_line":"                                namespace\u003dns_name)"},{"line_number":461,"context_line":"        return pmems_by_name, pmem_names_by_label"},{"line_number":462,"context_line":""},{"line_number":463,"context_line":"    def _get_pmem_namespaces_on_host(self):"},{"line_number":464,"context_line":"        pmems_host \u003d {}"}],"source_content_type":"text/x-python","patch_set":13,"id":"7faddb67_f9554a51","line":461,"range":{"start_line":461,"start_character":8,"end_line":461,"end_character":49},"updated":"2019-07-10 05:57:10.000000000","message":"I prefer to put them into self._pmems_by_name, and self._pmem_names_by_label, instead of single one self.pmem_namespaces.","commit_id":"b5bb5ada95b538c69cfd3c4d4bbcdc59f979f43c"},{"author":{"_account_id":23598,"name":"Zhong Luyao","email":"luyao.zhong@intel.com","username":"ZhongLuyao"},"change_message_id":"731203656f3f16c5eb783d64cc9cebb4c955e1ea","unresolved":false,"context_lines":[{"line_number":458,"context_line":"                    else:"},{"line_number":459,"context_line":"                        raise exception.PMEMNamespaceNotFound("},{"line_number":460,"context_line":"                                namespace\u003dns_name)"},{"line_number":461,"context_line":"        return pmems_by_name, pmem_names_by_label"},{"line_number":462,"context_line":""},{"line_number":463,"context_line":"    def _get_pmem_namespaces_on_host(self):"},{"line_number":464,"context_line":"        pmems_host \u003d {}"}],"source_content_type":"text/x-python","patch_set":13,"id":"7faddb67_cde1a42c","line":461,"range":{"start_line":461,"start_character":8,"end_line":461,"end_character":49},"in_reply_to":"7faddb67_f9554a51","updated":"2019-07-10 10:07:05.000000000","message":"OK.I missed this comment and submit the new patch, will update this in next version.","commit_id":"b5bb5ada95b538c69cfd3c4d4bbcdc59f979f43c"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"f0534f02f0a958a98fb1eee7df5822097280284c","unresolved":false,"context_lines":[{"line_number":466,"context_line":"        for ns in nss:"},{"line_number":467,"context_line":"            if not ns.get(\u0027name\u0027):"},{"line_number":468,"context_line":"                continue"},{"line_number":469,"context_line":"            pmems_host[ns[\u0027name\u0027]] \u003d \\"},{"line_number":470,"context_line":"                PMEMNamespace(label\u003dNone,"},{"line_number":471,"context_line":"                              name\u003dns[\u0027name\u0027],"},{"line_number":472,"context_line":"                              dev\u003dns[\u0027daxregion\u0027][\u0027devices\u0027][0][\u0027chardev\u0027],"}],"source_content_type":"text/x-python","patch_set":13,"id":"7faddb67_117e1619","line":469,"range":{"start_line":469,"start_character":37,"end_line":469,"end_character":38},"updated":"2019-07-08 22:05:02.000000000","message":"avoid this backslash by putting PMEMNamespace( on this line and its kwargs below it","commit_id":"b5bb5ada95b538c69cfd3c4d4bbcdc59f979f43c"},{"author":{"_account_id":23598,"name":"Zhong Luyao","email":"luyao.zhong@intel.com","username":"ZhongLuyao"},"change_message_id":"731203656f3f16c5eb783d64cc9cebb4c955e1ea","unresolved":false,"context_lines":[{"line_number":466,"context_line":"        for ns in nss:"},{"line_number":467,"context_line":"            if not ns.get(\u0027name\u0027):"},{"line_number":468,"context_line":"                continue"},{"line_number":469,"context_line":"            pmems_host[ns[\u0027name\u0027]] \u003d \\"},{"line_number":470,"context_line":"                PMEMNamespace(label\u003dNone,"},{"line_number":471,"context_line":"                              name\u003dns[\u0027name\u0027],"},{"line_number":472,"context_line":"                              dev\u003dns[\u0027daxregion\u0027][\u0027devices\u0027][0][\u0027chardev\u0027],"}],"source_content_type":"text/x-python","patch_set":13,"id":"7faddb67_6dd2f05e","line":469,"range":{"start_line":469,"start_character":37,"end_line":469,"end_character":38},"in_reply_to":"7faddb67_117e1619","updated":"2019-07-10 10:07:05.000000000","message":"Done","commit_id":"b5bb5ada95b538c69cfd3c4d4bbcdc59f979f43c"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"f0534f02f0a958a98fb1eee7df5822097280284c","unresolved":false,"context_lines":[{"line_number":479,"context_line":"        assigned_pmem_names_by_label \u003d {}"},{"line_number":480,"context_line":"        vpmems \u003d []"},{"line_number":481,"context_line":"        for item in instances:"},{"line_number":482,"context_line":"            if isinstance(item, objects.Instance):"},{"line_number":483,"context_line":"                inst \u003d item"},{"line_number":484,"context_line":"            else:"},{"line_number":485,"context_line":"                inst \u003d objects.Instance.get_by_uuid("}],"source_content_type":"text/x-python","patch_set":13,"id":"7faddb67_f1c01a2d","line":482,"range":{"start_line":482,"start_character":12,"end_line":482,"end_character":50},"updated":"2019-07-08 22:05:02.000000000","message":"when is this possible?","commit_id":"b5bb5ada95b538c69cfd3c4d4bbcdc59f979f43c"},{"author":{"_account_id":23598,"name":"Zhong Luyao","email":"luyao.zhong@intel.com","username":"ZhongLuyao"},"change_message_id":"731203656f3f16c5eb783d64cc9cebb4c955e1ea","unresolved":false,"context_lines":[{"line_number":479,"context_line":"        assigned_pmem_names_by_label \u003d {}"},{"line_number":480,"context_line":"        vpmems \u003d []"},{"line_number":481,"context_line":"        for item in instances:"},{"line_number":482,"context_line":"            if isinstance(item, objects.Instance):"},{"line_number":483,"context_line":"                inst \u003d item"},{"line_number":484,"context_line":"            else:"},{"line_number":485,"context_line":"                inst \u003d objects.Instance.get_by_uuid("}],"source_content_type":"text/x-python","patch_set":13,"id":"7faddb67_6d3750b2","line":482,"range":{"start_line":482,"start_character":12,"end_line":482,"end_character":50},"in_reply_to":"7faddb67_f1c01a2d","updated":"2019-07-10 10:07:05.000000000","message":"I forgot to remove this, already update it.","commit_id":"b5bb5ada95b538c69cfd3c4d4bbcdc59f979f43c"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"f0534f02f0a958a98fb1eee7df5822097280284c","unresolved":false,"context_lines":[{"line_number":488,"context_line":"                vpmems.extend(inst.vpmems.vpmems)"},{"line_number":489,"context_line":"        for vpmem in vpmems:"},{"line_number":490,"context_line":"            if \u0027ns_name\u0027 in vpmem and vpmem.ns_name:"},{"line_number":491,"context_line":"                assigned_pmem_names_by_label.setdefault(vpmem.label, [])"},{"line_number":492,"context_line":"                assigned_pmem_names_by_label[vpmem.label].append(vpmem.ns_name)"},{"line_number":493,"context_line":"        return assigned_pmem_names_by_label"},{"line_number":494,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"7faddb67_51b80e75","line":491,"range":{"start_line":491,"start_character":69,"end_line":491,"end_character":71},"updated":"2019-07-08 22:05:02.000000000","message":"I would make this a set instead of a list, since you\u0027re using it for lookups.","commit_id":"b5bb5ada95b538c69cfd3c4d4bbcdc59f979f43c"},{"author":{"_account_id":23598,"name":"Zhong Luyao","email":"luyao.zhong@intel.com","username":"ZhongLuyao"},"change_message_id":"731203656f3f16c5eb783d64cc9cebb4c955e1ea","unresolved":false,"context_lines":[{"line_number":488,"context_line":"                vpmems.extend(inst.vpmems.vpmems)"},{"line_number":489,"context_line":"        for vpmem in vpmems:"},{"line_number":490,"context_line":"            if \u0027ns_name\u0027 in vpmem and vpmem.ns_name:"},{"line_number":491,"context_line":"                assigned_pmem_names_by_label.setdefault(vpmem.label, [])"},{"line_number":492,"context_line":"                assigned_pmem_names_by_label[vpmem.label].append(vpmem.ns_name)"},{"line_number":493,"context_line":"        return assigned_pmem_names_by_label"},{"line_number":494,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"7faddb67_8d3acc95","line":491,"range":{"start_line":491,"start_character":69,"end_line":491,"end_character":71},"in_reply_to":"7faddb67_51b80e75","updated":"2019-07-10 10:07:05.000000000","message":"Done","commit_id":"b5bb5ada95b538c69cfd3c4d4bbcdc59f979f43c"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"f0534f02f0a958a98fb1eee7df5822097280284c","unresolved":false,"context_lines":[{"line_number":486,"context_line":"                        context, item, expected_attrs\u003d[\u0027vpmems\u0027])"},{"line_number":487,"context_line":"            if \u0027vpmems\u0027 in inst and inst.vpmems:"},{"line_number":488,"context_line":"                vpmems.extend(inst.vpmems.vpmems)"},{"line_number":489,"context_line":"        for vpmem in vpmems:"},{"line_number":490,"context_line":"            if \u0027ns_name\u0027 in vpmem and vpmem.ns_name:"},{"line_number":491,"context_line":"                assigned_pmem_names_by_label.setdefault(vpmem.label, [])"},{"line_number":492,"context_line":"                assigned_pmem_names_by_label[vpmem.label].append(vpmem.ns_name)"},{"line_number":493,"context_line":"        return assigned_pmem_names_by_label"},{"line_number":494,"context_line":""},{"line_number":495,"context_line":"    def _get_volume_drivers(self):"}],"source_content_type":"text/x-python","patch_set":13,"id":"7faddb67_f14a5aaa","line":492,"range":{"start_line":489,"start_character":0,"end_line":492,"end_character":79},"updated":"2019-07-08 22:05:02.000000000","message":"seems like this could be within the foregoing conditional and you could get rid of the vpmems array","commit_id":"b5bb5ada95b538c69cfd3c4d4bbcdc59f979f43c"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"f0534f02f0a958a98fb1eee7df5822097280284c","unresolved":false,"context_lines":[{"line_number":600,"context_line":"                 {\u0027enabled\u0027: enabled, \u0027reason\u0027: reason})"},{"line_number":601,"context_line":"        self._set_host_enabled(enabled, reason)"},{"line_number":602,"context_line":""},{"line_number":603,"context_line":"    def _check_pmem_namespaces(self, context):"},{"line_number":604,"context_line":"        instance_domains \u003d self._host.list_instance_domains("},{"line_number":605,"context_line":"                only_running\u003dFalse)"},{"line_number":606,"context_line":"        instances \u003d [dom.UUIDString() for dom in instance_domains]"}],"source_content_type":"text/x-python","patch_set":13,"id":"7faddb67_b4029008","line":603,"range":{"start_line":603,"start_character":8,"end_line":603,"end_character":30},"updated":"2019-07-08 22:05:02.000000000","message":"Missing UT for this method.","commit_id":"b5bb5ada95b538c69cfd3c4d4bbcdc59f979f43c"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"f0534f02f0a958a98fb1eee7df5822097280284c","unresolved":false,"context_lines":[{"line_number":600,"context_line":"                 {\u0027enabled\u0027: enabled, \u0027reason\u0027: reason})"},{"line_number":601,"context_line":"        self._set_host_enabled(enabled, reason)"},{"line_number":602,"context_line":""},{"line_number":603,"context_line":"    def _check_pmem_namespaces(self, context):"},{"line_number":604,"context_line":"        instance_domains \u003d self._host.list_instance_domains("},{"line_number":605,"context_line":"                only_running\u003dFalse)"},{"line_number":606,"context_line":"        instances \u003d [dom.UUIDString() for dom in instance_domains]"}],"source_content_type":"text/x-python","patch_set":13,"id":"7faddb67_d1e4feae","line":603,"updated":"2019-07-08 22:05:02.000000000","message":"nts: this is making sure that, for every label:ns in every existing Instance, a corresponding label:ns existed in the CONF.","commit_id":"b5bb5ada95b538c69cfd3c4d4bbcdc59f979f43c"},{"author":{"_account_id":23598,"name":"Zhong Luyao","email":"luyao.zhong@intel.com","username":"ZhongLuyao"},"change_message_id":"731203656f3f16c5eb783d64cc9cebb4c955e1ea","unresolved":false,"context_lines":[{"line_number":600,"context_line":"                 {\u0027enabled\u0027: enabled, \u0027reason\u0027: reason})"},{"line_number":601,"context_line":"        self._set_host_enabled(enabled, reason)"},{"line_number":602,"context_line":""},{"line_number":603,"context_line":"    def _check_pmem_namespaces(self, context):"},{"line_number":604,"context_line":"        instance_domains \u003d self._host.list_instance_domains("},{"line_number":605,"context_line":"                only_running\u003dFalse)"},{"line_number":606,"context_line":"        instances \u003d [dom.UUIDString() for dom in instance_domains]"}],"source_content_type":"text/x-python","patch_set":13,"id":"7faddb67_4d44d41b","line":603,"range":{"start_line":603,"start_character":8,"end_line":603,"end_character":30},"in_reply_to":"7faddb67_b4029008","updated":"2019-07-10 10:07:05.000000000","message":"Done","commit_id":"b5bb5ada95b538c69cfd3c4d4bbcdc59f979f43c"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"c4237147fd77912bc330c35cf1a75f6b5432747e","unresolved":false,"context_lines":[{"line_number":608,"context_line":"                context, instances)"},{"line_number":609,"context_line":"        pmems, pmems_by_label \u003d self._pmem_namespaces"},{"line_number":610,"context_line":"        for label in assigned_pmems_by_label:"},{"line_number":611,"context_line":"            for assigned_pmem in assigned_pmems_by_label[label]:"},{"line_number":612,"context_line":"                if assigned_pmem not in pmems:"},{"line_number":613,"context_line":"                    raise exception.PMEMNamespaceConfigERROR("},{"line_number":614,"context_line":"                            assigned_pmem\u003dassigned_pmem)"}],"source_content_type":"text/x-python","patch_set":13,"id":"7faddb67_79c71a14","line":611,"range":{"start_line":611,"start_character":12,"end_line":611,"end_character":64},"updated":"2019-07-10 05:57:10.000000000","message":"If the label of assigned pmem is changed, that will be a problem for the resource consuming. We need to have a check on that.","commit_id":"b5bb5ada95b538c69cfd3c4d4bbcdc59f979f43c"},{"author":{"_account_id":23598,"name":"Zhong Luyao","email":"luyao.zhong@intel.com","username":"ZhongLuyao"},"change_message_id":"731203656f3f16c5eb783d64cc9cebb4c955e1ea","unresolved":false,"context_lines":[{"line_number":608,"context_line":"                context, instances)"},{"line_number":609,"context_line":"        pmems, pmems_by_label \u003d self._pmem_namespaces"},{"line_number":610,"context_line":"        for label in assigned_pmems_by_label:"},{"line_number":611,"context_line":"            for assigned_pmem in assigned_pmems_by_label[label]:"},{"line_number":612,"context_line":"                if assigned_pmem not in pmems:"},{"line_number":613,"context_line":"                    raise exception.PMEMNamespaceConfigERROR("},{"line_number":614,"context_line":"                            assigned_pmem\u003dassigned_pmem)"}],"source_content_type":"text/x-python","patch_set":13,"id":"7faddb67_ed4a6025","line":611,"range":{"start_line":611,"start_character":12,"end_line":611,"end_character":64},"in_reply_to":"7faddb67_79c71a14","updated":"2019-07-10 10:07:05.000000000","message":"Done","commit_id":"b5bb5ada95b538c69cfd3c4d4bbcdc59f979f43c"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"f0534f02f0a958a98fb1eee7df5822097280284c","unresolved":false,"context_lines":[{"line_number":608,"context_line":"                context, instances)"},{"line_number":609,"context_line":"        pmems, pmems_by_label \u003d self._pmem_namespaces"},{"line_number":610,"context_line":"        for label in assigned_pmems_by_label:"},{"line_number":611,"context_line":"            for assigned_pmem in assigned_pmems_by_label[label]:"},{"line_number":612,"context_line":"                if assigned_pmem not in pmems:"},{"line_number":613,"context_line":"                    raise exception.PMEMNamespaceConfigERROR("},{"line_number":614,"context_line":"                            assigned_pmem\u003dassigned_pmem)"},{"line_number":615,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"7faddb67_d1595e5a","line":612,"range":{"start_line":611,"start_character":0,"end_line":612,"end_character":46},"updated":"2019-07-08 22:05:02.000000000","message":"ugh.\n\nYou went through all the trouble to create pmems_by_label in __init__, why not use it here? It\u0027s in the exact same shape as assigned_pmems_by_label.\n\nAssuming you take the advice above about using sets instead of lists, this algorithm would become:\n\n for label, namespaces in assigned_pmems_by_label.items():\n     if label not in pmems_by_label:\n         raise ...\n     if not namespaces.issubset(pmems_by_label[label]):\n         raise ...\n\nor similar","commit_id":"b5bb5ada95b538c69cfd3c4d4bbcdc59f979f43c"},{"author":{"_account_id":23598,"name":"Zhong Luyao","email":"luyao.zhong@intel.com","username":"ZhongLuyao"},"change_message_id":"731203656f3f16c5eb783d64cc9cebb4c955e1ea","unresolved":false,"context_lines":[{"line_number":608,"context_line":"                context, instances)"},{"line_number":609,"context_line":"        pmems, pmems_by_label \u003d self._pmem_namespaces"},{"line_number":610,"context_line":"        for label in assigned_pmems_by_label:"},{"line_number":611,"context_line":"            for assigned_pmem in assigned_pmems_by_label[label]:"},{"line_number":612,"context_line":"                if assigned_pmem not in pmems:"},{"line_number":613,"context_line":"                    raise exception.PMEMNamespaceConfigERROR("},{"line_number":614,"context_line":"                            assigned_pmem\u003dassigned_pmem)"},{"line_number":615,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"7faddb67_ad5468cb","line":612,"range":{"start_line":611,"start_character":0,"end_line":612,"end_character":46},"in_reply_to":"7faddb67_d1595e5a","updated":"2019-07-10 10:07:05.000000000","message":"Done","commit_id":"b5bb5ada95b538c69cfd3c4d4bbcdc59f979f43c"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"9bddbd2af7447d7dac18e6466d51e1dcacfdef20","unresolved":false,"context_lines":[{"line_number":429,"context_line":""},{"line_number":430,"context_line":"    def _get_pmem_namespaces(self):"},{"line_number":431,"context_line":"        if \u0027pmem_namespaces\u0027 not in CONF.libvirt or \\"},{"line_number":432,"context_line":"                not CONF.libvirt.pmem_namespaces:"},{"line_number":433,"context_line":"            return {}, {}"},{"line_number":434,"context_line":"        # pmem namespace dict {ns_name:PMEMNamespace,...}"},{"line_number":435,"context_line":"        pmems_by_name \u003d {}"}],"source_content_type":"text/x-python","patch_set":14,"id":"7faddb67_67bc44bb","line":432,"range":{"start_line":432,"start_character":20,"end_line":432,"end_character":48},"updated":"2019-07-10 17:20:32.000000000","message":"This is not defined in this patch, nor any previous one that I know of?","commit_id":"7226501c202eb3a78ed64e066435f0145b555eb6"},{"author":{"_account_id":23598,"name":"Zhong Luyao","email":"luyao.zhong@intel.com","username":"ZhongLuyao"},"change_message_id":"c210c2b1b540127387a893e4e8bed0d983ea82fb","unresolved":false,"context_lines":[{"line_number":429,"context_line":""},{"line_number":430,"context_line":"    def _get_pmem_namespaces(self):"},{"line_number":431,"context_line":"        if \u0027pmem_namespaces\u0027 not in CONF.libvirt or \\"},{"line_number":432,"context_line":"                not CONF.libvirt.pmem_namespaces:"},{"line_number":433,"context_line":"            return {}, {}"},{"line_number":434,"context_line":"        # pmem namespace dict {ns_name:PMEMNamespace,...}"},{"line_number":435,"context_line":"        pmems_by_name \u003d {}"}],"source_content_type":"text/x-python","patch_set":14,"id":"7faddb67_c738873e","line":432,"range":{"start_line":432,"start_character":20,"end_line":432,"end_character":48},"in_reply_to":"7faddb67_67bc44bb","updated":"2019-07-11 14:28:31.000000000","message":"As I replied on commit message, we will introduce this option at last.","commit_id":"7226501c202eb3a78ed64e066435f0145b555eb6"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"e8e2b1925caf3e064c86139de73b77e4ed045b25","unresolved":false,"context_lines":[{"line_number":429,"context_line":""},{"line_number":430,"context_line":"    def _get_pmem_namespaces(self):"},{"line_number":431,"context_line":"        if \u0027pmem_namespaces\u0027 not in CONF.libvirt or \\"},{"line_number":432,"context_line":"                not CONF.libvirt.pmem_namespaces:"},{"line_number":433,"context_line":"            return {}, {}"},{"line_number":434,"context_line":"        # pmem namespace dict {ns_name:PMEMNamespace,...}"},{"line_number":435,"context_line":"        pmems_by_name \u003d {}"}],"source_content_type":"text/x-python","patch_set":14,"id":"7faddb67_0003e50e","line":432,"range":{"start_line":432,"start_character":20,"end_line":432,"end_character":48},"in_reply_to":"7faddb67_c738873e","updated":"2019-07-11 15:50:45.000000000","message":"You should not reference in code until it exists. So, create a method that will return the parsed config value. In this patch, it may return an empty value. Patch that in your tests to return the sample data. In the patch where you add the config, flesh out that method to actually do the work.","commit_id":"7226501c202eb3a78ed64e066435f0145b555eb6"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"9bddbd2af7447d7dac18e6466d51e1dcacfdef20","unresolved":false,"context_lines":[{"line_number":430,"context_line":"    def _get_pmem_namespaces(self):"},{"line_number":431,"context_line":"        if \u0027pmem_namespaces\u0027 not in CONF.libvirt or \\"},{"line_number":432,"context_line":"                not CONF.libvirt.pmem_namespaces:"},{"line_number":433,"context_line":"            return {}, {}"},{"line_number":434,"context_line":"        # pmem namespace dict {ns_name:PMEMNamespace,...}"},{"line_number":435,"context_line":"        pmems_by_name \u003d {}"},{"line_number":436,"context_line":"        # pmem names group by label"}],"source_content_type":"text/x-python","patch_set":14,"id":"7faddb67_6709a4db","line":433,"updated":"2019-07-10 17:20:32.000000000","message":"This is not tested","commit_id":"7226501c202eb3a78ed64e066435f0145b555eb6"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"9bddbd2af7447d7dac18e6466d51e1dcacfdef20","unresolved":false,"context_lines":[{"line_number":440,"context_line":"            try:"},{"line_number":441,"context_line":"                ns_label, ns_names \u003d ns_conf.split(\":\", 1)"},{"line_number":442,"context_line":"            except ValueError:"},{"line_number":443,"context_line":"                reason \u003d _(\"The configuration doesn\u0027t follow the format\")"},{"line_number":444,"context_line":"                raise exception.PMEMNamespaceConfigInvalid("},{"line_number":445,"context_line":"                        reason\u003dreason)"},{"line_number":446,"context_line":"            ns_names \u003d ns_names.split(\"|\")"}],"source_content_type":"text/x-python","patch_set":14,"id":"7faddb67_a7c1dc30","line":443,"range":{"start_line":443,"start_character":28,"end_line":443,"end_character":71},"updated":"2019-07-10 17:20:32.000000000","message":"s/doesn\u0027t/does not/\n\nand\n\ns/follow the/conform to the required/\n\nAlso, I hope that wherever the config is defined and documented, that this complex formatting is explained in extreme detail.","commit_id":"7226501c202eb3a78ed64e066435f0145b555eb6"},{"author":{"_account_id":23598,"name":"Zhong Luyao","email":"luyao.zhong@intel.com","username":"ZhongLuyao"},"change_message_id":"c210c2b1b540127387a893e4e8bed0d983ea82fb","unresolved":false,"context_lines":[{"line_number":440,"context_line":"            try:"},{"line_number":441,"context_line":"                ns_label, ns_names \u003d ns_conf.split(\":\", 1)"},{"line_number":442,"context_line":"            except ValueError:"},{"line_number":443,"context_line":"                reason \u003d _(\"The configuration doesn\u0027t follow the format\")"},{"line_number":444,"context_line":"                raise exception.PMEMNamespaceConfigInvalid("},{"line_number":445,"context_line":"                        reason\u003dreason)"},{"line_number":446,"context_line":"            ns_names \u003d ns_names.split(\"|\")"}],"source_content_type":"text/x-python","patch_set":14,"id":"7faddb67_e77903fc","line":443,"range":{"start_line":443,"start_character":28,"end_line":443,"end_character":71},"in_reply_to":"7faddb67_a7c1dc30","updated":"2019-07-11 14:28:31.000000000","message":"We will give details along with the patch of introducing new configuration option.","commit_id":"7226501c202eb3a78ed64e066435f0145b555eb6"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"e8e2b1925caf3e064c86139de73b77e4ed045b25","unresolved":false,"context_lines":[{"line_number":440,"context_line":"            try:"},{"line_number":441,"context_line":"                ns_label, ns_names \u003d ns_conf.split(\":\", 1)"},{"line_number":442,"context_line":"            except ValueError:"},{"line_number":443,"context_line":"                reason \u003d _(\"The configuration doesn\u0027t follow the format\")"},{"line_number":444,"context_line":"                raise exception.PMEMNamespaceConfigInvalid("},{"line_number":445,"context_line":"                        reason\u003dreason)"},{"line_number":446,"context_line":"            ns_names \u003d ns_names.split(\"|\")"}],"source_content_type":"text/x-python","patch_set":14,"id":"7faddb67_a009b12c","line":443,"range":{"start_line":443,"start_character":28,"end_line":443,"end_character":71},"in_reply_to":"7faddb67_e77903fc","updated":"2019-07-11 15:50:45.000000000","message":"The method that returns the config content should do all the parsing, and thus it should do all the sanity checking and have this in there.","commit_id":"7226501c202eb3a78ed64e066435f0145b555eb6"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"9bddbd2af7447d7dac18e6466d51e1dcacfdef20","unresolved":false,"context_lines":[{"line_number":461,"context_line":""},{"line_number":462,"context_line":"    def _get_pmem_namespaces_on_host(self):"},{"line_number":463,"context_line":"        pmems_host \u003d {}"},{"line_number":464,"context_line":"        nss \u003d jsonutils.loads(nova.privsep.libvirt.get_pmem_namespaces())"},{"line_number":465,"context_line":"        for ns in nss:"},{"line_number":466,"context_line":"            if not ns.get(\u0027name\u0027):"},{"line_number":467,"context_line":"                continue"}],"source_content_type":"text/x-python","patch_set":14,"id":"7faddb67_a7febcab","line":464,"updated":"2019-07-10 17:20:32.000000000","message":"You need to handle the case where the command doesn\u0027t return valid json. This would be the case if the binary isn\u0027t on the system, or fails to run, etc.","commit_id":"7226501c202eb3a78ed64e066435f0145b555eb6"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"9bddbd2af7447d7dac18e6466d51e1dcacfdef20","unresolved":false,"context_lines":[{"line_number":467,"context_line":"                continue"},{"line_number":468,"context_line":"            pmems_host[ns[\u0027name\u0027]] \u003d PMEMNamespace("},{"line_number":469,"context_line":"                    label\u003dNone,"},{"line_number":470,"context_line":"                    name\u003dns[\u0027name\u0027],"},{"line_number":471,"context_line":"                    dev\u003dns[\u0027daxregion\u0027][\u0027devices\u0027][0][\u0027chardev\u0027],"},{"line_number":472,"context_line":"                    size\u003dns[\u0027size\u0027],"},{"line_number":473,"context_line":"                    align\u003dns[\u0027daxregion\u0027][\u0027align\u0027])"},{"line_number":474,"context_line":"        return pmems_host"},{"line_number":475,"context_line":""},{"line_number":476,"context_line":"    def _get_assigned_pmem_names_by_label(self, context, instances):"}],"source_content_type":"text/x-python","patch_set":14,"id":"7faddb67_871ce012","line":473,"range":{"start_line":470,"start_character":1,"end_line":473,"end_character":51},"updated":"2019-07-10 17:20:32.000000000","message":"All of this can fail with KeyError if the output from your command isn\u0027t what you expect. You should wrap all of this with an exception handler to report that the command didn\u0027t return expected output format.","commit_id":"7226501c202eb3a78ed64e066435f0145b555eb6"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"9bddbd2af7447d7dac18e6466d51e1dcacfdef20","unresolved":false,"context_lines":[{"line_number":473,"context_line":"                    align\u003dns[\u0027daxregion\u0027][\u0027align\u0027])"},{"line_number":474,"context_line":"        return pmems_host"},{"line_number":475,"context_line":""},{"line_number":476,"context_line":"    def _get_assigned_pmem_names_by_label(self, context, instances):"},{"line_number":477,"context_line":"        assigned_pmem_names_by_label \u003d collections.defaultdict(set)"},{"line_number":478,"context_line":"        vpmems \u003d []"},{"line_number":479,"context_line":"        for item in instances:"}],"source_content_type":"text/x-python","patch_set":14,"id":"7faddb67_e7e27401","line":476,"range":{"start_line":476,"start_character":57,"end_line":476,"end_character":66},"updated":"2019-07-10 17:20:32.000000000","message":"instance_uuids","commit_id":"7226501c202eb3a78ed64e066435f0145b555eb6"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"9bddbd2af7447d7dac18e6466d51e1dcacfdef20","unresolved":false,"context_lines":[{"line_number":476,"context_line":"    def _get_assigned_pmem_names_by_label(self, context, instances):"},{"line_number":477,"context_line":"        assigned_pmem_names_by_label \u003d collections.defaultdict(set)"},{"line_number":478,"context_line":"        vpmems \u003d []"},{"line_number":479,"context_line":"        for item in instances:"},{"line_number":480,"context_line":"            inst \u003d objects.Instance.get_by_uuid("},{"line_number":481,"context_line":"                    context, item, expected_attrs\u003d[\u0027vpmems\u0027])"},{"line_number":482,"context_line":"            if \u0027vpmems\u0027 in inst and inst.vpmems:"}],"source_content_type":"text/x-python","patch_set":14,"id":"7faddb67_27e16cff","line":479,"range":{"start_line":479,"start_character":12,"end_line":479,"end_character":16},"updated":"2019-07-10 17:20:32.000000000","message":"instance_uuid, for clarity.","commit_id":"7226501c202eb3a78ed64e066435f0145b555eb6"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"9bddbd2af7447d7dac18e6466d51e1dcacfdef20","unresolved":false,"context_lines":[{"line_number":482,"context_line":"            if \u0027vpmems\u0027 in inst and inst.vpmems:"},{"line_number":483,"context_line":"                vpmems.extend(inst.vpmems.vpmems)"},{"line_number":484,"context_line":"        for vpmem in vpmems:"},{"line_number":485,"context_line":"            if \u0027ns_name\u0027 in vpmem and vpmem.ns_name:"},{"line_number":486,"context_line":"                assigned_pmem_names_by_label[vpmem.label].add(vpmem.ns_name)"},{"line_number":487,"context_line":"        return assigned_pmem_names_by_label"},{"line_number":488,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"7faddb67_47bd88d6","line":485,"range":{"start_line":485,"start_character":12,"end_line":485,"end_character":51},"updated":"2019-07-10 17:20:32.000000000","message":"Per my comment earlier, if these weren\u0027t nullable, you wouldn\u0027t need this pedantry. Also, when could ns_name be unset?","commit_id":"7226501c202eb3a78ed64e066435f0145b555eb6"},{"author":{"_account_id":23598,"name":"Zhong Luyao","email":"luyao.zhong@intel.com","username":"ZhongLuyao"},"change_message_id":"c210c2b1b540127387a893e4e8bed0d983ea82fb","unresolved":false,"context_lines":[{"line_number":482,"context_line":"            if \u0027vpmems\u0027 in inst and inst.vpmems:"},{"line_number":483,"context_line":"                vpmems.extend(inst.vpmems.vpmems)"},{"line_number":484,"context_line":"        for vpmem in vpmems:"},{"line_number":485,"context_line":"            if \u0027ns_name\u0027 in vpmem and vpmem.ns_name:"},{"line_number":486,"context_line":"                assigned_pmem_names_by_label[vpmem.label].add(vpmem.ns_name)"},{"line_number":487,"context_line":"        return assigned_pmem_names_by_label"},{"line_number":488,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"7faddb67_a76d4b05","line":485,"range":{"start_line":485,"start_character":12,"end_line":485,"end_character":51},"in_reply_to":"7faddb67_47bd88d6","updated":"2019-07-11 14:28:31.000000000","message":"when we allocate pmems to instance, then the vpmem\u0027s ns_name will be set, before that we only have vpmems with label, label is used to track which class of pmem resource the instance needs.","commit_id":"7226501c202eb3a78ed64e066435f0145b555eb6"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"e8e2b1925caf3e064c86139de73b77e4ed045b25","unresolved":false,"context_lines":[{"line_number":482,"context_line":"            if \u0027vpmems\u0027 in inst and inst.vpmems:"},{"line_number":483,"context_line":"                vpmems.extend(inst.vpmems.vpmems)"},{"line_number":484,"context_line":"        for vpmem in vpmems:"},{"line_number":485,"context_line":"            if \u0027ns_name\u0027 in vpmem and vpmem.ns_name:"},{"line_number":486,"context_line":"                assigned_pmem_names_by_label[vpmem.label].add(vpmem.ns_name)"},{"line_number":487,"context_line":"        return assigned_pmem_names_by_label"},{"line_number":488,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"7faddb67_a02211a3","line":485,"range":{"start_line":485,"start_character":12,"end_line":485,"end_character":51},"in_reply_to":"7faddb67_a76d4b05","updated":"2019-07-11 15:50:45.000000000","message":"In that case you should probably have a field for \"assignment\" or something, which is a nested object that actually has the namespace attributes, which you fill out once the assignment is made. That also makes it easier to swap out the \"details\" object with another implementation for another vendor if it comes later on.","commit_id":"7226501c202eb3a78ed64e066435f0145b555eb6"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"9bddbd2af7447d7dac18e6466d51e1dcacfdef20","unresolved":false,"context_lines":[{"line_number":594,"context_line":"                 {\u0027enabled\u0027: enabled, \u0027reason\u0027: reason})"},{"line_number":595,"context_line":"        self._set_host_enabled(enabled, reason)"},{"line_number":596,"context_line":""},{"line_number":597,"context_line":"    def _check_pmem_namespaces(self, context):"},{"line_number":598,"context_line":"        \"\"\"This is making sure that, for every label:ns in every"},{"line_number":599,"context_line":"        existing Instance, a corresponding label:ns existed in the CONF."},{"line_number":600,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":14,"id":"7faddb67_47902844","line":597,"updated":"2019-07-10 17:20:32.000000000","message":"AFAICT, this is not tested.","commit_id":"7226501c202eb3a78ed64e066435f0145b555eb6"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"9bddbd2af7447d7dac18e6466d51e1dcacfdef20","unresolved":false,"context_lines":[{"line_number":600,"context_line":"        \"\"\""},{"line_number":601,"context_line":"        instance_domains \u003d self._host.list_instance_domains("},{"line_number":602,"context_line":"                only_running\u003dFalse)"},{"line_number":603,"context_line":"        instances \u003d [dom.UUIDString() for dom in instance_domains]"},{"line_number":604,"context_line":"        assigned_pmems_by_label \u003d self._get_assigned_pmem_names_by_label("},{"line_number":605,"context_line":"                context, instances)"},{"line_number":606,"context_line":"        pmems, pmems_by_label \u003d self._pmem_namespaces"}],"source_content_type":"text/x-python","patch_set":14,"id":"7faddb67_c7d09822","line":603,"range":{"start_line":603,"start_character":8,"end_line":603,"end_character":17},"updated":"2019-07-10 17:20:32.000000000","message":"instance_uuids, for clarity","commit_id":"7226501c202eb3a78ed64e066435f0145b555eb6"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"9bddbd2af7447d7dac18e6466d51e1dcacfdef20","unresolved":false,"context_lines":[{"line_number":606,"context_line":"        pmems, pmems_by_label \u003d self._pmem_namespaces"},{"line_number":607,"context_line":"        for label, namespaces in assigned_pmems_by_label.items():"},{"line_number":608,"context_line":"            if label not in pmems_by_label:"},{"line_number":609,"context_line":"                reason \u003d _(\"some PMEM namespaces with label %(label)s are \""},{"line_number":610,"context_line":"                           \"assigned, but the label isn\u0027t configured\") % label"},{"line_number":611,"context_line":"                raise exception.PMEMNamespaceConfigInvalid(reason\u003dreason)"},{"line_number":612,"context_line":"            for ns in namespaces:"}],"source_content_type":"text/x-python","patch_set":14,"id":"7faddb67_a7c55c5d","line":609,"range":{"start_line":609,"start_character":27,"end_line":609,"end_character":48},"updated":"2019-07-10 17:20:32.000000000","message":"\"PMEM namespace\"","commit_id":"7226501c202eb3a78ed64e066435f0145b555eb6"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"9bddbd2af7447d7dac18e6466d51e1dcacfdef20","unresolved":false,"context_lines":[{"line_number":607,"context_line":"        for label, namespaces in assigned_pmems_by_label.items():"},{"line_number":608,"context_line":"            if label not in pmems_by_label:"},{"line_number":609,"context_line":"                reason \u003d _(\"some PMEM namespaces with label %(label)s are \""},{"line_number":610,"context_line":"                           \"assigned, but the label isn\u0027t configured\") % label"},{"line_number":611,"context_line":"                raise exception.PMEMNamespaceConfigInvalid(reason\u003dreason)"},{"line_number":612,"context_line":"            for ns in namespaces:"},{"line_number":613,"context_line":"                if ns not in pmems_by_label[label]:"}],"source_content_type":"text/x-python","patch_set":14,"id":"7faddb67_07ac709e","line":610,"range":{"start_line":610,"start_character":52,"end_line":610,"end_character":57},"updated":"2019-07-10 17:20:32.000000000","message":"\"is not\"","commit_id":"7226501c202eb3a78ed64e066435f0145b555eb6"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"9bddbd2af7447d7dac18e6466d51e1dcacfdef20","unresolved":false,"context_lines":[{"line_number":612,"context_line":"            for ns in namespaces:"},{"line_number":613,"context_line":"                if ns not in pmems_by_label[label]:"},{"line_number":614,"context_line":"                    reason \u003d (_(\"PMEM namespace %(ns)s with label %(label)s\""},{"line_number":615,"context_line":"                                \"is assigned, but it isn\u0027t configured\") %"},{"line_number":616,"context_line":"                              {\u0027ns\u0027: ns, \u0027label\u0027: label})"},{"line_number":617,"context_line":"                    raise exception.PMEMNamespaceConfigInvalid(reason\u003dreason)"},{"line_number":618,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"7faddb67_e7903451","line":615,"range":{"start_line":615,"start_character":53,"end_line":615,"end_character":58},"updated":"2019-07-10 17:20:32.000000000","message":"\"is not\"","commit_id":"7226501c202eb3a78ed64e066435f0145b555eb6"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"9bddbd2af7447d7dac18e6466d51e1dcacfdef20","unresolved":false,"context_lines":[{"line_number":612,"context_line":"            for ns in namespaces:"},{"line_number":613,"context_line":"                if ns not in pmems_by_label[label]:"},{"line_number":614,"context_line":"                    reason \u003d (_(\"PMEM namespace %(ns)s with label %(label)s\""},{"line_number":615,"context_line":"                                \"is assigned, but it isn\u0027t configured\") %"},{"line_number":616,"context_line":"                              {\u0027ns\u0027: ns, \u0027label\u0027: label})"},{"line_number":617,"context_line":"                    raise exception.PMEMNamespaceConfigInvalid(reason\u003dreason)"},{"line_number":618,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"7faddb67_07855008","line":615,"range":{"start_line":615,"start_character":50,"end_line":615,"end_character":52},"updated":"2019-07-10 17:20:32.000000000","message":"\"the namespace\" for clarity and consistency with the above \"the label\" message.","commit_id":"7226501c202eb3a78ed64e066435f0145b555eb6"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"d9e2986367fbd98c78a6359938b56e72fc916ba9","unresolved":false,"context_lines":[{"line_number":293,"context_line":""},{"line_number":294,"context_line":""},{"line_number":295,"context_line":"# This is used to remain the pmem namespace info"},{"line_number":296,"context_line":"PMEMNamespace \u003d collections.namedtuple(\u0027PMEMNamespace\u0027,"},{"line_number":297,"context_line":"        [\u0027label\u0027, \u0027name\u0027, \u0027dev\u0027, \u0027size\u0027, \u0027align\u0027])"},{"line_number":298,"context_line":""},{"line_number":299,"context_line":""},{"line_number":300,"context_line":"class LibvirtDriver(driver.ComputeDriver):"}],"source_content_type":"text/x-python","patch_set":16,"id":"7faddb67_2fe062cc","line":297,"range":{"start_line":296,"start_character":0,"end_line":297,"end_character":50},"updated":"2019-07-29 02:34:12.000000000","message":"we needn\u0027t this anymore if we move those methods to device manager.","commit_id":"3bbf0b01f1d4553934d0dae065862c58eec20f52"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"d9e2986367fbd98c78a6359938b56e72fc916ba9","unresolved":false,"context_lines":[{"line_number":427,"context_line":""},{"line_number":428,"context_line":"        self._device_manager \u003d libvirt_device.DeviceManager(self)"},{"line_number":429,"context_line":""},{"line_number":430,"context_line":"    def _get_pmem_namespaces(self):"},{"line_number":431,"context_line":"        if not CONF.libvirt.pmem_namespaces:"},{"line_number":432,"context_line":"            return {}"},{"line_number":433,"context_line":"        # pmem namespace info keyed by name {name:PMEMNamespace,...}"}],"source_content_type":"text/x-python","patch_set":16,"id":"7faddb67_0fdd6613","line":430,"range":{"start_line":430,"start_character":4,"end_line":430,"end_character":35},"updated":"2019-07-29 02:34:12.000000000","message":"This isn\u0027t your fault. Actually, I planed put all of those method inside DeviceManager. Then we remove the reference to the virt driver, we just reference to the host object. I will done that in the later refactor.\n\nSo we can just move those method into device manager. You can reference the host object by `self._driver._host`. We will replace those by `self._host` after finish the refactor of mdev.","commit_id":"3bbf0b01f1d4553934d0dae065862c58eec20f52"}]}
