)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":33609,"name":"XuQi","display_name":"Inori","email":"xuq.fnstxz@fujitsu.com","username":"inori"},"change_message_id":"fe624ca0719a25a6a26db9334315287e2119c987","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":1,"id":"7ed41e79_092a5d21","updated":"2022-06-30 02:06:31.000000000","message":"run-Fujitsu ETERNUS CI","commit_id":"c6952e619d88b6f4cceebfba528e3afb242b3990"},{"author":{"_account_id":33609,"name":"XuQi","display_name":"Inori","email":"xuq.fnstxz@fujitsu.com","username":"inori"},"change_message_id":"ae653d6abbd13a29a1b3db5ff6ac6f021ba8cd24","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"a2b665b3_27c268b4","updated":"2022-07-04 03:25:12.000000000","message":"run-Fujitsu ETERNUS CI","commit_id":"c6952e619d88b6f4cceebfba528e3afb242b3990"},{"author":{"_account_id":33609,"name":"XuQi","display_name":"Inori","email":"xuq.fnstxz@fujitsu.com","username":"inori"},"change_message_id":"a16595dad27b3f0c51186c191ce3df48ca05cf89","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"b9c1072f_b17ef23e","updated":"2022-06-27 09:29:50.000000000","message":"run-Fujitsu ETERNUS CI","commit_id":"c6952e619d88b6f4cceebfba528e3afb242b3990"},{"author":{"_account_id":33609,"name":"XuQi","display_name":"Inori","email":"xuq.fnstxz@fujitsu.com","username":"inori"},"change_message_id":"9dd674fa89dc63d245916e09fdf6e8b0b72f6bf8","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":1,"id":"bbe765fc_dd138244","updated":"2022-06-28 03:35:38.000000000","message":"run-Fujitsu ETERNUS CI","commit_id":"c6952e619d88b6f4cceebfba528e3afb242b3990"},{"author":{"_account_id":33609,"name":"XuQi","display_name":"Inori","email":"xuq.fnstxz@fujitsu.com","username":"inori"},"change_message_id":"bbff5591bd288b541a4fcf30c226193d771174a7","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"e6508b60_3396f0be","updated":"2022-06-30 06:07:45.000000000","message":"run-Fujitsu ETERNUS CI","commit_id":"c6952e619d88b6f4cceebfba528e3afb242b3990"},{"author":{"_account_id":33609,"name":"XuQi","display_name":"Inori","email":"xuq.fnstxz@fujitsu.com","username":"inori"},"change_message_id":"a4864bb4e44afa41198acf68320e4ceec96c5d58","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"ff66a13e_4f5a856b","updated":"2022-06-30 08:11:03.000000000","message":"run-Fujitsu ETERNUS CI","commit_id":"c6952e619d88b6f4cceebfba528e3afb242b3990"},{"author":{"_account_id":33609,"name":"XuQi","display_name":"Inori","email":"xuq.fnstxz@fujitsu.com","username":"inori"},"change_message_id":"bbff5591bd288b541a4fcf30c226193d771174a7","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"ed5f936e_717f4750","in_reply_to":"7ed41e79_092a5d21","updated":"2022-06-30 06:07:45.000000000","message":"Done","commit_id":"c6952e619d88b6f4cceebfba528e3afb242b3990"},{"author":{"_account_id":33609,"name":"XuQi","display_name":"Inori","email":"xuq.fnstxz@fujitsu.com","username":"inori"},"change_message_id":"bbff5591bd288b541a4fcf30c226193d771174a7","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"7423855e_f089c41f","in_reply_to":"bbe765fc_dd138244","updated":"2022-06-30 06:07:45.000000000","message":"Done","commit_id":"c6952e619d88b6f4cceebfba528e3afb242b3990"},{"author":{"_account_id":33609,"name":"XuQi","display_name":"Inori","email":"xuq.fnstxz@fujitsu.com","username":"inori"},"change_message_id":"22cb8cd494b27e7c63bf9d12b21269e2460465c7","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"90c98f73_2d1b01a7","updated":"2022-07-05 01:41:46.000000000","message":"run-Fujitsu ETERNUS CI","commit_id":"f0ce54c18302aa03820b7f7910abd1eae305d0c9"},{"author":{"_account_id":29122,"name":"Raghavendra Tilay","email":"raghavendra-uddhav.tilay@hpe.com","username":"raghavendrat"},"change_message_id":"879e3b1390ee39b168663012e0045d4fcd73d4f7","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"367aa4a8_6f759b72","updated":"2022-07-06 06:05:55.000000000","message":"Few minor comments inline.","commit_id":"a5e4d5783a47948577cfd4f3aa6a393760d98ec6"},{"author":{"_account_id":33609,"name":"XuQi","display_name":"Inori","email":"xuq.fnstxz@fujitsu.com","username":"inori"},"change_message_id":"0da1ad495d80e70a0a5c2aca3ed1c63a2451c7a4","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"598b0882_3d67167b","updated":"2022-07-08 05:49:58.000000000","message":"run-Fujitsu ETERNUS CI","commit_id":"a5e4d5783a47948577cfd4f3aa6a393760d98ec6"},{"author":{"_account_id":33609,"name":"XuQi","display_name":"Inori","email":"xuq.fnstxz@fujitsu.com","username":"inori"},"change_message_id":"86296ccef2225970b9f57da2ea30a300f38c7547","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"5c95b84e_68e5505a","updated":"2022-07-06 02:10:46.000000000","message":"run-Fujitsu ETERNUS CI","commit_id":"a5e4d5783a47948577cfd4f3aa6a393760d98ec6"},{"author":{"_account_id":33609,"name":"XuQi","display_name":"Inori","email":"xuq.fnstxz@fujitsu.com","username":"inori"},"change_message_id":"14e0ebb6bdb2444b1a3b09ce81c469c3e7424142","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":3,"id":"a3ef12b1_e85788cd","updated":"2022-07-06 02:17:09.000000000","message":"run-Fujitsu ETERNUS CI","commit_id":"a5e4d5783a47948577cfd4f3aa6a393760d98ec6"},{"author":{"_account_id":33609,"name":"XuQi","display_name":"Inori","email":"xuq.fnstxz@fujitsu.com","username":"inori"},"change_message_id":"508c7a19c6e6775673a04752a5c9c29cb07d77dc","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"b1772015_e7d0c7fd","updated":"2022-07-08 06:15:53.000000000","message":"run-Fujitsu ETERNUS CI","commit_id":"a5e4d5783a47948577cfd4f3aa6a393760d98ec6"},{"author":{"_account_id":33609,"name":"XuQi","display_name":"Inori","email":"xuq.fnstxz@fujitsu.com","username":"inori"},"change_message_id":"f17d5373912a2059721fd6410eac811869e7ef7a","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":3,"id":"d5c17010_40c97a7f","updated":"2022-07-06 02:51:52.000000000","message":"run-Fujitsu ETERNUS CI","commit_id":"a5e4d5783a47948577cfd4f3aa6a393760d98ec6"},{"author":{"_account_id":33609,"name":"XuQi","display_name":"Inori","email":"xuq.fnstxz@fujitsu.com","username":"inori"},"change_message_id":"71c448bc5e809ccda4a60ade11b86e253857fe48","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"33f40a5f_ba063935","in_reply_to":"a3ef12b1_e85788cd","updated":"2022-07-15 06:15:30.000000000","message":"Done","commit_id":"a5e4d5783a47948577cfd4f3aa6a393760d98ec6"},{"author":{"_account_id":33609,"name":"XuQi","display_name":"Inori","email":"xuq.fnstxz@fujitsu.com","username":"inori"},"change_message_id":"71c448bc5e809ccda4a60ade11b86e253857fe48","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"179f8212_53f7147e","in_reply_to":"d5c17010_40c97a7f","updated":"2022-07-15 06:15:30.000000000","message":"Done","commit_id":"a5e4d5783a47948577cfd4f3aa6a393760d98ec6"},{"author":{"_account_id":33609,"name":"XuQi","display_name":"Inori","email":"xuq.fnstxz@fujitsu.com","username":"inori"},"change_message_id":"e3b80d1fe155a99a2dfd501a024605b89eb1375d","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"c1d6e36f_0646a8f2","updated":"2022-08-25 01:54:51.000000000","message":"Excuse me, could you please take a look at this patch？","commit_id":"72f63f8560888bd7104a4e22b54b4b3b1e9c7a89"},{"author":{"_account_id":29122,"name":"Raghavendra Tilay","email":"raghavendra-uddhav.tilay@hpe.com","username":"raghavendrat"},"change_message_id":"d3e7c12f034efd0aaf1169c907552008fc3f4307","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"303d006d_9aaaf1e5","updated":"2022-07-15 10:01:33.000000000","message":"My comments from older patchset have been addressed. So +1.\nThanks.\n","commit_id":"72f63f8560888bd7104a4e22b54b4b3b1e9c7a89"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"fb0272c8d7d77adf87d9dc7fc33122eef8cccdd4","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"d50144d4_f87852de","updated":"2022-09-14 15:05:28.000000000","message":"Please add versioning information in the driver, since this is a new feature.\n\nhttps://github.com/openstack/cinder/blob/master/cinder/volume/drivers/hpe/hpe_3par_fc.py#L57-L121","commit_id":"72f63f8560888bd7104a4e22b54b4b3b1e9c7a89"},{"author":{"_account_id":33609,"name":"XuQi","display_name":"Inori","email":"xuq.fnstxz@fujitsu.com","username":"inori"},"change_message_id":"1769547c54aa6e4f6ad74cf1d02d8a8d1c9476b5","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"c1a1af16_d2e87d97","in_reply_to":"8c576df7_bde63a0e","updated":"2022-12-16 03:02:29.000000000","message":"I\u0027ve added the version history into our code. Could you please have a look?","commit_id":"72f63f8560888bd7104a4e22b54b4b3b1e9c7a89"},{"author":{"_account_id":33609,"name":"XuQi","display_name":"Inori","email":"xuq.fnstxz@fujitsu.com","username":"inori"},"change_message_id":"7f52128f8ea96e901d0a50ae0e9c78bcf052d768","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":4,"id":"8c576df7_bde63a0e","in_reply_to":"9f073d37_ba2ffbc5","updated":"2022-11-18 09:35:49.000000000","message":"Hi, I\u0027ve added the version history as you said. Could you please have a look?","commit_id":"72f63f8560888bd7104a4e22b54b4b3b1e9c7a89"},{"author":{"_account_id":33609,"name":"XuQi","display_name":"Inori","email":"xuq.fnstxz@fujitsu.com","username":"inori"},"change_message_id":"5bc3d5d1f556f21ae175c3be1956b3b0676fcf12","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"9f073d37_ba2ffbc5","in_reply_to":"d50144d4_f87852de","updated":"2022-10-11 02:32:52.000000000","message":"The current community code is old, which is quite different from our latest version. Some features can be changed over and over again in different versions. Therefore, we do not intend to submit the code according to the version, but according to the function.\n\nSo, can we add the versioning information after submitting the final version?","commit_id":"72f63f8560888bd7104a4e22b54b4b3b1e9c7a89"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"97ad1847b1ed6435067e1eb8be72186e605fb499","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"ad6df886_208cbefb","updated":"2022-11-21 17:18:18.000000000","message":"Looks great overall, but a few issues pointed out inline.","commit_id":"a08a0df886b9e839d2577227c21ceb97a0154182"},{"author":{"_account_id":33609,"name":"XuQi","display_name":"Inori","email":"xuq.fnstxz@fujitsu.com","username":"inori"},"change_message_id":"036e6c2c24a6b595923ee0134b1025e89f611f52","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"93faa24f_f6bd7516","updated":"2022-11-21 07:05:59.000000000","message":"recheck","commit_id":"a08a0df886b9e839d2577227c21ceb97a0154182"},{"author":{"_account_id":33609,"name":"XuQi","display_name":"Inori","email":"xuq.fnstxz@fujitsu.com","username":"inori"},"change_message_id":"0286d8338ecc75dedcf406d83e79ce18321f48d5","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"6e29dae3_66bb3321","updated":"2022-11-21 07:11:17.000000000","message":"run-Fujitsu ETERNUS CI","commit_id":"a08a0df886b9e839d2577227c21ceb97a0154182"},{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@purestorage.com","username":"sdodsley"},"change_message_id":"4a517cd3ef3e40f4c68608a8f6d317500362da0a","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"69d6a946_66d90d17","updated":"2022-12-14 20:19:01.000000000","message":"It might be worth adding something into the docs as well about these QoS parameters","commit_id":"34b800c1c19488712a1fbe4b2a35b647966d3b95"},{"author":{"_account_id":33609,"name":"XuQi","display_name":"Inori","email":"xuq.fnstxz@fujitsu.com","username":"inori"},"change_message_id":"b8c5875385d818a7d63c87836080fee52ec9d160","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"4e9b39d2_42310013","updated":"2022-11-22 05:39:16.000000000","message":"recheck","commit_id":"34b800c1c19488712a1fbe4b2a35b647966d3b95"},{"author":{"_account_id":33609,"name":"XuQi","display_name":"Inori","email":"xuq.fnstxz@fujitsu.com","username":"inori"},"change_message_id":"76530b5afcf54269302137e4d8bca54382426c8a","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"92a820f4_64c37574","in_reply_to":"1ee00484_d0625355","updated":"2023-01-09 01:35:03.000000000","message":"We don\u0027t have charges for additional functionality. We haven\u0027t commit patches to community for a long time so the community driver and enterprise driver are very different. So we are now submitting these patches to the community, After all patches are merged, the community driver and enterprise driver will be consistent.","commit_id":"34b800c1c19488712a1fbe4b2a35b647966d3b95"},{"author":{"_account_id":33609,"name":"XuQi","display_name":"Inori","email":"xuq.fnstxz@fujitsu.com","username":"inori"},"change_message_id":"74ec1534ea2f61f3256f16a10d968cb89c8003d2","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"a3819068_53684ba8","in_reply_to":"69d6a946_66d90d17","updated":"2022-12-15 06:59:45.000000000","message":"I‘ve added some instructions to the release note. Thank you for your reply.","commit_id":"34b800c1c19488712a1fbe4b2a35b647966d3b95"},{"author":{"_account_id":33609,"name":"XuQi","display_name":"Inori","email":"xuq.fnstxz@fujitsu.com","username":"inori"},"change_message_id":"4b46475db1550247b42fc9803f162a760aefe37f","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"1ee00484_d0625355","in_reply_to":"812b0c57_b094e64a","updated":"2023-01-06 05:25:44.000000000","message":"Thanks for your reply. I‘ve added some instruction to the doc about this patch.","commit_id":"34b800c1c19488712a1fbe4b2a35b647966d3b95"},{"author":{"_account_id":33609,"name":"XuQi","display_name":"Inori","email":"xuq.fnstxz@fujitsu.com","username":"inori"},"change_message_id":"1769547c54aa6e4f6ad74cf1d02d8a8d1c9476b5","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"deb86b5b_a4c43870","in_reply_to":"8ef03184_1a3947ac","updated":"2022-12-16 03:02:29.000000000","message":"Thanks for your reply. There\u0027s a large difference from our \u0027enterprise\u0027 and \u0027community\u0027 drivers, and we still have a lot of changes haven\u0027t merged. So could we modify the docs page after the code is merged?","commit_id":"34b800c1c19488712a1fbe4b2a35b647966d3b95"},{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@purestorage.com","username":"sdodsley"},"change_message_id":"631bd383eb6eb3f3fe6d8d891d444eee7be2ae8a","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"8ef03184_1a3947ac","in_reply_to":"a3819068_53684ba8","updated":"2022-12-15 14:07:56.000000000","message":"The instructions need to be the the docs page for the driver, not the release note.\nhttps://docs.openstack.org/cinder/latest/configuration/block-storage/drivers/fujitsu-eternus-dx-driver.html","commit_id":"34b800c1c19488712a1fbe4b2a35b647966d3b95"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"bc18196cee47830e0090ef1e16a9fec821c3b577","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":8,"id":"812b0c57_b094e64a","in_reply_to":"abf10f54_bb7df6b6","updated":"2022-12-16 16:05:16.000000000","message":"Release notes are not the right place for this. Even if there are more updates needed, these details need to go in the driver docs, not the release notes.","commit_id":"34b800c1c19488712a1fbe4b2a35b647966d3b95"},{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@purestorage.com","username":"sdodsley"},"change_message_id":"43fa94114db245d9a96e65775a5103af5e26d670","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"abf10f54_bb7df6b6","in_reply_to":"deb86b5b_a4c43870","updated":"2022-12-16 14:12:41.000000000","message":"I\u0027m not understanding why you have two versions of the driver. What is the difference between the community and enterprise drivers?\nDoes Fujitsu have its own OpenStack distribution which charges for additional functionality?","commit_id":"34b800c1c19488712a1fbe4b2a35b647966d3b95"},{"author":{"_account_id":597,"name":"Pete Zaitcev","email":"zaitcev@kotori.zaitcev.us","username":"zaitcev"},"change_message_id":"30cdafc9cba5bc468d44851c141b04c93aba9cad","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"8f065924_6e6f81d5","updated":"2022-12-15 17:04:01.000000000","message":"Did you guys really need to mix the de-sixization with the QoS change? I\u0027d prefer the two topics to be split into their own patches. I\u0027m not hold this strongly enough for -1, but please consider.","commit_id":"026f73dadba1faab464fff28902f158549ca390a"},{"author":{"_account_id":33609,"name":"XuQi","display_name":"Inori","email":"xuq.fnstxz@fujitsu.com","username":"inori"},"change_message_id":"1769547c54aa6e4f6ad74cf1d02d8a8d1c9476b5","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"7f88ccdc_154eed71","in_reply_to":"8f065924_6e6f81d5","updated":"2022-12-16 03:02:29.000000000","message":"I\u0027ve added the package \u0027six\u0027 back. Thanks for your review.","commit_id":"026f73dadba1faab464fff28902f158549ca390a"},{"author":{"_account_id":597,"name":"Pete Zaitcev","email":"zaitcev@kotori.zaitcev.us","username":"zaitcev"},"change_message_id":"6fefcf7336f78318b062bd85f4694e3f410ea8dc","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"2b7b684c_4729e7ce","updated":"2022-12-16 04:11:24.000000000","message":"I think this looks acceptable, although keep in mind that I\u0027m very new to Cinder.","commit_id":"5a41372b99e6a5cf8c1d751dd0d4d63454552c3f"},{"author":{"_account_id":28801,"name":"Cisco Cinder CI","email":"cisco-cinder-ci@cisco.com","username":"cisco-cinder-ci"},"change_message_id":"7f50d4b9056cfd82428e3c85f6ce2e9c89e144d8","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"48e2d8db_db7b7613","updated":"2022-12-16 06:14:35.000000000","message":"cisco-cinder-ci","commit_id":"5a41372b99e6a5cf8c1d751dd0d4d63454552c3f"},{"author":{"_account_id":28801,"name":"Cisco Cinder CI","email":"cisco-cinder-ci@cisco.com","username":"cisco-cinder-ci"},"change_message_id":"709e6453af4041fa8cbf97aab588b21c7034ebc6","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"90076ae3_03185eb9","updated":"2022-12-16 06:40:51.000000000","message":"cisco-cinder-ci","commit_id":"5a41372b99e6a5cf8c1d751dd0d4d63454552c3f"},{"author":{"_account_id":28801,"name":"Cisco Cinder CI","email":"cisco-cinder-ci@cisco.com","username":"cisco-cinder-ci"},"change_message_id":"02be83280a199683579f80eecbd452fa7d27950c","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"f52121c4_81887c6a","updated":"2022-12-19 03:43:38.000000000","message":"cisco-cinder-ci","commit_id":"5a41372b99e6a5cf8c1d751dd0d4d63454552c3f"},{"author":{"_account_id":33609,"name":"XuQi","display_name":"Inori","email":"xuq.fnstxz@fujitsu.com","username":"inori"},"change_message_id":"013a8abef402c07d70e47e26a90d18ce0d5e3709","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"aded3961_b55397e4","updated":"2022-12-16 05:31:39.000000000","message":"recheck","commit_id":"5a41372b99e6a5cf8c1d751dd0d4d63454552c3f"},{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@purestorage.com","username":"sdodsley"},"change_message_id":"469aab19f649f6cc92aab5e370c0e5db93391eef","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"062ab9e2_3a476682","updated":"2022-12-16 18:54:14.000000000","message":"run Pure Storage CI","commit_id":"5a41372b99e6a5cf8c1d751dd0d4d63454552c3f"},{"author":{"_account_id":33609,"name":"XuQi","display_name":"Inori","email":"xuq.fnstxz@fujitsu.com","username":"inori"},"change_message_id":"05e2cde1e97f36e0e979673a5261c193ddc6602b","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"1ec655b7_e53ff072","updated":"2022-12-20 06:46:20.000000000","message":"run-Fujitsu ETERNUS CI","commit_id":"5a41372b99e6a5cf8c1d751dd0d4d63454552c3f"},{"author":{"_account_id":33609,"name":"XuQi","display_name":"Inori","email":"xuq.fnstxz@fujitsu.com","username":"inori"},"change_message_id":"2aa7693e73cbf247757b1e2bda1aad9840c9d210","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"29357563_e5a438fb","updated":"2022-12-20 04:19:10.000000000","message":"run-Fujitsu ETERNUS CI","commit_id":"5a41372b99e6a5cf8c1d751dd0d4d63454552c3f"},{"author":{"_account_id":33609,"name":"XuQi","display_name":"Inori","email":"xuq.fnstxz@fujitsu.com","username":"inori"},"change_message_id":"2869ecf58e7109d4f23d5f42cd9d8047b2ae0897","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"2eb7c50c_f6ec0ec6","updated":"2022-12-20 06:43:27.000000000","message":"run-Fujitsu ETERNUS CI","commit_id":"5a41372b99e6a5cf8c1d751dd0d4d63454552c3f"},{"author":{"_account_id":33609,"name":"XuQi","display_name":"Inori","email":"xuq.fnstxz@fujitsu.com","username":"inori"},"change_message_id":"e22b06c2a2fccec202d4d113c2bd505ea0e86d1b","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"3b161060_4dd04758","updated":"2022-12-16 05:31:27.000000000","message":"run-Fujitsu ETERNUS CI","commit_id":"5a41372b99e6a5cf8c1d751dd0d4d63454552c3f"},{"author":{"_account_id":33609,"name":"XuQi","display_name":"Inori","email":"xuq.fnstxz@fujitsu.com","username":"inori"},"change_message_id":"0b62a6a98424aa142ba8cc062edc05567e9baa8e","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"7edbb297_dba21c5a","updated":"2023-01-04 03:52:02.000000000","message":"run-Fujitsu ETERNUS CI","commit_id":"5a41372b99e6a5cf8c1d751dd0d4d63454552c3f"},{"author":{"_account_id":33609,"name":"XuQi","display_name":"Inori","email":"xuq.fnstxz@fujitsu.com","username":"inori"},"change_message_id":"fae4611d8428de94e007bcb92d32c75105fe706d","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"95cc49b0_819ab632","updated":"2022-12-20 05:58:22.000000000","message":"run-Fujitsu ETERNUS CI","commit_id":"5a41372b99e6a5cf8c1d751dd0d4d63454552c3f"},{"author":{"_account_id":33609,"name":"XuQi","display_name":"Inori","email":"xuq.fnstxz@fujitsu.com","username":"inori"},"change_message_id":"39e6d51625d2ed830d2302261dc9156222213d65","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"abd82c3e_b63908e8","updated":"2022-12-16 05:35:37.000000000","message":"run-Fujitsu ETERNUS CI","commit_id":"5a41372b99e6a5cf8c1d751dd0d4d63454552c3f"},{"author":{"_account_id":597,"name":"Pete Zaitcev","email":"zaitcev@kotori.zaitcev.us","username":"zaitcev"},"change_message_id":"ca571ff9110702e8d3d9f781e73a3b79414637b3","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":11,"id":"74cd6d30_7201ad61","updated":"2023-01-07 01:07:42.000000000","message":"I\u0027m very interested in the answer to Simon\u0027s question. Not that I mind if Fujitsu get paid, but by splitting drivers into community and enterprise Fujitsu appear to deny themselves the benefits of dealing with OpenStack and all that open source jazz. Seems a little questionable to me too. But perhaps not enough to hold this and demand that the unused argument is removed.","commit_id":"5c1ca49c544b29db7a1a1928f382482c49352f64"},{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@purestorage.com","username":"sdodsley"},"change_message_id":"fa6deb6483535d6d7da2be9ffc8437d7761dd50b","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":11,"id":"e4cd359b_489e93ff","updated":"2023-01-09 04:49:14.000000000","message":"Thanks for clearing up the community/enterprise question.\nAlso, thanks for fixing the docs as requested. ","commit_id":"5c1ca49c544b29db7a1a1928f382482c49352f64"},{"author":{"_account_id":33609,"name":"XuQi","display_name":"Inori","email":"xuq.fnstxz@fujitsu.com","username":"inori"},"change_message_id":"ee85e293b1ae158a3d7a296544b93a0f32b8e495","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":11,"id":"5a313324_4f7b0908","updated":"2023-03-01 01:29:14.000000000","message":"Thanks for your reply. Is there any problem on the feature need to be modified?","commit_id":"5c1ca49c544b29db7a1a1928f382482c49352f64"},{"author":{"_account_id":33609,"name":"XuQi","display_name":"Inori","email":"xuq.fnstxz@fujitsu.com","username":"inori"},"change_message_id":"e2fb12842c400778ca773bb98e9eb908990226c2","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":11,"id":"2d278176_5be26a56","updated":"2023-02-20 09:39:12.000000000","message":"The document has been modified. And our CI has passed and it is ready to accept review.","commit_id":"5c1ca49c544b29db7a1a1928f382482c49352f64"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"82b97060fd54c8a3a3791e36f6ea2b36a2f74c86","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":11,"id":"a9bdbdcb_07d78205","updated":"2023-02-28 10:37:33.000000000","message":"We are past feature freeze for 2023.1 (Antelope), this feature can be included in 2023.2 (Bobcat) release but we need to wait until stable/2023.1 branches are cut.","commit_id":"5c1ca49c544b29db7a1a1928f382482c49352f64"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"ccba7eff673a178fe97f39b001ba1d1eaba42cb8","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":11,"id":"b5c0ef2f_a85b8f49","updated":"2023-03-08 15:21:49.000000000","message":"stable/2023.1 is cut, this is good for review.","commit_id":"5c1ca49c544b29db7a1a1928f382482c49352f64"},{"author":{"_account_id":33609,"name":"XuQi","display_name":"Inori","email":"xuq.fnstxz@fujitsu.com","username":"inori"},"change_message_id":"76530b5afcf54269302137e4d8bca54382426c8a","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":11,"id":"dd63dd20_ac3e6f7a","in_reply_to":"74cd6d30_7201ad61","updated":"2023-01-09 01:35:03.000000000","message":"Thanks for your reply. We don\u0027t have charges for additional functionality. We haven\u0027t commit patches to community for a long time so the community driver and enterprise driver are very different. So we are now submitting these patches to the community, After all patches are merged, the community driver and enterprise driver will be consistent.","commit_id":"5c1ca49c544b29db7a1a1928f382482c49352f64"},{"author":{"_account_id":33609,"name":"XuQi","display_name":"Inori","email":"xuq.fnstxz@fujitsu.com","username":"inori"},"change_message_id":"24285fad71b76b66636c25e9104ffc84578aa1fc","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":11,"id":"397107f7_ad53bb41","in_reply_to":"a9bdbdcb_07d78205","updated":"2023-03-01 01:29:30.000000000","message":"Thanks for your reply. Is there any problem on the feature need to be modified?","commit_id":"5c1ca49c544b29db7a1a1928f382482c49352f64"},{"author":{"_account_id":33609,"name":"XuQi","display_name":"Inori","email":"xuq.fnstxz@fujitsu.com","username":"inori"},"change_message_id":"d493b9e39d2b4c6da4dfd479f35d911e0a73a7ee","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":11,"id":"109057ba_608c7b79","in_reply_to":"b5c0ef2f_a85b8f49","updated":"2023-03-09 01:32:50.000000000","message":"Do I need to rebase on the master? Is it good to rebase now if necessary?","commit_id":"5c1ca49c544b29db7a1a1928f382482c49352f64"},{"author":{"_account_id":29122,"name":"Raghavendra Tilay","email":"raghavendra-uddhav.tilay@hpe.com","username":"raghavendrat"},"change_message_id":"ed553fb9de46f19aac4e950cf4013b3c5517e4b8","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":12,"id":"836c2e71_aa98281a","updated":"2023-05-04 07:20:02.000000000","message":"Code changes and UT look good. Zuul and Fujitsu ETERNUS CI have passed.","commit_id":"a570b5382f9079e6c49d60ad0860dfd7e9f0efbe"},{"author":{"_account_id":29122,"name":"Raghavendra Tilay","email":"raghavendra-uddhav.tilay@hpe.com","username":"raghavendrat"},"change_message_id":"42bf2eb9f9cb81896b72b07c1ab2c2d016bdf843","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":12,"id":"dfd3fc0d_e1407ac5","updated":"2023-08-21 10:30:11.000000000","message":"Hi Inori,\nA gentle reminder. Feature freeze is on 31st August. Thanks.","commit_id":"a570b5382f9079e6c49d60ad0860dfd7e9f0efbe"},{"author":{"_account_id":33986,"name":"Lucas Morais de oliveira","email":"lucasmoliveira059@gmail.com","username":"lucasmoliveira059"},"change_message_id":"32e2cb8764394020dc983fb7527b245814577083","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":12,"id":"380c42c6_0df15d6e","updated":"2023-04-28 15:28:18.000000000","message":"LGTM","commit_id":"a570b5382f9079e6c49d60ad0860dfd7e9f0efbe"},{"author":{"_account_id":20813,"name":"Sofia Enriquez","email":"lsofia.enriquez@gmail.com","username":"enriquetaso"},"change_message_id":"df4d4bd58451eef3249943e6d017d188e5ec855a","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":12,"id":"07db3ba1_6e8b7663","updated":"2023-03-15 11:12:02.000000000","message":"LGTM and Fujitsu ETERNUS CI passed. ","commit_id":"a570b5382f9079e6c49d60ad0860dfd7e9f0efbe"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"d4945ad9584f72aac55f8f0d78dd53969c842b63","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":12,"id":"770ad8a2_5b893372","updated":"2023-08-09 12:36:02.000000000","message":"one concern inline regarding unit tests, i see we are adding a lot of new methods which are not tested anywhere","commit_id":"a570b5382f9079e6c49d60ad0860dfd7e9f0efbe"},{"author":{"_account_id":33609,"name":"XuQi","display_name":"Inori","email":"xuq.fnstxz@fujitsu.com","username":"inori"},"change_message_id":"aa0078cc7ba91e1d173e493bb01a2375a362a0f6","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":12,"id":"2e179ba8_3cccfb3e","updated":"2023-03-13 05:56:26.000000000","message":"run-Fujitsu ETERNUS CI","commit_id":"a570b5382f9079e6c49d60ad0860dfd7e9f0efbe"},{"author":{"_account_id":35677,"name":"Thiago José de Andrade Alvoravel","display_name":"Thiago Alvoravel","email":"thiago.andrade@fit-tecnologia.org.br","username":"thiagoalvoravel"},"change_message_id":"c5e1ae52947ad3cda647931c33badc986488374f","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":14,"id":"20948f0c_4340b2a7","updated":"2023-08-24 18:30:09.000000000","message":"Hello Inori, just a suggestion inline.","commit_id":"7cf5ecef4c9a80a6d49b216eabda85c75ebe47d6"},{"author":{"_account_id":33609,"name":"XuQi","display_name":"Inori","email":"xuq.fnstxz@fujitsu.com","username":"inori"},"change_message_id":"f5b2781cab309e95e6bdd9bc72d48cee3d598ee1","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":14,"id":"2d7f01ae_c31c8047","updated":"2023-08-23 02:06:06.000000000","message":"Hi Rajat, I\u0027ve addressed your comments. It would great to know your feedback. Thanks.","commit_id":"7cf5ecef4c9a80a6d49b216eabda85c75ebe47d6"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"4571918073557c02ba3aed0ae02fa7f727f9289a","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":14,"id":"383acfce_e4b5c5e7","updated":"2023-09-06 19:56:34.000000000","message":"Mostly looks OK; a few issues noted inline.","commit_id":"7cf5ecef4c9a80a6d49b216eabda85c75ebe47d6"},{"author":{"_account_id":33609,"name":"XuQi","display_name":"Inori","email":"xuq.fnstxz@fujitsu.com","username":"inori"},"change_message_id":"b85f73a8a3c328fa3079301957093e324cc40e85","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":14,"id":"3e87c1a6_4ce7aa12","updated":"2023-08-22 12:16:32.000000000","message":"cinder-plugin-ceph-tempest-mn-aa","commit_id":"7cf5ecef4c9a80a6d49b216eabda85c75ebe47d6"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"7d50c38bf0d9fd772bf6532f8cdb9b2061c7f269","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":14,"id":"92656bb9_ab141a47","updated":"2023-08-30 17:45:35.000000000","message":"my comments are addressed. Code and tests LGTM. Fujitsu CI is also passing.","commit_id":"7cf5ecef4c9a80a6d49b216eabda85c75ebe47d6"},{"author":{"_account_id":33609,"name":"XuQi","display_name":"Inori","email":"xuq.fnstxz@fujitsu.com","username":"inori"},"change_message_id":"d15222951ed04b961fe5b6019eb048ec82aa4b65","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":14,"id":"e96d1c8f_5343600f","updated":"2023-08-22 07:48:55.000000000","message":"recheck","commit_id":"7cf5ecef4c9a80a6d49b216eabda85c75ebe47d6"},{"author":{"_account_id":33609,"name":"XuQi","display_name":"Inori","email":"xuq.fnstxz@fujitsu.com","username":"inori"},"change_message_id":"1adbb65c4d71e434b34818b8dd43319840ce9787","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":14,"id":"32fdeed8_a71cfdcf","updated":"2023-08-22 10:10:02.000000000","message":"recheck cinder-plugin-ceph-tempest","commit_id":"7cf5ecef4c9a80a6d49b216eabda85c75ebe47d6"},{"author":{"_account_id":33609,"name":"XuQi","display_name":"Inori","email":"xuq.fnstxz@fujitsu.com","username":"inori"},"change_message_id":"cf520f1a7858fa107a234bf509c653d475029ae7","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":14,"id":"896a57e3_8f34071d","updated":"2023-08-22 14:43:11.000000000","message":"recheck cinder-tempest-plugin-lvm-lio-barbican","commit_id":"7cf5ecef4c9a80a6d49b216eabda85c75ebe47d6"},{"author":{"_account_id":33609,"name":"XuQi","display_name":"Inori","email":"xuq.fnstxz@fujitsu.com","username":"inori"},"change_message_id":"13cae76ede771096243b4decfc5068e416cebcdf","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":14,"id":"5b65d7dc_53c01f1c","updated":"2023-08-22 18:17:25.000000000","message":"recheck tempest-slow-py3","commit_id":"7cf5ecef4c9a80a6d49b216eabda85c75ebe47d6"},{"author":{"_account_id":33609,"name":"XuQi","display_name":"Inori","email":"xuq.fnstxz@fujitsu.com","username":"inori"},"change_message_id":"e74d9b65ad88ec04185d1a09c0f7f37ca524303c","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":14,"id":"263cddd5_33ff2f5b","updated":"2023-08-22 09:19:14.000000000","message":"run-Fujitsu ETERNUS CI","commit_id":"7cf5ecef4c9a80a6d49b216eabda85c75ebe47d6"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"dc6bef51755844a626c60bec35306d49bc8f644d","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":15,"id":"cf51681b_36b1c9b7","updated":"2023-09-07 13:47:19.000000000","message":"-1 for the releasenote nits, also the tempest-integrated-storage job is failing we will need to run the gate again, better with a new PS fixing the issues","commit_id":"8d674136beb4183d9b6a35482e73c23e699e2047"},{"author":{"_account_id":33609,"name":"XuQi","display_name":"Inori","email":"xuq.fnstxz@fujitsu.com","username":"inori"},"change_message_id":"e378d12bdf1c4ecc93b894e6d60978c811b630dc","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":15,"id":"15ff9a80_735fc1dd","updated":"2023-09-07 12:47:15.000000000","message":"Hi Rajat, I\u0027ve addressed the comment that Rosmaita submitted. Could you please take a look again?","commit_id":"8d674136beb4183d9b6a35482e73c23e699e2047"},{"author":{"_account_id":33609,"name":"XuQi","display_name":"Inori","email":"xuq.fnstxz@fujitsu.com","username":"inori"},"change_message_id":"f93c75103c396f6a63e32831fe7c14bd4c04c765","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":15,"id":"c9fce372_5fa577a1","updated":"2023-09-07 12:46:49.000000000","message":"Since this is a patch about QoS support, I modified the value of QoS_support to True in file \u0027eternus_dx_common.py\u0027, which has no effect on the tests.","commit_id":"8d674136beb4183d9b6a35482e73c23e699e2047"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"261720599823fbfb017641f10d59a5656479fa39","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":15,"id":"28544a23_f3dd9521","updated":"2023-09-07 20:47:26.000000000","message":"To speed things up, I rewrote and formatted the release note.  (Read through it carefully, though, you know way more than me about how your driver and backend can be configured.)\n\nhttps://paste.opendev.org/show/bqLuzMbblEX6oEHJBBtG/","commit_id":"8d674136beb4183d9b6a35482e73c23e699e2047"},{"author":{"_account_id":33609,"name":"XuQi","display_name":"Inori","email":"xuq.fnstxz@fujitsu.com","username":"inori"},"change_message_id":"860da1ac11f1df26a521b6adf5c3ce62eae512f5","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":15,"id":"8bc54056_da1e8296","updated":"2023-09-07 13:05:57.000000000","message":"run-Fujitsu ETERNUS CI","commit_id":"8d674136beb4183d9b6a35482e73c23e699e2047"},{"author":{"_account_id":33609,"name":"XuQi","display_name":"Inori","email":"xuq.fnstxz@fujitsu.com","username":"inori"},"change_message_id":"12b0b05a03ce51467bd0115ea06ee5980fa0d6e7","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":15,"id":"427efaac_f8b3d158","in_reply_to":"28544a23_f3dd9521","updated":"2023-09-08 03:49:39.000000000","message":"Thanks for your help. I\u0027ve modified the release note.","commit_id":"8d674136beb4183d9b6a35482e73c23e699e2047"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"aeac21a2dea52787ad42f273af189dfde0a417b9","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":16,"id":"348940ef_601fdf72","updated":"2023-09-08 16:26:36.000000000","message":"Hold off on rechecking until after https://review.opendev.org/c/openstack/tempest/+/894269 has merged","commit_id":"e954ba02de36422fef0352495c47a204c0d2d1b7"},{"author":{"_account_id":33609,"name":"XuQi","display_name":"Inori","email":"xuq.fnstxz@fujitsu.com","username":"inori"},"change_message_id":"30dfbd3a752598f389260f3611234a551f3732a4","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":16,"id":"3417f988_113dafd1","updated":"2023-09-09 03:25:01.000000000","message":"I\u0027ve noticed that cinder-tempest-plugin-lvm-lio-barbican often fails, and I think it\u0027s unrelated to us. However, it\u0027s a voting job, so is there any way to improve this aspect?","commit_id":"e954ba02de36422fef0352495c47a204c0d2d1b7"},{"author":{"_account_id":33609,"name":"XuQi","display_name":"Inori","email":"xuq.fnstxz@fujitsu.com","username":"inori"},"change_message_id":"86b9362efdffb97464e9d8b6d70ad3b5b59a963d","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":16,"id":"f85f8cab_b0f73dac","updated":"2023-09-08 12:48:37.000000000","message":"It appears that the failure in the Zuul test cases is unrelated to our code.","commit_id":"e954ba02de36422fef0352495c47a204c0d2d1b7"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"387a2f1114f894ddbc8a68ec4743a2e8452cf726","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":16,"id":"d035358a_4f259614","updated":"2023-09-08 11:38:26.000000000","message":"No functional change, only releasenotes and comments.\nFujitsu CI has passed before and gate is failing due to unrelated reasons.\nLGTM.","commit_id":"e954ba02de36422fef0352495c47a204c0d2d1b7"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"f9be17538493168d0677a90584950730aaef69d2","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":16,"id":"912986bc_8fe99321","updated":"2023-09-08 16:56:26.000000000","message":"Revisions since PS14 LGTM.  Once https://review.opendev.org/c/openstack/tempest/+/894269 has merged (still about an hour away), hopefully we\u0027ll get a clean CI run.","commit_id":"e954ba02de36422fef0352495c47a204c0d2d1b7"},{"author":{"_account_id":33609,"name":"XuQi","display_name":"Inori","email":"xuq.fnstxz@fujitsu.com","username":"inori"},"change_message_id":"773a667b4ff1c1c489e42d62cb3ec9719d4c45b2","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":16,"id":"e90067f0_cee13721","updated":"2023-09-08 11:07:40.000000000","message":"Since we haven\u0027t made any changes to the code logic this time, only modified comments and release notes, but our CI environment is currently having issues causing it to fail, can we proceed with the code review?","commit_id":"e954ba02de36422fef0352495c47a204c0d2d1b7"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"7f582bb7f2f4627b6845471720f800e0242da8dc","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":16,"id":"47ba65c5_a3e5f7c9","updated":"2023-09-09 03:25:07.000000000","message":"cinder-tempest-plugin-lvm-lio-barbican failures are not related to this patch, and did pass on a prior run with this patch set, so I think this is ready to merge","commit_id":"e954ba02de36422fef0352495c47a204c0d2d1b7"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"42eb43b777702d6b772b9b9837d466550e46ebc0","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":16,"id":"83922eb8_5b476979","updated":"2023-09-08 19:35:35.000000000","message":"neutron-ovs-grenade-multinode failed on the patch we\u0027re waiting on, so we\u0027re looking at another 2 hours before a recheck here will be of any use","commit_id":"e954ba02de36422fef0352495c47a204c0d2d1b7"},{"author":{"_account_id":33609,"name":"XuQi","display_name":"Inori","email":"xuq.fnstxz@fujitsu.com","username":"inori"},"change_message_id":"71b4d988e475ab8c22cc4d4c6268991e5168a1aa","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":16,"id":"0b3afc34_080e25fc","updated":"2023-09-09 00:47:30.000000000","message":"recheck cinder-plugin-ceph-tempest","commit_id":"e954ba02de36422fef0352495c47a204c0d2d1b7"},{"author":{"_account_id":33609,"name":"XuQi","display_name":"Inori","email":"xuq.fnstxz@fujitsu.com","username":"inori"},"change_message_id":"687d938426ced773020bb8a37e95b4eaa0645d50","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":16,"id":"e0a83d66_64206c56","updated":"2023-09-08 06:49:16.000000000","message":"recheck cinder-plugin-ceph-tempest","commit_id":"e954ba02de36422fef0352495c47a204c0d2d1b7"},{"author":{"_account_id":33609,"name":"XuQi","display_name":"Inori","email":"xuq.fnstxz@fujitsu.com","username":"inori"},"change_message_id":"9907e75cccf1c2bb8cee9f888b86b33034918c8b","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":16,"id":"84814d88_d58cda0c","updated":"2023-09-09 03:17:13.000000000","message":"recheck cinder-tempest-plugin-lvm-lio-barbican","commit_id":"e954ba02de36422fef0352495c47a204c0d2d1b7"},{"author":{"_account_id":33609,"name":"XuQi","display_name":"Inori","email":"xuq.fnstxz@fujitsu.com","username":"inori"},"change_message_id":"89894bc9ba83e45aa5ccab102682121e3b145ecf","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":16,"id":"8342c5a6_e2ce6b11","updated":"2023-09-08 12:28:25.000000000","message":"recheck tempest-integrated-storage","commit_id":"e954ba02de36422fef0352495c47a204c0d2d1b7"},{"author":{"_account_id":33609,"name":"XuQi","display_name":"Inori","email":"xuq.fnstxz@fujitsu.com","username":"inori"},"change_message_id":"4ddc83cb49b76d557fbceef2c1573486fe514e05","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":16,"id":"c07ffc54_71614405","updated":"2023-09-08 08:59:21.000000000","message":"recheck tempest-slow-py3","commit_id":"e954ba02de36422fef0352495c47a204c0d2d1b7"},{"author":{"_account_id":33609,"name":"XuQi","display_name":"Inori","email":"xuq.fnstxz@fujitsu.com","username":"inori"},"change_message_id":"651c12465739602fab8eea126644fd548eca0a4f","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":16,"id":"ff9adc54_c7528611","in_reply_to":"47ba65c5_a3e5f7c9","updated":"2023-09-09 03:42:14.000000000","message":"Thanks for your voting and reply. Because the status of verified is -1 now, and I\u0027ve just executed \u0027recheck cinder-tempest-plugin-lvm-lio-barbican\u0027, so could you please tell me is there anything else we need to do?","commit_id":"e954ba02de36422fef0352495c47a204c0d2d1b7"},{"author":{"_account_id":33609,"name":"XuQi","display_name":"Inori","email":"xuq.fnstxz@fujitsu.com","username":"inori"},"change_message_id":"596f1ae49191a2a41bd4f983568ca9bf95478bea","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":16,"id":"97884ded_1a9d24ed","in_reply_to":"83922eb8_5b476979","updated":"2023-09-09 01:05:18.000000000","message":"Thanks for your understanding, it\u0027s pretty important to us. Now https://review.opendev.org/c/openstack/tempest/+/894269 has been merged, I\u0027m recheking this patch.","commit_id":"e954ba02de36422fef0352495c47a204c0d2d1b7"},{"author":{"_account_id":33609,"name":"XuQi","display_name":"Inori","email":"xuq.fnstxz@fujitsu.com","username":"inori"},"change_message_id":"05c6ce44a45162e1ea79483571b3d8172830ca37","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":16,"id":"343e6a20_812b2f1a","in_reply_to":"d035358a_4f259614","updated":"2023-09-08 11:54:36.000000000","message":"Thanks for your review and understanding. Your +2 is pretty important to us.","commit_id":"e954ba02de36422fef0352495c47a204c0d2d1b7"}],"cinder/tests/unit/volume/drivers/test_fujitsu_dx.py":[{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"4571918073557c02ba3aed0ae02fa7f727f9289a","unresolved":true,"context_lines":[{"line_number":263,"context_line":""},{"line_number":264,"context_line":"# VolumeQOS metadata info"},{"line_number":265,"context_line":"FAKE_LUN_META_QOS \u003d {"},{"line_number":266,"context_line":"    \u0027FJ_Pool_Type\u0027: \u0027Thinporvisioning_POOL\u0027,"},{"line_number":267,"context_line":"    \u0027FJ_Volume_No\u0027: FAKE_LUN_NO_QOS,"},{"line_number":268,"context_line":"    \u0027FJ_Volume_Name\u0027: \u0027FJosv_mIsapeuZOaSXz4LYTqFcug\u003d\u003d\u0027,"},{"line_number":269,"context_line":"    \u0027FJ_Pool_Name\u0027: STORAGE_TYPE,"}],"source_content_type":"text/x-python","patch_set":14,"id":"f075a831_ecea95f5","line":266,"range":{"start_line":266,"start_character":21,"end_line":266,"end_character":37},"updated":"2023-09-06 19:56:34.000000000","message":"It doesn\u0027t seem to affect the tests, but note that this is misspelled (here and throughout).","commit_id":"7cf5ecef4c9a80a6d49b216eabda85c75ebe47d6"},{"author":{"_account_id":33609,"name":"XuQi","display_name":"Inori","email":"xuq.fnstxz@fujitsu.com","username":"inori"},"change_message_id":"40e6690e0563584a1235142d43e36f589371566b","unresolved":false,"context_lines":[{"line_number":263,"context_line":""},{"line_number":264,"context_line":"# VolumeQOS metadata info"},{"line_number":265,"context_line":"FAKE_LUN_META_QOS \u003d {"},{"line_number":266,"context_line":"    \u0027FJ_Pool_Type\u0027: \u0027Thinporvisioning_POOL\u0027,"},{"line_number":267,"context_line":"    \u0027FJ_Volume_No\u0027: FAKE_LUN_NO_QOS,"},{"line_number":268,"context_line":"    \u0027FJ_Volume_Name\u0027: \u0027FJosv_mIsapeuZOaSXz4LYTqFcug\u003d\u003d\u0027,"},{"line_number":269,"context_line":"    \u0027FJ_Pool_Name\u0027: STORAGE_TYPE,"}],"source_content_type":"text/x-python","patch_set":14,"id":"eb1dad31_9442432f","line":266,"range":{"start_line":266,"start_character":21,"end_line":266,"end_character":37},"in_reply_to":"f075a831_ecea95f5","updated":"2023-09-07 12:46:09.000000000","message":"The misspelling here is indeed present, but due to certain reasons, we need to retain this misspelling. \nI have added comments in the relevant places.","commit_id":"7cf5ecef4c9a80a6d49b216eabda85c75ebe47d6"}],"cinder/volume/drivers/fujitsu/eternus_dx/constants.py":[{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"dc6bef51755844a626c60bec35306d49bc8f644d","unresolved":true,"context_lines":[{"line_number":49,"context_line":""},{"line_number":50,"context_line":"QOS_VERSION \u003d \u0027V11L30-0000\u0027"},{"line_number":51,"context_line":"# Here is a misspelling, and the right value should be \"Thinprovisioning_POOL\"."},{"line_number":52,"context_line":"# Due to certain reasons, this spelling mistake needs to be retained."},{"line_number":53,"context_line":"POOL_TYPE_dic \u003d {"},{"line_number":54,"context_line":"    RAIDGROUP: \u0027RAID_GROUP\u0027,"},{"line_number":55,"context_line":"    TPPOOL: \u0027Thinporvisioning_POOL\u0027,"}],"source_content_type":"text/x-python","patch_set":15,"id":"29034ef7_91b95fae","line":52,"range":{"start_line":52,"start_character":2,"end_line":52,"end_character":24},"updated":"2023-09-07 13:47:19.000000000","message":"would be better if we had some brief description of the reason\nlike it would not be compatible with the metadata of the legacy volumes[1] and we need a better mechanism to handle this maintaining compatibility\n\n[1] https://opendev.org/openstack/cinder/src/branch/master/cinder/volume/drivers/fujitsu/eternus_dx/eternus_dx_common.py#L217","commit_id":"8d674136beb4183d9b6a35482e73c23e699e2047"},{"author":{"_account_id":33609,"name":"XuQi","display_name":"Inori","email":"xuq.fnstxz@fujitsu.com","username":"inori"},"change_message_id":"12b0b05a03ce51467bd0115ea06ee5980fa0d6e7","unresolved":false,"context_lines":[{"line_number":49,"context_line":""},{"line_number":50,"context_line":"QOS_VERSION \u003d \u0027V11L30-0000\u0027"},{"line_number":51,"context_line":"# Here is a misspelling, and the right value should be \"Thinprovisioning_POOL\"."},{"line_number":52,"context_line":"# Due to certain reasons, this spelling mistake needs to be retained."},{"line_number":53,"context_line":"POOL_TYPE_dic \u003d {"},{"line_number":54,"context_line":"    RAIDGROUP: \u0027RAID_GROUP\u0027,"},{"line_number":55,"context_line":"    TPPOOL: \u0027Thinporvisioning_POOL\u0027,"}],"source_content_type":"text/x-python","patch_set":15,"id":"89886ce1_2dd64fa7","line":52,"range":{"start_line":52,"start_character":2,"end_line":52,"end_character":24},"in_reply_to":"29034ef7_91b95fae","updated":"2023-09-08 03:49:39.000000000","message":"Yes, it it would not be compatible with the metadata of the legacy volumes. \nWe will consider a better mechanism to handle this maintaining compatibility in the future.","commit_id":"8d674136beb4183d9b6a35482e73c23e699e2047"}],"cinder/volume/drivers/fujitsu/eternus_dx/eternus_dx_cli.py":[{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"d4945ad9584f72aac55f8f0d78dd53969c842b63","unresolved":true,"context_lines":[{"line_number":273,"context_line":""},{"line_number":274,"context_line":"        return output"},{"line_number":275,"context_line":""},{"line_number":276,"context_line":"    def _show_qos_bandwidth_limit(self, **option):"},{"line_number":277,"context_line":"        \"\"\"Get qos bandwidth limit.\"\"\""},{"line_number":278,"context_line":"        clidata \u003d None"},{"line_number":279,"context_line":"        try:"},{"line_number":280,"context_line":"            output \u003d self._exec_cli(\"show qos-bandwidth-limit\", **option)"},{"line_number":281,"context_line":""},{"line_number":282,"context_line":"            # return error"},{"line_number":283,"context_line":"            rc \u003d output[\u0027rc\u0027]"},{"line_number":284,"context_line":""},{"line_number":285,"context_line":"            if rc !\u003d \"0\":"},{"line_number":286,"context_line":"                return output"},{"line_number":287,"context_line":""},{"line_number":288,"context_line":"            qoslist \u003d []"},{"line_number":289,"context_line":"            clidatalist \u003d output.get(\u0027message\u0027)"},{"line_number":290,"context_line":""},{"line_number":291,"context_line":"            for clidataline in clidatalist[1:]:"},{"line_number":292,"context_line":"                clidata \u003d clidataline.split(\u0027\\t\u0027)"},{"line_number":293,"context_line":"                qoslist.append({\u0027total_limit\u0027: int(clidata[0], 16),"},{"line_number":294,"context_line":"                                \u0027total_iops_sec\u0027: int(clidata[1], 16),"},{"line_number":295,"context_line":"                                \u0027total_bytes_sec\u0027: int(clidata[2], 16),"},{"line_number":296,"context_line":"                                \u0027read_limit\u0027: int(clidata[0], 16),"},{"line_number":297,"context_line":"                                \u0027read_iops_sec\u0027: int(clidata[3], 16),"},{"line_number":298,"context_line":"                                \u0027read_bytes_sec\u0027: int(clidata[4], 16),"},{"line_number":299,"context_line":"                                \u0027write_limit\u0027: int(clidata[0], 16),"},{"line_number":300,"context_line":"                                \u0027write_iops_sec\u0027: int(clidata[5], 16),"},{"line_number":301,"context_line":"                                \u0027write_bytes_sec\u0027: int(clidata[6], 16)})"},{"line_number":302,"context_line":""},{"line_number":303,"context_line":"            output[\u0027message\u0027] \u003d qoslist"},{"line_number":304,"context_line":""},{"line_number":305,"context_line":"        except IndexError as ex:"},{"line_number":306,"context_line":"            msg \u003d (\u0027The results returned by cli are not as expected. \u0027"},{"line_number":307,"context_line":"                   \u0027Exception string: %s\u0027 % clidata)"},{"line_number":308,"context_line":"            output \u003d {\u0027result\u0027: 0,"},{"line_number":309,"context_line":"                      \u0027rc\u0027: \u00274\u0027,"},{"line_number":310,"context_line":"                      \u0027message\u0027: \"Show qos bandwidth limit error: %s. %s\""},{"line_number":311,"context_line":"                                 % (ex, msg)}"},{"line_number":312,"context_line":""},{"line_number":313,"context_line":"        except Exception as ex:"},{"line_number":314,"context_line":"            output \u003d {\u0027result\u0027: 0,"},{"line_number":315,"context_line":"                      \u0027rc\u0027: \u00274\u0027,"},{"line_number":316,"context_line":"                      \u0027message\u0027: \"Show qos bandwidth limit error: %s\" % ex}"},{"line_number":317,"context_line":""},{"line_number":318,"context_line":"        return output"},{"line_number":319,"context_line":""},{"line_number":320,"context_line":"    def _set_qos_bandwidth_limit(self, **option):"},{"line_number":321,"context_line":"        \"\"\"Set qos bandwidth limit\"\"\""},{"line_number":322,"context_line":"        return self._exec_cli(\"set qos-bandwidth-limit\", **option)"},{"line_number":323,"context_line":""},{"line_number":324,"context_line":"    def _show_volume_qos(self, **option):"},{"line_number":325,"context_line":"        \"\"\"Get volumes with qos.\"\"\""},{"line_number":326,"context_line":"        clidata \u003d None"},{"line_number":327,"context_line":"        try:"},{"line_number":328,"context_line":"            output \u003d self._exec_cli(\"show volume-qos\", **option)"},{"line_number":329,"context_line":""},{"line_number":330,"context_line":"            # return error"},{"line_number":331,"context_line":"            rc \u003d output[\u0027rc\u0027]"},{"line_number":332,"context_line":""},{"line_number":333,"context_line":"            if rc !\u003d \"0\":"},{"line_number":334,"context_line":"                return output"},{"line_number":335,"context_line":""},{"line_number":336,"context_line":"            vqosdatalist \u003d []"},{"line_number":337,"context_line":"            clidatalist \u003d output.get(\u0027message\u0027)"},{"line_number":338,"context_line":""},{"line_number":339,"context_line":"            for clidataline in clidatalist[1:]:"},{"line_number":340,"context_line":"                clidata \u003d clidataline.split(\u0027\\t\u0027)"},{"line_number":341,"context_line":"                vqosdatalist.append({\u0027total_limit\u0027: int(clidata[2], 16),"},{"line_number":342,"context_line":"                                     \u0027read_limit\u0027: int(clidata[3], 16),"},{"line_number":343,"context_line":"                                     \u0027write_limit\u0027: int(clidata[4], 16)})"},{"line_number":344,"context_line":""},{"line_number":345,"context_line":"            output[\u0027message\u0027] \u003d vqosdatalist"},{"line_number":346,"context_line":""},{"line_number":347,"context_line":"        except IndexError as ex:"},{"line_number":348,"context_line":"            msg \u003d (\u0027The results returned by cli are not as expected. \u0027"},{"line_number":349,"context_line":"                   \u0027Exception string: %s\u0027 % clidata)"},{"line_number":350,"context_line":"            output \u003d {\u0027result\u0027: 0,"},{"line_number":351,"context_line":"                      \u0027rc\u0027: \u00274\u0027,"},{"line_number":352,"context_line":"                      \u0027message\u0027: \"Show volume qos error: %s. %s\" % (ex, msg)}"},{"line_number":353,"context_line":""},{"line_number":354,"context_line":"        except Exception as ex:"},{"line_number":355,"context_line":"            output \u003d {\u0027result\u0027: 0,"},{"line_number":356,"context_line":"                      \u0027rc\u0027: \u00274\u0027,"},{"line_number":357,"context_line":"                      \u0027message\u0027: \"Show volume qos error: %s\" % ex}"},{"line_number":358,"context_line":""},{"line_number":359,"context_line":"        return output"},{"line_number":360,"context_line":""},{"line_number":361,"context_line":"    def _show_enclosure_status(self, **option):"},{"line_number":362,"context_line":"        \"\"\"Get the version of machine.\"\"\""},{"line_number":363,"context_line":"        clidata \u003d None"},{"line_number":364,"context_line":"        try:"},{"line_number":365,"context_line":"            output \u003d self._exec_cli(\"show enclosure-status\", **option)"},{"line_number":366,"context_line":""},{"line_number":367,"context_line":"            # return error"},{"line_number":368,"context_line":"            rc \u003d output[\u0027rc\u0027]"},{"line_number":369,"context_line":""},{"line_number":370,"context_line":"            if rc !\u003d \"0\":"},{"line_number":371,"context_line":"                return output"},{"line_number":372,"context_line":""},{"line_number":373,"context_line":"            clidatalist \u003d output.get(\u0027message\u0027)"},{"line_number":374,"context_line":"            clidata \u003d clidatalist[0].split(\u0027\\t\u0027)"},{"line_number":375,"context_line":"            versioninfo \u003d {\u0027version\u0027: clidata[11]}"},{"line_number":376,"context_line":""},{"line_number":377,"context_line":"            output[\u0027message\u0027] \u003d versioninfo"},{"line_number":378,"context_line":""},{"line_number":379,"context_line":"        except IndexError as ex:"},{"line_number":380,"context_line":"            msg \u003d (\u0027The results returned by cli are not as expected. \u0027"},{"line_number":381,"context_line":"                   \u0027Exception string: %s\u0027 % clidata)"},{"line_number":382,"context_line":"            output \u003d {\u0027result\u0027: 0,"},{"line_number":383,"context_line":"                      \u0027rc\u0027: \u00274\u0027,"},{"line_number":384,"context_line":"                      \u0027message\u0027: \"Show enclosure status error: %s. %s\""},{"line_number":385,"context_line":"                                 % (ex, msg)}"},{"line_number":386,"context_line":""},{"line_number":387,"context_line":"        except Exception as ex:"},{"line_number":388,"context_line":"            output \u003d {\u0027result\u0027: 0,"},{"line_number":389,"context_line":"                      \u0027rc\u0027: \u00274\u0027,"},{"line_number":390,"context_line":"                      \u0027message\u0027: \"Show enclosure status error: %s\" % ex}"},{"line_number":391,"context_line":""},{"line_number":392,"context_line":"        return output"},{"line_number":393,"context_line":""},{"line_number":394,"context_line":"    def _delete_volume(self, **option):"},{"line_number":395,"context_line":"        \"\"\"Exec delete volume.\"\"\""},{"line_number":396,"context_line":"        return self._exec_cli(\u0027delete volume\u0027, **option)"}],"source_content_type":"text/x-python","patch_set":12,"id":"cb9187c3_9494134d","line":396,"range":{"start_line":276,"start_character":0,"end_line":396,"end_character":56},"updated":"2023-08-09 12:36:02.000000000","message":"are we testing these methods? or a broader question is, are we testing this file at all?","commit_id":"a570b5382f9079e6c49d60ad0860dfd7e9f0efbe"},{"author":{"_account_id":33609,"name":"XuQi","display_name":"Inori","email":"xuq.fnstxz@fujitsu.com","username":"inori"},"change_message_id":"3b9750994d8ffe63f88e0df3f6f022f6a5635d7e","unresolved":false,"context_lines":[{"line_number":273,"context_line":""},{"line_number":274,"context_line":"        return output"},{"line_number":275,"context_line":""},{"line_number":276,"context_line":"    def _show_qos_bandwidth_limit(self, **option):"},{"line_number":277,"context_line":"        \"\"\"Get qos bandwidth limit.\"\"\""},{"line_number":278,"context_line":"        clidata \u003d None"},{"line_number":279,"context_line":"        try:"},{"line_number":280,"context_line":"            output \u003d self._exec_cli(\"show qos-bandwidth-limit\", **option)"},{"line_number":281,"context_line":""},{"line_number":282,"context_line":"            # return error"},{"line_number":283,"context_line":"            rc \u003d output[\u0027rc\u0027]"},{"line_number":284,"context_line":""},{"line_number":285,"context_line":"            if rc !\u003d \"0\":"},{"line_number":286,"context_line":"                return output"},{"line_number":287,"context_line":""},{"line_number":288,"context_line":"            qoslist \u003d []"},{"line_number":289,"context_line":"            clidatalist \u003d output.get(\u0027message\u0027)"},{"line_number":290,"context_line":""},{"line_number":291,"context_line":"            for clidataline in clidatalist[1:]:"},{"line_number":292,"context_line":"                clidata \u003d clidataline.split(\u0027\\t\u0027)"},{"line_number":293,"context_line":"                qoslist.append({\u0027total_limit\u0027: int(clidata[0], 16),"},{"line_number":294,"context_line":"                                \u0027total_iops_sec\u0027: int(clidata[1], 16),"},{"line_number":295,"context_line":"                                \u0027total_bytes_sec\u0027: int(clidata[2], 16),"},{"line_number":296,"context_line":"                                \u0027read_limit\u0027: int(clidata[0], 16),"},{"line_number":297,"context_line":"                                \u0027read_iops_sec\u0027: int(clidata[3], 16),"},{"line_number":298,"context_line":"                                \u0027read_bytes_sec\u0027: int(clidata[4], 16),"},{"line_number":299,"context_line":"                                \u0027write_limit\u0027: int(clidata[0], 16),"},{"line_number":300,"context_line":"                                \u0027write_iops_sec\u0027: int(clidata[5], 16),"},{"line_number":301,"context_line":"                                \u0027write_bytes_sec\u0027: int(clidata[6], 16)})"},{"line_number":302,"context_line":""},{"line_number":303,"context_line":"            output[\u0027message\u0027] \u003d qoslist"},{"line_number":304,"context_line":""},{"line_number":305,"context_line":"        except IndexError as ex:"},{"line_number":306,"context_line":"            msg \u003d (\u0027The results returned by cli are not as expected. \u0027"},{"line_number":307,"context_line":"                   \u0027Exception string: %s\u0027 % clidata)"},{"line_number":308,"context_line":"            output \u003d {\u0027result\u0027: 0,"},{"line_number":309,"context_line":"                      \u0027rc\u0027: \u00274\u0027,"},{"line_number":310,"context_line":"                      \u0027message\u0027: \"Show qos bandwidth limit error: %s. %s\""},{"line_number":311,"context_line":"                                 % (ex, msg)}"},{"line_number":312,"context_line":""},{"line_number":313,"context_line":"        except Exception as ex:"},{"line_number":314,"context_line":"            output \u003d {\u0027result\u0027: 0,"},{"line_number":315,"context_line":"                      \u0027rc\u0027: \u00274\u0027,"},{"line_number":316,"context_line":"                      \u0027message\u0027: \"Show qos bandwidth limit error: %s\" % ex}"},{"line_number":317,"context_line":""},{"line_number":318,"context_line":"        return output"},{"line_number":319,"context_line":""},{"line_number":320,"context_line":"    def _set_qos_bandwidth_limit(self, **option):"},{"line_number":321,"context_line":"        \"\"\"Set qos bandwidth limit\"\"\""},{"line_number":322,"context_line":"        return self._exec_cli(\"set qos-bandwidth-limit\", **option)"},{"line_number":323,"context_line":""},{"line_number":324,"context_line":"    def _show_volume_qos(self, **option):"},{"line_number":325,"context_line":"        \"\"\"Get volumes with qos.\"\"\""},{"line_number":326,"context_line":"        clidata \u003d None"},{"line_number":327,"context_line":"        try:"},{"line_number":328,"context_line":"            output \u003d self._exec_cli(\"show volume-qos\", **option)"},{"line_number":329,"context_line":""},{"line_number":330,"context_line":"            # return error"},{"line_number":331,"context_line":"            rc \u003d output[\u0027rc\u0027]"},{"line_number":332,"context_line":""},{"line_number":333,"context_line":"            if rc !\u003d \"0\":"},{"line_number":334,"context_line":"                return output"},{"line_number":335,"context_line":""},{"line_number":336,"context_line":"            vqosdatalist \u003d []"},{"line_number":337,"context_line":"            clidatalist \u003d output.get(\u0027message\u0027)"},{"line_number":338,"context_line":""},{"line_number":339,"context_line":"            for clidataline in clidatalist[1:]:"},{"line_number":340,"context_line":"                clidata \u003d clidataline.split(\u0027\\t\u0027)"},{"line_number":341,"context_line":"                vqosdatalist.append({\u0027total_limit\u0027: int(clidata[2], 16),"},{"line_number":342,"context_line":"                                     \u0027read_limit\u0027: int(clidata[3], 16),"},{"line_number":343,"context_line":"                                     \u0027write_limit\u0027: int(clidata[4], 16)})"},{"line_number":344,"context_line":""},{"line_number":345,"context_line":"            output[\u0027message\u0027] \u003d vqosdatalist"},{"line_number":346,"context_line":""},{"line_number":347,"context_line":"        except IndexError as ex:"},{"line_number":348,"context_line":"            msg \u003d (\u0027The results returned by cli are not as expected. \u0027"},{"line_number":349,"context_line":"                   \u0027Exception string: %s\u0027 % clidata)"},{"line_number":350,"context_line":"            output \u003d {\u0027result\u0027: 0,"},{"line_number":351,"context_line":"                      \u0027rc\u0027: \u00274\u0027,"},{"line_number":352,"context_line":"                      \u0027message\u0027: \"Show volume qos error: %s. %s\" % (ex, msg)}"},{"line_number":353,"context_line":""},{"line_number":354,"context_line":"        except Exception as ex:"},{"line_number":355,"context_line":"            output \u003d {\u0027result\u0027: 0,"},{"line_number":356,"context_line":"                      \u0027rc\u0027: \u00274\u0027,"},{"line_number":357,"context_line":"                      \u0027message\u0027: \"Show volume qos error: %s\" % ex}"},{"line_number":358,"context_line":""},{"line_number":359,"context_line":"        return output"},{"line_number":360,"context_line":""},{"line_number":361,"context_line":"    def _show_enclosure_status(self, **option):"},{"line_number":362,"context_line":"        \"\"\"Get the version of machine.\"\"\""},{"line_number":363,"context_line":"        clidata \u003d None"},{"line_number":364,"context_line":"        try:"},{"line_number":365,"context_line":"            output \u003d self._exec_cli(\"show enclosure-status\", **option)"},{"line_number":366,"context_line":""},{"line_number":367,"context_line":"            # return error"},{"line_number":368,"context_line":"            rc \u003d output[\u0027rc\u0027]"},{"line_number":369,"context_line":""},{"line_number":370,"context_line":"            if rc !\u003d \"0\":"},{"line_number":371,"context_line":"                return output"},{"line_number":372,"context_line":""},{"line_number":373,"context_line":"            clidatalist \u003d output.get(\u0027message\u0027)"},{"line_number":374,"context_line":"            clidata \u003d clidatalist[0].split(\u0027\\t\u0027)"},{"line_number":375,"context_line":"            versioninfo \u003d {\u0027version\u0027: clidata[11]}"},{"line_number":376,"context_line":""},{"line_number":377,"context_line":"            output[\u0027message\u0027] \u003d versioninfo"},{"line_number":378,"context_line":""},{"line_number":379,"context_line":"        except IndexError as ex:"},{"line_number":380,"context_line":"            msg \u003d (\u0027The results returned by cli are not as expected. \u0027"},{"line_number":381,"context_line":"                   \u0027Exception string: %s\u0027 % clidata)"},{"line_number":382,"context_line":"            output \u003d {\u0027result\u0027: 0,"},{"line_number":383,"context_line":"                      \u0027rc\u0027: \u00274\u0027,"},{"line_number":384,"context_line":"                      \u0027message\u0027: \"Show enclosure status error: %s. %s\""},{"line_number":385,"context_line":"                                 % (ex, msg)}"},{"line_number":386,"context_line":""},{"line_number":387,"context_line":"        except Exception as ex:"},{"line_number":388,"context_line":"            output \u003d {\u0027result\u0027: 0,"},{"line_number":389,"context_line":"                      \u0027rc\u0027: \u00274\u0027,"},{"line_number":390,"context_line":"                      \u0027message\u0027: \"Show enclosure status error: %s\" % ex}"},{"line_number":391,"context_line":""},{"line_number":392,"context_line":"        return output"},{"line_number":393,"context_line":""},{"line_number":394,"context_line":"    def _delete_volume(self, **option):"},{"line_number":395,"context_line":"        \"\"\"Exec delete volume.\"\"\""},{"line_number":396,"context_line":"        return self._exec_cli(\u0027delete volume\u0027, **option)"}],"source_content_type":"text/x-python","patch_set":12,"id":"e03122b1_aa89913c","line":396,"range":{"start_line":276,"start_character":0,"end_line":396,"end_character":56},"in_reply_to":"cb9187c3_9494134d","updated":"2023-08-22 02:38:02.000000000","message":"Done","commit_id":"a570b5382f9079e6c49d60ad0860dfd7e9f0efbe"}],"cinder/volume/drivers/fujitsu/eternus_dx/eternus_dx_common.py":[{"author":{"_account_id":29122,"name":"Raghavendra Tilay","email":"raghavendra-uddhav.tilay@hpe.com","username":"raghavendrat"},"change_message_id":"879e3b1390ee39b168663012e0045d4fcd73d4f7","unresolved":true,"context_lines":[{"line_number":2699,"context_line":""},{"line_number":2700,"context_line":"            # If storage version is before V11L30."},{"line_number":2701,"context_line":"            # Only support \"maxBWS\" parameter."},{"line_number":2702,"context_line":"            if clidata[\u0027version\u0027] \u003c \u0027V11L30-0000\u0027:"},{"line_number":2703,"context_line":"                for key, value in qos_specs_dict.items():"},{"line_number":2704,"context_line":"                    if (key in CONSTANTS.FJ_QOS_KEY_BYTES_list or"},{"line_number":2705,"context_line":"                            key in CONSTANTS.FJ_QOS_KEY_IOPS_list):"}],"source_content_type":"text/x-python","patch_set":3,"id":"ea1421bd_fe88d228","line":2702,"range":{"start_line":2702,"start_character":37,"end_line":2702,"end_character":48},"updated":"2022-07-06 06:05:55.000000000","message":"This version V11L30 is used at 3 places.\nWould it be better to define it as constant in constants.py file?","commit_id":"a5e4d5783a47948577cfd4f3aa6a393760d98ec6"},{"author":{"_account_id":33609,"name":"XuQi","display_name":"Inori","email":"xuq.fnstxz@fujitsu.com","username":"inori"},"change_message_id":"71c448bc5e809ccda4a60ade11b86e253857fe48","unresolved":false,"context_lines":[{"line_number":2699,"context_line":""},{"line_number":2700,"context_line":"            # If storage version is before V11L30."},{"line_number":2701,"context_line":"            # Only support \"maxBWS\" parameter."},{"line_number":2702,"context_line":"            if clidata[\u0027version\u0027] \u003c \u0027V11L30-0000\u0027:"},{"line_number":2703,"context_line":"                for key, value in qos_specs_dict.items():"},{"line_number":2704,"context_line":"                    if (key in CONSTANTS.FJ_QOS_KEY_BYTES_list or"},{"line_number":2705,"context_line":"                            key in CONSTANTS.FJ_QOS_KEY_IOPS_list):"}],"source_content_type":"text/x-python","patch_set":3,"id":"413046f9_b7a1054a","line":2702,"range":{"start_line":2702,"start_character":37,"end_line":2702,"end_character":48},"in_reply_to":"ea1421bd_fe88d228","updated":"2022-07-15 06:15:30.000000000","message":"Thanks for your review. We\u0027ve done it.","commit_id":"a5e4d5783a47948577cfd4f3aa6a393760d98ec6"},{"author":{"_account_id":29122,"name":"Raghavendra Tilay","email":"raghavendra-uddhav.tilay@hpe.com","username":"raghavendrat"},"change_message_id":"879e3b1390ee39b168663012e0045d4fcd73d4f7","unresolved":true,"context_lines":[{"line_number":2705,"context_line":"                            key in CONSTANTS.FJ_QOS_KEY_IOPS_list):"},{"line_number":2706,"context_line":"                        msg \u003d (_(\u0027_set_qos, Can not support QoS \u0027"},{"line_number":2707,"context_line":"                                 \u0027parameter \"%(key)s\" on firmware version \u0027"},{"line_number":2708,"context_line":"                                 \u0027%(version)s.\u0027)"},{"line_number":2709,"context_line":"                               % {\u0027key\u0027: key,"},{"line_number":2710,"context_line":"                                  \u0027version\u0027: clidata[\u0027version\u0027]})"},{"line_number":2711,"context_line":"                        LOG.warning(msg)"}],"source_content_type":"text/x-python","patch_set":3,"id":"7f0dd271_5da79edd","line":2708,"updated":"2022-07-06 06:05:55.000000000","message":"Can we add one more line saying ... Minimum V11L30 is required for QoS.","commit_id":"a5e4d5783a47948577cfd4f3aa6a393760d98ec6"},{"author":{"_account_id":33609,"name":"XuQi","display_name":"Inori","email":"xuq.fnstxz@fujitsu.com","username":"inori"},"change_message_id":"71c448bc5e809ccda4a60ade11b86e253857fe48","unresolved":false,"context_lines":[{"line_number":2705,"context_line":"                            key in CONSTANTS.FJ_QOS_KEY_IOPS_list):"},{"line_number":2706,"context_line":"                        msg \u003d (_(\u0027_set_qos, Can not support QoS \u0027"},{"line_number":2707,"context_line":"                                 \u0027parameter \"%(key)s\" on firmware version \u0027"},{"line_number":2708,"context_line":"                                 \u0027%(version)s.\u0027)"},{"line_number":2709,"context_line":"                               % {\u0027key\u0027: key,"},{"line_number":2710,"context_line":"                                  \u0027version\u0027: clidata[\u0027version\u0027]})"},{"line_number":2711,"context_line":"                        LOG.warning(msg)"}],"source_content_type":"text/x-python","patch_set":3,"id":"9e2280ea_8a83856a","line":2708,"in_reply_to":"7f0dd271_5da79edd","updated":"2022-07-15 06:15:30.000000000","message":"Thanks for your review. We\u0027ve done it.","commit_id":"a5e4d5783a47948577cfd4f3aa6a393760d98ec6"},{"author":{"_account_id":29122,"name":"Raghavendra Tilay","email":"raghavendra-uddhav.tilay@hpe.com","username":"raghavendrat"},"change_message_id":"879e3b1390ee39b168663012e0045d4fcd73d4f7","unresolved":true,"context_lines":[{"line_number":2903,"context_line":"                   % {\u0027key\u0027: key})"},{"line_number":2904,"context_line":"            LOG.warning(msg)"},{"line_number":2905,"context_line":"            raise exception.VolumeBackendAPIException(data\u003dmsg)"},{"line_number":2906,"context_line":"        return int(value)"},{"line_number":2907,"context_line":""},{"line_number":2908,"context_line":"    def _check_throughput(self, key, value):"},{"line_number":2909,"context_line":"        LOG.debug(\u0027_check_throughput, key: %(key)s, value: %(value)s.\u0027,"}],"source_content_type":"text/x-python","patch_set":3,"id":"43e3d914_085f2e67","line":2906,"range":{"start_line":2906,"start_character":15,"end_line":2906,"end_character":25},"updated":"2022-07-06 06:05:55.000000000","message":"Just few lines above (at 2899), value is already converted to int.\nIn this line, converting again to int may not be required.","commit_id":"a5e4d5783a47948577cfd4f3aa6a393760d98ec6"},{"author":{"_account_id":33609,"name":"XuQi","display_name":"Inori","email":"xuq.fnstxz@fujitsu.com","username":"inori"},"change_message_id":"71c448bc5e809ccda4a60ade11b86e253857fe48","unresolved":false,"context_lines":[{"line_number":2903,"context_line":"                   % {\u0027key\u0027: key})"},{"line_number":2904,"context_line":"            LOG.warning(msg)"},{"line_number":2905,"context_line":"            raise exception.VolumeBackendAPIException(data\u003dmsg)"},{"line_number":2906,"context_line":"        return int(value)"},{"line_number":2907,"context_line":""},{"line_number":2908,"context_line":"    def _check_throughput(self, key, value):"},{"line_number":2909,"context_line":"        LOG.debug(\u0027_check_throughput, key: %(key)s, value: %(value)s.\u0027,"}],"source_content_type":"text/x-python","patch_set":3,"id":"bb5ac0f6_2960a9bd","line":2906,"range":{"start_line":2906,"start_character":15,"end_line":2906,"end_character":25},"in_reply_to":"43e3d914_085f2e67","updated":"2022-07-15 06:15:30.000000000","message":"Thanks for your review. We\u0027ve done it.","commit_id":"a5e4d5783a47948577cfd4f3aa6a393760d98ec6"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"97ad1847b1ed6435067e1eb8be72186e605fb499","unresolved":true,"context_lines":[{"line_number":65,"context_line":""},{"line_number":66,"context_line":"    1.0   - Initial driver"},{"line_number":67,"context_line":"    1.3.0 - Community base version"},{"line_number":68,"context_line":"    1.3.0.1 - Add support for QoS."},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"    \"\"\""},{"line_number":71,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"c0e3d6c4_6791abb1","line":68,"range":{"start_line":68,"start_character":4,"end_line":68,"end_character":12},"updated":"2022-11-21 17:18:18.000000000","message":"Since you are adding new functionality, wouldn\u0027t it make more sense to make this 1.4.0? That is what I would expect from a semver perspective.","commit_id":"a08a0df886b9e839d2577227c21ceb97a0154182"},{"author":{"_account_id":33609,"name":"XuQi","display_name":"Inori","email":"xuq.fnstxz@fujitsu.com","username":"inori"},"change_message_id":"fe1e067fc3cd14c4ce91efc43f1b9a40a1df7a61","unresolved":false,"context_lines":[{"line_number":65,"context_line":""},{"line_number":66,"context_line":"    1.0   - Initial driver"},{"line_number":67,"context_line":"    1.3.0 - Community base version"},{"line_number":68,"context_line":"    1.3.0.1 - Add support for QoS."},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"    \"\"\""},{"line_number":71,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"ec082ac7_576e1e30","line":68,"range":{"start_line":68,"start_character":4,"end_line":68,"end_character":12},"in_reply_to":"c0e3d6c4_6791abb1","updated":"2022-11-22 03:53:45.000000000","message":"I\u0027ve changed the version to 1.4.0. Thanks for your review.","commit_id":"a08a0df886b9e839d2577227c21ceb97a0154182"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"97ad1847b1ed6435067e1eb8be72186e605fb499","unresolved":true,"context_lines":[{"line_number":116,"context_line":"        try:"},{"line_number":117,"context_line":"            self._set_qos(volume, use_id\u003dTrue)"},{"line_number":118,"context_line":"        except Exception as ex:"},{"line_number":119,"context_line":"            msg \u003d (_(\u0027create_volume, \u0027"},{"line_number":120,"context_line":"                     \u0027error occurred while setting volume qos.\u0027"},{"line_number":121,"context_line":"                     \u0027Error information: %(ex)s.\u0027)"},{"line_number":122,"context_line":"                   % {\u0027ex\u0027: ex})"}],"source_content_type":"text/x-python","patch_set":7,"id":"ba0cf8bc_d8db6267","line":119,"range":{"start_line":119,"start_character":12,"end_line":119,"end_character":21},"updated":"2022-11-21 17:18:18.000000000","message":"Do not preformat and translate log messages. This should just be the one LOG call:\n\n```\nLOG.error(\u0027create_volume, error occurred while setting volume qos. Error information: %s\u0027, ex)\n```","commit_id":"a08a0df886b9e839d2577227c21ceb97a0154182"},{"author":{"_account_id":33609,"name":"XuQi","display_name":"Inori","email":"xuq.fnstxz@fujitsu.com","username":"inori"},"change_message_id":"fe1e067fc3cd14c4ce91efc43f1b9a40a1df7a61","unresolved":false,"context_lines":[{"line_number":116,"context_line":"        try:"},{"line_number":117,"context_line":"            self._set_qos(volume, use_id\u003dTrue)"},{"line_number":118,"context_line":"        except Exception as ex:"},{"line_number":119,"context_line":"            msg \u003d (_(\u0027create_volume, \u0027"},{"line_number":120,"context_line":"                     \u0027error occurred while setting volume qos.\u0027"},{"line_number":121,"context_line":"                     \u0027Error information: %(ex)s.\u0027)"},{"line_number":122,"context_line":"                   % {\u0027ex\u0027: ex})"}],"source_content_type":"text/x-python","patch_set":7,"id":"d4ccf9c9_2cbd9db9","line":119,"range":{"start_line":119,"start_character":12,"end_line":119,"end_character":21},"in_reply_to":"ba0cf8bc_d8db6267","updated":"2022-11-22 03:53:45.000000000","message":"I\u0027ve modified the format of this log. Thanks for your review.","commit_id":"a08a0df886b9e839d2577227c21ceb97a0154182"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"97ad1847b1ed6435067e1eb8be72186e605fb499","unresolved":true,"context_lines":[{"line_number":143,"context_line":""},{"line_number":144,"context_line":"        configservice \u003d self._find_eternus_service(CONSTANTS.STOR_CONF)"},{"line_number":145,"context_line":"        if not configservice:"},{"line_number":146,"context_line":"            msg \u003d (_(\u0027_create_volume, volume: %(volume)s, \u0027"},{"line_number":147,"context_line":"                     \u0027volumename: %(volumename)s, \u0027"},{"line_number":148,"context_line":"                     \u0027eternus_pool: %(eternus_pool)s, \u0027"},{"line_number":149,"context_line":"                     \u0027Storage Configuration Service not found.\u0027)"}],"source_content_type":"text/x-python","patch_set":7,"id":"8e124f66_b59ed59f","line":146,"range":{"start_line":146,"start_character":12,"end_line":146,"end_character":21},"updated":"2022-11-21 17:18:18.000000000","message":"This case is fine because the string is being used to set the message in the exception that is bubbled up. We just want to avoid early formatting and doing translation for something that is only being used in a log message.","commit_id":"a08a0df886b9e839d2577227c21ceb97a0154182"},{"author":{"_account_id":33609,"name":"XuQi","display_name":"Inori","email":"xuq.fnstxz@fujitsu.com","username":"inori"},"change_message_id":"1769547c54aa6e4f6ad74cf1d02d8a8d1c9476b5","unresolved":false,"context_lines":[{"line_number":143,"context_line":""},{"line_number":144,"context_line":"        configservice \u003d self._find_eternus_service(CONSTANTS.STOR_CONF)"},{"line_number":145,"context_line":"        if not configservice:"},{"line_number":146,"context_line":"            msg \u003d (_(\u0027_create_volume, volume: %(volume)s, \u0027"},{"line_number":147,"context_line":"                     \u0027volumename: %(volumename)s, \u0027"},{"line_number":148,"context_line":"                     \u0027eternus_pool: %(eternus_pool)s, \u0027"},{"line_number":149,"context_line":"                     \u0027Storage Configuration Service not found.\u0027)"}],"source_content_type":"text/x-python","patch_set":7,"id":"8578a517_3814120e","line":146,"range":{"start_line":146,"start_character":12,"end_line":146,"end_character":21},"in_reply_to":"8e124f66_b59ed59f","updated":"2022-12-16 03:02:29.000000000","message":"Thanks for your reply.","commit_id":"a08a0df886b9e839d2577227c21ceb97a0154182"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"97ad1847b1ed6435067e1eb8be72186e605fb499","unresolved":true,"context_lines":[{"line_number":2339,"context_line":""},{"line_number":2340,"context_line":"    def _find_lun_with_listup(self, conn\u003dNone, **kwargs):"},{"line_number":2341,"context_line":"        \"\"\"Find lun instance with source name or source id on ETERNUS.\"\"\""},{"line_number":2342,"context_line":"        LOG.debug(\u0027_find_lun_with_listup start.\u0027)"},{"line_number":2343,"context_line":""},{"line_number":2344,"context_line":"        volumeinstance \u003d None"},{"line_number":2345,"context_line":"        src_id \u003d kwargs.get(\u0027source-id\u0027, None)"}],"source_content_type":"text/x-python","patch_set":7,"id":"0475545f_3cfa4c75","line":2342,"updated":"2022-11-21 17:18:18.000000000","message":"You may want to use the ``trace`` decorator instead: https://opendev.org/openstack/cinder/src/branch/master/cinder/volume/volume_utils.py#L1453","commit_id":"a08a0df886b9e839d2577227c21ceb97a0154182"},{"author":{"_account_id":33609,"name":"XuQi","display_name":"Inori","email":"xuq.fnstxz@fujitsu.com","username":"inori"},"change_message_id":"fe1e067fc3cd14c4ce91efc43f1b9a40a1df7a61","unresolved":true,"context_lines":[{"line_number":2339,"context_line":""},{"line_number":2340,"context_line":"    def _find_lun_with_listup(self, conn\u003dNone, **kwargs):"},{"line_number":2341,"context_line":"        \"\"\"Find lun instance with source name or source id on ETERNUS.\"\"\""},{"line_number":2342,"context_line":"        LOG.debug(\u0027_find_lun_with_listup start.\u0027)"},{"line_number":2343,"context_line":""},{"line_number":2344,"context_line":"        volumeinstance \u003d None"},{"line_number":2345,"context_line":"        src_id \u003d kwargs.get(\u0027source-id\u0027, None)"}],"source_content_type":"text/x-python","patch_set":7,"id":"906bc6d5_776b13ea","line":2342,"in_reply_to":"0475545f_3cfa4c75","updated":"2022-11-22 03:53:45.000000000","message":"Thank you for pointing out this problem, I know what you mean. But in addition to this function, we also used in other places. So can we keep it this time? And we will modify it next time.","commit_id":"a08a0df886b9e839d2577227c21ceb97a0154182"},{"author":{"_account_id":33609,"name":"XuQi","display_name":"Inori","email":"xuq.fnstxz@fujitsu.com","username":"inori"},"change_message_id":"1769547c54aa6e4f6ad74cf1d02d8a8d1c9476b5","unresolved":false,"context_lines":[{"line_number":2339,"context_line":""},{"line_number":2340,"context_line":"    def _find_lun_with_listup(self, conn\u003dNone, **kwargs):"},{"line_number":2341,"context_line":"        \"\"\"Find lun instance with source name or source id on ETERNUS.\"\"\""},{"line_number":2342,"context_line":"        LOG.debug(\u0027_find_lun_with_listup start.\u0027)"},{"line_number":2343,"context_line":""},{"line_number":2344,"context_line":"        volumeinstance \u003d None"},{"line_number":2345,"context_line":"        src_id \u003d kwargs.get(\u0027source-id\u0027, None)"}],"source_content_type":"text/x-python","patch_set":7,"id":"b56eb2fb_cfb247da","line":2342,"in_reply_to":"906bc6d5_776b13ea","updated":"2022-12-16 03:02:29.000000000","message":"Could you please tell us is there anything need to be modified?","commit_id":"a08a0df886b9e839d2577227c21ceb97a0154182"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"97ad1847b1ed6435067e1eb8be72186e605fb499","unresolved":true,"context_lines":[{"line_number":2758,"context_line":"                else:"},{"line_number":2759,"context_line":"                    unsupport.append(key)"},{"line_number":2760,"context_line":"            if unsupport:"},{"line_number":2761,"context_line":"                LOG.waring(\u0027_set_qos, \u0027"},{"line_number":2762,"context_line":"                           \u0027Can not support QoS parameter \"%s\".\u0027,"},{"line_number":2763,"context_line":"                           unsupport)"},{"line_number":2764,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"f79eec25_f1afb78a","line":2761,"updated":"2022-11-21 17:18:18.000000000","message":"Typo: s/waring/warning/","commit_id":"a08a0df886b9e839d2577227c21ceb97a0154182"},{"author":{"_account_id":33609,"name":"XuQi","display_name":"Inori","email":"xuq.fnstxz@fujitsu.com","username":"inori"},"change_message_id":"fe1e067fc3cd14c4ce91efc43f1b9a40a1df7a61","unresolved":false,"context_lines":[{"line_number":2758,"context_line":"                else:"},{"line_number":2759,"context_line":"                    unsupport.append(key)"},{"line_number":2760,"context_line":"            if unsupport:"},{"line_number":2761,"context_line":"                LOG.waring(\u0027_set_qos, \u0027"},{"line_number":2762,"context_line":"                           \u0027Can not support QoS parameter \"%s\".\u0027,"},{"line_number":2763,"context_line":"                           unsupport)"},{"line_number":2764,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"2c6f2547_5495c4d5","line":2761,"in_reply_to":"f79eec25_f1afb78a","updated":"2022-11-22 03:53:45.000000000","message":"I\u0027ve corrected the mistake. Thanks for your review.","commit_id":"a08a0df886b9e839d2577227c21ceb97a0154182"},{"author":{"_account_id":597,"name":"Pete Zaitcev","email":"zaitcev@kotori.zaitcev.us","username":"zaitcev"},"change_message_id":"6fefcf7336f78318b062bd85f4694e3f410ea8dc","unresolved":true,"context_lines":[{"line_number":2709,"context_line":"        LOG.debug(\u0027get_metadata, metadata is: %s.\u0027, d_metadata)"},{"line_number":2710,"context_line":"        return d_metadata"},{"line_number":2711,"context_line":""},{"line_number":2712,"context_line":"    def _set_qos(self, volume, use_id\u003dFalse):"},{"line_number":2713,"context_line":"        \"\"\"Set volume qos using ETERNUS CLI.\"\"\""},{"line_number":2714,"context_line":"        LOG.debug(\u0027_set_qos, volumeid: %(volumeid)s.\u0027,"},{"line_number":2715,"context_line":"                  {\u0027volumeid\u0027: volume[\u0027id\u0027]})"}],"source_content_type":"text/x-python","patch_set":10,"id":"c7ee5803_e625d75b","line":2712,"updated":"2022-12-16 04:11:24.000000000","message":"Is it just me, or the use_id is never False? There\u0027s only one call site and it sets it to True.","commit_id":"5a41372b99e6a5cf8c1d751dd0d4d63454552c3f"},{"author":{"_account_id":33609,"name":"XuQi","display_name":"Inori","email":"xuq.fnstxz@fujitsu.com","username":"inori"},"change_message_id":"4590ebc8747b4492e8a1914e227e33aa95792fae","unresolved":false,"context_lines":[{"line_number":2709,"context_line":"        LOG.debug(\u0027get_metadata, metadata is: %s.\u0027, d_metadata)"},{"line_number":2710,"context_line":"        return d_metadata"},{"line_number":2711,"context_line":""},{"line_number":2712,"context_line":"    def _set_qos(self, volume, use_id\u003dFalse):"},{"line_number":2713,"context_line":"        \"\"\"Set volume qos using ETERNUS CLI.\"\"\""},{"line_number":2714,"context_line":"        LOG.debug(\u0027_set_qos, volumeid: %(volumeid)s.\u0027,"},{"line_number":2715,"context_line":"                  {\u0027volumeid\u0027: volume[\u0027id\u0027]})"}],"source_content_type":"text/x-python","patch_set":10,"id":"9bdda4ce_dab5d668","line":2712,"in_reply_to":"c7ee5803_e625d75b","updated":"2022-12-16 07:13:58.000000000","message":"Thanks for your reply. You are right, in this patch there\u0027s only one call site and it sets it to True. However, there are two other functions in our \u0027enterprise\u0027 driver that use this function where the value of \u0027use_id\u0027 is set to False, but these two functions have not been merged.","commit_id":"5a41372b99e6a5cf8c1d751dd0d4d63454552c3f"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"d4945ad9584f72aac55f8f0d78dd53969c842b63","unresolved":true,"context_lines":[{"line_number":2851,"context_line":"            except Exception:"},{"line_number":2852,"context_line":"                _get_qos_category_by_value_error()"},{"line_number":2853,"context_line":""},{"line_number":2854,"context_line":"            if 800 \u003c\u003d digit:"},{"line_number":2855,"context_line":"                ret \u003d 1"},{"line_number":2856,"context_line":"            elif 700 \u003c\u003d digit:"},{"line_number":2857,"context_line":"                ret \u003d 2"}],"source_content_type":"text/x-python","patch_set":12,"id":"5d028b7a_ec4ae556","line":2854,"range":{"start_line":2854,"start_character":15,"end_line":2854,"end_character":27},"updated":"2023-08-09 12:36:02.000000000","message":"nit: for readability, this should be digit \u003e\u003d 800, similarly for the following","commit_id":"a570b5382f9079e6c49d60ad0860dfd7e9f0efbe"},{"author":{"_account_id":33609,"name":"XuQi","display_name":"Inori","email":"xuq.fnstxz@fujitsu.com","username":"inori"},"change_message_id":"3b9750994d8ffe63f88e0df3f6f022f6a5635d7e","unresolved":false,"context_lines":[{"line_number":2851,"context_line":"            except Exception:"},{"line_number":2852,"context_line":"                _get_qos_category_by_value_error()"},{"line_number":2853,"context_line":""},{"line_number":2854,"context_line":"            if 800 \u003c\u003d digit:"},{"line_number":2855,"context_line":"                ret \u003d 1"},{"line_number":2856,"context_line":"            elif 700 \u003c\u003d digit:"},{"line_number":2857,"context_line":"                ret \u003d 2"}],"source_content_type":"text/x-python","patch_set":12,"id":"245cf654_f9012096","line":2854,"range":{"start_line":2854,"start_character":15,"end_line":2854,"end_character":27},"in_reply_to":"5d028b7a_ec4ae556","updated":"2023-08-22 02:38:02.000000000","message":"Done","commit_id":"a570b5382f9079e6c49d60ad0860dfd7e9f0efbe"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"d4945ad9584f72aac55f8f0d78dd53969c842b63","unresolved":true,"context_lines":[{"line_number":2684,"context_line":"                   \u0027errordesc\u0027: errordesc})"},{"line_number":2685,"context_line":"        return ret"},{"line_number":2686,"context_line":""},{"line_number":2687,"context_line":"    @staticmethod"},{"line_number":2688,"context_line":"    def get_metadata(volume):"},{"line_number":2689,"context_line":"        \"\"\"Get metadata using volume information.\"\"\""},{"line_number":2690,"context_line":"        LOG.debug(\u0027get_metadata, volume id: %s.\u0027,"},{"line_number":2691,"context_line":"                  volume[\u0027id\u0027])"},{"line_number":2692,"context_line":""},{"line_number":2693,"context_line":"        d_metadata \u003d {}"},{"line_number":2694,"context_line":""},{"line_number":2695,"context_line":"        metadata \u003d volume.get(\u0027volume_metadata\u0027)"},{"line_number":2696,"context_line":""},{"line_number":2697,"context_line":"        # value\u003d{} enters the if branch, value\u003dNone enters the else."},{"line_number":2698,"context_line":"        if metadata is not None:"},{"line_number":2699,"context_line":"            d_metadata \u003d {"},{"line_number":2700,"context_line":"                data[\u0027key\u0027]: data[\u0027value\u0027] for data in metadata"},{"line_number":2701,"context_line":"            }"},{"line_number":2702,"context_line":"        else:"},{"line_number":2703,"context_line":"            metadata \u003d volume.get(\u0027metadata\u0027)"},{"line_number":2704,"context_line":"            if metadata:"},{"line_number":2705,"context_line":"                d_metadata \u003d {"},{"line_number":2706,"context_line":"                    key: metadata[key] for key in metadata"},{"line_number":2707,"context_line":"                }"},{"line_number":2708,"context_line":""},{"line_number":2709,"context_line":"        LOG.debug(\u0027get_metadata, metadata is: %s.\u0027, d_metadata)"},{"line_number":2710,"context_line":"        return d_metadata"},{"line_number":2711,"context_line":""},{"line_number":2712,"context_line":"    def _set_qos(self, volume, use_id\u003dFalse):"},{"line_number":2713,"context_line":"        \"\"\"Set volume qos using ETERNUS CLI.\"\"\""},{"line_number":2714,"context_line":"        LOG.debug(\u0027_set_qos, volumeid: %(volumeid)s.\u0027,"},{"line_number":2715,"context_line":"                  {\u0027volumeid\u0027: volume[\u0027id\u0027]})"},{"line_number":2716,"context_line":""},{"line_number":2717,"context_line":"        qos_support \u003d self._is_qos_or_format_support(\u0027QOS setting\u0027)"},{"line_number":2718,"context_line":"        # Storage is DX S2 series, qos is not supported."},{"line_number":2719,"context_line":"        if not qos_support:"},{"line_number":2720,"context_line":"            return"},{"line_number":2721,"context_line":""},{"line_number":2722,"context_line":"        qos_specs_dict \u003d self._get_qos_specs(volume)"},{"line_number":2723,"context_line":"        if not qos_specs_dict:"},{"line_number":2724,"context_line":"            # Can not get anything from \u0027qos_specs_id\u0027."},{"line_number":2725,"context_line":"            return"},{"line_number":2726,"context_line":""},{"line_number":2727,"context_line":"        # Get storage version information."},{"line_number":2728,"context_line":"        rc, emsg, clidata \u003d self._exec_eternus_cli(\u0027show_enclosure_status\u0027)"},{"line_number":2729,"context_line":"        if rc !\u003d 0:"},{"line_number":2730,"context_line":"            msg \u003d (_(\u0027_set_qos, \u0027"},{"line_number":2731,"context_line":"                     \u0027show_enclosure_status failed. \u0027"},{"line_number":2732,"context_line":"                     \u0027Return code: %(rc)lu, \u0027"},{"line_number":2733,"context_line":"                     \u0027Error: %(errormsg)s, \u0027"},{"line_number":2734,"context_line":"                     \u0027Message: %(clidata)s.\u0027)"},{"line_number":2735,"context_line":"                   % {\u0027rc\u0027: rc,"},{"line_number":2736,"context_line":"                      \u0027errormsg\u0027: emsg,"},{"line_number":2737,"context_line":"                      \u0027clidata\u0027: clidata})"},{"line_number":2738,"context_line":"            LOG.warning(msg)"},{"line_number":2739,"context_line":"            raise exception.VolumeBackendAPIException(data\u003dmsg)"},{"line_number":2740,"context_line":""},{"line_number":2741,"context_line":"        category_dict \u003d {}"},{"line_number":2742,"context_line":"        unsupport \u003d []"},{"line_number":2743,"context_line":""},{"line_number":2744,"context_line":"        # If storage version is before V11L30."},{"line_number":2745,"context_line":"        if clidata[\u0027version\u0027] \u003c CONSTANTS.QOS_VERSION:"},{"line_number":2746,"context_line":"            for key, value in qos_specs_dict.items():"},{"line_number":2747,"context_line":"                if (key in CONSTANTS.FJ_QOS_KEY_BYTES_list or"},{"line_number":2748,"context_line":"                        key in CONSTANTS.FJ_QOS_KEY_IOPS_list):"},{"line_number":2749,"context_line":"                    msg \u003d (_(\u0027_set_qos, Can not support QoS \u0027"},{"line_number":2750,"context_line":"                             \u0027parameter \"%(key)s\" on firmware version \u0027"},{"line_number":2751,"context_line":"                             \u0027%(version)s.\u0027)"},{"line_number":2752,"context_line":"                           % {\u0027key\u0027: key,"},{"line_number":2753,"context_line":"                              \u0027version\u0027: clidata[\u0027version\u0027]})"},{"line_number":2754,"context_line":"                    LOG.error(msg)"},{"line_number":2755,"context_line":"                    raise exception.VolumeBackendAPIException(data\u003dmsg)"},{"line_number":2756,"context_line":"                if key in CONSTANTS.FJ_QOS_KEY_list:"},{"line_number":2757,"context_line":"                    category_dict \u003d self._get_qos_category_by_value("},{"line_number":2758,"context_line":"                        key, value)"},{"line_number":2759,"context_line":"                else:"},{"line_number":2760,"context_line":"                    unsupport.append(key)"},{"line_number":2761,"context_line":"            if unsupport:"},{"line_number":2762,"context_line":"                LOG.warning(\u0027_set_qos, \u0027"},{"line_number":2763,"context_line":"                            \u0027Can not support QoS parameter \"%s\".\u0027,"},{"line_number":2764,"context_line":"                            unsupport)"},{"line_number":2765,"context_line":""},{"line_number":2766,"context_line":"        # If storage version is after V11L30."},{"line_number":2767,"context_line":"        if clidata[\u0027version\u0027] \u003e\u003d \u0027V11L30-0000\u0027:"},{"line_number":2768,"context_line":"            key_dict \u003d self._get_param(qos_specs_dict)"},{"line_number":2769,"context_line":"            if not key_dict:"},{"line_number":2770,"context_line":"                return"},{"line_number":2771,"context_line":""},{"line_number":2772,"context_line":"            # Get total/read/write bandwidth limit."},{"line_number":2773,"context_line":"            category_dict \u003d self._get_qos_category(key_dict)"},{"line_number":2774,"context_line":""},{"line_number":2775,"context_line":"        if category_dict:"},{"line_number":2776,"context_line":"            # Set volume qos."},{"line_number":2777,"context_line":"            volumename \u003d self._get_volume_name(volume, use_id\u003duse_id)"},{"line_number":2778,"context_line":"            category_dict[\u0027volume-name\u0027] \u003d volumename"},{"line_number":2779,"context_line":"            rc, errordesc, job \u003d self._exec_eternus_cli("},{"line_number":2780,"context_line":"                \u0027set_volume_qos\u0027,"},{"line_number":2781,"context_line":"                **category_dict)"},{"line_number":2782,"context_line":"            if rc !\u003d 0:"},{"line_number":2783,"context_line":"                msg \u003d (_(\u0027_set_qos, \u0027"},{"line_number":2784,"context_line":"                         \u0027set_volume_qos failed. \u0027"},{"line_number":2785,"context_line":"                         \u0027Return code: %(rc)lu, \u0027"},{"line_number":2786,"context_line":"                         \u0027Error: %(errordesc)s, \u0027"},{"line_number":2787,"context_line":"                         \u0027Message: %(job)s.\u0027)"},{"line_number":2788,"context_line":"                       % {\u0027rc\u0027: rc,"},{"line_number":2789,"context_line":"                          \u0027errordesc\u0027: errordesc,"},{"line_number":2790,"context_line":"                          \u0027job\u0027: job})"},{"line_number":2791,"context_line":"                LOG.error(msg)"},{"line_number":2792,"context_line":"                raise exception.VolumeBackendAPIException(data\u003dmsg)"},{"line_number":2793,"context_line":""},{"line_number":2794,"context_line":"    @staticmethod"},{"line_number":2795,"context_line":"    def _get_qos_specs(volume):"},{"line_number":2796,"context_line":"        \"\"\"Get qos specs information from volume information.\"\"\""},{"line_number":2797,"context_line":"        LOG.debug(\u0027_get_qos_specs, volume id: %s.\u0027, volume[\u0027id\u0027])"},{"line_number":2798,"context_line":""},{"line_number":2799,"context_line":"        qos_specs_dict \u003d {}"},{"line_number":2800,"context_line":"        qos_specs_id \u003d None"},{"line_number":2801,"context_line":"        ctxt \u003d None"},{"line_number":2802,"context_line":""},{"line_number":2803,"context_line":"        volume_type_id \u003d volume.get(\u0027volume_type_id\u0027)"},{"line_number":2804,"context_line":""},{"line_number":2805,"context_line":"        if volume_type_id:"},{"line_number":2806,"context_line":"            ctxt \u003d context.get_admin_context()"},{"line_number":2807,"context_line":"            volume_type \u003d volume_types.get_volume_type(ctxt, volume_type_id)"},{"line_number":2808,"context_line":"            qos_specs_id \u003d volume_type.get(\u0027qos_specs_id\u0027)"},{"line_number":2809,"context_line":""},{"line_number":2810,"context_line":"        if qos_specs_id:"},{"line_number":2811,"context_line":"            qos_specs_dict \u003d ("},{"line_number":2812,"context_line":"                qos_specs.get_qos_specs(ctxt, qos_specs_id)[\u0027specs\u0027])"},{"line_number":2813,"context_line":""},{"line_number":2814,"context_line":"        LOG.debug(\u0027_get_qos_specs, qos_specs_dict: %s.\u0027, qos_specs_dict)"},{"line_number":2815,"context_line":"        return qos_specs_dict"},{"line_number":2816,"context_line":""},{"line_number":2817,"context_line":"    def _is_qos_or_format_support(self, func_name):"},{"line_number":2818,"context_line":"        \"\"\"If storage is DX S2 series, qos or format is not supported.\"\"\""},{"line_number":2819,"context_line":"        is_support \u003d True"},{"line_number":2820,"context_line":""},{"line_number":2821,"context_line":"        if self.model_name \u003d\u003d CONSTANTS.DX_S2:"},{"line_number":2822,"context_line":"            is_support \u003d False"},{"line_number":2823,"context_line":"            LOG.warning(\u0027%s is not supported for DX S2, \u0027"},{"line_number":2824,"context_line":"                        \u0027Skip this process.\u0027, func_name)"},{"line_number":2825,"context_line":"        return is_support"},{"line_number":2826,"context_line":""},{"line_number":2827,"context_line":"    @staticmethod"},{"line_number":2828,"context_line":"    def _get_qos_category_by_value(key, value):"},{"line_number":2829,"context_line":"        \"\"\"Get qos category using value.\"\"\""},{"line_number":2830,"context_line":"        LOG.debug(\u0027_get_qos_category_by_value, \u0027"},{"line_number":2831,"context_line":"                  \u0027key: %(key)s, value: %(value)s.\u0027,"},{"line_number":2832,"context_line":"                  {\u0027key\u0027: key, \u0027value\u0027: value})"},{"line_number":2833,"context_line":""},{"line_number":2834,"context_line":"        ret \u003d 0"},{"line_number":2835,"context_line":""},{"line_number":2836,"context_line":"        # Log error method."},{"line_number":2837,"context_line":"        def _get_qos_category_by_value_error():"},{"line_number":2838,"context_line":"            \"\"\"Input value is invalid, log error and raise exception.\"\"\""},{"line_number":2839,"context_line":"            msg \u003d (_(\u0027_get_qos_category_by_value, \u0027"},{"line_number":2840,"context_line":"                     \u0027Invalid value is input, \u0027"},{"line_number":2841,"context_line":"                     \u0027key: %(key)s, \u0027"},{"line_number":2842,"context_line":"                     \u0027value: %(value)s.\u0027)"},{"line_number":2843,"context_line":"                   % {\u0027key\u0027: key,"},{"line_number":2844,"context_line":"                      \u0027value\u0027: value})"},{"line_number":2845,"context_line":"            LOG.warning(msg)"},{"line_number":2846,"context_line":"            raise exception.VolumeBackendAPIException(data\u003dmsg)"},{"line_number":2847,"context_line":""},{"line_number":2848,"context_line":"        if key \u003d\u003d \"maxBWS\":"},{"line_number":2849,"context_line":"            try:"},{"line_number":2850,"context_line":"                digit \u003d int(float(value))"},{"line_number":2851,"context_line":"            except Exception:"},{"line_number":2852,"context_line":"                _get_qos_category_by_value_error()"},{"line_number":2853,"context_line":""},{"line_number":2854,"context_line":"            if 800 \u003c\u003d digit:"},{"line_number":2855,"context_line":"                ret \u003d 1"},{"line_number":2856,"context_line":"            elif 700 \u003c\u003d digit:"},{"line_number":2857,"context_line":"                ret \u003d 2"},{"line_number":2858,"context_line":"            elif 600 \u003c\u003d digit:"},{"line_number":2859,"context_line":"                ret \u003d 3"},{"line_number":2860,"context_line":"            elif 500 \u003c\u003d digit:"},{"line_number":2861,"context_line":"                ret \u003d 4"},{"line_number":2862,"context_line":"            elif 400 \u003c\u003d digit:"},{"line_number":2863,"context_line":"                ret \u003d 5"},{"line_number":2864,"context_line":"            elif 300 \u003c\u003d digit:"},{"line_number":2865,"context_line":"                ret \u003d 6"},{"line_number":2866,"context_line":"            elif 200 \u003c\u003d digit:"},{"line_number":2867,"context_line":"                ret \u003d 7"},{"line_number":2868,"context_line":"            elif 100 \u003c\u003d digit:"},{"line_number":2869,"context_line":"                ret \u003d 8"},{"line_number":2870,"context_line":"            elif 70 \u003c\u003d digit:"},{"line_number":2871,"context_line":"                ret \u003d 9"},{"line_number":2872,"context_line":"            elif 40 \u003c\u003d digit:"},{"line_number":2873,"context_line":"                ret \u003d 10"},{"line_number":2874,"context_line":"            elif 25 \u003c\u003d digit:"},{"line_number":2875,"context_line":"                ret \u003d 11"},{"line_number":2876,"context_line":"            elif 20 \u003c\u003d digit:"},{"line_number":2877,"context_line":"                ret \u003d 12"},{"line_number":2878,"context_line":"            elif 15 \u003c\u003d digit:"},{"line_number":2879,"context_line":"                ret \u003d 13"},{"line_number":2880,"context_line":"            elif 10 \u003c\u003d digit:"},{"line_number":2881,"context_line":"                ret \u003d 14"},{"line_number":2882,"context_line":"            elif 0 \u003c digit:"},{"line_number":2883,"context_line":"                ret \u003d 15"},{"line_number":2884,"context_line":"            else:"},{"line_number":2885,"context_line":"                _get_qos_category_by_value_error()"},{"line_number":2886,"context_line":""},{"line_number":2887,"context_line":"        LOG.debug(\u0027_get_qos_category_by_value (%s).\u0027, ret)"},{"line_number":2888,"context_line":""},{"line_number":2889,"context_line":"        category_dict \u003d {}"},{"line_number":2890,"context_line":"        if ret \u003e 0:"},{"line_number":2891,"context_line":"            category_dict \u003d {\u0027bandwidth-limit\u0027: ret}"},{"line_number":2892,"context_line":""},{"line_number":2893,"context_line":"        return category_dict"},{"line_number":2894,"context_line":""},{"line_number":2895,"context_line":"    def _get_param(self, qos_specs_dict):"},{"line_number":2896,"context_line":"        # Get all keys which have been set and its value."},{"line_number":2897,"context_line":"        LOG.debug(\u0027_get_param, \u0027"},{"line_number":2898,"context_line":"                  \u0027qos_specs_dict: %(qos_specs_dict)s.\u0027,"},{"line_number":2899,"context_line":"                  {\u0027qos_specs_dict\u0027: qos_specs_dict})"},{"line_number":2900,"context_line":"        key_dict \u003d {}"},{"line_number":2901,"context_line":"        unsupport \u003d []"},{"line_number":2902,"context_line":"        for key, value in qos_specs_dict.items():"},{"line_number":2903,"context_line":"            if key in CONSTANTS.FJ_QOS_KEY_list:"},{"line_number":2904,"context_line":"                msg \u003d (_(\u0027_get_param, Can not support QoS \u0027"},{"line_number":2905,"context_line":"                         \u0027parameter \"%(key)s\" on firmware version \u0027"},{"line_number":2906,"context_line":"                         \u0027V11L30-0000 or above.\u0027)"},{"line_number":2907,"context_line":"                       % {\u0027key\u0027: key})"},{"line_number":2908,"context_line":"                LOG.warning(msg)"},{"line_number":2909,"context_line":"                raise exception.VolumeBackendAPIException(data\u003dmsg)"},{"line_number":2910,"context_line":""},{"line_number":2911,"context_line":"            if key in CONSTANTS.FJ_QOS_KEY_BYTES_list:"},{"line_number":2912,"context_line":"                key_dict[key] \u003d self._check_throughput(key, value)"},{"line_number":2913,"context_line":"                # Example: When \"read_bytes_sec\" is specified,"},{"line_number":2914,"context_line":"                # the corresponding \"read_iops_sec\" also needs to be specified."},{"line_number":2915,"context_line":"                # If not, it is specified as the maximum."},{"line_number":2916,"context_line":"                iopsStr \u003d key.replace(\u0027bytes\u0027, \u0027iops\u0027)"},{"line_number":2917,"context_line":"                if iopsStr not in qos_specs_dict.keys():"},{"line_number":2918,"context_line":"                    key_dict[iopsStr] \u003d CONSTANTS.MAX_IOPS"},{"line_number":2919,"context_line":"            elif key in CONSTANTS.FJ_QOS_KEY_IOPS_list:"},{"line_number":2920,"context_line":"                key_dict[key] \u003d self._check_iops(key, value)"},{"line_number":2921,"context_line":"                # If can not get the corresponding bytes,"},{"line_number":2922,"context_line":"                # the bytes is set to the maximum value."},{"line_number":2923,"context_line":"                throughputStr \u003d key.replace(\u0027iops\u0027, \u0027bytes\u0027)"},{"line_number":2924,"context_line":"                if throughputStr not in qos_specs_dict.keys():"},{"line_number":2925,"context_line":"                    key_dict[throughputStr] \u003d CONSTANTS.MAX_THROUGHPUT"},{"line_number":2926,"context_line":"            else:"},{"line_number":2927,"context_line":"                unsupport.append(key)"},{"line_number":2928,"context_line":"        if unsupport:"},{"line_number":2929,"context_line":"            LOG.warning(\u0027_get_param, \u0027"},{"line_number":2930,"context_line":"                        \u0027Can not support QoS parameter \"%s\".\u0027, unsupport)"},{"line_number":2931,"context_line":""},{"line_number":2932,"context_line":"        return key_dict"},{"line_number":2933,"context_line":""},{"line_number":2934,"context_line":"    def _check_iops(self, key, value):"},{"line_number":2935,"context_line":"        \"\"\"Check input value of IOPS.\"\"\""},{"line_number":2936,"context_line":"        LOG.debug(\u0027_check_iops, key: %(key)s, value: %(value)s.\u0027,"},{"line_number":2937,"context_line":"                  {\u0027key\u0027: key, \u0027value\u0027: value})"},{"line_number":2938,"context_line":"        value \u003d int(float(value))"},{"line_number":2939,"context_line":"        if value \u003c CONSTANTS.MIN_IOPS or value \u003e CONSTANTS.MAX_IOPS:"},{"line_number":2940,"context_line":"            msg \u003d (_(\u0027_check_iops, \u0027"},{"line_number":2941,"context_line":"                     \u0027%(key)s is out of range.\u0027)"},{"line_number":2942,"context_line":"                   % {\u0027key\u0027: key})"},{"line_number":2943,"context_line":"            LOG.warning(msg)"},{"line_number":2944,"context_line":"            raise exception.VolumeBackendAPIException(data\u003dmsg)"},{"line_number":2945,"context_line":"        return value"},{"line_number":2946,"context_line":""},{"line_number":2947,"context_line":"    def _check_throughput(self, key, value):"},{"line_number":2948,"context_line":"        LOG.debug(\u0027_check_throughput, key: %(key)s, value: %(value)s.\u0027,"},{"line_number":2949,"context_line":"                  {\u0027key\u0027: key, \u0027value\u0027: value})"},{"line_number":2950,"context_line":"        value \u003d float(value) / units.Mi"},{"line_number":2951,"context_line":"        if (value \u003c CONSTANTS.MIN_THROUGHPUT or"},{"line_number":2952,"context_line":"                value \u003e CONSTANTS.MAX_THROUGHPUT):"},{"line_number":2953,"context_line":"            msg \u003d (_(\u0027_check_throughput, \u0027"},{"line_number":2954,"context_line":"                     \u0027%(key)s is out of range.\u0027)"},{"line_number":2955,"context_line":"                   % {\u0027key\u0027: key})"},{"line_number":2956,"context_line":"            LOG.warning(msg)"},{"line_number":2957,"context_line":"            raise exception.VolumeBackendAPIException(data\u003dmsg)"},{"line_number":2958,"context_line":"        return int(value)"},{"line_number":2959,"context_line":""},{"line_number":2960,"context_line":"    def _get_qos_category(self, key_dict):"},{"line_number":2961,"context_line":"        \"\"\"Get qos category by parameters according to the specific volume.\"\"\""},{"line_number":2962,"context_line":"        LOG.debug(\u0027_get_qos_category, \u0027"},{"line_number":2963,"context_line":"                  \u0027key_dict: %(key_dict)s.\u0027,"},{"line_number":2964,"context_line":"                  {\u0027key_dict\u0027: key_dict})"},{"line_number":2965,"context_line":""},{"line_number":2966,"context_line":"        # Get all the bandwidth limits."},{"line_number":2967,"context_line":"        rc, errordesc, bandwidthlist \u003d self._exec_eternus_cli("},{"line_number":2968,"context_line":"            \u0027show_qos_bandwidth_limit\u0027)"},{"line_number":2969,"context_line":"        if rc !\u003d 0:"},{"line_number":2970,"context_line":"            msg \u003d (_(\u0027_get_qos_category, \u0027"},{"line_number":2971,"context_line":"                     \u0027show_qos_bandwidth_limit failed. \u0027"},{"line_number":2972,"context_line":"                     \u0027Return code: %(rc)lu, \u0027"},{"line_number":2973,"context_line":"                     \u0027Error: %(errordesc)s, \u0027"},{"line_number":2974,"context_line":"                     \u0027Message: %(clidata)s.\u0027)"},{"line_number":2975,"context_line":"                   % {\u0027rc\u0027: rc,"},{"line_number":2976,"context_line":"                      \u0027errordesc\u0027: errordesc,"},{"line_number":2977,"context_line":"                      \u0027clidata\u0027: bandwidthlist})"},{"line_number":2978,"context_line":"            LOG.warning(msg)"},{"line_number":2979,"context_line":"            raise exception.VolumeBackendAPIException(data\u003dmsg)"},{"line_number":2980,"context_line":""},{"line_number":2981,"context_line":"        ret_dict \u003d {}"},{"line_number":2982,"context_line":"        for bw in bandwidthlist:"},{"line_number":2983,"context_line":"            if \u0027total_iops_sec\u0027 in key_dict.keys():"},{"line_number":2984,"context_line":"                if (bw[\u0027total_iops_sec\u0027] \u003d\u003d key_dict[\u0027total_iops_sec\u0027] and"},{"line_number":2985,"context_line":"                        bw[\u0027total_bytes_sec\u0027] \u003d\u003d key_dict[\u0027total_bytes_sec\u0027]):"},{"line_number":2986,"context_line":"                    ret_dict[\u0027bandwidth-limit\u0027] \u003d bw[\u0027total_limit\u0027]"},{"line_number":2987,"context_line":"            if \u0027read_iops_sec\u0027 in key_dict.keys():"},{"line_number":2988,"context_line":"                if (bw[\u0027read_iops_sec\u0027] \u003d\u003d key_dict[\u0027read_iops_sec\u0027] and"},{"line_number":2989,"context_line":"                        bw[\u0027read_bytes_sec\u0027] \u003d\u003d key_dict[\u0027read_bytes_sec\u0027]):"},{"line_number":2990,"context_line":"                    ret_dict[\u0027read-bandwidth-limit\u0027] \u003d bw[\u0027read_limit\u0027]"},{"line_number":2991,"context_line":"            if \u0027write_iops_sec\u0027 in key_dict.keys():"},{"line_number":2992,"context_line":"                if (bw[\u0027write_iops_sec\u0027] \u003d\u003d key_dict[\u0027write_iops_sec\u0027] and"},{"line_number":2993,"context_line":"                        bw[\u0027write_bytes_sec\u0027] \u003d\u003d key_dict[\u0027write_bytes_sec\u0027]):"},{"line_number":2994,"context_line":"                    ret_dict[\u0027write-bandwidth-limit\u0027] \u003d bw[\u0027write_limit\u0027]"},{"line_number":2995,"context_line":""},{"line_number":2996,"context_line":"        # If find all available pairs."},{"line_number":2997,"context_line":"        # len(key_dict) must be 2, 4 or 6"},{"line_number":2998,"context_line":"        if len(key_dict) / 2 \u003d\u003d len(ret_dict):"},{"line_number":2999,"context_line":"            return ret_dict"},{"line_number":3000,"context_line":""},{"line_number":3001,"context_line":"        rc, errordesc, vqosdatalist \u003d self._exec_eternus_cli(\u0027show_volume_qos\u0027)"},{"line_number":3002,"context_line":"        if rc !\u003d 0:"},{"line_number":3003,"context_line":"            msg \u003d (_(\u0027_get_qos_category, \u0027"},{"line_number":3004,"context_line":"                     \u0027show_volume_qos failed. \u0027"},{"line_number":3005,"context_line":"                     \u0027Return code: %(rc)lu, \u0027"},{"line_number":3006,"context_line":"                     \u0027Error: %(errordesc)s, \u0027"},{"line_number":3007,"context_line":"                     \u0027Message: %(clidata)s.\u0027)"},{"line_number":3008,"context_line":"                   % {\u0027rc\u0027: rc,"},{"line_number":3009,"context_line":"                      \u0027errordesc\u0027: errordesc,"},{"line_number":3010,"context_line":"                      \u0027clidata\u0027: vqosdatalist})"},{"line_number":3011,"context_line":"            LOG.warning(msg)"},{"line_number":3012,"context_line":"            raise exception.VolumeBackendAPIException(data\u003dmsg)"},{"line_number":3013,"context_line":""},{"line_number":3014,"context_line":"        # Get used total/read/write bandwidth limit."},{"line_number":3015,"context_line":"        totalusedlimits \u003d set()"},{"line_number":3016,"context_line":"        readusedlimits \u003d set()"},{"line_number":3017,"context_line":"        writeusedlimits \u003d set()"},{"line_number":3018,"context_line":"        for vqos in vqosdatalist:"},{"line_number":3019,"context_line":"            totalusedlimits.add(vqos[\u0027total_limit\u0027])"},{"line_number":3020,"context_line":"            readusedlimits.add(vqos[\u0027read_limit\u0027])"},{"line_number":3021,"context_line":"            writeusedlimits.add(vqos[\u0027write_limit\u0027])"},{"line_number":3022,"context_line":""},{"line_number":3023,"context_line":"        # Get unused total/read/write bandwidth limit."},{"line_number":3024,"context_line":"        totalunusedlimits \u003d list(set(range(1, 16)) - totalusedlimits)"},{"line_number":3025,"context_line":"        readunusedlimits \u003d list(set(range(1, 16)) - readusedlimits)"},{"line_number":3026,"context_line":"        writeunusedlimits \u003d list(set(range(1, 16)) - writeusedlimits)"},{"line_number":3027,"context_line":""},{"line_number":3028,"context_line":"        # If there is no same couple, set new qos bandwidth limit."},{"line_number":3029,"context_line":"        if \u0027total_iops_sec\u0027 in key_dict.keys():"},{"line_number":3030,"context_line":"            if \u0027bandwidth-limit\u0027 not in ret_dict.keys():"},{"line_number":3031,"context_line":"                if len(totalunusedlimits) \u003d\u003d 0:"},{"line_number":3032,"context_line":"                    msg \u003d _(\u0027_get_qos_category, \u0027"},{"line_number":3033,"context_line":"                            \u0027There is no available total bandwidth limit.\u0027)"},{"line_number":3034,"context_line":"                    LOG.warning(msg)"},{"line_number":3035,"context_line":"                    raise exception.VolumeBackendAPIException(data\u003dmsg)"},{"line_number":3036,"context_line":"                else:"},{"line_number":3037,"context_line":"                    self._set_limit(\u0027volume-qos\u0027,"},{"line_number":3038,"context_line":"                                    totalunusedlimits[0],"},{"line_number":3039,"context_line":"                                    key_dict[\u0027total_iops_sec\u0027],"},{"line_number":3040,"context_line":"                                    key_dict[\u0027total_bytes_sec\u0027])"},{"line_number":3041,"context_line":"                    ret_dict[\u0027bandwidth-limit\u0027] \u003d totalunusedlimits[0]"},{"line_number":3042,"context_line":"        else:"},{"line_number":3043,"context_line":"            ret_dict[\u0027bandwidth-limit\u0027] \u003d 0"},{"line_number":3044,"context_line":""},{"line_number":3045,"context_line":"        if \u0027read_iops_sec\u0027 in key_dict.keys():"},{"line_number":3046,"context_line":"            if \u0027read-bandwidth-limit\u0027 not in ret_dict.keys():"},{"line_number":3047,"context_line":"                if len(readunusedlimits) \u003d\u003d 0:"},{"line_number":3048,"context_line":"                    msg \u003d _(\u0027_get_qos_category, \u0027"},{"line_number":3049,"context_line":"                            \u0027There is no available read bandwidth limit.\u0027)"},{"line_number":3050,"context_line":"                    LOG.warning(msg)"},{"line_number":3051,"context_line":"                    raise exception.VolumeBackendAPIException(data\u003dmsg)"},{"line_number":3052,"context_line":"                else:"},{"line_number":3053,"context_line":"                    self._set_limit(\u0027volume-qos-read\u0027,"},{"line_number":3054,"context_line":"                                    readunusedlimits[0],"},{"line_number":3055,"context_line":"                                    key_dict[\u0027read_iops_sec\u0027],"},{"line_number":3056,"context_line":"                                    key_dict[\u0027read_bytes_sec\u0027])"},{"line_number":3057,"context_line":"                    ret_dict[\u0027read-bandwidth-limit\u0027] \u003d readunusedlimits[0]"},{"line_number":3058,"context_line":"        else:"},{"line_number":3059,"context_line":"            ret_dict[\u0027read-bandwidth-limit\u0027] \u003d 0"},{"line_number":3060,"context_line":""},{"line_number":3061,"context_line":"        if \u0027write_bytes_sec\u0027 in key_dict.keys():"},{"line_number":3062,"context_line":"            if \u0027write-bandwidth-limit\u0027 not in ret_dict.keys():"},{"line_number":3063,"context_line":"                if len(writeunusedlimits) \u003d\u003d 0:"},{"line_number":3064,"context_line":"                    msg \u003d _(\u0027_get_qos_category, \u0027"},{"line_number":3065,"context_line":"                            \u0027There is no available write bandwidth limit.\u0027)"},{"line_number":3066,"context_line":"                    LOG.warning(msg)"},{"line_number":3067,"context_line":"                    raise exception.VolumeBackendAPIException(data\u003dmsg)"},{"line_number":3068,"context_line":"                else:"},{"line_number":3069,"context_line":"                    self._set_limit(\u0027volume-qos-write\u0027,"},{"line_number":3070,"context_line":"                                    writeunusedlimits[0],"},{"line_number":3071,"context_line":"                                    key_dict[\u0027write_iops_sec\u0027],"},{"line_number":3072,"context_line":"                                    key_dict[\u0027write_bytes_sec\u0027])"},{"line_number":3073,"context_line":"                    ret_dict[\u0027write-bandwidth-limit\u0027] \u003d writeunusedlimits[0]"},{"line_number":3074,"context_line":"        else:"},{"line_number":3075,"context_line":"            ret_dict[\u0027write-bandwidth-limit\u0027] \u003d 0"},{"line_number":3076,"context_line":""},{"line_number":3077,"context_line":"        return ret_dict"},{"line_number":3078,"context_line":""},{"line_number":3079,"context_line":"    def _set_limit(self, mode, limit, iops, throughput):"},{"line_number":3080,"context_line":"        \"\"\"Register a new qos scheme at the specified bandwidth\"\"\""},{"line_number":3081,"context_line":"        LOG.debug(\u0027_set_limit, mode: %(mode)s, \u0027"},{"line_number":3082,"context_line":"                  \u0027limit: %(limit)s, iops:%(iops)s, \u0027"},{"line_number":3083,"context_line":"                  \u0027throughput: %(throughput)s.\u0027,"},{"line_number":3084,"context_line":"                  {\u0027mode\u0027: mode, \u0027limit\u0027: limit,"},{"line_number":3085,"context_line":"                   \u0027iops\u0027: iops, \u0027throughput\u0027: throughput})"},{"line_number":3086,"context_line":"        param_dict \u003d ({\u0027mode\u0027: mode,"},{"line_number":3087,"context_line":"                       \u0027bandwidth-limit\u0027: limit,"},{"line_number":3088,"context_line":"                       \u0027iops\u0027: iops,"},{"line_number":3089,"context_line":"                       \u0027throughput\u0027: throughput})"},{"line_number":3090,"context_line":""},{"line_number":3091,"context_line":"        rc, emsg, clidata \u003d self._exec_eternus_cli("},{"line_number":3092,"context_line":"            \u0027set_qos_bandwidth_limit\u0027, **param_dict)"},{"line_number":3093,"context_line":""},{"line_number":3094,"context_line":"        if rc !\u003d 0:"},{"line_number":3095,"context_line":"            msg \u003d (_(\u0027_set_limit, \u0027"},{"line_number":3096,"context_line":"                     \u0027set_qos_bandwidth_limit failed. \u0027"},{"line_number":3097,"context_line":"                     \u0027Return code: %(rc)lu, \u0027"},{"line_number":3098,"context_line":"                     \u0027Error: %(errormsg)s, \u0027"},{"line_number":3099,"context_line":"                     \u0027Message: %(clidata)s.\u0027)"},{"line_number":3100,"context_line":"                   % {\u0027rc\u0027: rc,"},{"line_number":3101,"context_line":"                      \u0027errormsg\u0027: emsg,"},{"line_number":3102,"context_line":"                      \u0027clidata\u0027: clidata})"},{"line_number":3103,"context_line":"            LOG.warning(msg)"},{"line_number":3104,"context_line":"            raise exception.VolumeBackendAPIException(data\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":12,"id":"e3360531_f7cb58f8","line":3104,"range":{"start_line":2687,"start_character":0,"end_line":3104,"end_character":63},"updated":"2023-08-09 12:36:02.000000000","message":"i don\u0027t see these new methods being tested anywhere","commit_id":"a570b5382f9079e6c49d60ad0860dfd7e9f0efbe"},{"author":{"_account_id":33609,"name":"XuQi","display_name":"Inori","email":"xuq.fnstxz@fujitsu.com","username":"inori"},"change_message_id":"3b9750994d8ffe63f88e0df3f6f022f6a5635d7e","unresolved":false,"context_lines":[{"line_number":2684,"context_line":"                   \u0027errordesc\u0027: errordesc})"},{"line_number":2685,"context_line":"        return ret"},{"line_number":2686,"context_line":""},{"line_number":2687,"context_line":"    @staticmethod"},{"line_number":2688,"context_line":"    def get_metadata(volume):"},{"line_number":2689,"context_line":"        \"\"\"Get metadata using volume information.\"\"\""},{"line_number":2690,"context_line":"        LOG.debug(\u0027get_metadata, volume id: %s.\u0027,"},{"line_number":2691,"context_line":"                  volume[\u0027id\u0027])"},{"line_number":2692,"context_line":""},{"line_number":2693,"context_line":"        d_metadata \u003d {}"},{"line_number":2694,"context_line":""},{"line_number":2695,"context_line":"        metadata \u003d volume.get(\u0027volume_metadata\u0027)"},{"line_number":2696,"context_line":""},{"line_number":2697,"context_line":"        # value\u003d{} enters the if branch, value\u003dNone enters the else."},{"line_number":2698,"context_line":"        if metadata is not None:"},{"line_number":2699,"context_line":"            d_metadata \u003d {"},{"line_number":2700,"context_line":"                data[\u0027key\u0027]: data[\u0027value\u0027] for data in metadata"},{"line_number":2701,"context_line":"            }"},{"line_number":2702,"context_line":"        else:"},{"line_number":2703,"context_line":"            metadata \u003d volume.get(\u0027metadata\u0027)"},{"line_number":2704,"context_line":"            if metadata:"},{"line_number":2705,"context_line":"                d_metadata \u003d {"},{"line_number":2706,"context_line":"                    key: metadata[key] for key in metadata"},{"line_number":2707,"context_line":"                }"},{"line_number":2708,"context_line":""},{"line_number":2709,"context_line":"        LOG.debug(\u0027get_metadata, metadata is: %s.\u0027, d_metadata)"},{"line_number":2710,"context_line":"        return d_metadata"},{"line_number":2711,"context_line":""},{"line_number":2712,"context_line":"    def _set_qos(self, volume, use_id\u003dFalse):"},{"line_number":2713,"context_line":"        \"\"\"Set volume qos using ETERNUS CLI.\"\"\""},{"line_number":2714,"context_line":"        LOG.debug(\u0027_set_qos, volumeid: %(volumeid)s.\u0027,"},{"line_number":2715,"context_line":"                  {\u0027volumeid\u0027: volume[\u0027id\u0027]})"},{"line_number":2716,"context_line":""},{"line_number":2717,"context_line":"        qos_support \u003d self._is_qos_or_format_support(\u0027QOS setting\u0027)"},{"line_number":2718,"context_line":"        # Storage is DX S2 series, qos is not supported."},{"line_number":2719,"context_line":"        if not qos_support:"},{"line_number":2720,"context_line":"            return"},{"line_number":2721,"context_line":""},{"line_number":2722,"context_line":"        qos_specs_dict \u003d self._get_qos_specs(volume)"},{"line_number":2723,"context_line":"        if not qos_specs_dict:"},{"line_number":2724,"context_line":"            # Can not get anything from \u0027qos_specs_id\u0027."},{"line_number":2725,"context_line":"            return"},{"line_number":2726,"context_line":""},{"line_number":2727,"context_line":"        # Get storage version information."},{"line_number":2728,"context_line":"        rc, emsg, clidata \u003d self._exec_eternus_cli(\u0027show_enclosure_status\u0027)"},{"line_number":2729,"context_line":"        if rc !\u003d 0:"},{"line_number":2730,"context_line":"            msg \u003d (_(\u0027_set_qos, \u0027"},{"line_number":2731,"context_line":"                     \u0027show_enclosure_status failed. \u0027"},{"line_number":2732,"context_line":"                     \u0027Return code: %(rc)lu, \u0027"},{"line_number":2733,"context_line":"                     \u0027Error: %(errormsg)s, \u0027"},{"line_number":2734,"context_line":"                     \u0027Message: %(clidata)s.\u0027)"},{"line_number":2735,"context_line":"                   % {\u0027rc\u0027: rc,"},{"line_number":2736,"context_line":"                      \u0027errormsg\u0027: emsg,"},{"line_number":2737,"context_line":"                      \u0027clidata\u0027: clidata})"},{"line_number":2738,"context_line":"            LOG.warning(msg)"},{"line_number":2739,"context_line":"            raise exception.VolumeBackendAPIException(data\u003dmsg)"},{"line_number":2740,"context_line":""},{"line_number":2741,"context_line":"        category_dict \u003d {}"},{"line_number":2742,"context_line":"        unsupport \u003d []"},{"line_number":2743,"context_line":""},{"line_number":2744,"context_line":"        # If storage version is before V11L30."},{"line_number":2745,"context_line":"        if clidata[\u0027version\u0027] \u003c CONSTANTS.QOS_VERSION:"},{"line_number":2746,"context_line":"            for key, value in qos_specs_dict.items():"},{"line_number":2747,"context_line":"                if (key in CONSTANTS.FJ_QOS_KEY_BYTES_list or"},{"line_number":2748,"context_line":"                        key in CONSTANTS.FJ_QOS_KEY_IOPS_list):"},{"line_number":2749,"context_line":"                    msg \u003d (_(\u0027_set_qos, Can not support QoS \u0027"},{"line_number":2750,"context_line":"                             \u0027parameter \"%(key)s\" on firmware version \u0027"},{"line_number":2751,"context_line":"                             \u0027%(version)s.\u0027)"},{"line_number":2752,"context_line":"                           % {\u0027key\u0027: key,"},{"line_number":2753,"context_line":"                              \u0027version\u0027: clidata[\u0027version\u0027]})"},{"line_number":2754,"context_line":"                    LOG.error(msg)"},{"line_number":2755,"context_line":"                    raise exception.VolumeBackendAPIException(data\u003dmsg)"},{"line_number":2756,"context_line":"                if key in CONSTANTS.FJ_QOS_KEY_list:"},{"line_number":2757,"context_line":"                    category_dict \u003d self._get_qos_category_by_value("},{"line_number":2758,"context_line":"                        key, value)"},{"line_number":2759,"context_line":"                else:"},{"line_number":2760,"context_line":"                    unsupport.append(key)"},{"line_number":2761,"context_line":"            if unsupport:"},{"line_number":2762,"context_line":"                LOG.warning(\u0027_set_qos, \u0027"},{"line_number":2763,"context_line":"                            \u0027Can not support QoS parameter \"%s\".\u0027,"},{"line_number":2764,"context_line":"                            unsupport)"},{"line_number":2765,"context_line":""},{"line_number":2766,"context_line":"        # If storage version is after V11L30."},{"line_number":2767,"context_line":"        if clidata[\u0027version\u0027] \u003e\u003d \u0027V11L30-0000\u0027:"},{"line_number":2768,"context_line":"            key_dict \u003d self._get_param(qos_specs_dict)"},{"line_number":2769,"context_line":"            if not key_dict:"},{"line_number":2770,"context_line":"                return"},{"line_number":2771,"context_line":""},{"line_number":2772,"context_line":"            # Get total/read/write bandwidth limit."},{"line_number":2773,"context_line":"            category_dict \u003d self._get_qos_category(key_dict)"},{"line_number":2774,"context_line":""},{"line_number":2775,"context_line":"        if category_dict:"},{"line_number":2776,"context_line":"            # Set volume qos."},{"line_number":2777,"context_line":"            volumename \u003d self._get_volume_name(volume, use_id\u003duse_id)"},{"line_number":2778,"context_line":"            category_dict[\u0027volume-name\u0027] \u003d volumename"},{"line_number":2779,"context_line":"            rc, errordesc, job \u003d self._exec_eternus_cli("},{"line_number":2780,"context_line":"                \u0027set_volume_qos\u0027,"},{"line_number":2781,"context_line":"                **category_dict)"},{"line_number":2782,"context_line":"            if rc !\u003d 0:"},{"line_number":2783,"context_line":"                msg \u003d (_(\u0027_set_qos, \u0027"},{"line_number":2784,"context_line":"                         \u0027set_volume_qos failed. \u0027"},{"line_number":2785,"context_line":"                         \u0027Return code: %(rc)lu, \u0027"},{"line_number":2786,"context_line":"                         \u0027Error: %(errordesc)s, \u0027"},{"line_number":2787,"context_line":"                         \u0027Message: %(job)s.\u0027)"},{"line_number":2788,"context_line":"                       % {\u0027rc\u0027: rc,"},{"line_number":2789,"context_line":"                          \u0027errordesc\u0027: errordesc,"},{"line_number":2790,"context_line":"                          \u0027job\u0027: job})"},{"line_number":2791,"context_line":"                LOG.error(msg)"},{"line_number":2792,"context_line":"                raise exception.VolumeBackendAPIException(data\u003dmsg)"},{"line_number":2793,"context_line":""},{"line_number":2794,"context_line":"    @staticmethod"},{"line_number":2795,"context_line":"    def _get_qos_specs(volume):"},{"line_number":2796,"context_line":"        \"\"\"Get qos specs information from volume information.\"\"\""},{"line_number":2797,"context_line":"        LOG.debug(\u0027_get_qos_specs, volume id: %s.\u0027, volume[\u0027id\u0027])"},{"line_number":2798,"context_line":""},{"line_number":2799,"context_line":"        qos_specs_dict \u003d {}"},{"line_number":2800,"context_line":"        qos_specs_id \u003d None"},{"line_number":2801,"context_line":"        ctxt \u003d None"},{"line_number":2802,"context_line":""},{"line_number":2803,"context_line":"        volume_type_id \u003d volume.get(\u0027volume_type_id\u0027)"},{"line_number":2804,"context_line":""},{"line_number":2805,"context_line":"        if volume_type_id:"},{"line_number":2806,"context_line":"            ctxt \u003d context.get_admin_context()"},{"line_number":2807,"context_line":"            volume_type \u003d volume_types.get_volume_type(ctxt, volume_type_id)"},{"line_number":2808,"context_line":"            qos_specs_id \u003d volume_type.get(\u0027qos_specs_id\u0027)"},{"line_number":2809,"context_line":""},{"line_number":2810,"context_line":"        if qos_specs_id:"},{"line_number":2811,"context_line":"            qos_specs_dict \u003d ("},{"line_number":2812,"context_line":"                qos_specs.get_qos_specs(ctxt, qos_specs_id)[\u0027specs\u0027])"},{"line_number":2813,"context_line":""},{"line_number":2814,"context_line":"        LOG.debug(\u0027_get_qos_specs, qos_specs_dict: %s.\u0027, qos_specs_dict)"},{"line_number":2815,"context_line":"        return qos_specs_dict"},{"line_number":2816,"context_line":""},{"line_number":2817,"context_line":"    def _is_qos_or_format_support(self, func_name):"},{"line_number":2818,"context_line":"        \"\"\"If storage is DX S2 series, qos or format is not supported.\"\"\""},{"line_number":2819,"context_line":"        is_support \u003d True"},{"line_number":2820,"context_line":""},{"line_number":2821,"context_line":"        if self.model_name \u003d\u003d CONSTANTS.DX_S2:"},{"line_number":2822,"context_line":"            is_support \u003d False"},{"line_number":2823,"context_line":"            LOG.warning(\u0027%s is not supported for DX S2, \u0027"},{"line_number":2824,"context_line":"                        \u0027Skip this process.\u0027, func_name)"},{"line_number":2825,"context_line":"        return is_support"},{"line_number":2826,"context_line":""},{"line_number":2827,"context_line":"    @staticmethod"},{"line_number":2828,"context_line":"    def _get_qos_category_by_value(key, value):"},{"line_number":2829,"context_line":"        \"\"\"Get qos category using value.\"\"\""},{"line_number":2830,"context_line":"        LOG.debug(\u0027_get_qos_category_by_value, \u0027"},{"line_number":2831,"context_line":"                  \u0027key: %(key)s, value: %(value)s.\u0027,"},{"line_number":2832,"context_line":"                  {\u0027key\u0027: key, \u0027value\u0027: value})"},{"line_number":2833,"context_line":""},{"line_number":2834,"context_line":"        ret \u003d 0"},{"line_number":2835,"context_line":""},{"line_number":2836,"context_line":"        # Log error method."},{"line_number":2837,"context_line":"        def _get_qos_category_by_value_error():"},{"line_number":2838,"context_line":"            \"\"\"Input value is invalid, log error and raise exception.\"\"\""},{"line_number":2839,"context_line":"            msg \u003d (_(\u0027_get_qos_category_by_value, \u0027"},{"line_number":2840,"context_line":"                     \u0027Invalid value is input, \u0027"},{"line_number":2841,"context_line":"                     \u0027key: %(key)s, \u0027"},{"line_number":2842,"context_line":"                     \u0027value: %(value)s.\u0027)"},{"line_number":2843,"context_line":"                   % {\u0027key\u0027: key,"},{"line_number":2844,"context_line":"                      \u0027value\u0027: value})"},{"line_number":2845,"context_line":"            LOG.warning(msg)"},{"line_number":2846,"context_line":"            raise exception.VolumeBackendAPIException(data\u003dmsg)"},{"line_number":2847,"context_line":""},{"line_number":2848,"context_line":"        if key \u003d\u003d \"maxBWS\":"},{"line_number":2849,"context_line":"            try:"},{"line_number":2850,"context_line":"                digit \u003d int(float(value))"},{"line_number":2851,"context_line":"            except Exception:"},{"line_number":2852,"context_line":"                _get_qos_category_by_value_error()"},{"line_number":2853,"context_line":""},{"line_number":2854,"context_line":"            if 800 \u003c\u003d digit:"},{"line_number":2855,"context_line":"                ret \u003d 1"},{"line_number":2856,"context_line":"            elif 700 \u003c\u003d digit:"},{"line_number":2857,"context_line":"                ret \u003d 2"},{"line_number":2858,"context_line":"            elif 600 \u003c\u003d digit:"},{"line_number":2859,"context_line":"                ret \u003d 3"},{"line_number":2860,"context_line":"            elif 500 \u003c\u003d digit:"},{"line_number":2861,"context_line":"                ret \u003d 4"},{"line_number":2862,"context_line":"            elif 400 \u003c\u003d digit:"},{"line_number":2863,"context_line":"                ret \u003d 5"},{"line_number":2864,"context_line":"            elif 300 \u003c\u003d digit:"},{"line_number":2865,"context_line":"                ret \u003d 6"},{"line_number":2866,"context_line":"            elif 200 \u003c\u003d digit:"},{"line_number":2867,"context_line":"                ret \u003d 7"},{"line_number":2868,"context_line":"            elif 100 \u003c\u003d digit:"},{"line_number":2869,"context_line":"                ret \u003d 8"},{"line_number":2870,"context_line":"            elif 70 \u003c\u003d digit:"},{"line_number":2871,"context_line":"                ret \u003d 9"},{"line_number":2872,"context_line":"            elif 40 \u003c\u003d digit:"},{"line_number":2873,"context_line":"                ret \u003d 10"},{"line_number":2874,"context_line":"            elif 25 \u003c\u003d digit:"},{"line_number":2875,"context_line":"                ret \u003d 11"},{"line_number":2876,"context_line":"            elif 20 \u003c\u003d digit:"},{"line_number":2877,"context_line":"                ret \u003d 12"},{"line_number":2878,"context_line":"            elif 15 \u003c\u003d digit:"},{"line_number":2879,"context_line":"                ret \u003d 13"},{"line_number":2880,"context_line":"            elif 10 \u003c\u003d digit:"},{"line_number":2881,"context_line":"                ret \u003d 14"},{"line_number":2882,"context_line":"            elif 0 \u003c digit:"},{"line_number":2883,"context_line":"                ret \u003d 15"},{"line_number":2884,"context_line":"            else:"},{"line_number":2885,"context_line":"                _get_qos_category_by_value_error()"},{"line_number":2886,"context_line":""},{"line_number":2887,"context_line":"        LOG.debug(\u0027_get_qos_category_by_value (%s).\u0027, ret)"},{"line_number":2888,"context_line":""},{"line_number":2889,"context_line":"        category_dict \u003d {}"},{"line_number":2890,"context_line":"        if ret \u003e 0:"},{"line_number":2891,"context_line":"            category_dict \u003d {\u0027bandwidth-limit\u0027: ret}"},{"line_number":2892,"context_line":""},{"line_number":2893,"context_line":"        return category_dict"},{"line_number":2894,"context_line":""},{"line_number":2895,"context_line":"    def _get_param(self, qos_specs_dict):"},{"line_number":2896,"context_line":"        # Get all keys which have been set and its value."},{"line_number":2897,"context_line":"        LOG.debug(\u0027_get_param, \u0027"},{"line_number":2898,"context_line":"                  \u0027qos_specs_dict: %(qos_specs_dict)s.\u0027,"},{"line_number":2899,"context_line":"                  {\u0027qos_specs_dict\u0027: qos_specs_dict})"},{"line_number":2900,"context_line":"        key_dict \u003d {}"},{"line_number":2901,"context_line":"        unsupport \u003d []"},{"line_number":2902,"context_line":"        for key, value in qos_specs_dict.items():"},{"line_number":2903,"context_line":"            if key in CONSTANTS.FJ_QOS_KEY_list:"},{"line_number":2904,"context_line":"                msg \u003d (_(\u0027_get_param, Can not support QoS \u0027"},{"line_number":2905,"context_line":"                         \u0027parameter \"%(key)s\" on firmware version \u0027"},{"line_number":2906,"context_line":"                         \u0027V11L30-0000 or above.\u0027)"},{"line_number":2907,"context_line":"                       % {\u0027key\u0027: key})"},{"line_number":2908,"context_line":"                LOG.warning(msg)"},{"line_number":2909,"context_line":"                raise exception.VolumeBackendAPIException(data\u003dmsg)"},{"line_number":2910,"context_line":""},{"line_number":2911,"context_line":"            if key in CONSTANTS.FJ_QOS_KEY_BYTES_list:"},{"line_number":2912,"context_line":"                key_dict[key] \u003d self._check_throughput(key, value)"},{"line_number":2913,"context_line":"                # Example: When \"read_bytes_sec\" is specified,"},{"line_number":2914,"context_line":"                # the corresponding \"read_iops_sec\" also needs to be specified."},{"line_number":2915,"context_line":"                # If not, it is specified as the maximum."},{"line_number":2916,"context_line":"                iopsStr \u003d key.replace(\u0027bytes\u0027, \u0027iops\u0027)"},{"line_number":2917,"context_line":"                if iopsStr not in qos_specs_dict.keys():"},{"line_number":2918,"context_line":"                    key_dict[iopsStr] \u003d CONSTANTS.MAX_IOPS"},{"line_number":2919,"context_line":"            elif key in CONSTANTS.FJ_QOS_KEY_IOPS_list:"},{"line_number":2920,"context_line":"                key_dict[key] \u003d self._check_iops(key, value)"},{"line_number":2921,"context_line":"                # If can not get the corresponding bytes,"},{"line_number":2922,"context_line":"                # the bytes is set to the maximum value."},{"line_number":2923,"context_line":"                throughputStr \u003d key.replace(\u0027iops\u0027, \u0027bytes\u0027)"},{"line_number":2924,"context_line":"                if throughputStr not in qos_specs_dict.keys():"},{"line_number":2925,"context_line":"                    key_dict[throughputStr] \u003d CONSTANTS.MAX_THROUGHPUT"},{"line_number":2926,"context_line":"            else:"},{"line_number":2927,"context_line":"                unsupport.append(key)"},{"line_number":2928,"context_line":"        if unsupport:"},{"line_number":2929,"context_line":"            LOG.warning(\u0027_get_param, \u0027"},{"line_number":2930,"context_line":"                        \u0027Can not support QoS parameter \"%s\".\u0027, unsupport)"},{"line_number":2931,"context_line":""},{"line_number":2932,"context_line":"        return key_dict"},{"line_number":2933,"context_line":""},{"line_number":2934,"context_line":"    def _check_iops(self, key, value):"},{"line_number":2935,"context_line":"        \"\"\"Check input value of IOPS.\"\"\""},{"line_number":2936,"context_line":"        LOG.debug(\u0027_check_iops, key: %(key)s, value: %(value)s.\u0027,"},{"line_number":2937,"context_line":"                  {\u0027key\u0027: key, \u0027value\u0027: value})"},{"line_number":2938,"context_line":"        value \u003d int(float(value))"},{"line_number":2939,"context_line":"        if value \u003c CONSTANTS.MIN_IOPS or value \u003e CONSTANTS.MAX_IOPS:"},{"line_number":2940,"context_line":"            msg \u003d (_(\u0027_check_iops, \u0027"},{"line_number":2941,"context_line":"                     \u0027%(key)s is out of range.\u0027)"},{"line_number":2942,"context_line":"                   % {\u0027key\u0027: key})"},{"line_number":2943,"context_line":"            LOG.warning(msg)"},{"line_number":2944,"context_line":"            raise exception.VolumeBackendAPIException(data\u003dmsg)"},{"line_number":2945,"context_line":"        return value"},{"line_number":2946,"context_line":""},{"line_number":2947,"context_line":"    def _check_throughput(self, key, value):"},{"line_number":2948,"context_line":"        LOG.debug(\u0027_check_throughput, key: %(key)s, value: %(value)s.\u0027,"},{"line_number":2949,"context_line":"                  {\u0027key\u0027: key, \u0027value\u0027: value})"},{"line_number":2950,"context_line":"        value \u003d float(value) / units.Mi"},{"line_number":2951,"context_line":"        if (value \u003c CONSTANTS.MIN_THROUGHPUT or"},{"line_number":2952,"context_line":"                value \u003e CONSTANTS.MAX_THROUGHPUT):"},{"line_number":2953,"context_line":"            msg \u003d (_(\u0027_check_throughput, \u0027"},{"line_number":2954,"context_line":"                     \u0027%(key)s is out of range.\u0027)"},{"line_number":2955,"context_line":"                   % {\u0027key\u0027: key})"},{"line_number":2956,"context_line":"            LOG.warning(msg)"},{"line_number":2957,"context_line":"            raise exception.VolumeBackendAPIException(data\u003dmsg)"},{"line_number":2958,"context_line":"        return int(value)"},{"line_number":2959,"context_line":""},{"line_number":2960,"context_line":"    def _get_qos_category(self, key_dict):"},{"line_number":2961,"context_line":"        \"\"\"Get qos category by parameters according to the specific volume.\"\"\""},{"line_number":2962,"context_line":"        LOG.debug(\u0027_get_qos_category, \u0027"},{"line_number":2963,"context_line":"                  \u0027key_dict: %(key_dict)s.\u0027,"},{"line_number":2964,"context_line":"                  {\u0027key_dict\u0027: key_dict})"},{"line_number":2965,"context_line":""},{"line_number":2966,"context_line":"        # Get all the bandwidth limits."},{"line_number":2967,"context_line":"        rc, errordesc, bandwidthlist \u003d self._exec_eternus_cli("},{"line_number":2968,"context_line":"            \u0027show_qos_bandwidth_limit\u0027)"},{"line_number":2969,"context_line":"        if rc !\u003d 0:"},{"line_number":2970,"context_line":"            msg \u003d (_(\u0027_get_qos_category, \u0027"},{"line_number":2971,"context_line":"                     \u0027show_qos_bandwidth_limit failed. \u0027"},{"line_number":2972,"context_line":"                     \u0027Return code: %(rc)lu, \u0027"},{"line_number":2973,"context_line":"                     \u0027Error: %(errordesc)s, \u0027"},{"line_number":2974,"context_line":"                     \u0027Message: %(clidata)s.\u0027)"},{"line_number":2975,"context_line":"                   % {\u0027rc\u0027: rc,"},{"line_number":2976,"context_line":"                      \u0027errordesc\u0027: errordesc,"},{"line_number":2977,"context_line":"                      \u0027clidata\u0027: bandwidthlist})"},{"line_number":2978,"context_line":"            LOG.warning(msg)"},{"line_number":2979,"context_line":"            raise exception.VolumeBackendAPIException(data\u003dmsg)"},{"line_number":2980,"context_line":""},{"line_number":2981,"context_line":"        ret_dict \u003d {}"},{"line_number":2982,"context_line":"        for bw in bandwidthlist:"},{"line_number":2983,"context_line":"            if \u0027total_iops_sec\u0027 in key_dict.keys():"},{"line_number":2984,"context_line":"                if (bw[\u0027total_iops_sec\u0027] \u003d\u003d key_dict[\u0027total_iops_sec\u0027] and"},{"line_number":2985,"context_line":"                        bw[\u0027total_bytes_sec\u0027] \u003d\u003d key_dict[\u0027total_bytes_sec\u0027]):"},{"line_number":2986,"context_line":"                    ret_dict[\u0027bandwidth-limit\u0027] \u003d bw[\u0027total_limit\u0027]"},{"line_number":2987,"context_line":"            if \u0027read_iops_sec\u0027 in key_dict.keys():"},{"line_number":2988,"context_line":"                if (bw[\u0027read_iops_sec\u0027] \u003d\u003d key_dict[\u0027read_iops_sec\u0027] and"},{"line_number":2989,"context_line":"                        bw[\u0027read_bytes_sec\u0027] \u003d\u003d key_dict[\u0027read_bytes_sec\u0027]):"},{"line_number":2990,"context_line":"                    ret_dict[\u0027read-bandwidth-limit\u0027] \u003d bw[\u0027read_limit\u0027]"},{"line_number":2991,"context_line":"            if \u0027write_iops_sec\u0027 in key_dict.keys():"},{"line_number":2992,"context_line":"                if (bw[\u0027write_iops_sec\u0027] \u003d\u003d key_dict[\u0027write_iops_sec\u0027] and"},{"line_number":2993,"context_line":"                        bw[\u0027write_bytes_sec\u0027] \u003d\u003d key_dict[\u0027write_bytes_sec\u0027]):"},{"line_number":2994,"context_line":"                    ret_dict[\u0027write-bandwidth-limit\u0027] \u003d bw[\u0027write_limit\u0027]"},{"line_number":2995,"context_line":""},{"line_number":2996,"context_line":"        # If find all available pairs."},{"line_number":2997,"context_line":"        # len(key_dict) must be 2, 4 or 6"},{"line_number":2998,"context_line":"        if len(key_dict) / 2 \u003d\u003d len(ret_dict):"},{"line_number":2999,"context_line":"            return ret_dict"},{"line_number":3000,"context_line":""},{"line_number":3001,"context_line":"        rc, errordesc, vqosdatalist \u003d self._exec_eternus_cli(\u0027show_volume_qos\u0027)"},{"line_number":3002,"context_line":"        if rc !\u003d 0:"},{"line_number":3003,"context_line":"            msg \u003d (_(\u0027_get_qos_category, \u0027"},{"line_number":3004,"context_line":"                     \u0027show_volume_qos failed. \u0027"},{"line_number":3005,"context_line":"                     \u0027Return code: %(rc)lu, \u0027"},{"line_number":3006,"context_line":"                     \u0027Error: %(errordesc)s, \u0027"},{"line_number":3007,"context_line":"                     \u0027Message: %(clidata)s.\u0027)"},{"line_number":3008,"context_line":"                   % {\u0027rc\u0027: rc,"},{"line_number":3009,"context_line":"                      \u0027errordesc\u0027: errordesc,"},{"line_number":3010,"context_line":"                      \u0027clidata\u0027: vqosdatalist})"},{"line_number":3011,"context_line":"            LOG.warning(msg)"},{"line_number":3012,"context_line":"            raise exception.VolumeBackendAPIException(data\u003dmsg)"},{"line_number":3013,"context_line":""},{"line_number":3014,"context_line":"        # Get used total/read/write bandwidth limit."},{"line_number":3015,"context_line":"        totalusedlimits \u003d set()"},{"line_number":3016,"context_line":"        readusedlimits \u003d set()"},{"line_number":3017,"context_line":"        writeusedlimits \u003d set()"},{"line_number":3018,"context_line":"        for vqos in vqosdatalist:"},{"line_number":3019,"context_line":"            totalusedlimits.add(vqos[\u0027total_limit\u0027])"},{"line_number":3020,"context_line":"            readusedlimits.add(vqos[\u0027read_limit\u0027])"},{"line_number":3021,"context_line":"            writeusedlimits.add(vqos[\u0027write_limit\u0027])"},{"line_number":3022,"context_line":""},{"line_number":3023,"context_line":"        # Get unused total/read/write bandwidth limit."},{"line_number":3024,"context_line":"        totalunusedlimits \u003d list(set(range(1, 16)) - totalusedlimits)"},{"line_number":3025,"context_line":"        readunusedlimits \u003d list(set(range(1, 16)) - readusedlimits)"},{"line_number":3026,"context_line":"        writeunusedlimits \u003d list(set(range(1, 16)) - writeusedlimits)"},{"line_number":3027,"context_line":""},{"line_number":3028,"context_line":"        # If there is no same couple, set new qos bandwidth limit."},{"line_number":3029,"context_line":"        if \u0027total_iops_sec\u0027 in key_dict.keys():"},{"line_number":3030,"context_line":"            if \u0027bandwidth-limit\u0027 not in ret_dict.keys():"},{"line_number":3031,"context_line":"                if len(totalunusedlimits) \u003d\u003d 0:"},{"line_number":3032,"context_line":"                    msg \u003d _(\u0027_get_qos_category, \u0027"},{"line_number":3033,"context_line":"                            \u0027There is no available total bandwidth limit.\u0027)"},{"line_number":3034,"context_line":"                    LOG.warning(msg)"},{"line_number":3035,"context_line":"                    raise exception.VolumeBackendAPIException(data\u003dmsg)"},{"line_number":3036,"context_line":"                else:"},{"line_number":3037,"context_line":"                    self._set_limit(\u0027volume-qos\u0027,"},{"line_number":3038,"context_line":"                                    totalunusedlimits[0],"},{"line_number":3039,"context_line":"                                    key_dict[\u0027total_iops_sec\u0027],"},{"line_number":3040,"context_line":"                                    key_dict[\u0027total_bytes_sec\u0027])"},{"line_number":3041,"context_line":"                    ret_dict[\u0027bandwidth-limit\u0027] \u003d totalunusedlimits[0]"},{"line_number":3042,"context_line":"        else:"},{"line_number":3043,"context_line":"            ret_dict[\u0027bandwidth-limit\u0027] \u003d 0"},{"line_number":3044,"context_line":""},{"line_number":3045,"context_line":"        if \u0027read_iops_sec\u0027 in key_dict.keys():"},{"line_number":3046,"context_line":"            if \u0027read-bandwidth-limit\u0027 not in ret_dict.keys():"},{"line_number":3047,"context_line":"                if len(readunusedlimits) \u003d\u003d 0:"},{"line_number":3048,"context_line":"                    msg \u003d _(\u0027_get_qos_category, \u0027"},{"line_number":3049,"context_line":"                            \u0027There is no available read bandwidth limit.\u0027)"},{"line_number":3050,"context_line":"                    LOG.warning(msg)"},{"line_number":3051,"context_line":"                    raise exception.VolumeBackendAPIException(data\u003dmsg)"},{"line_number":3052,"context_line":"                else:"},{"line_number":3053,"context_line":"                    self._set_limit(\u0027volume-qos-read\u0027,"},{"line_number":3054,"context_line":"                                    readunusedlimits[0],"},{"line_number":3055,"context_line":"                                    key_dict[\u0027read_iops_sec\u0027],"},{"line_number":3056,"context_line":"                                    key_dict[\u0027read_bytes_sec\u0027])"},{"line_number":3057,"context_line":"                    ret_dict[\u0027read-bandwidth-limit\u0027] \u003d readunusedlimits[0]"},{"line_number":3058,"context_line":"        else:"},{"line_number":3059,"context_line":"            ret_dict[\u0027read-bandwidth-limit\u0027] \u003d 0"},{"line_number":3060,"context_line":""},{"line_number":3061,"context_line":"        if \u0027write_bytes_sec\u0027 in key_dict.keys():"},{"line_number":3062,"context_line":"            if \u0027write-bandwidth-limit\u0027 not in ret_dict.keys():"},{"line_number":3063,"context_line":"                if len(writeunusedlimits) \u003d\u003d 0:"},{"line_number":3064,"context_line":"                    msg \u003d _(\u0027_get_qos_category, \u0027"},{"line_number":3065,"context_line":"                            \u0027There is no available write bandwidth limit.\u0027)"},{"line_number":3066,"context_line":"                    LOG.warning(msg)"},{"line_number":3067,"context_line":"                    raise exception.VolumeBackendAPIException(data\u003dmsg)"},{"line_number":3068,"context_line":"                else:"},{"line_number":3069,"context_line":"                    self._set_limit(\u0027volume-qos-write\u0027,"},{"line_number":3070,"context_line":"                                    writeunusedlimits[0],"},{"line_number":3071,"context_line":"                                    key_dict[\u0027write_iops_sec\u0027],"},{"line_number":3072,"context_line":"                                    key_dict[\u0027write_bytes_sec\u0027])"},{"line_number":3073,"context_line":"                    ret_dict[\u0027write-bandwidth-limit\u0027] \u003d writeunusedlimits[0]"},{"line_number":3074,"context_line":"        else:"},{"line_number":3075,"context_line":"            ret_dict[\u0027write-bandwidth-limit\u0027] \u003d 0"},{"line_number":3076,"context_line":""},{"line_number":3077,"context_line":"        return ret_dict"},{"line_number":3078,"context_line":""},{"line_number":3079,"context_line":"    def _set_limit(self, mode, limit, iops, throughput):"},{"line_number":3080,"context_line":"        \"\"\"Register a new qos scheme at the specified bandwidth\"\"\""},{"line_number":3081,"context_line":"        LOG.debug(\u0027_set_limit, mode: %(mode)s, \u0027"},{"line_number":3082,"context_line":"                  \u0027limit: %(limit)s, iops:%(iops)s, \u0027"},{"line_number":3083,"context_line":"                  \u0027throughput: %(throughput)s.\u0027,"},{"line_number":3084,"context_line":"                  {\u0027mode\u0027: mode, \u0027limit\u0027: limit,"},{"line_number":3085,"context_line":"                   \u0027iops\u0027: iops, \u0027throughput\u0027: throughput})"},{"line_number":3086,"context_line":"        param_dict \u003d ({\u0027mode\u0027: mode,"},{"line_number":3087,"context_line":"                       \u0027bandwidth-limit\u0027: limit,"},{"line_number":3088,"context_line":"                       \u0027iops\u0027: iops,"},{"line_number":3089,"context_line":"                       \u0027throughput\u0027: throughput})"},{"line_number":3090,"context_line":""},{"line_number":3091,"context_line":"        rc, emsg, clidata \u003d self._exec_eternus_cli("},{"line_number":3092,"context_line":"            \u0027set_qos_bandwidth_limit\u0027, **param_dict)"},{"line_number":3093,"context_line":""},{"line_number":3094,"context_line":"        if rc !\u003d 0:"},{"line_number":3095,"context_line":"            msg \u003d (_(\u0027_set_limit, \u0027"},{"line_number":3096,"context_line":"                     \u0027set_qos_bandwidth_limit failed. \u0027"},{"line_number":3097,"context_line":"                     \u0027Return code: %(rc)lu, \u0027"},{"line_number":3098,"context_line":"                     \u0027Error: %(errormsg)s, \u0027"},{"line_number":3099,"context_line":"                     \u0027Message: %(clidata)s.\u0027)"},{"line_number":3100,"context_line":"                   % {\u0027rc\u0027: rc,"},{"line_number":3101,"context_line":"                      \u0027errormsg\u0027: emsg,"},{"line_number":3102,"context_line":"                      \u0027clidata\u0027: clidata})"},{"line_number":3103,"context_line":"            LOG.warning(msg)"},{"line_number":3104,"context_line":"            raise exception.VolumeBackendAPIException(data\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":12,"id":"7905c6ac_3866561d","line":3104,"range":{"start_line":2687,"start_character":0,"end_line":3104,"end_character":63},"in_reply_to":"e3360531_f7cb58f8","updated":"2023-08-22 02:38:02.000000000","message":"Done","commit_id":"a570b5382f9079e6c49d60ad0860dfd7e9f0efbe"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"4571918073557c02ba3aed0ae02fa7f727f9289a","unresolved":true,"context_lines":[{"line_number":202,"context_line":"            msg \u003d (_(\u0027create_volume, volume id: %(vid)s, \u0027"},{"line_number":203,"context_line":"                     \u0027volume size: %(vsize)s, remote: %(remote)s, \u0027"},{"line_number":204,"context_line":"                     \u0027Cannot find volume host.\u0027)"},{"line_number":205,"context_line":"                   % {\u0027vid\u0027: volume[\u0027id\u0027], \u0027vsize\u0027: volume[\u0027size\u0027]})"},{"line_number":206,"context_line":"            LOG.error(msg)"},{"line_number":207,"context_line":"            raise exception.VolumeBackendAPIException(data\u003dmsg)"},{"line_number":208,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"6ba4ac72_95be8983","line":205,"range":{"start_line":205,"start_character":21,"end_line":205,"end_character":67},"updated":"2023-09-06 19:56:34.000000000","message":"-1: This is going to give you a KeyError when the string interpolation happens because \u0027remote\u0027 is missing from this dict.","commit_id":"7cf5ecef4c9a80a6d49b216eabda85c75ebe47d6"},{"author":{"_account_id":33609,"name":"XuQi","display_name":"Inori","email":"xuq.fnstxz@fujitsu.com","username":"inori"},"change_message_id":"40e6690e0563584a1235142d43e36f589371566b","unresolved":false,"context_lines":[{"line_number":202,"context_line":"            msg \u003d (_(\u0027create_volume, volume id: %(vid)s, \u0027"},{"line_number":203,"context_line":"                     \u0027volume size: %(vsize)s, remote: %(remote)s, \u0027"},{"line_number":204,"context_line":"                     \u0027Cannot find volume host.\u0027)"},{"line_number":205,"context_line":"                   % {\u0027vid\u0027: volume[\u0027id\u0027], \u0027vsize\u0027: volume[\u0027size\u0027]})"},{"line_number":206,"context_line":"            LOG.error(msg)"},{"line_number":207,"context_line":"            raise exception.VolumeBackendAPIException(data\u003dmsg)"},{"line_number":208,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"518b51ef_e6e6356a","line":205,"range":{"start_line":205,"start_character":21,"end_line":205,"end_character":67},"in_reply_to":"6ba4ac72_95be8983","updated":"2023-09-07 12:46:09.000000000","message":"During the submission, I noticed there were other modifications, and I had missed confirming the exception handling, which has now been addressed. Additionally, no similar issues were found.","commit_id":"7cf5ecef4c9a80a6d49b216eabda85c75ebe47d6"},{"author":{"_account_id":35677,"name":"Thiago José de Andrade Alvoravel","display_name":"Thiago Alvoravel","email":"thiago.andrade@fit-tecnologia.org.br","username":"thiagoalvoravel"},"change_message_id":"c5e1ae52947ad3cda647931c33badc986488374f","unresolved":true,"context_lines":[{"line_number":2851,"context_line":"            except Exception:"},{"line_number":2852,"context_line":"                _get_qos_category_by_value_error()"},{"line_number":2853,"context_line":""},{"line_number":2854,"context_line":"            if digit \u003e\u003d 800:"},{"line_number":2855,"context_line":"                ret \u003d 1"},{"line_number":2856,"context_line":"            elif digit \u003e\u003d 700:"},{"line_number":2857,"context_line":"                ret \u003d 2"}],"source_content_type":"text/x-python","patch_set":14,"id":"934c7c5a_dc293700","line":2854,"range":{"start_line":2854,"start_character":12,"end_line":2854,"end_character":28},"updated":"2023-08-24 18:30:09.000000000","message":"Instead use all these IFs you could create a const dictionary for these values and access it using next() with condition. It\u0027ll be more maintainable. WDYT?","commit_id":"7cf5ecef4c9a80a6d49b216eabda85c75ebe47d6"},{"author":{"_account_id":35677,"name":"Thiago José de Andrade Alvoravel","display_name":"Thiago Alvoravel","email":"thiago.andrade@fit-tecnologia.org.br","username":"thiagoalvoravel"},"change_message_id":"b13fe40306a5b277a321b1be8cda2a90e6b87469","unresolved":false,"context_lines":[{"line_number":2851,"context_line":"            except Exception:"},{"line_number":2852,"context_line":"                _get_qos_category_by_value_error()"},{"line_number":2853,"context_line":""},{"line_number":2854,"context_line":"            if digit \u003e\u003d 800:"},{"line_number":2855,"context_line":"                ret \u003d 1"},{"line_number":2856,"context_line":"            elif digit \u003e\u003d 700:"},{"line_number":2857,"context_line":"                ret \u003d 2"}],"source_content_type":"text/x-python","patch_set":14,"id":"691f090f_cda965a8","line":2854,"range":{"start_line":2854,"start_character":12,"end_line":2854,"end_character":28},"in_reply_to":"6d9501dd_b67c1418","updated":"2023-08-25 13:04:35.000000000","message":"Sure!","commit_id":"7cf5ecef4c9a80a6d49b216eabda85c75ebe47d6"},{"author":{"_account_id":33609,"name":"XuQi","display_name":"Inori","email":"xuq.fnstxz@fujitsu.com","username":"inori"},"change_message_id":"e3aa893652429160a770592c197662eaf35bb28b","unresolved":false,"context_lines":[{"line_number":2851,"context_line":"            except Exception:"},{"line_number":2852,"context_line":"                _get_qos_category_by_value_error()"},{"line_number":2853,"context_line":""},{"line_number":2854,"context_line":"            if digit \u003e\u003d 800:"},{"line_number":2855,"context_line":"                ret \u003d 1"},{"line_number":2856,"context_line":"            elif digit \u003e\u003d 700:"},{"line_number":2857,"context_line":"                ret \u003d 2"}],"source_content_type":"text/x-python","patch_set":14,"id":"6d9501dd_b67c1418","line":2854,"range":{"start_line":2854,"start_character":12,"end_line":2854,"end_character":28},"in_reply_to":"934c7c5a_dc293700","updated":"2023-08-25 02:16:00.000000000","message":"Thanks for your review. Indeed, it\u0027s a valuable suggestion. \nHowever, we are currently in the process of porting our driver code into community.\nBut Feature freeze is approaching, and this functionality is important for our driver. Could you please consider removing the -1 for now?\nWe will take your advice into consideration for addressing this matter in future patches.","commit_id":"7cf5ecef4c9a80a6d49b216eabda85c75ebe47d6"}],"cinder/volume/drivers/fujitsu/eternus_dx/eternus_dx_fc.py":[{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"4571918073557c02ba3aed0ae02fa7f727f9289a","unresolved":true,"context_lines":[{"line_number":53,"context_line":"    def check_for_setup_error(self):"},{"line_number":54,"context_line":"        if not self.common.pywbemAvailable:"},{"line_number":55,"context_line":"            LOG.error(\u0027pywbem could not be imported! \u0027"},{"line_number":56,"context_line":"                      \u0027pywbem is necessary for this volume driver.\u0027)"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"    def create_volume(self, volume):"},{"line_number":59,"context_line":"        \"\"\"Create volume.\"\"\""}],"source_content_type":"text/x-python","patch_set":14,"id":"57d9ae59_0bb352c0","line":56,"updated":"2023-09-06 19:56:34.000000000","message":"Shouldn\u0027t you be raising VolumeBackendAPIException here in addition to logging the error?  (Same in the iscsi driver)","commit_id":"7cf5ecef4c9a80a6d49b216eabda85c75ebe47d6"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"4571918073557c02ba3aed0ae02fa7f727f9289a","unresolved":true,"context_lines":[{"line_number":53,"context_line":"    def check_for_setup_error(self):"},{"line_number":54,"context_line":"        if not self.common.pywbemAvailable:"},{"line_number":55,"context_line":"            LOG.error(\u0027pywbem could not be imported! \u0027"},{"line_number":56,"context_line":"                      \u0027pywbem is necessary for this volume driver.\u0027)"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"    def create_volume(self, volume):"},{"line_number":59,"context_line":"        \"\"\"Create volume.\"\"\""}],"source_content_type":"text/x-python","patch_set":14,"id":"c4e8f8d8_a857bd0d","line":56,"updated":"2023-09-06 19:56:34.000000000","message":"Shouldn\u0027t you be raising VolumeBackendAPIException here in addition to logging the error?  (Same thing in the iscsi driver)  Not a -1 because it\u0027s not related to your change, but I think it needs to be fixed.","commit_id":"7cf5ecef4c9a80a6d49b216eabda85c75ebe47d6"},{"author":{"_account_id":33609,"name":"XuQi","display_name":"Inori","email":"xuq.fnstxz@fujitsu.com","username":"inori"},"change_message_id":"40e6690e0563584a1235142d43e36f589371566b","unresolved":false,"context_lines":[{"line_number":53,"context_line":"    def check_for_setup_error(self):"},{"line_number":54,"context_line":"        if not self.common.pywbemAvailable:"},{"line_number":55,"context_line":"            LOG.error(\u0027pywbem could not be imported! \u0027"},{"line_number":56,"context_line":"                      \u0027pywbem is necessary for this volume driver.\u0027)"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"    def create_volume(self, volume):"},{"line_number":59,"context_line":"        \"\"\"Create volume.\"\"\""}],"source_content_type":"text/x-python","patch_set":14,"id":"b7123335_193802ed","line":56,"in_reply_to":"57d9ae59_0bb352c0","updated":"2023-09-07 12:46:09.000000000","message":"I\u0027ve added the Exception.","commit_id":"7cf5ecef4c9a80a6d49b216eabda85c75ebe47d6"},{"author":{"_account_id":33609,"name":"XuQi","display_name":"Inori","email":"xuq.fnstxz@fujitsu.com","username":"inori"},"change_message_id":"40e6690e0563584a1235142d43e36f589371566b","unresolved":false,"context_lines":[{"line_number":53,"context_line":"    def check_for_setup_error(self):"},{"line_number":54,"context_line":"        if not self.common.pywbemAvailable:"},{"line_number":55,"context_line":"            LOG.error(\u0027pywbem could not be imported! \u0027"},{"line_number":56,"context_line":"                      \u0027pywbem is necessary for this volume driver.\u0027)"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"    def create_volume(self, volume):"},{"line_number":59,"context_line":"        \"\"\"Create volume.\"\"\""}],"source_content_type":"text/x-python","patch_set":14,"id":"30a684fe_c23a26fa","line":56,"in_reply_to":"c4e8f8d8_a857bd0d","updated":"2023-09-07 12:46:09.000000000","message":"I\u0027ve added the Exception","commit_id":"7cf5ecef4c9a80a6d49b216eabda85c75ebe47d6"}],"releasenotes/notes/fujitsu-qos-support-1c1528da06d0b38a.yaml":[{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"97ad1847b1ed6435067e1eb8be72186e605fb499","unresolved":true,"context_lines":[{"line_number":3,"context_line":"  - Added support for QoS in the Fujitsu driver."},{"line_number":4,"context_line":"    Use \u0027maxBWS\u0027 when storage firmware version is less than V11L30-0000."},{"line_number":5,"context_line":"    Use the following parameters when storage firmware version is greater than V11L30-0000."},{"line_number":6,"context_line":"      read_bytes_sec write_bytes_sec total_bytes_sec"},{"line_number":7,"context_line":"      read_iops_sec write_iops_sec total_iops_sec"}],"source_content_type":"text/x-yaml","patch_set":7,"id":"50f66424_613eb16a","line":6,"updated":"2022-11-21 17:18:18.000000000","message":"Please put the setting names in double back-ticks so they are formatted and clear that they refer to something in the code.","commit_id":"a08a0df886b9e839d2577227c21ceb97a0154182"},{"author":{"_account_id":33609,"name":"XuQi","display_name":"Inori","email":"xuq.fnstxz@fujitsu.com","username":"inori"},"change_message_id":"fe1e067fc3cd14c4ce91efc43f1b9a40a1df7a61","unresolved":false,"context_lines":[{"line_number":3,"context_line":"  - Added support for QoS in the Fujitsu driver."},{"line_number":4,"context_line":"    Use \u0027maxBWS\u0027 when storage firmware version is less than V11L30-0000."},{"line_number":5,"context_line":"    Use the following parameters when storage firmware version is greater than V11L30-0000."},{"line_number":6,"context_line":"      read_bytes_sec write_bytes_sec total_bytes_sec"},{"line_number":7,"context_line":"      read_iops_sec write_iops_sec total_iops_sec"}],"source_content_type":"text/x-yaml","patch_set":7,"id":"aa226ba7_8465a6eb","line":6,"in_reply_to":"50f66424_613eb16a","updated":"2022-11-22 03:53:45.000000000","message":"I\u0027ve modified the release note as you said. Thanks for your review.","commit_id":"a08a0df886b9e839d2577227c21ceb97a0154182"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"3f0a438f311839572f7c36f2af5a2c10e1b1aee3","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":14,"id":"f9c754ce_6e9df1da","line":19,"updated":"2023-09-06 20:28:30.000000000","message":"You might want to reformat this so that it reads better, but I don\u0027t insist.  See https://storage.bhs.cloud.ovh.net/v1/AUTH_dcaab5e32b234d56b626f72581e3644c/zuul_opendev_logs_872/847730/14/check/build-openstack-releasenotes/8723bb0/docs/unreleased.html if you\u0027re not sure what I mean.\n\nYou should, however, remove the CRLF line endings from this file:\n\n  $ file fujitsu-qos-support-1c1528da06d0b38a.yaml\n  fujitsu-qos-support-1c1528da06d0b38a.yaml: ASCII text, with CRLF line terminators\n\nbecause if https://review.opendev.org/c/openstack/cinder/+/848759 merges first, it will cause a problem","commit_id":"7cf5ecef4c9a80a6d49b216eabda85c75ebe47d6"},{"author":{"_account_id":33609,"name":"XuQi","display_name":"Inori","email":"xuq.fnstxz@fujitsu.com","username":"inori"},"change_message_id":"40e6690e0563584a1235142d43e36f589371566b","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":14,"id":"767d6755_22270a43","line":19,"in_reply_to":"f9c754ce_6e9df1da","updated":"2023-09-07 12:46:09.000000000","message":"I\u0027ve changed the CRLF to LF.","commit_id":"7cf5ecef4c9a80a6d49b216eabda85c75ebe47d6"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"dc6bef51755844a626c60bec35306d49bc8f644d","unresolved":true,"context_lines":[{"line_number":3,"context_line":"  - Added support for QoS in the Fujitsu driver."},{"line_number":4,"context_line":"    Use \"maxBWS\" when storage firmware version is less than V11L30-0000."},{"line_number":5,"context_line":"    Use the following parameters when storage firmware version is greater than V11L30-0000."},{"line_number":6,"context_line":"      \"read_bytes_sec\""},{"line_number":7,"context_line":"      \"write_bytes_sec\""},{"line_number":8,"context_line":"      \"total_bytes_sec\""},{"line_number":9,"context_line":"      \"read_iops_sec\""}],"source_content_type":"text/x-yaml","patch_set":15,"id":"951bfe2e_d479f480","line":6,"updated":"2023-09-07 13:47:19.000000000","message":"nit: space before this line might help with the readability, you can check that locally by running ``tox -ereleasenotes``","commit_id":"8d674136beb4183d9b6a35482e73c23e699e2047"},{"author":{"_account_id":33609,"name":"XuQi","display_name":"Inori","email":"xuq.fnstxz@fujitsu.com","username":"inori"},"change_message_id":"12b0b05a03ce51467bd0115ea06ee5980fa0d6e7","unresolved":false,"context_lines":[{"line_number":3,"context_line":"  - Added support for QoS in the Fujitsu driver."},{"line_number":4,"context_line":"    Use \"maxBWS\" when storage firmware version is less than V11L30-0000."},{"line_number":5,"context_line":"    Use the following parameters when storage firmware version is greater than V11L30-0000."},{"line_number":6,"context_line":"      \"read_bytes_sec\""},{"line_number":7,"context_line":"      \"write_bytes_sec\""},{"line_number":8,"context_line":"      \"total_bytes_sec\""},{"line_number":9,"context_line":"      \"read_iops_sec\""}],"source_content_type":"text/x-yaml","patch_set":15,"id":"5bafe915_84f37fb1","line":6,"in_reply_to":"951bfe2e_d479f480","updated":"2023-09-08 03:49:39.000000000","message":"I\u0027ve fixed this.","commit_id":"8d674136beb4183d9b6a35482e73c23e699e2047"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"dc6bef51755844a626c60bec35306d49bc8f644d","unresolved":true,"context_lines":[{"line_number":9,"context_line":"      \"read_iops_sec\""},{"line_number":10,"context_line":"      \"write_iops_sec\""},{"line_number":11,"context_line":"      \"total_iops_sec\""},{"line_number":12,"context_line":"    The upper limit of bandwidth(BWS) is set by maxBWS if the firmware version "},{"line_number":13,"context_line":"    of the ETERNUS AF/DX is earlier than V11L30, and the IOPS/Throughput of "},{"line_number":14,"context_line":"    Total/Read/Write for the volume can be set separately for V11L30 and later."},{"line_number":15,"context_line":"    When the firmware version of the ETERNUS AF/DX is earlier than V11L30, for the volume QoS settings of"}],"source_content_type":"text/x-yaml","patch_set":15,"id":"37bfd31f_adf62863","line":12,"range":{"start_line":12,"start_character":78,"end_line":12,"end_character":79},"updated":"2023-09-07 13:47:19.000000000","message":"nit: extra whitespace","commit_id":"8d674136beb4183d9b6a35482e73c23e699e2047"},{"author":{"_account_id":33609,"name":"XuQi","display_name":"Inori","email":"xuq.fnstxz@fujitsu.com","username":"inori"},"change_message_id":"12b0b05a03ce51467bd0115ea06ee5980fa0d6e7","unresolved":false,"context_lines":[{"line_number":9,"context_line":"      \"read_iops_sec\""},{"line_number":10,"context_line":"      \"write_iops_sec\""},{"line_number":11,"context_line":"      \"total_iops_sec\""},{"line_number":12,"context_line":"    The upper limit of bandwidth(BWS) is set by maxBWS if the firmware version "},{"line_number":13,"context_line":"    of the ETERNUS AF/DX is earlier than V11L30, and the IOPS/Throughput of "},{"line_number":14,"context_line":"    Total/Read/Write for the volume can be set separately for V11L30 and later."},{"line_number":15,"context_line":"    When the firmware version of the ETERNUS AF/DX is earlier than V11L30, for the volume QoS settings of"}],"source_content_type":"text/x-yaml","patch_set":15,"id":"a780581c_51c5ba36","line":12,"range":{"start_line":12,"start_character":78,"end_line":12,"end_character":79},"in_reply_to":"37bfd31f_adf62863","updated":"2023-09-08 03:49:39.000000000","message":"I\u0027ve fixed this.","commit_id":"8d674136beb4183d9b6a35482e73c23e699e2047"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"dc6bef51755844a626c60bec35306d49bc8f644d","unresolved":true,"context_lines":[{"line_number":10,"context_line":"      \"write_iops_sec\""},{"line_number":11,"context_line":"      \"total_iops_sec\""},{"line_number":12,"context_line":"    The upper limit of bandwidth(BWS) is set by maxBWS if the firmware version "},{"line_number":13,"context_line":"    of the ETERNUS AF/DX is earlier than V11L30, and the IOPS/Throughput of "},{"line_number":14,"context_line":"    Total/Read/Write for the volume can be set separately for V11L30 and later."},{"line_number":15,"context_line":"    When the firmware version of the ETERNUS AF/DX is earlier than V11L30, for the volume QoS settings of"},{"line_number":16,"context_line":"    the ETERNUS AF/DX, upper limits are set using the predefined options."}],"source_content_type":"text/x-yaml","patch_set":15,"id":"45bfc036_d173d6fc","line":13,"range":{"start_line":13,"start_character":75,"end_line":13,"end_character":76},"updated":"2023-09-07 13:47:19.000000000","message":"nit: same","commit_id":"8d674136beb4183d9b6a35482e73c23e699e2047"},{"author":{"_account_id":33609,"name":"XuQi","display_name":"Inori","email":"xuq.fnstxz@fujitsu.com","username":"inori"},"change_message_id":"12b0b05a03ce51467bd0115ea06ee5980fa0d6e7","unresolved":false,"context_lines":[{"line_number":10,"context_line":"      \"write_iops_sec\""},{"line_number":11,"context_line":"      \"total_iops_sec\""},{"line_number":12,"context_line":"    The upper limit of bandwidth(BWS) is set by maxBWS if the firmware version "},{"line_number":13,"context_line":"    of the ETERNUS AF/DX is earlier than V11L30, and the IOPS/Throughput of "},{"line_number":14,"context_line":"    Total/Read/Write for the volume can be set separately for V11L30 and later."},{"line_number":15,"context_line":"    When the firmware version of the ETERNUS AF/DX is earlier than V11L30, for the volume QoS settings of"},{"line_number":16,"context_line":"    the ETERNUS AF/DX, upper limits are set using the predefined options."}],"source_content_type":"text/x-yaml","patch_set":15,"id":"46389e14_85829d9a","line":13,"range":{"start_line":13,"start_character":75,"end_line":13,"end_character":76},"in_reply_to":"45bfc036_d173d6fc","updated":"2023-09-08 03:49:39.000000000","message":"I\u0027ve fixed this.","commit_id":"8d674136beb4183d9b6a35482e73c23e699e2047"}]}
