Skip to content

proto文件的message结尾风格不一致 #282

Description

@dyx2025

proto文件的message结尾风格不一致

proto文件的message,有的以"}"结尾,有的以"};"结尾,结尾风格不一致。例如message PaxosMsg以"};"结尾, message CheckpointMsg
以"}"结尾。尽管不一致,但不会影响protoc生成的c++代码。不一致的结尾风格或多或少给读者带来一些疑惑,导致读者进一步研究这些细节。phxqueue的proto文件的message结尾风格一致,均以"}"结尾,与protocol buffers的官方文档的结尾风格一致。

原代码路径:
src/comm/paxos_msg.proto

// message PaxosMsg以"};"结尾
message PaxosMsg
{                                                                                                                                                                                       
    required int32 MsgType = 1;
    optional uint64 InstanceID = 2;
    optional uint64 NodeID = 3;
    optional uint64 ProposalID = 4;
    optional uint64 ProposalNodeID = 5;
    optional bytes Value = 6;
    optional uint64 PreAcceptID = 7;
    optional uint64 PreAcceptNodeID = 8;
    optional uint64 RejectByPromiseID = 9;
    optional uint64 NowInstanceID = 10; 
    optional uint64 MinChosenInstanceID = 11; 
    optional uint32 LastChecksum = 12; 
    optional uint32 Flag = 13; 
    optional bytes SystemVariables = 14; 
    optional bytes MasterVariables = 15; 
};

// message CheckpointMsg以"}"结尾
message CheckpointMsg
{
    required int32 MsgType = 1;
    required uint64 NodeID = 2;
    optional int32 Flag = 3;
    required uint64 UUID = 4;
    required uint64 Sequence = 5;
    optional uint64 CheckpointInstanceID = 6;
    optional uint32 Checksum = 7;
    optional string FilePath = 8;
    optional int32 SMID = 9;
    optional uint64 Offset = 10; 
    optional bytes Buffer = 11; 
}

proto2的message以"}"结尾,官方文档示例:

https://protobuf.dev/programming-guides/proto2/

syntax = "proto2";

message SearchRequest {
  optional string query = 1;
  optional int32 page_number = 2;
  optional int32 results_per_page = 3;
}

proto3的message以"}"结尾,官方文档示例:

https://protobuf.dev/programming-guides/proto3/

syntax = "proto3";

message SearchRequest {
  string query = 1;
  int32 page_number = 2;
  int32 results_per_page = 3;
}

下文会将proto文件的message的结尾统一改为"}"。
修改后的代码路径:
sample/phxkv/phxkv.proto

syntax = "proto3";                                                                                                                                                                      

package phxkv;

service PhxKVServer {
    rpc Put(KVOperator) returns (KVResponse) { } 
    rpc GetLocal(KVOperator) returns (KVResponse) { } 
    rpc GetGlobal(KVOperator) returns (KVResponse) { } 
    rpc Delete(KVOperator) returns (KVResponse) { } 
}

message KVOperator
{
    string key = 1;
    bytes value = 2;
    uint64 version = 3;
    uint32 operator = 4;
    uint32 sid = 5;
//};
// 修改后代码
}

message KVData
{
    bytes value = 1;
    uint64 version = 2;
    bool isdeleted = 3;
//};
// 修改后代码
}

message KVResponse
{
    KVData data = 1;
    int32 ret = 2;
    uint64 master_nodeid = 3;
//};
// 修改后代码
}

src/master/master_sm.proto

syntax = "proto2";                                                                                                                                                                      
package phxpaxos;

message MasterOperator
{
    required uint64 nodeid = 1;
    required uint64 version = 2;
    required int32 timeout = 3;
    required uint32 operator = 4;
    required uint32 sid = 5;
    optional uint64 lastversion = 6;
//};
// 修改后代码
}

src/comm/paxos_msg.proto

syntax = "proto2";                                                                                                                                                                      
package phxpaxos;

message Header 
{
    required uint64 gid = 1;
    required uint64 rid = 2;
    required int32 cmdid = 3;
    optional int32 version = 4;
//};
// 修改后代码
}

message PaxosMsg
{
    required int32 MsgType = 1;
    optional uint64 InstanceID = 2;
    optional uint64 NodeID = 3;
    optional uint64 ProposalID = 4;
    optional uint64 ProposalNodeID = 5;
    optional bytes Value = 6;
    optional uint64 PreAcceptID = 7;
    optional uint64 PreAcceptNodeID = 8;
    optional uint64 RejectByPromiseID = 9;
    optional uint64 NowInstanceID = 10; 
    optional uint64 MinChosenInstanceID = 11; 
    optional uint32 LastChecksum = 12; 
    optional uint32 Flag = 13; 
    optional bytes SystemVariables = 14; 
    optional bytes MasterVariables = 15; 
//};
// 修改后代码
}

message CheckpointMsg
{
    required int32 MsgType = 1;
    required uint64 NodeID = 2;
    optional int32 Flag = 3;
    required uint64 UUID = 4;
    required uint64 Sequence = 5;
    optional uint64 CheckpointInstanceID = 6;
    optional uint32 Checksum = 7;
    optional string FilePath = 8;
    optional int32 SMID = 9;
    optional uint64 Offset = 10; 
    optional bytes Buffer = 11; 
}

message AcceptorStateData
{
    required uint64 InstanceID = 1;
    required uint64 PromiseID = 2;
    required uint64 PromiseNodeID = 3;
    required uint64 AcceptedID = 4;
    required uint64 AcceptedNodeID = 5;
    required bytes AcceptedValue = 6;
    required uint32 Checksum = 7;
//};
// 修改后代码
}

message PaxosNodeInfo
{
    required uint64 Rid = 1;
    required uint64 Nodeid = 2;
//};
// 修改后代码
}

message SystemVariables
{
    required uint64 Gid = 1;
    repeated PaxosNodeInfo MemberShip = 2;
    required uint64 Version = 3;
//};
// 修改后代码
}

message MasterVariables
{
    required uint64 MasterNodeid = 1;
    required uint64 Version = 2;
    required uint32 LeaseTime = 3;
//};
// 修改后代码
}

message PaxosValue
{
    required int32 SMID = 1;
    required bytes Value = 2;
//};
// 修改后代码
}

message BatchPaxosValues
{
    repeated PaxosValue Values = 1;
//};
// 修改后代码
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions