feat(distlock): declare Lease gRPC service API for distributed locks

This commit is contained in:
Pasha Sviderski
2026-08-26 16:06:47 +10:00
parent ac56754281
commit 5a956e72de
3 changed files with 805 additions and 0 deletions
+54
View File
@@ -0,0 +1,54 @@
syntax = "proto3";
package api;
option go_package = "github.com/psviderski/uncloud/internal/machine/api/pb";
import "google/protobuf/duration.proto";
// Lease provides atomic operations for time-bound ownership of resources on a single machine.
service Lease {
// Acquire creates a lease when the resource has no unexpired lease.
rpc Acquire(AcquireLeaseRequest) returns (AcquireLeaseResponse);
// Renew extends an unexpired lease when its ownership token matches.
rpc Renew(RenewLeaseRequest) returns (RenewLeaseResponse);
// Release removes an unexpired lease when its ownership token matches.
rpc Release(ReleaseLeaseRequest) returns (ReleaseLeaseResponse);
}
message AcquireLeaseRequest {
string resource = 1;
// Token uniquely identifies the lease owner.
bytes token = 2;
// TTL sets how long the lease remains valid without renewal.
google.protobuf.Duration ttl = 3;
}
message AcquireLeaseResponse {
// Acquired is true when this request successfully created the lease.
bool acquired = 1;
}
message RenewLeaseRequest {
string resource = 1;
// Token identifies the owner of the existing lease.
bytes token = 2;
// TTL sets how long the renewed lease remains valid.
google.protobuf.Duration ttl = 3;
}
message RenewLeaseResponse {
// Renewed is true when an unexpired lease matched the ownership token and was successfully renewed.
bool renewed = 1;
}
message ReleaseLeaseRequest {
string resource = 1;
// Token identifies the owner of the existing lease.
bytes token = 2;
}
message ReleaseLeaseResponse {
// Released is true when an unexpired lease existed, matched the ownership token, and was successfully released.
bool released = 1;
}