ETCD API Compatibility Test Report

July 15, 2023 ยท View on GitHub

Since the Xline is designed to be fully compatible with the ETCD, ETCD API compatibility test will be performed after each release. All the compatibility tests are running via etcdctl. Read the documentation for more usage information about etcdctl.

Here is the compatibility test report.

ETCD KV Relevant APIs/Commands Tests

APIclient commandresult
Range(RangeRequest) returns (RangeResponse)etcdctl getpassed
DeleteRange(DeleteRangeRequest) returns (DeleteRangeResponse)etcdctl delpassed
Put(PutRequest) returns (PutResponse)etcdctl putpassed
Txn(TxnRequest) returns (TxnResponse)etcdctl txnpassed
Compact(CompactionRequest) returns (CompactionResponse)etcdctl compactionunimplemented (will cover in v0.3~v0.5)
Watch(stream WatchRequest) returns (stream WatchResponse)etcdctl watchpassed

ETCD Lease APIs/Commands Tests

APIclient commandresult
LeaseGrant(LeaseGrantRequest) returns (LeaseGrantResponse)etcdctl lease grantpassed
LeaseRevoke(LeaseRevokeRequest) returns (LeaseRevokeResponse)etcdctl lease revokepassed
LeaseKeepAlive(stream LeaseKeepAliveRequest) returns (stream LeaseKeepAliveResponse)etcdctl lease keep-alivepassed
LeaseTimeToLive(LeaseTimeToLiveRequest) returns (LeaseTimeToLiveResponse)etcdctl lease timetolivepassed
LeaseLeases(LeaseLeasesRequest) returns (LeaseLeasesResponse)etcdctl lease listpassed

ETCD Cluster Maintenance APIs/Commands Tests

ETCD maintenance relevant APIs are yet to fully implement. We will cover them in the future version (v0.3.0 ~ v0.5.0)

ETCD Cluster APIs/Commands Tests

APIclient commandresult
MemberAdd(MemberAddRequest) returns (MemberAddResponse)etcdctl member add newMember --peer-urls=https://127.0.0.1:12345unimplemented (will cover in v0.3~v0.5)
MemberRemove(MemberRemoveRequest) returns (MemberRemoveResponse)etcdctl member remove 2be1eb8f84b7f63eunimplemented (will cover in v0.3~v0.5)
MemberUpdate(MemberUpdateRequest) returns (MemberUpdateResponse)etcdctl member update 2be1eb8f84b7f63e --peer-urls=https://127.0.0.1:11112unimplemented (will cover in v0.3~v0.5)
MemberList(MemberListRequest) returns (MemberListResponse)etcdctl member listunimplemented (will cover in v0.3~v0.5)

ETCD Snapshot APIs/Commands Tests

The status and restore relevant features doesn't compatible with the etcd client since the Xline snapshot metadata format is totally different from the etcd snapshot format. The status and restore subcommands can be executed via the xlinectl. The xlinectl is yet to complete.

APIclient commandresult
Snapshot(SnapshotRequest) returns (stream SnapshotResponse)etcdctl snapshot save snapshot.dbpassed

ETCD Auth APIs/Commands Tests

APIclient commandresult
AuthEnable(AuthEnableRequest) returns (AuthEnableResponse)etcdctl auth enablepassed
AuthDisable(AuthDisableRequest) returns (AuthDisableResponse)etcdctl auth disablepassed
AuthStatus(AuthStatusRequest) returns (AuthStatusResponse)etcdctl auth statuspassed

ETCD User APIs/Commands Tests

APIclient commandresult
UserAdd(AuthUserAddRequest) returns (AuthUserAddResponse)etcdctl user addpassed
UserGet(AuthUserGetRequest) returns (AuthUserGetResponse)etcdctl user getpassed
UserList(AuthUserListRequest) returns (AuthUserListResponse)etcdctl user listpassed
UserDelete(AuthUserDeleteRequest) returns (AuthUserDeleteResponse)etcdctl user deletepassed
UserChangePassword(AuthUserChangePasswordRequest) returns (AuthUserChangePasswordResponse)etcdctl user passwdpassed
UserGrantRole(AuthUserGrantRoleRequest) returns (AuthUserGrantRoleResponse)etcdctl user grant-rolepassed
UserRevokeRole(AuthUserRevokeRoleRequest) returns (AuthUserRevokeRoleResponse)etcdctl user revoke-rolepassed

ETCD Role APIs/Commands Tests

APIclient commandresult
RoleAdd(AuthRoleAddRequest) returns (AuthRoleAddResponse)etcdctl role addpassed
RoleGet(AuthRoleGetRequest) returns (AuthRoleGetResponse)etcdctl role getpassed
RoleList(AuthRoleListRequest) returns (AuthRoleListResponse)etcdctl role listpassed
RoleDelete(AuthRoleDeleteRequest) returns (AuthRoleDeleteResponse)etcdctl role deletepassed
RoleGrantPermission(AuthRoleGrantPermissionRequest) returns (AuthRoleGrantPermissionResponse)etcdctl role grant-permissionpassed
RoleRevokePermission(AuthRoleRevokePermissionRequest) returns (AuthRoleRevokePermissionResponse)etcdctl revoke-permissionpassed