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;
//};
// 修改后代码
}
proto文件的message结尾风格不一致
proto文件的message,有的以"}"结尾,有的以"};"结尾,结尾风格不一致。例如message PaxosMsg以"};"结尾, message CheckpointMsg
以"}"结尾。尽管不一致,但不会影响protoc生成的c++代码。不一致的结尾风格或多或少给读者带来一些疑惑,导致读者进一步研究这些细节。phxqueue的proto文件的message结尾风格一致,均以"}"结尾,与protocol buffers的官方文档的结尾风格一致。
原代码路径:
src/comm/paxos_msg.proto
proto2的message以"}"结尾,官方文档示例:
https://protobuf.dev/programming-guides/proto2/
proto3的message以"}"结尾,官方文档示例:
https://protobuf.dev/programming-guides/proto3/
下文会将proto文件的message的结尾统一改为"}"。
修改后的代码路径:
sample/phxkv/phxkv.proto
src/master/master_sm.proto
src/comm/paxos_msg.proto