)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":37437,"name":"Amit Zauber","display_name":"Zaubea","email":"amit.zauber@dell.com","username":"amit.zauber@dell.com"},"change_message_id":"35f9b3364d631d9f64a10fe7d2c823298aa339de","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":4,"id":"70316c8c_231782c7","updated":"2026-04-06 08:02:41.000000000","message":"Kim, the eng team will create a new patch according to Nilesh suggestion to fix this issue once reproduce","commit_id":"7d09fe4c5adeab3a188b598e40a553c1db277a1e"},{"author":{"_account_id":36725,"name":"Nilesh Thathagar","display_name":"Nilesh Thathagar","email":"nilesh.thathagar@dell.com","username":"NileshT"},"change_message_id":"1188a83d2873e7a5ecb174f29f8a7c4158a5464c","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"8defbf4f_5c78b646","updated":"2026-03-27 06:15:27.000000000","message":"Thanks for working on this bug.\n\nThe root cause is in os-brick, not Nova.\n\nThe ScaleIOConnector.extend_volume() in os-brick calls _rescan_vols() (ioctl to /dev/scini), but this ioctl is asynchronous -- it returns before the kernel\nblock device size is actually updated. The subsequent blockdev --getsize64 then reads a stale size. Under concurrent extensions, this race window is more\npronounced.\n\nThe fix should be a two-project change with minimal footprint:\n\n1. Nova (nova/virt/libvirt/volume/scaleio.py):\n\nInject requested_size into connection_info[\u0027data\u0027] before calling os-brick. The value is already available -- Nova compute manager passes it as\nbdm.volume_size * units.Gi.\n\n``def extend_volume(self, connection_info, instance, requested_size):\n    LOG.debug(\"calling os-brick to extend ScaleIO Volume\",\n              instance\u003dinstance)\n    connection_info[\u0027data\u0027][\u0027new_size\u0027] \u003d requested_size\n    new_size \u003d self.connector.extend_volume(connection_info[\u0027data\u0027])\n    LOG.debug(\"Extend ScaleIO Volume %s; new_size\u003d%s\",\n              connection_info[\u0027data\u0027][\u0027device_path\u0027],\n              new_size, instance\u003dinstance)\n    return new_size``\n\n2. os-brick (os_brick/initiator/connectors/scaleio.py):\n``def extend_volume(self, connection_properties):\n    \"\"\"Update the local kernel\u0027s size information.\"\"\"\n    volume_paths \u003d self.get_volume_paths(connection_properties)\n    if not volume_paths:\n        msg \u003d (_(\"Error extending ScaleIO volume\"))\n        LOG.error(msg)\n        raise exception.BrickException(message\u003dmsg)\n\n    requested_size \u003d connection_properties.get(\u0027new_size\u0027)\n    if requested_size:\n        return self._rescan_and_verify_size(\n            volume_paths[0], requested_size)\n\n    # Fallback: single rescan when new_size not provided\n    self._rescan_vols()\n    return utils.get_device_size(self, volume_paths[0])\n\n@utils.retry(exception.BrickException, retries\u003d5, backoff_rate\u003d2)\ndef _rescan_and_verify_size(self, volume_path, requested_size):\n    \"\"\"Rescan and verify the device reflects the expected size.\n\n    The scini ioctl rescan is asynchronous - the block device size\n    may not be updated immediately. Retry with exponential backoff\n    until the size matches.\n    \"\"\"\n    self._rescan_vols()\n    actual_size \u003d utils.get_device_size(self, volume_path)\n    if actual_size and actual_size \u003e\u003d requested_size:\n        LOG.info(\n            \"ScaleIO volume %(path)s extended to %(size)s bytes.\",\n            {\u0027path\u0027: volume_path, \u0027size\u0027: actual_size})\n        return actual_size\n\n    msg \u003d (_(\"ScaleIO volume %(path)s: current size %(actual)s \"\n             \"has not yet reached requested size %(requested)s\")\n           % {\u0027path\u0027: volume_path,\n              \u0027actual\u0027: actual_size,\n              \u0027requested\u0027: requested_size})\n    LOG.debug(msg)\n    raise exception.BrickException(message\u003dmsg)\n``\n\nAlso please do not use time.sleep, use retry decorator instead.","commit_id":"7d09fe4c5adeab3a188b598e40a553c1db277a1e"},{"author":{"_account_id":31779,"name":"Jean Pierre Roquesalane","display_name":"happystacker","email":"jeanpierre.roquesalane@dell.com","username":"happystacker"},"change_message_id":"25bf4d1fa459d227f727421307bda042275ab00a","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"efbb2d41_a6862299","updated":"2025-01-10 13:57:06.000000000","message":"recheck","commit_id":"7d09fe4c5adeab3a188b598e40a553c1db277a1e"},{"author":{"_account_id":37469,"name":"DongHun, Kim","display_name":"DongHun, Kim","email":"bigheadzacky@gmail.com","username":"donghunkimzack"},"change_message_id":"1e83c99c46958a07c1a3a9071d1c172b116dbc2f","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"1c29542e_123045e6","updated":"2024-12-31 01:15:56.000000000","message":"recheck nova-ceph-multistore \u0026 nova-next","commit_id":"7d09fe4c5adeab3a188b598e40a553c1db277a1e"},{"author":{"_account_id":37469,"name":"DongHun, Kim","display_name":"DongHun, Kim","email":"bigheadzacky@gmail.com","username":"donghunkimzack"},"change_message_id":"ec0be079d70b0fab16897de475bcedc614dd4c8a","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"b7fa98cc_8dd749b4","updated":"2025-01-13 08:06:51.000000000","message":"recheck tempest-integrated-compute-enforce-scope-new-defaults","commit_id":"7d09fe4c5adeab3a188b598e40a553c1db277a1e"},{"author":{"_account_id":31779,"name":"Jean Pierre Roquesalane","display_name":"happystacker","email":"jeanpierre.roquesalane@dell.com","username":"happystacker"},"change_message_id":"5fad7c819698d5f6b7de3116e7d18e4ed0e4b834","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"ea51d05f_5cd4c714","updated":"2025-01-10 13:57:37.000000000","message":"run-DellEMC PowerFlex CI","commit_id":"7d09fe4c5adeab3a188b598e40a553c1db277a1e"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"130d1bdeb5a80a0775b2c6b7580cc66a9e9b6920","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"d138bb71_81b76013","updated":"2025-01-18 01:27:18.000000000","message":"time retires are generally not an acceptable pattern unless we receive an api error or similar.\n\nthis type of approach does not scale well so we do not generally try to solve problems like this in this manner.\n\nif you want to do a rety like this its proably more approate to do it in os_brick then nova.","commit_id":"7d09fe4c5adeab3a188b598e40a553c1db277a1e"},{"author":{"_account_id":37469,"name":"DongHun, Kim","display_name":"DongHun, Kim","email":"bigheadzacky@gmail.com","username":"donghunkimzack"},"change_message_id":"0a13f811757016f01893ca2c308a83376b48132e","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"b2c31d0c_86966c5b","in_reply_to":"d138bb71_81b76013","updated":"2025-01-21 02:28:21.000000000","message":"Thank you for your feedback, and I understand your concerns about the retry logic.\nAs you mentioned, other drivers in os-brick (such as NetApp) are implementing checks in the same way proposed. The issue is that PowerFlex is missing this logic, and there is an ongoing process to request changes to os-brick.\nHowever, separate from that, shouldn\u0027t a retry logic be implemented to ensure the requested volume size is accurately provisioned, even if it means adding extra steps? In environments with HA-configured databases where volume sizes need to be modified simultaneously in an active environment, mismatched values can cause critical system issues.\nFortunately, this issue was discovered in advance and addressed through local changes. The solution was contributed to prevent other users from experiencing the same problem.\nIf it\u0027s not possible due to policy reasons, that\u0027s understandable. However, having this retry logic in either os-brick or Nova doesn\u0027t double the time required. Shouldn\u0027t it be applied wherever it can improve the system\u0027s reliability?","commit_id":"7d09fe4c5adeab3a188b598e40a553c1db277a1e"}],"nova/virt/libvirt/volume/scaleio.py":[{"author":{"_account_id":37469,"name":"DongHun, Kim","display_name":"DongHun, Kim","email":"bigheadzacky@gmail.com","username":"donghunkimzack"},"change_message_id":"248d60698f8e1eefb7105006287b170a4c59695a","unresolved":false,"context_lines":[{"line_number":16,"context_line":"\"\"\"Libvirt volume driver for ScaleIO.\"\"\""},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"import time"},{"line_number":19,"context_line":"from os_brick import initiator"},{"line_number":20,"context_line":"from os_brick.initiator import connector"},{"line_number":21,"context_line":"from oslo_log import log as logging"},{"line_number":22,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"5a6d4857_7a63d33f","line":19,"in_reply_to":"66322b76_953e9448","updated":"2024-12-30 04:34:39.000000000","message":"\u003e pep8: H306: imports not in alphabetical order (time, os_brick.initiator)\n\nPlease fix.","commit_id":"1a36de5672ce54f426ce23d4e39f39165ef89153"}]}
