syntax = "proto3";
package v3lockpb;

import "gogoproto/gogo.proto";
import "etcd/etcdserver/etcdserverpb/rpc.proto";

// for grpc-gateway
import "google/api/annotations.proto";

option (gogoproto.marshaler_all) = true;
option (gogoproto.unmarshaler_all) = true;

// The lock service exposes client-side locking facilities as a gRPC interface.
service Lock {
  // Lock acquires a distributed shared lock on a given named lock.
  // On success, it will return a unique key that exists so long as the
  // lock is held by the caller. This key can be used in conjunction with
  // transactions to safely ensure updates to etcd only occur while holding
  // lock ownership. The lock is held until Unlock is called on the key or the
  // lease associate with the owner expires.
  rpc Lock(LockRequest) returns (LockResponse) {
      option (google.api.http) = {
        post: "/v3beta/lock/lock"
        body: "*"
    };
  }

  // Unlock takes a key returned by Lock and releases the hold on lock. The
  // next Lock caller waiting for the lock will then be woken up and given
  // ownership of the lock.
  rpc Unlock(UnlockRequest) returns (UnlockResponse) {
      option (google.api.http) = {
        post: "/v3beta/lock/unlock"
        body: "*"
    };
  }
}

message LockRequest {
  // name is the identifier for the distributed shared lock to be acquired.
  bytes name = 1;
  // lease is the ID of the lease that will be attached to ownership of the
  // lock. If the lease expires or is revoked and currently holds the lock,
  // the lock is automatically released. Calls to Lock with the same lease will
  // be treated as a single acquistion; locking twice with the same lease is a
  // no-op.
  int64 lease = 2;
}

message LockResponse {
  etcdserverpb.ResponseHeader header = 1;
  // key is a key that will exist on etcd for the duration that the Lock caller
  // owns the lock. Users should not modify this key or the lock may exhibit
  // undefined behavior.
  bytes key = 2;
}

message UnlockRequest {
  // key is the lock ownership key granted by Lock.
  bytes key = 1;
}

message UnlockResponse {
  etcdserverpb.ResponseHeader header = 1;
}
