"No field key specified for" Thrift 生成器警告

"No field key specified for" warning with Thrift generator

收到警告:

No field key specified for bytes, resulting protocol may have conflicts or not be backwards compatible!

尝试生成以下行时:

void uploadChunk(binary bytes)

我尝试了其他几个参数名称,但无法使用 Google 搜索找到有关此警告的信息。

想法?

哦,我在binary前加了1:,警告消失了:

void uploadChunk(1:binary bytes)

Thrift 生成的某些语言可能需要字段键,1 是字段键。

应用数字字段键(或字段 ID)的解决方案是绝对正确的。

为了兼容性,Thrift 允许没有 ID 的字段。在内部,负数分配给这些字段。但是,强烈建议指定字段 ID> 0,因为如果您在给定成员之前包含更多成员,或者如果您随机分配成员,自动分配的编号可能会发生变化, 由于不同的自动编号字段,两者都会导致不兼容。

这正是发出警告的原因。

为了补充 JensG 的正确答案,下面将详细解释字段的自动分配编号可能导致不兼容的原因:

如果服务器是 运行 具有三个未编号参数的 Thrift 接口,而客户端是 运行 仅具有两个未编号参数的该接口的旧版本,则服务器可能无法正确关联提供给可用参数的值。如果它们被编号,就不会混淆。编号是支持所谓的 schema evolution.

的好主意