Skip to content

Commit

Permalink
call enclosure.query once in disk.sync_all
Browse files Browse the repository at this point in the history
  • Loading branch information
yocalebo committed Aug 5, 2021
1 parent 622d24d commit a0bc9fe
Show file tree
Hide file tree
Showing 2 changed files with 14 additions and 10 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -148,8 +148,11 @@ async def do_update(self, id, data):

return await self._get_instance(id)

def _get_slot(self, slot_filter, enclosure_query=None):
for enclosure in self.middleware.call_sync("enclosure.query", enclosure_query or []):
def _get_slot(self, slot_filter, enclosure_query=None, enclosure_info=None):
if enclosure_info is None:
enclosure_info = self.middleware.call_sync("enclosure.query", enclosure_query or [])

for enclosure in enclosure_info:
try:
elements = next(filter(lambda element: element["name"] == "Array Device Slot",
enclosure["elements"]))["elements"]
Expand All @@ -160,8 +163,8 @@ def _get_slot(self, slot_filter, enclosure_query=None):

raise MatchNotFound()

def _get_slot_for_disk(self, disk):
return self._get_slot(lambda element: element["data"]["Device"] == disk)
def _get_slot_for_disk(self, disk, enclosure_info=None):
return self._get_slot(lambda element: element["data"]["Device"] == disk, enclosure_info=enclosure_info)

def _get_ses_slot(self, enclosure, element):
if "original" in element:
Expand Down Expand Up @@ -206,15 +209,15 @@ def set_slot_status(self, enclosure_id, slot, status):
raise CallError("Error setting slot status")

@private
def sync_disk(self, id):
def sync_disk(self, id, enclosure_info=None):
disk = self.middleware.call_sync(
'disk.query',
[['identifier', '=', id]],
{'get': True, "extra": {'include_expired': True}}
)

try:
enclosure, element = self._get_slot_for_disk(disk["name"])
enclosure, element = self._get_slot_for_disk(disk["name"], enclosure_info)
except MatchNotFound:
disk_enclosure = None
else:
Expand Down
9 changes: 5 additions & 4 deletions src/middlewared/middlewared/plugins/disk_/sync.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@

from middlewared.schema import accepts, Str
from middlewared.service import job, private, Service, ServiceChangeMixin
from middlewared.utils import osc


class DiskService(Service, ServiceChangeMixin):
Expand Down Expand Up @@ -72,7 +71,8 @@ async def sync_all(self, job):
if await self.middleware.call('failover.status') == 'BACKUP':
return

if osc.IS_FREEBSD:
if not await self.middleware.call('device.devd_connected'):
# try for 10 seconds to wait on devd before we continue
for i in range(10):
if i > 0:
await asyncio.sleep(1)
Expand All @@ -96,6 +96,7 @@ async def sync_all(self, job):
seen_disks = {}
serials = []
changed = False
encs = await self.middleware.call('enclosure.query')
for disk in (
await self.middleware.call('datastore.query', 'storage.disk', [], {'order_by': ['disk_expiretime']})
):
Expand Down Expand Up @@ -148,7 +149,7 @@ async def sync_all(self, job):
await self.middleware.call('datastore.update', 'storage.disk', disk['disk_identifier'], disk)
changed = True

await self.middleware.call('enclosure.sync_disk', disk['disk_identifier'])
await self.middleware.call('enclosure.sync_disk', disk['disk_identifier'], encs)

seen_disks[name] = disk

Expand Down Expand Up @@ -185,7 +186,7 @@ async def sync_all(self, job):
await self.middleware.call('datastore.insert', 'storage.disk', disk)
changed = True

await self.middleware.call('enclosure.sync_disk', disk['disk_identifier'])
await self.middleware.call('enclosure.sync_disk', disk['disk_identifier'], encs)

if changed:
await self.middleware.call('disk.restart_services_after_sync')
Expand Down

0 comments on commit a0bc9fe

Please sign in to comment.