精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

我的 OpenStack 代碼貢獻初體驗

云計算 OpenStack
。在前段時間的OpenStack的測試過程中,我發現Nova項目中的一個Bug,于是向社區提交了Bug報告,并提交代碼修復了該Bug,從提交報告到代碼入庫經歷近一月,下面重現整個過程。

OpenStack如今已成為開源云平臺中的明星項目,得到廣泛關注。OpenStack的優秀出眾依賴于眾多開發者的努力,在享受其帶來的便利與快捷的同時,為其做一份貢獻也是一個開發者的義務。在前段時間的OpenStack的測試過程中,我發現Nova項目中的一個Bug,于是向社區提交了Bug報告,并提交代碼修復了該Bug,從提交報告到代碼入庫經歷近一月,下面重現整個過程。

一.發現Bug:

Nova中的虛擬機軟刪除(soft-delete)功能,是指在一段時間內,僅將數據庫中的某虛擬機記錄做一個標記 (status='SOFT-DELETE'),然后將虛擬化平臺(kvm等)中對應的虛擬機實例置為關機狀態,當超過某一時間段后才將虛擬機實例真正刪除;該功能為云平臺用戶提供了“后悔時間”,可以在一定程度上挽回誤操作。默認情況下,軟刪除功能是關閉的,其開啟方式是在nova配置文件中添加"reclaim_instance_interval"選項,并將其值設置為"后悔時間"的毫秒數。

在描述具體Bug前,需要對openstack中的用戶管理方面的基本概念簡單介紹一下。

上圖是openstack用戶模型的簡化版本,為了便于理解將不屬于keystone管理的quota也拿了過來。

Bug就與軟刪除相關。具體場景是這樣的:假設OpenStack中有兩個項目和兩個用戶:普通項目A其用戶a,管理員項目Admin其用戶為 admin(用戶管理相關概念可以查閱keystone文檔),用戶a不慎將自己的一臺虛擬機刪除了,這時求助系統管理員看看有沒有辦法恢復,好在系統開啟的軟刪除功能,而且被刪除的虛擬機還在可回收的時間范圍內,這時管理員便以admin的身份登錄系統,為用戶a恢復了虛擬機,但是細心的管理員卻發現了一些不對:其Admin項目下并沒有任何虛擬機,但是其配額卻被使用了,難道這和剛才的操作有關?再來重試一下:普通用戶刪除虛擬機,admin用戶來為其恢復,這時配額又發生了變化,果然如此:被恢復的虛擬機的配額錯誤的添加到了Admin項目下。該Bug在***的kilo版本中仍然存在,感興趣的同學可以實驗一下。

二.定位Bug:

發現了Bug的存在,那就更進一步,到代碼中找一下原因吧。

如何確定問題代碼的位置呢?這需要對Nova的項目結構有大體的了解,我們來簡單了解一下:上圖是nova架構的極簡版本,與本問題無關的組件都沒有畫上去,恢復虛擬機的操作過程大致是這樣:

OpenStack代碼貢獻初體驗

  1. nova api接收到用戶請求,到數據庫中查詢虛擬機詳情,將該虛擬機所在的主機、名稱等數據發送到消息隊列中;
  2. nova compute服務在監聽到相關消息后,開始執行具體操作,將虛擬機在數據庫中的記錄做些調整,調用底層驅動恢復虛擬機。

既然軟刪除的功能層面沒有任何問題,虛擬機的刪除和恢復過程都很順利,可見不會是驅動的問題,順著API層的代碼調用往下找,很快就可以定位了。直接看出問題的代碼片段:

  1. def restore(self, context, instance): 
  2.     # 該代碼做了刪減 
  3.     flavor = instance.get_flavor() 
  4.     # 獲取quotas對象 
  5.     num_instances, quotas = self._check_num_instances_quota( 
  6.             context, flavor, 1, 1) 
  7.     self._record_action_start(context, instance, instance_actions.RESTORE) 
  8.     try
  9.         if instance.host: 
  10.             instance.task_state = task_states.RESTORING 
  11.             instance.deleted_at = None 
  12.             instance.save(expected_task_state=[None]) 
  13.             self.compute_rpcapi.restore_instance(context, instance) 
  14.         else
  15.             instance.vm_state = vm_states.ACTIVE 
  16.             instance.task_state = None 
  17.             instance.deleted_at = None 
  18.             instance.save(expected_task_state=[None]) 
  19.         # 更新quotas 
  20.         quotas.commit() 

