-
Notifications
You must be signed in to change notification settings - Fork 7
/
RaftLeaseV1.ts
89 lines (74 loc) · 2.13 KB
/
RaftLeaseV1.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
/**
Juju RaftLease version 1.
This facade is available on:
Controller-machine-agent
Machine-agent
Unit-agent
Models
NOTE: This file was generated using the Juju schema
from Juju 3.0-beta1 at the git SHA 61c87ab7e1.
Do not manually edit this file.
*/
import type { JujuRequest } from "../../../generator/interfaces.js";
import { ConnectionInfo, Transport } from "../../client.js";
import { Facade } from "../../types.js";
import { autoBind } from "../../utils.js";
export interface Error {
code: string;
info?: AdditionalProperties;
message: string;
}
export interface ErrorResult {
error?: Error;
}
export interface ErrorResults {
results: ErrorResult[];
}
export interface LeaseOperation {
command: string;
}
export interface LeaseOperations {
commands: LeaseOperation[];
}
export interface AdditionalProperties {
[key: string]: any;
}
/**
Facade allows for modification of the underlying raft instance from a
controller facade.
*/
class RaftLeaseV1 implements Facade {
static NAME = "RaftLease";
static VERSION = 1;
NAME = "RaftLease";
VERSION = 1;
_transport: Transport;
_info: ConnectionInfo;
constructor(transport: Transport, info: ConnectionInfo) {
this._transport = transport;
this._info = info;
// Automatically bind all methods to instances.
autoBind(this);
}
/**
ApplyLease is a bulk API to allow applying lease operations to a raft
context. If the current controller is not the leader, then a NotLeaderError
is returned. Information about where they can locate the leader maybe
supplied in the error message, but isn't guaranteed.
If no information is supplied, it is expected that the client performs their
own algorithm to locate the leader (roundrobin or listen to the apidetails
topic).
*/
applyLease(params: LeaseOperations): Promise<ErrorResults> {
return new Promise((resolve, reject) => {
const req: JujuRequest = {
type: "RaftLease",
request: "ApplyLease",
version: 1,
params: params,
};
this._transport.write(req, resolve, reject);
});
}
}
export default RaftLeaseV1;