前言

个人的项目总结, 非技术类博文.

需要补充的知识点

  • HTTP 协议与其内置方法
  • curl 指令和各选项的意义
  • Keystone 认证流程和各项目配置文件 [keystone_authtoken] 的含义
  • Git
  • 异常处理
  • docker

笔记

语法应用场合

  • 异常处理: as 可以获取异常信息 , 本质上是异常类的一个对象 , 可以调用异常实例化对象的属性.
import six
from egis.i18n import _LW except Exception as err:
LOG.warning(_LW("Failed to delete server %(server) as "
"error %(err)s"), {'server': server['id'],
'err': six.text_type(err)})

-异常处理: raise 一般用于在 try-catch 捕获了原来的异常之后来, 触发一个你希望触发的异常(异常的转换), 并且这个异常可以是自定义的.

  • 日志输出: 在关键(容易出现错误)的地方编写明显的错误输出日志

    一般在 except 异常捕获之后, 在重新 * raise* 触发异常之前需要记录日志信息.
from oslo_log import log as logging

LOG = logging.getLogger(__name__)

except db_exc.DBConnectionError:
OG.exception(_LE("model server went away, retry again."))
raise
  • 注释: 假如自己重新看代码 10 秒内还看不懂的时候就表示应该写注释了

  • 函数中的参数值如果是一个不会被经常修改的数值 , 一般会用常量对象来表示, 而不会直接将该数值写到函数的参数列表中. 因为这回导致代码的可读性降低, 不能清晰的知道该数值的含义. EG:

NUMBER = 100

def function(NUMBER, *args, **kwargs):
pass
  • 在传递参数时, 如果实参使用了 **filters 这种形式那么只能传递 dict 类型的参数,否则报错.
filters = filters or {}

query_res = query_res.filter_by(**filters).all()    # 变量 filters 必须为 dict 类型对象
  • 兼容性问题: if vm_list == []: return 这种写法是不符合兼容性的. 应该写成:
if not vm_list or not len(vm_list): return

Openstack 相关

  • 单元测试: 修改了 requirements.txt 文件之后, tox 指令需要 -r 选项来重新安装软件包集合才能生效
vim egis/requirements.txt
oslo.vmware>=2.1.0 sudo tox -r -e py27
  • 单元测试: 单元测试文件中是默认不允许通过 pdb 来调试代码的, 但是可以通过安装 test-requirements.txt 内的测试扩展软件包来支持这个功能.
sudo pip install -e . -r test-requirements.txt -r requirements.txt
python -m testtools.run egis.tests.unit.api.v1.test_vmware_connects
  • manager.py 内定义的方法一定要有形参 context , 否则会报错

  • cctxt = self.client.prepare(server=host) 指定了接受这个 rpc 请求的 server_ip

SQLAlchemy 相关

  • SQLAlchemy : session.delete(exsi_hypervisor_ref) 会将 exsi_hypervisor_ref 中包含的记录删除(强删除), 而 exsi_hypervisor_ref.delete(session) 会将 exsi_hypervisor_ref 中的记录的字段 deleted 值设为 1 , 保留该条记录(弱删除)

  • SQLAlchemy : 一次性删除多行的写法, EG. 将拥有 exsi_hypervisor.id 的所有记录删除

vmware_networks_ref = session.query(models.VmwareNetwork).filter_by(exsi_hypervisor_id=exsi_hypervisor.id)
vmware_networks_ref.delete()
  • 对数据库操作的异常应该在 sqlalchemy/api.py 文件中抛出异常, 然后在 api/v1/vmware_connects.py 截获异常. 因为 HTTP API 接口只负责信息的转发.

  • mysql 在使用 SQL 文件恢复数据库时, 需要现将原来的数据库清理干净再恢复, 否则会由缺表的情况.

Git 相关

  • 合并冲突

    1. git status 找到冲突的文件
    2. 将冲突去除
    3. 将冲突文件重新加入临时区 git add egis/api/v1/router.py
    4. 合并分支 git rebase –continue
    5. 重新提交 git review
  • 合并分支

    1. git checkout master
    2. git pull origin master
    3. git checkout aju-dev
    4. git rebase master
    5. git status
    6. git review

其他

  • 添加网卡子接口
sudo ifconfig enp3s0:0 10.0.0.4/24 10.0.0.255 up
sudo ip addr add 192.168.0.61/24 dev enp3s0
ping 172.16.100.10
  • 101.5 没有 ISCSI.name, 需要手动的开启 ISCSI Client: esxcli iscsi software set -e true

  • ERROR: 前端连接不上后端, 后端能够正常返回 response, 但是前端没有跳转. 是因为前后端时间不同步导致不能缓存用户信息造成的.

  • VIM 指令: split 分裂编辑一个相同的文件

