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

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions