)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"82143c75eb605546419dbbd09b0b60c915a3ca86","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"880c738a_65bde0ce","updated":"2026-03-02 06:07:15.000000000","message":"@rosmaita.fossdev@gmail.com, @jobernar@redhat.com and @rajatdhasmana@gmail.com, could please review this patch.","commit_id":"9d6c7806cf3ae2322d1b424d33bd6b609edb3815"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"a7c9687d0d9dbdaf2d6e71453170ab0673b94dca","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"746efc90_ee7df339","updated":"2026-03-22 15:11:09.000000000","message":"Run-NetApp CI","commit_id":"9d6c7806cf3ae2322d1b424d33bd6b609edb3815"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"6211a2e39389c30489a2089ec4f4e6fe571188a5","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"940ffb60_d82ce183","updated":"2026-03-09 06:31:03.000000000","message":"Run-NetApp CI","commit_id":"9d6c7806cf3ae2322d1b424d33bd6b609edb3815"},{"author":{"_account_id":38614,"name":"Sailaja Mada","display_name":"Sailaja Mada","email":"sailajam@netapp.com","username":"sailajam"},"change_message_id":"c4aa18114ca801e0b9d37cfe615ddb08f73c5d93","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"a64369e8_6d3c323e","updated":"2026-02-11 04:52:30.000000000","message":"Run-NetApp CI","commit_id":"9d6c7806cf3ae2322d1b424d33bd6b609edb3815"},{"author":{"_account_id":9236,"name":"Jon Bernard","email":"jobernar@redhat.com","username":"jbernard"},"change_message_id":"e8078f62d814175e4a1cdcbd36c5e08feae9ae70","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"59029bfa_0ce59d4e","updated":"2026-03-03 16:51:30.000000000","message":"The NetApp CI is failing, has anyone looked at that?","commit_id":"9d6c7806cf3ae2322d1b424d33bd6b609edb3815"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"75adf6879a23aa22be13d922c77da78215c88b9b","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"4d770076_7db8dbf1","updated":"2026-04-15 15:45:03.000000000","message":"recheck","commit_id":"c173b5b41e756db0f6bd1e8397e941e7e84cc756"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"d9fa47199dcb7288984fe89f5cfcb80b4df42250","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"f107a4b3_cd46b54d","updated":"2026-04-14 04:02:23.000000000","message":"recheck","commit_id":"c173b5b41e756db0f6bd1e8397e941e7e84cc756"},{"author":{"_account_id":38081,"name":"Anthony Galica","display_name":"agalica","email":"anthony.galica@hitachivantara.com","username":"agalica","status":"Hitachi Vantara"},"change_message_id":"34cf5653cf152ad7521f71bd7b4335ee0553ca78","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"bb2e7baa_ee22166e","updated":"2026-04-17 15:43:06.000000000","message":"Remove comment I started to add and then ultimately put in the overall review.","commit_id":"ae7b5b4cc9480f16d42e5a7f5b10794b84b20693"},{"author":{"_account_id":9236,"name":"Jon Bernard","email":"jobernar@redhat.com","username":"jbernard"},"change_message_id":"185d3d359a5846caf82846af34f27bcac089ade7","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"eeadb398_a46f91a3","updated":"2026-04-17 15:26:05.000000000","message":"Run-NetApp CI","commit_id":"ae7b5b4cc9480f16d42e5a7f5b10794b84b20693"},{"author":{"_account_id":38081,"name":"Anthony Galica","display_name":"agalica","email":"anthony.galica@hitachivantara.com","username":"agalica","status":"Hitachi Vantara"},"change_message_id":"e0746b53e5693b818aa58ed4bbdd1726dc446849","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":6,"id":"88a972e8_0f4d8082","updated":"2026-04-17 15:40:13.000000000","message":"The idea here is sound, but I do wonder why there isn\u0027t also a synchronization element involved here to prevent clashing altogether.  Even with intervals, you can still end up with collisions eventually.\n\nI do think a cache on rarely changing things is a smart way to go regardless of whether or not you add synchronization - so I have no complaint about that.  I\u0027m just not sure it solves the actual issue as presented in the release notes and commit message.\n\nFurther, I think you should switch to using DDT in the testing as there is a ton of repetition between the tests with small changes that resolve down to single variables mostly (see also the reason for the -1 below, which may make this point moot).  \n\nThe -1 is for the following:\nIt seems to me that the tests are copy/pasted from the code, rather than the tests executing the code itself.  This is ok if the code can never change, but as we all know that\u0027s highly unlikely.  So, as it stands it\u0027s very risky: if you change the code, suddenly the tests are n/a -- made worse by that they\u0027d still pass and you\u0027d have false confidence about where a bug might be.\n\nThis also makes the patch basically an XL instead of the much smaller patch it really is -- I am guessing more reviews would be forthcoming with a smaller patch :-).","commit_id":"ae7b5b4cc9480f16d42e5a7f5b10794b84b20693"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"70681f11452de7a20e18355be98393d8600d9a87","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"22d00cb9_b0412310","updated":"2026-04-17 04:15:41.000000000","message":"recheck","commit_id":"ae7b5b4cc9480f16d42e5a7f5b10794b84b20693"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"96041240b8159f46c2aca79910af60edb3f18f5f","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"3aac2bfb_8e6fdf52","updated":"2026-04-17 09:45:43.000000000","message":"recheck","commit_id":"ae7b5b4cc9480f16d42e5a7f5b10794b84b20693"}],"cinder/tests/unit/volume/drivers/netapp/dataontap/test_block_cmode.py":[{"author":{"_account_id":38081,"name":"Anthony Galica","display_name":"agalica","email":"anthony.galica@hitachivantara.com","username":"agalica","status":"Hitachi Vantara"},"change_message_id":"e0746b53e5693b818aa58ed4bbdd1726dc446849","unresolved":true,"context_lines":[{"line_number":2132,"context_line":""},{"line_number":2133,"context_line":"        # Code under test"},{"line_number":2134,"context_line":"        dedupe_used \u003d 0.0"},{"line_number":2135,"context_line":"        if (self.library.using_cluster_credentials and"},{"line_number":2136,"context_line":"                not self.library.configuration.netapp_disaggregated_platform):"},{"line_number":2137,"context_line":"            dedupe_expiry \u003d ("},{"line_number":2138,"context_line":"                self.library.configuration.netapp_dedupe_cache_expiry_duration"}],"source_content_type":"text/x-python","patch_set":6,"id":"7633db77_b8948757","line":2135,"updated":"2026-04-17 15:40:13.000000000","message":"I will not enforce a -1 for this, but I would like to suggest using DDT and having a single test instead of copy/pasting the same test multiple times with slightly tweaked values.  In particular since the code seems to be almost identical between all of the tests, and the code isn\u0027t a \"simple\" 1-2 liner.\n\nYou can check out my Hitachi driver test files that have some DDT usage for an example if you need.  Rajat initially brought DDT to my attention, and it\u0027s been helpful in my own tests.","commit_id":"ae7b5b4cc9480f16d42e5a7f5b10794b84b20693"},{"author":{"_account_id":38081,"name":"Anthony Galica","display_name":"agalica","email":"anthony.galica@hitachivantara.com","username":"agalica","status":"Hitachi Vantara"},"change_message_id":"e0746b53e5693b818aa58ed4bbdd1726dc446849","unresolved":true,"context_lines":[{"line_number":2151,"context_line":"                        dedupe_used \u003d current_pool.get("},{"line_number":2152,"context_line":"                            \u0027netapp_dedupe_used_percent\u0027)"},{"line_number":2153,"context_line":"                        break"},{"line_number":2154,"context_line":"        pool[\u0027netapp_dedupe_used_percent\u0027] \u003d na_utils.round_down(dedupe_used)"},{"line_number":2155,"context_line":""},{"line_number":2156,"context_line":"        # Assert fresh fetch was called"},{"line_number":2157,"context_line":"        client \u003d self.library.zapi_client"}],"source_content_type":"text/x-python","patch_set":6,"id":"8ae965b1_d519e148","line":2154,"updated":"2026-04-17 15:40:13.000000000","message":"You don\u0027t need to change this, but is there a reason why you don\u0027t just assertEqual against ```na_utils.round_down(dedupe_used)``` instead of setting it in the pool map and later validating against the pool map (that doesn\u0027t seem to do anything else other than collect this value for comparison)?","commit_id":"ae7b5b4cc9480f16d42e5a7f5b10794b84b20693"}],"cinder/tests/unit/volume/drivers/netapp/dataontap/test_nfs_cmode.py":[{"author":{"_account_id":38081,"name":"Anthony Galica","display_name":"agalica","email":"anthony.galica@hitachivantara.com","username":"agalica","status":"Hitachi Vantara"},"change_message_id":"e0746b53e5693b818aa58ed4bbdd1726dc446849","unresolved":true,"context_lines":[{"line_number":2542,"context_line":""},{"line_number":2543,"context_line":"        # Run the code snippet logic"},{"line_number":2544,"context_line":"        self.driver.last_perf_update \u003d None"},{"line_number":2545,"context_line":"        if self.driver.last_perf_update is None:"},{"line_number":2546,"context_line":"            self.driver.perf_library.update_performance_cache("},{"line_number":2547,"context_line":"                fake.FAKE_CMODE_POOL_MAP.keys())"},{"line_number":2548,"context_line":"            self.driver.last_perf_update \u003d ("}],"source_content_type":"text/x-python","patch_set":6,"id":"46566153_02495345","line":2545,"updated":"2026-04-17 15:40:13.000000000","message":"I would recommend cleaning this up as it does appear this if statement is extraneous and the code path will always be followed.\n\nMaking it simpler should make it easier to read (though I\u0027m probably preaching to the choir here :-)","commit_id":"ae7b5b4cc9480f16d42e5a7f5b10794b84b20693"},{"author":{"_account_id":38081,"name":"Anthony Galica","display_name":"agalica","email":"anthony.galica@hitachivantara.com","username":"agalica","status":"Hitachi Vantara"},"change_message_id":"e0746b53e5693b818aa58ed4bbdd1726dc446849","unresolved":true,"context_lines":[{"line_number":2568,"context_line":"        perf_cache_expiry \u003d ("},{"line_number":2569,"context_line":"            self.driver.configuration.netapp_performance_cache_expiry_duration"},{"line_number":2570,"context_line":"        )"},{"line_number":2571,"context_line":"        if self.driver.last_perf_update is None:"},{"line_number":2572,"context_line":"            self.driver.perf_library.update_performance_cache("},{"line_number":2573,"context_line":"                fake.FAKE_CMODE_POOL_MAP.keys())"},{"line_number":2574,"context_line":"            self.driver.last_perf_update \u003d ("}],"source_content_type":"text/x-python","patch_set":6,"id":"1788dfbd_4f358437","line":2571,"updated":"2026-04-17 15:40:13.000000000","message":"Again, I\u0027m not sure we need this check here or else statement?  \n\nI\u0027m seeing similar checks between these tests, so perhaps DDT would find some usage in this arena as well.","commit_id":"ae7b5b4cc9480f16d42e5a7f5b10794b84b20693"}],"cinder/volume/drivers/netapp/dataontap/nfs_cmode.py":[{"author":{"_account_id":38081,"name":"Anthony Galica","display_name":"agalica","email":"anthony.galica@hitachivantara.com","username":"agalica","status":"Hitachi Vantara"},"change_message_id":"e0746b53e5693b818aa58ed4bbdd1726dc446849","unresolved":true,"context_lines":[{"line_number":455,"context_line":"                else:"},{"line_number":456,"context_line":"                    LOG.debug(\"Get the current dedupe stats from pool %s\","},{"line_number":457,"context_line":"                              ssc_vol_name)"},{"line_number":458,"context_line":"                    assert isinstance(self._stats, dict)"},{"line_number":459,"context_line":"                    for current_pool in self._stats.get(\u0027pools\u0027, []):"},{"line_number":460,"context_line":"                        if current_pool.get(\u0027pool_name\u0027) \u003d\u003d ssc_vol_name:"},{"line_number":461,"context_line":"                            dedupe_used \u003d current_pool.get("}],"source_content_type":"text/x-python","patch_set":6,"id":"7571bf71_65c1442e","line":458,"updated":"2026-04-17 15:40:13.000000000","message":"Are we sure we want an assert here instead of just a check/log?","commit_id":"ae7b5b4cc9480f16d42e5a7f5b10794b84b20693"}],"cinder/volume/drivers/netapp/dataontap/nvme_library.py":[{"author":{"_account_id":38081,"name":"Anthony Galica","display_name":"agalica","email":"anthony.galica@hitachivantara.com","username":"agalica","status":"Hitachi Vantara"},"change_message_id":"e0746b53e5693b818aa58ed4bbdd1726dc446849","unresolved":true,"context_lines":[{"line_number":626,"context_line":"                else:"},{"line_number":627,"context_line":"                    LOG.debug(\"Get the current dedupe stats from pool %s\","},{"line_number":628,"context_line":"                              ssc_vol_name)"},{"line_number":629,"context_line":"                    assert isinstance(self._stats, dict)"},{"line_number":630,"context_line":"                    for current_pool in self._stats.get(\u0027pools\u0027, []):"},{"line_number":631,"context_line":"                        if current_pool.get(\u0027pool_name\u0027) \u003d\u003d ssc_vol_name:"},{"line_number":632,"context_line":"                            dedupe_used \u003d current_pool.get("}],"source_content_type":"text/x-python","patch_set":6,"id":"e393be26_af209876","line":629,"updated":"2026-04-17 15:40:13.000000000","message":"Again, not sure I would use an assert like this.","commit_id":"ae7b5b4cc9480f16d42e5a7f5b10794b84b20693"}],"cinder/volume/drivers/netapp/dataontap/performance/perf_cmode.py":[{"author":{"_account_id":38059,"name":"Anoop Kumar Shukla","display_name":"Anoop Shukla","email":"anoop.shukla@netapp.com","username":"anoop2","status":"NetApp"},"change_message_id":"c35edecb3e076ff0fdf1a99989b2045f61e28f52","unresolved":true,"context_lines":[{"line_number":35,"context_line":"        self._aggr_node_cache \u003d {"},{"line_number":36,"context_line":"            \u0027aggr_names\u0027: set(),"},{"line_number":37,"context_line":"            \u0027node_names\u0027: set(),"},{"line_number":38,"context_line":"            \u0027aggr_node_map\u0027: {}"},{"line_number":39,"context_line":"        }"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"    def _init_counter_info(self):"}],"source_content_type":"text/x-python","patch_set":3,"id":"df1f9821_ed5b7b71","line":38,"updated":"2025-12-02 08:25:38.000000000","message":"We can optimise just using the aggr_node_map? Why do we need aggr_names","commit_id":"33b68b8027488402ac47338b29979099fec03634"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"c188bdc0fd736b8a50d26e65f604cc875bb716f7","unresolved":false,"context_lines":[{"line_number":35,"context_line":"        self._aggr_node_cache \u003d {"},{"line_number":36,"context_line":"            \u0027aggr_names\u0027: set(),"},{"line_number":37,"context_line":"            \u0027node_names\u0027: set(),"},{"line_number":38,"context_line":"            \u0027aggr_node_map\u0027: {}"},{"line_number":39,"context_line":"        }"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"    def _init_counter_info(self):"}],"source_content_type":"text/x-python","patch_set":3,"id":"b9422ed2_c4a4add0","line":38,"in_reply_to":"df1f9821_ed5b7b71","updated":"2026-01-07 05:23:40.000000000","message":"Done","commit_id":"33b68b8027488402ac47338b29979099fec03634"}],"releasenotes/notes/bug-2132785-fix-optimize-pool-stats-update-nfs-nvme-44f62ecd6350b8bf.yaml":[{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"2b9bd8351fdb15a68baa2bc10d4f9ebc61ee6af3","unresolved":true,"context_lines":[{"line_number":8,"context_line":"    User can use below options to control the frequency of performance"},{"line_number":9,"context_line":"    and deduplication data retrieval from ONTAP"},{"line_number":10,"context_line":"    netapp_performance_cache_expiry_duration and"},{"line_number":11,"context_line":"    netapp_dedupe_cache_expiry_duration."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"    These options are needed to fine-tune the frequency of querying"},{"line_number":14,"context_line":"    performance and deduplication metrics, as these queries occur both"}],"source_content_type":"text/x-yaml","patch_set":4,"id":"d1aa6cb9_ad8914cc","line":11,"updated":"2026-04-29 17:46:02.000000000","message":"nit: if you put the option names in double-backticks, they will display in monospace HTML.","commit_id":"9d6c7806cf3ae2322d1b424d33bd6b609edb3815"},{"author":{"_account_id":38081,"name":"Anthony Galica","display_name":"agalica","email":"anthony.galica@hitachivantara.com","username":"agalica","status":"Hitachi Vantara"},"change_message_id":"e0746b53e5693b818aa58ed4bbdd1726dc446849","unresolved":true,"context_lines":[{"line_number":10,"context_line":"    netapp_performance_cache_expiry_duration and"},{"line_number":11,"context_line":"    netapp_dedupe_cache_expiry_duration."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"    These options are needed to fine-tune the frequency of querying"},{"line_number":14,"context_line":"    performance and deduplication metrics, as these queries occur both"},{"line_number":15,"context_line":"    during the delete volume workflow and in the update_volume_stats"},{"line_number":16,"context_line":"    method, which is triggered by the periodic interval task. Users can"}],"source_content_type":"text/x-yaml","patch_set":6,"id":"2ca8aa86_4f2d6742","line":13,"updated":"2026-04-17 15:40:13.000000000","message":"I like the","commit_id":"ae7b5b4cc9480f16d42e5a7f5b10794b84b20693"},{"author":{"_account_id":38081,"name":"Anthony Galica","display_name":"agalica","email":"anthony.galica@hitachivantara.com","username":"agalica","status":"Hitachi Vantara"},"change_message_id":"34cf5653cf152ad7521f71bd7b4335ee0553ca78","unresolved":false,"context_lines":[{"line_number":10,"context_line":"    netapp_performance_cache_expiry_duration and"},{"line_number":11,"context_line":"    netapp_dedupe_cache_expiry_duration."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"    These options are needed to fine-tune the frequency of querying"},{"line_number":14,"context_line":"    performance and deduplication metrics, as these queries occur both"},{"line_number":15,"context_line":"    during the delete volume workflow and in the update_volume_stats"},{"line_number":16,"context_line":"    method, which is triggered by the periodic interval task. Users can"}],"source_content_type":"text/x-yaml","patch_set":6,"id":"7a4087ef_584be88f","line":13,"in_reply_to":"2ca8aa86_4f2d6742","updated":"2026-04-17 15:43:06.000000000","message":"Done","commit_id":"ae7b5b4cc9480f16d42e5a7f5b10794b84b20693"}]}