上面的這段代碼就是API層面上進行虛擬機回收的主要方法,可以看到其中有明顯的配額操作(quotas),在解讀這段代碼前有必要先對nova 中"context"的概念做個簡介。不僅是nova,在openstack其他項目中都隨處可見這個"context",它是一個包裝了用戶請求信息的對象,包含用戶的項目和認證信息等,通過它可以簡便的進行各項目之間的API調用和用戶信息的查詢,API服務接收到用戶的每一次HTTP請求,都會創建一個新的context。

回到這段代碼,我們重點關注對quotas所作的操作:在方法的第二行,通過了一個方法獲取了quotas,有在方法的結尾執行了 quotas.commit(),能夠獲取到的信息不多,我們再看一下獲取quotas的方法:_check_num_instances_quota

  1. # 這里只截取一部分 
  2.  def _check_num_instances_quota(self, context, instance_type, min_count, 
  3.                                 max_count): 
  4.      req_cores = max_count * instance_type['vcpus'
  5.      vram_mb = int(instance_type.get('extra_specs', {}).get(VIDEO_RAM, 0)) 
  6.      req_ram = max_count * (instance_type['memory_mb'] + vram_mb) 
  7.  
  8.      try
  9.          quotas = objects.Quotas(context) 
  10.          quotas.reserve(context, instances=max_count, 
  11.                         cores=req_cores, ram=req_ram) 
  12.      ... 
  13.      return max_count, quotas 

這里可以看到獲取quotas的過程:通過當前的context創建quotas對象,并且執行了reserve操作; 我們知道context是由HTTP請求而來,里面保存的是發請求的用戶的信息,所以這里的quotas對象的“所有者”也就是context中的用戶。

結合Bug發生的場景來看:管理員還原用戶a的虛擬機,發請求的是管理員,當前context中記錄的是管理員的信息,這里的quotas理所當然的就是管理員的,然后操作了用戶a的虛擬機,更新的卻是管理員的quotas。嗯,真相大白!

#p#

三.修復Bug:

Bug的原因是獲取的quotas并不屬于期望的用戶,但是直接修改context顯然不合適(會影響后續的操作),先了解一下quotas對象自身吧:

  1. class Quotas(base.NovaObject): 
  2.     # 部分代碼 
  3.     def __init__(self, *args, **kwargs): 
  4.         super(Quotas, self).__init__(*args, **kwargs) 
  5.         # Set up defaults. 
  6.         self.reservations = [] 
  7.         self.project_id = None 
  8.         self.user_id = None 
  9.         self.obj_reset_changes() 
  10.     ... 
  11.     def reserve(self, context, expire=None, project_id=None, user_id=None, 
  12.                 **deltas): 
  13.         reservations = quota.QUOTAS.reserve(context, expire=expire, 
  14.                                             project_id=project_id, 
  15.                                             user_id=user_id, 
  16.                                             **deltas) 
  17.         self.reservations = reservations 
  18.         self.project_id = project_id 
  19.         self.user_id = user_id 
  20.         self.obj_reset_changes() 
  21.  
  22.     def commit(self, context=None): 
  23.         if not self.reservations: 
  24.             return 
  25.         if context is None: 
  26.             context = self._context 
  27.         quota.QUOTAS.commit(context, self.reservations, 
  28.                             project_id=self.project_id, 
  29.                             user_id=self.user_id) 
  30.         self.reservations = None 
  31.         self.obj_reset_changes() 

注意看reserve方法的參數,默認為None的project_id和user_id,這正是改變quotas屬主的方便入口!

修改后的代碼這里就不貼了,感興趣的同學可以到這次提交中看:Code Review

四.代碼提交和Review:

openstack社區有著整套項目管理流程,這里有一張圖能夠較詳細的描述工作流程:

OpenStack代碼貢獻初體驗

由圖可見bugfix是其中最簡單的流程。

關于如何提交代碼,這篇文章有詳細的介紹: 向 OpenStack 貢獻您的代碼。另外需要注意一點,在國內向社區提交代碼,經常會因為網絡問題導致無法提交,幸好找到了大牛的博客介紹了該類問題的解決辦法。  修改完代碼的單元測試和pep8本地測試當然不能少,早就知道社區對單元測試要求很嚴格,這次才真正領教了,三行代碼的修改,單元測試卻寫了30 行,review期間多次因為單元測試的問題重提代碼(哭)。社區里面的開發者,尤其是項目的core,對待項目有著像對自己孩子般的認真與細致:他們會在一個自己根本不會在意的地方提醒你、面對當前的問題他們會延伸的考慮類似的問題。他們的態度讓我首先感受到的吃驚,然后是敬佩!

經歷八次review、歷時近一個月,我的代碼總算是入庫了!希望我的這篇記錄能對你有幫助。

感謝休倫公司技術總監 孫琦 提供的英文支持,社區大牛Alex Xu給出的修改建議。

Launchpad上面的bug提交: Abnormal changes of quota usage after instance restored by admin

代碼審查過程: Fix abnormal quota usage after restore by admin

Git@OSC中的代碼: Fix abnormal quota usage after restore by admin

博文出處:http://my.oschina.net/zyzzy/blog/509315

關于OpenStack

OpenStack是一個由NASA(美國國家航空航天局)和Rackspace合作研發并發起的,是一個開源的云計算管理平臺項目,由幾個主要的組件組合起來完成具體工作。OpenStack支持幾乎所有類型的云環境,項目目標是提供實施簡單、可大規模擴展、豐富、標準統一的云計算管理平臺。

 

OpenStack除了有Rackspace和NASA的大力支持外,還有包括戴爾、Citrix、Cisco、Canonical等重量級公司的貢獻和支持,致力于簡化云的部署過程并為其帶來良好的可擴展性。

責任編輯:Ophira 來源: 開源中國博客
相關推薦

2021-03-28 20:58:25

Go語言線程

2015-07-01 15:08:56

OpenStack開源社區代碼貢獻

2009-08-01 09:06:35

UbuntuOneLinux開源操作系統

2009-03-09 15:12:39

XenServer安裝

2023-07-15 08:01:38

2010-11-22 10:31:17

Sencha touc

2011-05-30 15:12:10

App Invento 初體驗

2010-03-11 10:26:15

Ubuntu的初體驗

2015-10-19 10:55:17

OpenStackLiberty社區貢獻

2018-09-17 11:10:06

2016-10-12 21:25:53

EasyStack

2011-11-01 10:30:36

Node.js

2013-06-08 10:15:29

Outlook 201Outlook 201

2010-12-13 11:39:39

2011-08-02 10:26:59

iOS 多線程 線程

2025-03-18 07:30:41

2011-09-15 15:03:10

2009-11-30 10:09:02

谷歌Chrome OS

2013-05-28 10:22:03

2024-12-23 07:00:00

FastExcelEasyExcel開源框架
點贊
收藏

51CTO技術棧公眾號

91a在线视频| 91精品国产一区二区| 久久久久久一区| 男人的天堂一区二区| 欧美午夜18电影| 欧美性猛交xxxx乱大交3| 免费亚洲精品视频| 中文字幕日本人妻久久久免费| 99久久久国产精品美女| 日韩欧美亚洲国产另类| 搞av.com| 国产一级网站视频在线| 国产日韩视频| 中文一区二区视频| 岛国大片在线免费观看| 蜜桃av在线| 国产精品麻豆一区二区| 亚洲一区二区三区777| 日韩福利片在线观看| 日韩欧美另类中文字幕| 色综合天天综合网天天狠天天 | 欧美tickling挠脚心丨vk| 农民人伦一区二区三区| 黄色av网址在线免费观看| 久久 天天综合| 97精品国产97久久久久久免费| 日本xxxx免费| 欧洲一区二区三区精品| 亚洲欧美日韩久久| 成人在线视频电影| 国内av在线播放| 在线成人亚洲| 久久久www成人免费精品| 国产视频久久久久久| 成人免费91| 亚洲成人av一区二区三区| 亚洲区一区二区三区| 手机在线不卡av| 狠狠色狠狠色综合| 国产成人精品免费视频| 国产性一乱一性一伧一色| 第一社区sis001原创亚洲| 亚洲国产精彩中文乱码av| 黄色小视频免费网站| 91九色国产在线播放| 国产精品网曝门| 清纯唯美一区二区三区| 蜜桃视频在线观看www| 国产原创一区二区三区| 国产精品美女主播| av资源免费观看| 午夜久久久久| 欧美成人免费观看| 女教师淫辱の教室蜜臀av软件| 欧洲亚洲视频| 精品欧美久久久| 黄色三级视频在线播放| 欧美亚洲黄色| 欧美性大战久久久久久久蜜臀 | 视频一区二区不卡| 4438全国亚洲精品在线观看视频| 尤物在线免费视频| 色综合色综合| 上原亚衣av一区二区三区| 国产美女免费无遮挡| 亚洲8888| 国产婷婷色综合av蜜臀av| 成人在线电影网站| 国产精伦一区二区三区| 精品福利视频一区二区三区| 乳色吐息在线观看| 日韩在线网址| 精品国产凹凸成av人导航| 中文字幕一二三| 欧美久久亚洲| 精品久久国产字幕高潮| youjizz.com日本| 国内自拍欧美| 精品调教chinesegay| 新91视频在线观看| 成人精品中文字幕| 久久精品国产电影| 强制高潮抽搐sm调教高h| 天天射综合网视频| 久热99视频在线观看| 免费在线视频观看| 日韩午夜激情| 国产精品91久久久| 一区二区视频在线免费观看| 琪琪一区二区三区| 国产精品成人v| 国产精品久久免费| 成人免费毛片aaaaa**| 九九九九九精品| 国产二区在线播放| 亚洲乱码日产精品bd| 精品无码一区二区三区爱欲| 成人av三级| 欧美丰满嫩嫩电影| 三上悠亚 电影| 亚州国产精品| 久久精品国产91精品亚洲| 精品无码av在线| 老牛嫩草一区二区三区日本| 国产精品27p| www.成人免费视频| 久久综合九色欧美综合狠狠| 亚洲国产激情一区二区三区| 麻豆传媒视频在线观看| 激情亚洲一区二区三区四区 | 91嫩草在线| 色视频免费在线观看| 国产精品日产欧美久久久久| 亚洲人久久久| 成人性生交大片免费看网站 | 一区二区不卡在线观看| 色呦呦网站在线观看| 色综合天天综合| 两女双腿交缠激烈磨豆腐| 色狠狠久久av综合| 久久在线免费视频| 天天爽夜夜爽人人爽| 国产中文字幕精品| 欧美日韩一区二| 日本电影在线观看| 欧美日韩一区二区三区四区| 国产精品二区视频| 欧美日韩伦理在线免费| 久久久久久97| 一级aaaa毛片| 久久蜜桃一区二区| cao在线观看| 亚洲欧美专区| 亚洲人在线视频| 国产精品theporn动漫| 久久一区精品| 精品一区二区国产| 国产福利视频在线观看| 91成人网在线| 色哟哟无码精品一区二区三区| 久久婷婷蜜乳一本欲蜜臀| 97精品在线视频| www夜片内射视频日韩精品成人| 亚洲国产精品精华液2区45| av在线播放亚洲| 日韩免费成人| 久久久精品在线观看| 一二三四区在线| 欧美激情一二三区| 麻豆传传媒久久久爱| 加勒比中文字幕精品| 欧美国产日韩一区二区| 国产精品无码粉嫩小泬| 337p粉嫩大胆噜噜噜噜噜91av| 热久久最新地址| 欧美黄视频在线观看| 色吧影院999| 中文字幕 视频一区| 久久久久综合网| 99爱视频在线| 精品午夜电影| 久久久久久午夜| 色欲久久久天天天综合网| 亚洲成人www| 色欲av无码一区二区三区| 久久久久看片| 五月天亚洲综合| 日韩一级特黄| 欧美日韩国产二区| 人妻偷人精品一区二区三区| 午夜a成v人精品| 老鸭窝一区二区| 久久久久国产精品一区二区| 亚洲国产另类久久久精品极度| 最新亚洲国产| 久久人人爽人人爽人人片av高清| 五月天丁香视频| 在线亚洲一区观看| 亚洲区一区二区三| 国产99一区视频免费| 777777av| 人人狠狠综合久久亚洲婷婷| 91免费国产视频| 久草在线视频网站| 日韩久久精品电影| 国产精品久久久久久久一区二区| 亚洲国产综合在线| 欧美18—19性高清hd4k| 国产一区二区三区免费观看| 水蜜桃色314在线观看| 国产探花在线精品一区二区| 亚洲va码欧洲m码| 婷婷电影在线观看| 精品国产一区二区三区久久狼5月| 亚洲国产精品18久久久久久| 色婷婷亚洲婷婷| 亚洲欧美一区二区三区四区五区| 久久综合一区二区| 99国产超薄丝袜足j在线观看 | 97精品一区二区三区| 国产对白叫床清晰在线播放| 日韩视频一区二区在线观看| 中文字幕一区二区人妻电影| 亚洲精品免费视频| 国产中年熟女高潮大集合| 国产成人亚洲精品狼色在线| 日韩视频在线免费看| 欧美精品国产| 日韩免费三级| 久久99精品国产自在现线| 国产区亚洲区欧美区| 国产精品蜜芽在线观看| 久久久精品影院| 国产黄色片在线播放| 精品国产一区二区在线观看| 伊人网中文字幕| 色猫猫国产区一区二在线视频| 久久久久99精品成人片毛片| 国产精品欧美综合在线| 亚洲av无码国产精品久久| 国模一区二区三区白浆| 狠狠操精品视频| 亚洲精品欧美| 国产精品视频网站在线观看| 欧美gvvideo网站| 欧美一区二区福利| 另类在线视频| 国产精华一区| 国产精品一站二站| 国产这里只有精品| 福利精品一区| 国产精品成人久久久久| 国产亚洲成av人片在线观看| 久久999免费视频| 免费观看久久久久| 在线中文字幕日韩| gogogo高清在线观看免费完整版| 亚洲美女在线看| 先锋av资源站| 亚洲精品电影网在线观看| 蜜桃91麻豆精品一二三区 | 日韩精品系列| 亚洲福利视频二区| 丰满人妻av一区二区三区| 欧美一区二区三区四区久久 | 国产黄色在线播放| 欧美日韩国产精品一区二区三区四区| 欧美极品aaaaabbbbb| 中文字幕亚洲欧美在线不卡| 欧美性受xxxx黑人| 亚洲国产高清在线观看视频| 五月天综合视频| 国产欧美日韩在线看| 国产精品av久久久久久无| 国产女主播视频一区二区| 天天躁夜夜躁狠狠是什么心态| 久久一区二区视频| 欧美特级黄色录像| 国产三级一区二区三区| 成人性视频免费看| 国产精品嫩草99a| 欧美风情第一页| 亚洲精品第一国产综合野| 欧美丰满艳妇bbwbbw| 一区二区三区在线播| 久草资源在线视频| 欧美日韩国产一区二区三区| 在线观看 亚洲| 欧美天堂亚洲电影院在线播放| 在线中文字幕网站| 91精品国产综合久久婷婷香蕉| 97人妻精品一区二区三区动漫 | 男人的天堂最新网址| 国内精品久久久久影院薰衣草| 国产精品igao网网址不卡| 国产suv一区二区三区88区| 日本不卡视频一区| 2020国产成人综合网| jizz18女人高潮| 亚洲另类在线一区| 久久夜靖品2区| 欧美性xxxxx极品少妇| 国产日韩精品suv| 精品久久久久久久久久久久久久久久久 | 99国产超薄丝袜足j在线观看 | 日韩经典一区二区三区| 国产一级免费在线观看| 久久影院资源网| 极品美女一区| 亚洲综合精品一区二区| 要久久电视剧全集免费| 国产91av视频在线观看| 激情欧美一区二区三区| 波多野结衣天堂| 国产成人亚洲精品狼色在线| 国产精品揄拍100视频| 中文字幕一区二区在线播放 | 老司机精品视频在线观看6| 久久人人看视频| 日韩大陆av| 黄色99视频| 亚洲网色网站| 女人天堂av手机在线| 国产在线看一区| 午夜在线观看一区| 亚洲国产综合视频在线观看| 亚洲一卡二卡在线观看| 亚洲精品97久久| 国产精品久久久久久福利| 欧美一级大片在线观看| 久久综合给合| 天堂社区 天堂综合网 天堂资源最新版 | 国产福利一区二区| 免费看黄色三级| 午夜成人免费视频| 国产成人精品白浆久久69| 国产亚洲视频中文字幕视频| a毛片不卡免费看片| 91精品国产自产在线老师啪| 亚洲都市激情| 日韩视频免费播放| 国产精品一区二区久激情瑜伽| 免费黄在线观看| 欧美日韩亚洲精品一区二区三区| www.97av| 九九精品视频在线观看| 国产精品xxx| 欧美亚洲爱爱另类综合| 一本久久知道综合久久| 亚洲女则毛耸耸bbw| 亚洲精品久久久久久国产精华液| 波多野结衣影片| 精品小视频在线| 麻豆国产在线| 国产在线精品一区| 在线欧美福利| 免费啪视频在线观看| 一区二区在线观看不卡| 国产模特av私拍大尺度| 日韩小视频在线| 国产成人精品一区二区三区免费 | 中文字幕1区2区| 亚洲私人影院在线观看| 国产又大又长又粗| www.欧美精品一二三区| 亚洲精品第一| 一区二区三区在线观看www| 免费成人在线影院| 天天舔天天操天天干| 欧美专区日韩专区| 成人影视在线播放| 国产精品日韩一区| 99久久精品费精品国产| 日韩在线一区视频| ...av二区三区久久精品| 国产特级黄色片| 欧美激情视频播放| 精品视频在线你懂得| 国产肥臀一区二区福利视频| 97超碰欧美中文字幕| 国产免费观看av| 亚洲欧美中文在线视频| 国产91在线播放精品| 欧美xxxx吸乳| 成人午夜av电影| 国产无遮挡呻吟娇喘视频| 亚洲男人的天堂在线| 成人黄色视屏网站| 国产免费一区二区三区四在线播放 | 水蜜桃精品av一区二区| 日韩av片免费观看| 亚洲国产欧美日韩另类综合| 天天摸天天碰天天爽天天弄| 日韩美女福利视频| 国产高清欧美| 年下总裁被打光屁股sp | 亚洲精品国产setv| 一区二区在线播放视频| 亚洲麻豆国产自偷在线| 天天色天天操天天射| 国产精品极品在线| 欧美影院一区| 麻豆国产精品一区| 欧美日韩视频在线第一区| 污污片在线免费视频| 麻豆成人小视频| 精品在线观看视频| 日本系列第一页| 综合欧美国产视频二区| 盗摄牛牛av影视一区二区| 成人免费观看毛片| 亚洲女人小视频在线观看| 亚洲 国产 欧美 日韩| 国产主播在线一区| 乱码第一页成人| 国产av 一区二区三区| 亚洲男子天堂网| 日韩高清一区| 免费一级特黄录像| 亚洲国产aⅴ成人精品无吗|