本周小贴士#90:退役标志
Posted -飞鹤-
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了本周小贴士#90:退役标志相关的知识,希望对你有一定的参考价值。
作为TotW#90最初发表于2015年3月19日
由Titus Winters创作
关于我们误用命令行标志的那些令人挫败的事情之一是难以安全地从二进制文件和生产服务器中删除标志(重新访问https://abseil.io/tips/45 以了解一些令人挫败的误用)。这个麻烦?如果你指定一个不再定义的标志,二进制文件不会启动,因此移除标志可能需要在C++代码和你的启动脚本和配置的任务中进行协调。
在某些情况下,这种协调可能非常具有挑战性(基于二进制版本调整产品代码)。要是有更好的方法就好了!
这里有。不久前,我们向C++命令行标志系统添加了一个新概念,称之为“退役标志”(ABSL_RETIRED_FLAG)。
退役标志不会在C++中创建符号(不再依赖FLAGS_some_flag全局变量),不会出现在–help中,但是当指定命令行(尽管会记录错误)时,会被接受。用这种方式,不再被代码使用的标志可以“退役”了,将C++更改和生产配置更改分开。一旦配置更改全部清除,就可以一次且全部移除退役标志。
退役标志被设计用在许多情况下(包括涉及跨仓库非原子提交要求的情况)。一个非常简单的标志退役的分步可能如下所示:
-
从代码中移除FLAGS_frobber的使用
如果您遵循 https://abseil.io/tips/45的建议并主要在 main() 中使用标志,那么这应该很容易去做并检查。 -
更改标志的定义以退役它。也就是:
ABSL_FLAG(type, frobber, "default", "Which frobber to use?");
应该变成:
ABSL_RETIRED_FLAG(type, frobber, "default", "retired");
-
等待二进制版本。一旦所有服务单元中的工作都正在调用新的二进制文件,那么你可以继续。
-
从你的生产配置中移除标志。一旦搜索相关生产配置显示没有找到frobber标志,那么你可以继续。
-
移除退役的标志。
我们在非常复杂的标志移除上取得成功:这项工作的激励示例是移除定义在传统内部文件系统中的标志,这更加复杂,因为标志定义在库中(因此在许多进制文件中使用)。从我们所看到的,即便最复杂的标志移除也可以用这个系统安全地启用。因此,下次你想知道如何安全地移除一个标志,请考虑先退役它并逐步执行。
以上是关于本周小贴士#90:退役标志的主要内容,如果未能解决你的问题,请参考以下文章