cinder-backup用於將volume備份到其他儲存系統上,目前支援的備份儲存系統有swift、ceph以及ibm tivoli storage manager(tsm),預設為swift。
cinder-backup服務**位於cinder/backup
--api.py
--drive.py
--drivers
--ceph.py
--swift.py
--tsm.py
--manager.py
--rpccap.py
rpcapi.py檔案定義了提供給rpc呼叫的介面backupapi,api.py檔案又對rpc的呼叫做了一層封裝,其他模組需要匯入的是api模組。manager.py是cinder-backup最為核心的**,其中的backupmanager類用於執行接收到rpc請求。
不同的備份儲存系統以driver的形式得以支援,driver.py檔案中定義了各種driver的基類backupdriver,所有具體driver的實現都位於drivers子目錄,通過配置檔案的backup_driver選項指定使用的driver。
backup_drive=cinder.backup.drivers.swift
cinder-backup服務在接到rpc請求後會找到該操作對應的host以及相應的儲存後端driver,然後呼叫該driver中與backup相關的介面,比如backup_volume()和restore_backup(),這些介面最終會呼叫cinder-backup服務中driver來對該volume進行備份或者恢復操作。
下面**是備份乙個卷的入口
#cinder/backup/manager.py
class backupmanager(manager.schedulerdependentmanager):
def create_backup(self, context, backup_id):
"""create volume backups using configured backup service."""
backup = self.db.backup_get(context, backup_id)
#建立乙個捲先找到對應的主機
volume_host = volume_utils.extract_host(volume['host'], 'backend')
backend = self._get_volume_backend(host=volume_host)
self.db.backup_update(context, backup_id, )
backup_service = self.service.get_backup_driver(context)
#呼叫driver中與backup相關的介面
self._get_driver(backend).backup_volume(context, backup,
backup_service)
下圖展示了cinder-backup工作流程
對於備份刪除操作,則不需要經過cinder-volume的儲存後端driver,由cinder-backup直接呼叫backup driver中的介面即可。
總的來說,由於建立或者恢復備份操作需要知道操作所對應的volume的資料資訊,所以處理流程需要先轉換到cinder-volume中,然後轉回到cinder-backup中的backup-driver.然而對應刪除操作來說,因為不需要從cinder-volume中獲取任何資訊,所以控制流程不需要轉移到cinder-volume中。
ConcurrentHashMap的原始碼分析
put final v putval k key,v value,boolean onlyifabsent 在上一步的else if中 f 不為null時,則判斷f的hash值是否為moved,即 1,如果為 1,表示正在擴容 else if fh f.hash moved 協助資料遷移 tab h...
DispatcherServlet的原始碼和流程分析
1 自動配置dispatcherservlet和dispatcherservletregistry 2 註冊dispatcherservlet到servletcontext 3 初始化mvc的元件 handler執行完成後,向dispatcherservlet 返回乙個modelandview物件 ...
AbstractCollection原始碼分析
abstractcollection抽象類提供了collection的骨架實現,collection分析請看 這裡直接看它的 是如何實現的.public abstract iterator iterator 該方法沒有實現.public abstract int size 該方法沒有實現.publi...