升级到Varnish 7.1

华而不实

Varnish现在有了一个基础设施,可以重命名参数或VCL变量,同时保留一个不推荐使用的别名以保持兼容性。

参数

有计划对某些论点进行重新命名。发生这种情况时,别名将不会按 param.show [-j|-l] 命令,但它们将由 param.show [-j] <param> 。在以下平台上运行的系统 varnishadm 或者,可以更新Varnish CLI,以便在 deprecated_dummy 为测试目的添加的参数。

不受欢迎的 vsm_space 参数已删除。从Varnish 6.0.0开始,它被忽略且不起作用,并且应该在7.0.0版本中消失。的子参数 -l 命令行选项,用作以下各项的简写 vsm_space 也不再被接受。

命令行选项

在启动期间使用CLI脚本时的一种常见模式是将 -I-f '' 用于防止缓存进程自动启动的选项。在这种情况下,启动命令通常出现在CLI脚本中,很可能是最后一个命令。这使得能够加载需要特定顺序的VCL和潜在的VCL标签,如果活动VCL应该将执行切换到标签的话。

为了支持此模式,如果还没有活动的VCL,则不再隐式使用通过CLI脚本加载的VCL。如果没有VCL通过 -b-f 选项它意味着显式的 vcl.use 命令之前,需要使用 start 指挥部。

在上述场景中,情况已经是这样,因为所需的活动VCL可能需要最后加载,而不适合隐式 vcl.use 因为依赖项是首先加载的。此更改不应影响现有 -I 脚本,但如果是这样的话,只需添加缺少的 vcl.use 指挥部。

Varnish的其他变化

ESI解析器现在可以识别 onerror="continue" 属性的属性 <esi:include/> XML标记。

这个 +esi_include_onerror 功能标志控制是否遵守该属性:如果启用,则包含失败将停止ESI处理,除非 onerror="continue" 属性已为其设置。

默认情况下,功能标志处于关闭状态,保留现有行为以在包含失败的情况下继续进行ESI处理。

建议永久存储引擎的用户在引入此更改之前创建的对象不能携带 onerror="continue" 属性,因此将被当作不存在一样处理 +esi_include_onerror 功能标志已启用。

此外,由于此更改不向后兼容,因此此版本不支持使用持久化存储进行降级。

Varnish测试

不受欢迎的 err_shell 命令已删除,请使用 shell -err 取而代之的是。

针对开发人员和VMOD作者的更改

后端

后端现在有引用计数器,以避免任务长时间持有动态后端的不确定性,例如在等待列表中,以及后端在事务期间消失的风险。

应将作业替换为:

-lvalue = expr;
+VRT_Assign_Backend(&lvalue, expr);

对于保证至少VCL生存期的后端,相应的VMOD可以选择退出引用计数 VRT_StaticDirector() 以避免引用计数开销。

滤器

两个新功能 VRT_AddFilter()VRT_RemoveFilter() 以VDP/VFP对形式管理筛选器。当成对使用时,过滤器必须具有相同的名称,否则只使用一个获取或传递过滤器就可以了。

与它不受欢迎的前辈不同 VRT_AddVFP()VRT_AddVDP() ,新的 VRT_AddFilter() 返回错误字符串。这个 VRT_RemoveVFP()VRT_RemoveVDP() 函数也已弃用,目前仍保留为 VRT_RemoveFilter() 而不进行错误处理。

VMOD不推荐使用的别名

VMOD作者可以从现在开始重命名函数或对象方法,而不会立即通过将旧名称声明为别名来破坏兼容性。

在VMOD描述符中,可以添加以下部分:

$Alias deprecated_function original_function

or

$Alias .deprecated_method object.original_method

这是一个重新审视现有VMOD中令人遗憾的名称选择的好机会。

平台支持

系统ID

为了使终止模式的主进程选择具有确定性,现在在Varnish服务中默认需要一个PID文件。在SERVICE命令用于 ExecStart 被重写,则会引发 -P 选项匹配 PIDFile 需要设置。

eof