DR 项目小结的更多相关文章

  1. 记一次SSM项目小结(一)

    记一次SSM项目小结(一) ssm框架 环境配置 服务器配置 解决方法  拦截器重定向到localhost nginx和tomcat中session失效 mybatis的xml文件不生效 数据库用户创 ...

  2. [2017BUAA软工助教]个人项目小结

    2017BUAA个人项目小结 一.作业链接 http://www.cnblogs.com/jiel/p/7545780.html 二.评分细则 0.注意事项 按时间完成并提交--正常评分 晚交一周以内 ...

  3. [2017BUAA软工助教]结对项目小结

    2017BUAA结对项目小结 一.作业链接 http://www.cnblogs.com/jiel/p/7604111.html 二.评分细则 1.注意事项 按时间完成并提交--正常评分 晚交一周以内 ...

  4. 在oneAPM参加第一个项目小结

    从12月15日开始加入进入oneAPM的第二个项目,也是我真正近距离接触项目的一次吧,到今天差不多接近尾声了,很高心能和大家一起共同改造这个项目,虽然说我做的贡献并不大,但是身临项目真的会收获很多体会 ...

  5. .NET项目开发—浅谈面向接口编程、可测试性、单元测试、迭代重构(项目小结)

    阅读目录: 1.开篇介绍 2.迭代测试.重构(强制性面向接口编程,要求代码具有可测试性) 2.1.面向接口编程的两个设计误区 2.1.1.接口的依赖倒置 2.1.2.接口对实体的抽象 2.2.迭代单元 ...

  6. 一个WPF小项目小结

    一:缘起 老板有做PC桌面客户端的需求,做的是能耗的计算和评估,要算能耗,就有很多环节,最后对这些环节数据进行一些简单计算.我想要是做的话就用比较熟的wpf,就去聊了下,对方给了1张比较复杂的Exce ...

  7. .NET项目开发—浅谈面向对象的纵横向关系、多态入口,单元测试(项目小结)

    阅读目录: 1.开篇介绍 2.使用委托消除函数串联调用 2.1.使用委托工厂转换两个独立层面的对象 3.多态入口(面向对象继承体系是可被扩展的) 4.多态的受保护方法的单元测试(Protected成员 ...

  8. Docker第三方项目小结

    软件项目的成功常常根据其催生的生态系统来衡量.围绕或基于核心技术构建的项目增添了功能和易用性,它们常常日臻完善.Docker就是一个典例,有众多第三方项目扩展.补充或改进Docker. •Docker ...

  9. HotelIInventory项目小结

    最近参与了HotelIInventory这个项目的一个模块的开发.经验不足,对Sql脚本的编写能力还需要提高,这个模块的Sql语句大多是组长替我写的,如果靠我自己来写,我绝对是没有能力完成工作的,在此 ...

随机推荐

  1. Sentinel整合Dubbo限流实战(分布式限流)

    之前我们了解了 Sentinel 集成 SpringBoot实现限流,也探讨了Sentinel的限流基本原理,那么接下去我们来学习一下Sentinel整合Dubbo及 Nacos 实现动态数据源的限流 ...

  2. 实现简单的计算器(设计UI)

    要点说明: 1.一个textedit控件,其余全部是button控件,button布局方式:栅格布局(Grid layout) 2.对窗体的Title进行修改(默认是工程名) 3.在ui文件中设计的U ...

  3. [BZOJ 2989]数列(二进制分组+主席树)

    [BZOJ 2989]数列(二进制分组+主席树) 题面 给定一个长度为n的正整数数列a[i]. 定义2个位置的graze值为两者位置差与数值差的和,即graze(x,y)=|x-y|+|a[x]-a[ ...

  4. JVM — 类加载机制

    1. 引言 java 类被虚拟机编译之后成为一个 Class 的字节码文件,该字节码文件中包含各种描述信息,最终都需要加载到虚拟机中之后才能运行和使用.那么虚拟机是如何加载这些 Class 文件?Cl ...

  5. Tornado 的核是什么??

    Tornado 的核心是 ioloop 和 iostream 这两个模块,前者提供了一个高效的 I/O 事件循环,后 者则封装了 一个无阻塞的 socket .通过向 ioloop 中添加网络 I/O ...

  6. 媒介查询demo

    <!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  7. base64加密原理

    以加密字符串"HkMayfly"为例子 1.转换字符 将待加密字符串的每个字符转换为对应ASCII码的二进制形式并拓展为8位. 2.划分数据 每3个字符为一组,共24位,每6位划分 ...

  8. JAVA对象序列化和反序列化学习

    JAVA序列化就是将JAVA对象转化为字节序列的过程,而JAVA反序列化就是将字节序列转化为JAVA对象的过程. 这一过程是通过JAVA虚拟机独立完成,所以一个对象序列化后可以在任意时间和任意机器上反 ...

  9. 在a标签中使用了onclick修改样式之后a:hover失效

    是因为优先级的原因造成,使用!important修改优先级. 如修改成: .button1:hover {            color: #FFF !important;            ...

  10. [CSS]CSS中使用span和div遇到的问题

    一. span和div的区别 1.span是行级元素,div是块级元素2.span占用的宽度是内容的宽度,而div默认是一行.所以一般在页面中,只有一行或不到一行文字用span,元素占据多行时用div ...