Commit 3e56c364 authored by Antoine Millet's avatar Antoine Millet
Browse files

Handle retry on storage update

parent 3068b6ef
Loading
Loading
Loading
Loading
+14 −4
Original line number Original line Diff line number Diff line
@@ -17,6 +17,7 @@
"""Helpers for libvirt."""
"""Helpers for libvirt."""


import logging
import logging
import time
from itertools import chain, imap, count
from itertools import chain, imap, count
from StringIO import StringIO
from StringIO import StringIO
from xml.etree import cElementTree as et
from xml.etree import cElementTree as et
@@ -303,7 +304,7 @@ class StorageIndex(object):
        self.paths = None
        self.paths = None
        self.update()
        self.update()


    def update(self):
    def update(self, retry=1):
        """Update storage pools and volumes."""
        """Update storage pools and volumes."""
        # go through all storage pools and check if it is already in the index
        # go through all storage pools and check if it is already in the index
        for lv_storage in imap(
        for lv_storage in imap(
@@ -315,7 +316,7 @@ class StorageIndex(object):
        ):
        ):
            if lv_storage.name() in self.storages:
            if lv_storage.name() in self.storages:
                # update
                # update
                self.storages[lv_storage.name()].update()
                self.storages[lv_storage.name()].update(retry)
            else:
            else:
                # add storage pool
                # add storage pool
                s = Storage(lv_storage)
                s = Storage(lv_storage)
@@ -416,6 +417,7 @@ class Storage(object):
    """Storage abstraction."""
    """Storage abstraction."""


    SHARED_TYPES = ['rbd']
    SHARED_TYPES = ['rbd']
    REFRESH_RETRY_INTERVAL = 1


    def __init__(self, lv_storage):
    def __init__(self, lv_storage):
        """
        """
@@ -438,9 +440,17 @@ class Storage(object):
    def is_shared(self):
    def is_shared(self):
        return True if self.type in Storage.SHARED_TYPES else False
        return True if self.type in Storage.SHARED_TYPES else False


    def update(self):
    def update(self, retry=1):
        for _ in xrange(retry):
            try:
                self.lv_storage.refresh()
            except libvirt.libvirtError as err:
                logger.warning('Unable to refresh storage %s: %s', self.name, err)
                time.sleep(self.REFRESH_RETRY_INTERVAL)
            else:
                break

        try:
        try:
            self.lv_storage.refresh()
            self.update_attr()
            self.update_attr()


            # update volumes
            # update volumes