@serve.zone/interfaces 32.11.0 → 32.13.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/changelog.md +29 -0
- package/dist_ts/00_commitinfo_data.js +1 -1
- package/dist_ts/data/clusternode.d.ts +11 -4
- package/dist_ts/data/clusternode.js +41 -6
- package/dist_ts/data/fleetcutover.d.ts +453 -0
- package/dist_ts/data/fleetcutover.js +943 -0
- package/dist_ts/data/index.d.ts +1 -0
- package/dist_ts/data/index.js +2 -1
- package/dist_ts/data/serviceruntime.d.ts +2 -0
- package/dist_ts/data/serviceruntime.js +3 -1
- package/dist_ts/requests/fleetcutover.d.ts +124 -0
- package/dist_ts/requests/fleetcutover.js +2 -0
- package/dist_ts/requests/index.d.ts +2 -1
- package/dist_ts/requests/index.js +3 -2
- package/dist_ts/requests/service.d.ts +74 -5
- package/package.json +1 -1
- package/readme.md +129 -4
- package/ts/00_commitinfo_data.ts +1 -1
- package/ts/data/clusternode.ts +55 -5
- package/ts/data/fleetcutover.ts +1557 -0
- package/ts/data/index.ts +1 -0
- package/ts/data/serviceruntime.ts +2 -0
- package/ts/requests/fleetcutover.ts +136 -0
- package/ts/requests/index.ts +2 -0
- package/ts/requests/service.ts +83 -5
package/dist_ts/data/index.d.ts
CHANGED
|
@@ -17,6 +17,7 @@ export * from './docker.js';
|
|
|
17
17
|
export * from './domain.js';
|
|
18
18
|
export * from './event.js';
|
|
19
19
|
export * from './externalregistry.js';
|
|
20
|
+
export * from './fleetcutover.js';
|
|
20
21
|
export * from './gateway.js';
|
|
21
22
|
export * from './hostedapp.js';
|
|
22
23
|
export * from './image.js';
|
package/dist_ts/data/index.js
CHANGED
|
@@ -17,6 +17,7 @@ export * from './docker.js';
|
|
|
17
17
|
export * from './domain.js';
|
|
18
18
|
export * from './event.js';
|
|
19
19
|
export * from './externalregistry.js';
|
|
20
|
+
export * from './fleetcutover.js';
|
|
20
21
|
export * from './gateway.js';
|
|
21
22
|
export * from './hostedapp.js';
|
|
22
23
|
export * from './image.js';
|
|
@@ -61,4 +62,4 @@ export * from './traffic.js';
|
|
|
61
62
|
export * from './user.js';
|
|
62
63
|
export * from './version.js';
|
|
63
64
|
export * from './webpush.js';
|
|
64
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
65
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90cy9kYXRhL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsb0JBQW9CLENBQUM7QUFDbkMsY0FBYyxjQUFjLENBQUM7QUFDN0IsY0FBYyxxQkFBcUIsQ0FBQztBQUNwQyxjQUFjLGlCQUFpQixDQUFDO0FBQ2hDLGNBQWMscUJBQXFCLENBQUM7QUFDcEMsY0FBYyxhQUFhLENBQUM7QUFDNUIsY0FBYyxnQkFBZ0IsQ0FBQztBQUMvQixjQUFjLGVBQWUsQ0FBQztBQUM5QixjQUFjLHVCQUF1QixDQUFDO0FBQ3RDLGNBQWMsaUJBQWlCLENBQUM7QUFDaEMsY0FBYyx5QkFBeUIsQ0FBQztBQUN4QyxjQUFjLDBCQUEwQixDQUFDO0FBQ3pDLGNBQWMsMEJBQTBCLENBQUM7QUFDekMsY0FBYyxnQkFBZ0IsQ0FBQztBQUMvQixjQUFjLFVBQVUsQ0FBQztBQUN6QixjQUFjLGFBQWEsQ0FBQztBQUM1QixjQUFjLGFBQWEsQ0FBQztBQUM1QixjQUFjLFlBQVksQ0FBQztBQUMzQixjQUFjLHVCQUF1QixDQUFDO0FBQ3RDLGNBQWMsbUJBQW1CLENBQUM7QUFDbEMsY0FBYyxjQUFjLENBQUM7QUFDN0IsY0FBYyxnQkFBZ0IsQ0FBQztBQUMvQixjQUFjLFlBQVksQ0FBQztBQUMzQixjQUFjLHFCQUFxQixDQUFDO0FBQ3BDLGNBQWMsc0JBQXNCLENBQUM7QUFDckMsY0FBYyw2QkFBNkIsQ0FBQztBQUM1QyxjQUFjLFdBQVcsQ0FBQztBQUMxQixjQUFjLHFCQUFxQixDQUFDO0FBQ3BDLGNBQWMscUJBQXFCLENBQUM7QUFDcEMsY0FBYyx5QkFBeUIsQ0FBQztBQUN4QyxjQUFjLHFCQUFxQixDQUFDO0FBQ3BDLGNBQWMseUJBQXlCLENBQUM7QUFDeEMsY0FBYyx1QkFBdUIsQ0FBQztBQUN0QyxjQUFjLHdCQUF3QixDQUFDO0FBQ3ZDLGNBQWMsc0JBQXNCLENBQUM7QUFDckMsY0FBYyxtQkFBbUIsQ0FBQztBQUNsQyxjQUFjLGtCQUFrQixDQUFDO0FBQ2pDLGNBQWMsd0JBQXdCLENBQUM7QUFFdkMsY0FBYyx3QkFBd0IsQ0FBQztBQUN2QyxjQUFjLHFCQUFxQixDQUFDO0FBQ3BDLGNBQWMscUJBQXFCLENBQUM7QUFDcEMsY0FBYyxlQUFlLENBQUM7QUFDOUIsY0FBYyx3QkFBd0IsQ0FBQztBQUN2QyxjQUFjLG9CQUFvQixDQUFDO0FBQ25DLGNBQWMsMEJBQTBCLENBQUM7QUFDekMsY0FBYyxxQkFBcUIsQ0FBQztBQUNwQyxjQUFjLDZCQUE2QixDQUFDO0FBQzVDLGNBQWMsYUFBYSxDQUFDO0FBQzVCLGNBQWMsZ0JBQWdCLENBQUM7QUFDL0IsY0FBYyxhQUFhLENBQUM7QUFDNUIsY0FBYyxhQUFhLENBQUM7QUFDNUIsY0FBYyxrQkFBa0IsQ0FBQztBQUNqQyxjQUFjLGVBQWUsQ0FBQztBQUM5QixjQUFjLHNCQUFzQixDQUFDO0FBQ3JDLGNBQWMsY0FBYyxDQUFDO0FBQzdCLGNBQWMsd0JBQXdCLENBQUM7QUFDdkMsY0FBYyxtQkFBbUIsQ0FBQztBQUNsQyxjQUFjLHFCQUFxQixDQUFDO0FBQ3BDLGNBQWMsYUFBYSxDQUFDO0FBQzVCLGNBQWMsb0JBQW9CLENBQUM7QUFDbkMsY0FBYyxjQUFjLENBQUM7QUFDN0IsY0FBYyxXQUFXLENBQUM7QUFDMUIsY0FBYyxjQUFjLENBQUM7QUFDN0IsY0FBYyxjQUFjLENBQUMifQ==
|
|
@@ -66,6 +66,8 @@ export declare const serviceRuntimeContract: Readonly<{
|
|
|
66
66
|
/** A node can run workloads only as an egress member of the protected authority, which admits at most this many. */
|
|
67
67
|
readonly maximumPinnedNodes: 256;
|
|
68
68
|
readonly maximumPlatformEndpoints: 64;
|
|
69
|
+
/** The largest `limit` `getServiceRuntimeSpecs` accepts; Cloudly refuses a larger one. */
|
|
70
|
+
readonly maximumSpecPageSize: 256;
|
|
69
71
|
/** The largest `limit` `getClusterRuntimeAssignments` accepts; Cloudly refuses a larger one. */
|
|
70
72
|
readonly maximumAssignmentPageSize: 256;
|
|
71
73
|
}>;
|
|
@@ -9,6 +9,8 @@ export const serviceRuntimeContract = Object.freeze({
|
|
|
9
9
|
/** A node can run workloads only as an egress member of the protected authority, which admits at most this many. */
|
|
10
10
|
maximumPinnedNodes: runtimeNetworkAuthorityContract.maximumEgressAuthorities,
|
|
11
11
|
maximumPlatformEndpoints: runtimeNetworkAuthorityContract.maximumPlatformEndpoints,
|
|
12
|
+
/** The largest `limit` `getServiceRuntimeSpecs` accepts; Cloudly refuses a larger one. */
|
|
13
|
+
maximumSpecPageSize: 256,
|
|
12
14
|
/** The largest `limit` `getClusterRuntimeAssignments` accepts; Cloudly refuses a larger one. */
|
|
13
15
|
maximumAssignmentPageSize: 256,
|
|
14
16
|
});
|
|
@@ -92,4 +94,4 @@ export const snapshotServiceRuntimeStatus = (value) => producerSafe(() => {
|
|
|
92
94
|
requireNetwork(item.state === 'refused' && isOneOf(serviceRuntimeRefusals, item.reason));
|
|
93
95
|
return { ...base, state: item.state, reason: item.reason };
|
|
94
96
|
});
|
|
95
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
97
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmljZXJ1bnRpbWUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90cy9kYXRhL3NlcnZpY2VydW50aW1lLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUlBLE9BQU8sRUFBRSwrQkFBK0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3hFLE9BQU8sRUFBRSxjQUFjLEVBQUUsZ0JBQWdCLEVBQUUsY0FBYyxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQzVILGNBQWMsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxZQUFZLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNoRyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsZ0JBQWdCLEVBQUUsa0JBQWtCLEVBQUUsdUJBQXVCLEVBQUUsa0JBQWtCLEVBQ2hILG9CQUFvQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUF3RDVELE1BQU0sQ0FBQyxNQUFNLHNCQUFzQixHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUM7SUFDbEQsc0JBQXNCLEVBQUUsRUFBRTtJQUMxQiwrRkFBK0Y7SUFDL0YsZUFBZSxFQUFFLEVBQUU7SUFDbkIsb0hBQW9IO0lBQ3BILGtCQUFrQixFQUFFLCtCQUErQixDQUFDLHdCQUF3QjtJQUM1RSx3QkFBd0IsRUFBRSwrQkFBK0IsQ0FBQyx3QkFBd0I7SUFDbEYsMEZBQTBGO0lBQzFGLG1CQUFtQixFQUFFLEdBQUc7SUFDeEIsZ0dBQWdHO0lBQ2hHLHlCQUF5QixFQUFFLEdBQUc7Q0FDdEIsQ0FBQyxDQUFDO0FBRVosTUFBTSw0QkFBNEIsR0FBRyxDQUFDLHNCQUFzQixFQUFFLFVBQVUsRUFBRSxpQkFBaUIsQ0FBVSxDQUFDO0FBQ3RHLE1BQU0sc0JBQXNCLEdBQUc7SUFDN0IseUJBQXlCLEVBQUUsc0JBQXNCLEVBQUUsb0JBQW9CLEVBQUUsc0JBQXNCO0lB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
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
import * as plugins from '../plugins.js';
|
|
2
|
+
import type { IIdentityCredential } from '../data/user.js';
|
|
3
|
+
import type { IClusterRuntime } from '../data/clusterruntime.js';
|
|
4
|
+
import type { IServiceRuntimeSpec } from '../data/serviceruntime.js';
|
|
5
|
+
import type { IFleetCutoverAcceptedEvidenceReference, IFleetCutoverCorestoreAdoptionReceipt, IFleetCutoverIngressAuthority, IFleetCutoverScope, IFleetCutoverScopeClassificationRequest, IFleetCutoverVolumeHandoffIntent, TFleetCutoverPhaseAdvance, TFleetCutoverRuntimeSpecRelease, TFleetCutoverVolumeFence } from '../data/fleetcutover.js';
|
|
6
|
+
export interface IReq_Any_Cloudly_GetFleetCutoverScope extends plugins.typedrequestInterfaces.implementsTR<plugins.typedrequestInterfaces.ITypedRequest, IReq_Any_Cloudly_GetFleetCutoverScope> {
|
|
7
|
+
method: 'getFleetCutoverScope';
|
|
8
|
+
request: {
|
|
9
|
+
identity: IIdentityCredential;
|
|
10
|
+
clusterId: string;
|
|
11
|
+
};
|
|
12
|
+
response: {
|
|
13
|
+
scope: IFleetCutoverScope | null;
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* The administrator classifies the exact current census candidate. Cloudly compares every entry
|
|
18
|
+
* with its current service, platform-service, credential, and storage authority before it may
|
|
19
|
+
* persist a complete scope; the request itself is no proof of those facts.
|
|
20
|
+
*/
|
|
21
|
+
export interface IReq_Admin_Cloudly_ClassifyFleetCutoverScope extends plugins.typedrequestInterfaces.implementsTR<plugins.typedrequestInterfaces.ITypedRequest, IReq_Admin_Cloudly_ClassifyFleetCutoverScope> {
|
|
22
|
+
method: 'classifyFleetCutoverScope';
|
|
23
|
+
request: {
|
|
24
|
+
identity: IIdentityCredential;
|
|
25
|
+
classification: IFleetCutoverScopeClassificationRequest;
|
|
26
|
+
};
|
|
27
|
+
response: {
|
|
28
|
+
scope: IFleetCutoverScope;
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Forward-only legal phase CAS. All receipt references are dereferenced by Cloudly in the same
|
|
33
|
+
* transaction; caller-supplied records or booleans never satisfy a cutover condition.
|
|
34
|
+
*/
|
|
35
|
+
export interface IReq_Admin_Cloudly_AdvanceFleetCutoverPhase extends plugins.typedrequestInterfaces.implementsTR<plugins.typedrequestInterfaces.ITypedRequest, IReq_Admin_Cloudly_AdvanceFleetCutoverPhase> {
|
|
36
|
+
method: 'advanceFleetCutoverPhase';
|
|
37
|
+
request: {
|
|
38
|
+
identity: IIdentityCredential;
|
|
39
|
+
advance: TFleetCutoverPhaseAdvance;
|
|
40
|
+
};
|
|
41
|
+
response: {
|
|
42
|
+
runtime: IClusterRuntime;
|
|
43
|
+
replayed: boolean;
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* The only cutover-specific hold release. Ingress releases first under an accepted empty public
|
|
48
|
+
* port policy; applications require the accepted ingress/port/route authority assembled later.
|
|
49
|
+
*/
|
|
50
|
+
export interface IReq_Admin_Cloudly_ReleaseFleetCutoverRuntimeSpec extends plugins.typedrequestInterfaces.implementsTR<plugins.typedrequestInterfaces.ITypedRequest, IReq_Admin_Cloudly_ReleaseFleetCutoverRuntimeSpec> {
|
|
51
|
+
method: 'releaseFleetCutoverRuntimeSpec';
|
|
52
|
+
request: {
|
|
53
|
+
identity: IIdentityCredential;
|
|
54
|
+
release: TFleetCutoverRuntimeSpecRelease;
|
|
55
|
+
};
|
|
56
|
+
response: {
|
|
57
|
+
spec: IServiceRuntimeSpec;
|
|
58
|
+
replayed: boolean;
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
export interface IReq_Any_Cloudly_GetFleetCutoverIngressAuthority extends plugins.typedrequestInterfaces.implementsTR<plugins.typedrequestInterfaces.ITypedRequest, IReq_Any_Cloudly_GetFleetCutoverIngressAuthority> {
|
|
62
|
+
method: 'getFleetCutoverIngressAuthority';
|
|
63
|
+
request: {
|
|
64
|
+
identity: IIdentityCredential;
|
|
65
|
+
clusterId: string;
|
|
66
|
+
};
|
|
67
|
+
response: {
|
|
68
|
+
authority: IFleetCutoverIngressAuthority | null;
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
/** Root-local only. Holding an intent creates negative storage authority and no runtime session. */
|
|
72
|
+
export interface IReq_PalletLocal_Pallet_HoldFleetCutoverVolumeFence extends plugins.typedrequestInterfaces.implementsTR<plugins.typedrequestInterfaces.ITypedRequest, IReq_PalletLocal_Pallet_HoldFleetCutoverVolumeFence> {
|
|
73
|
+
method: 'holdFleetCutoverVolumeFence';
|
|
74
|
+
request: {
|
|
75
|
+
fenceId: string;
|
|
76
|
+
handoffIntent: IFleetCutoverVolumeHandoffIntent;
|
|
77
|
+
};
|
|
78
|
+
response: {
|
|
79
|
+
fence: Extract<TFleetCutoverVolumeFence, {
|
|
80
|
+
state: 'held';
|
|
81
|
+
}>;
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
export interface IReq_PalletLocal_Pallet_GetFleetCutoverVolumeFence extends plugins.typedrequestInterfaces.implementsTR<plugins.typedrequestInterfaces.ITypedRequest, IReq_PalletLocal_Pallet_GetFleetCutoverVolumeFence> {
|
|
85
|
+
method: 'getFleetCutoverVolumeFence';
|
|
86
|
+
request: {
|
|
87
|
+
fenceId: string;
|
|
88
|
+
};
|
|
89
|
+
response: {
|
|
90
|
+
fence: TFleetCutoverVolumeFence | null;
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Pallet consumes the local fence only around a current accepted Corestore adoption result. The
|
|
95
|
+
* receipt carries the real ready storage-claim reference; the earlier handoff intent does not.
|
|
96
|
+
*/
|
|
97
|
+
export interface IReq_PalletLocal_Pallet_ConsumeFleetCutoverVolumeFence extends plugins.typedrequestInterfaces.implementsTR<plugins.typedrequestInterfaces.ITypedRequest, IReq_PalletLocal_Pallet_ConsumeFleetCutoverVolumeFence> {
|
|
98
|
+
method: 'consumeFleetCutoverVolumeFence';
|
|
99
|
+
request: {
|
|
100
|
+
fence: IFleetCutoverAcceptedEvidenceReference;
|
|
101
|
+
adoption: IFleetCutoverCorestoreAdoptionReceipt;
|
|
102
|
+
};
|
|
103
|
+
response: {
|
|
104
|
+
fence: Extract<TFleetCutoverVolumeFence, {
|
|
105
|
+
state: 'consumed';
|
|
106
|
+
}>;
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Corestore owns the one-shot initial lineage/RWO CAS. The local caller supplies the held fence
|
|
111
|
+
* and server-owned handoff intent; Corestore returns the claim only after its provider is ready.
|
|
112
|
+
*/
|
|
113
|
+
export interface IReq_Pallet_Corestore_AdoptFleetCutoverVolume extends plugins.typedrequestInterfaces.implementsTR<plugins.typedrequestInterfaces.ITypedRequest, IReq_Pallet_Corestore_AdoptFleetCutoverVolume> {
|
|
114
|
+
method: 'adoptFleetCutoverVolume';
|
|
115
|
+
request: {
|
|
116
|
+
handoffIntent: IFleetCutoverVolumeHandoffIntent;
|
|
117
|
+
palletFence: Extract<TFleetCutoverVolumeFence, {
|
|
118
|
+
state: 'held';
|
|
119
|
+
}>;
|
|
120
|
+
};
|
|
121
|
+
response: {
|
|
122
|
+
adoption: IFleetCutoverCorestoreAdoptionReceipt;
|
|
123
|
+
};
|
|
124
|
+
}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import * as plugins from '../plugins.js';
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmxlZXRjdXRvdmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vdHMvcmVxdWVzdHMvZmxlZXRjdXRvdmVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxPQUFPLE1BQU0sZUFBZSxDQUFDIn0=
|
|
@@ -14,6 +14,7 @@ import * as deploymentRequests from './deployment.js';
|
|
|
14
14
|
import * as dnsRequests from './dns.js';
|
|
15
15
|
import * as domainRequests from './domain.js';
|
|
16
16
|
import * as externalRegistryRequests from './externalregistry.js';
|
|
17
|
+
import * as fleetCutoverRequests from './fleetcutover.js';
|
|
17
18
|
import * as gatewayRequests from './gateway.js';
|
|
18
19
|
import * as hostedAppRequests from './hostedapp.js';
|
|
19
20
|
import * as identityRequests from './identity.js';
|
|
@@ -35,7 +36,7 @@ import * as statusRequests from './status.js';
|
|
|
35
36
|
import * as taskRequests from './task.js';
|
|
36
37
|
import * as versionRequests from './version.js';
|
|
37
38
|
import * as webPushRequests from './webpush.js';
|
|
38
|
-
export { adminRequests as admin, appStoreRequests as appstore, baremetalRequests as baremetal, baseOsRequests as baseos, backupRequests as backup, certificateRequests as certificate, clusterRequests as cluster, clusterIngressRequests as clusteringress, configRequests as config, coreMailRequests as coremail, coreMailAdminRequests as coremailAdmin, corestoreRequests as corestore, deploymentRequests as deployment, dnsRequests as dns, domainRequests as domain, externalRegistryRequests as externalRegistry, gatewayRequests as gateway, hostedAppRequests as hostedapp, identityRequests as identity, imageRequests as image, informRequests as inform, logRequests as log, mailRequests as mail, migrationRequests as migration, networkRequests as network, nodeRequests as node, palletRequests as pallet, platformRequests as platform, routingRequests as routing, runtimeSessionRequests as runtimesession, secretRequests as secret, serviceRequests as service, settingsRequests as settings, statusRequests as status, taskRequests as task, versionRequests as version, webPushRequests as webpush, };
|
|
39
|
+
export { adminRequests as admin, appStoreRequests as appstore, baremetalRequests as baremetal, baseOsRequests as baseos, backupRequests as backup, certificateRequests as certificate, clusterRequests as cluster, clusterIngressRequests as clusteringress, configRequests as config, coreMailRequests as coremail, coreMailAdminRequests as coremailAdmin, corestoreRequests as corestore, deploymentRequests as deployment, dnsRequests as dns, domainRequests as domain, externalRegistryRequests as externalRegistry, fleetCutoverRequests as fleetcutover, gatewayRequests as gateway, hostedAppRequests as hostedapp, identityRequests as identity, imageRequests as image, informRequests as inform, logRequests as log, mailRequests as mail, migrationRequests as migration, networkRequests as network, nodeRequests as node, palletRequests as pallet, platformRequests as platform, routingRequests as routing, runtimeSessionRequests as runtimesession, secretRequests as secret, serviceRequests as service, settingsRequests as settings, statusRequests as status, taskRequests as task, versionRequests as version, webPushRequests as webpush, };
|
|
39
40
|
export * from './inform.js';
|
|
40
41
|
export * from './hostedapp.js';
|
|
41
42
|
export * from './mail.js';
|
|
@@ -15,6 +15,7 @@ import * as deploymentRequests from './deployment.js';
|
|
|
15
15
|
import * as dnsRequests from './dns.js';
|
|
16
16
|
import * as domainRequests from './domain.js';
|
|
17
17
|
import * as externalRegistryRequests from './externalregistry.js';
|
|
18
|
+
import * as fleetCutoverRequests from './fleetcutover.js';
|
|
18
19
|
import * as gatewayRequests from './gateway.js';
|
|
19
20
|
import * as hostedAppRequests from './hostedapp.js';
|
|
20
21
|
import * as identityRequests from './identity.js';
|
|
@@ -36,9 +37,9 @@ import * as statusRequests from './status.js';
|
|
|
36
37
|
import * as taskRequests from './task.js';
|
|
37
38
|
import * as versionRequests from './version.js';
|
|
38
39
|
import * as webPushRequests from './webpush.js';
|
|
39
|
-
export { adminRequests as admin, appStoreRequests as appstore, baremetalRequests as baremetal, baseOsRequests as baseos, backupRequests as backup, certificateRequests as certificate, clusterRequests as cluster, clusterIngressRequests as clusteringress, configRequests as config, coreMailRequests as coremail, coreMailAdminRequests as coremailAdmin, corestoreRequests as corestore, deploymentRequests as deployment, dnsRequests as dns, domainRequests as domain, externalRegistryRequests as externalRegistry, gatewayRequests as gateway, hostedAppRequests as hostedapp, identityRequests as identity, imageRequests as image, informRequests as inform, logRequests as log, mailRequests as mail, migrationRequests as migration, networkRequests as network, nodeRequests as node, palletRequests as pallet, platformRequests as platform, routingRequests as routing, runtimeSessionRequests as runtimesession, secretRequests as secret, serviceRequests as service, settingsRequests as settings, statusRequests as status, taskRequests as task, versionRequests as version, webPushRequests as webpush, };
|
|
40
|
+
export { adminRequests as admin, appStoreRequests as appstore, baremetalRequests as baremetal, baseOsRequests as baseos, backupRequests as backup, certificateRequests as certificate, clusterRequests as cluster, clusterIngressRequests as clusteringress, configRequests as config, coreMailRequests as coremail, coreMailAdminRequests as coremailAdmin, corestoreRequests as corestore, deploymentRequests as deployment, dnsRequests as dns, domainRequests as domain, externalRegistryRequests as externalRegistry, fleetCutoverRequests as fleetcutover, gatewayRequests as gateway, hostedAppRequests as hostedapp, identityRequests as identity, imageRequests as image, informRequests as inform, logRequests as log, mailRequests as mail, migrationRequests as migration, networkRequests as network, nodeRequests as node, palletRequests as pallet, platformRequests as platform, routingRequests as routing, runtimeSessionRequests as runtimesession, secretRequests as secret, serviceRequests as service, settingsRequests as settings, statusRequests as status, taskRequests as task, versionRequests as version, webPushRequests as webpush, };
|
|
40
41
|
export * from './inform.js';
|
|
41
42
|
export * from './hostedapp.js';
|
|
42
43
|
export * from './mail.js';
|
|
43
44
|
export * from './webpush.js';
|
|
44
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
45
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90cy9yZXF1ZXN0cy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLGVBQWUsQ0FBQztBQUV6QyxPQUFPLEtBQUssYUFBYSxNQUFNLFlBQVksQ0FBQztBQUM1QyxPQUFPLEtBQUssZ0JBQWdCLE1BQU0sZUFBZSxDQUFDO0FBQ2xELE9BQU8sS0FBSyxpQkFBaUIsTUFBTSxnQkFBZ0IsQ0FBQztBQUNwRCxPQUFPLEtBQUssY0FBYyxNQUFNLGFBQWEsQ0FBQztBQUM5QyxPQUFPLEtBQUssY0FBYyxNQUFNLGFBQWEsQ0FBQztBQUM5QyxPQUFPLEtBQUssbUJBQW1CLE1BQU0sa0JBQWtCLENBQUM7QUFDeEQsT0FBTyxLQUFLLGVBQWUsTUFBTSxjQUFjLENBQUM7QUFDaEQsT0FBTyxLQUFLLHNCQUFzQixNQUFNLHFCQUFxQixDQUFDO0FBQzlELE9BQU8sS0FBSyxjQUFjLE1BQU0sYUFBYSxDQUFDO0FBQzlDLE9BQU8sS0FBSyxnQkFBZ0IsTUFBTSxlQUFlLENBQUM7QUFDbEQsT0FBTyxLQUFLLHFCQUFxQixNQUFNLHFCQUFxQixDQUFDO0FBQzdELE9BQU8sS0FBSyxpQkFBaUIsTUFBTSxnQkFBZ0IsQ0FBQztBQUNwRCxPQUFPLEtBQUssa0JBQWtCLE1BQU0saUJBQWlCLENBQUM7QUFDdEQsT0FBTyxLQUFLLFdBQVcsTUFBTSxVQUFVLENBQUM7QUFDeEMsT0FBTyxLQUFLLGNBQWMsTUFBTSxhQUFhLENBQUM7QUFDOUMsT0FBTyxLQUFLLHdCQUF3QixNQUFNLHVCQUF1QixDQUFDO0FBQ2xFLE9BQU8sS0FBSyxvQkFBb0IsTUFBTSxtQkFBbUIsQ0FBQztBQUMxRCxPQUFPLEtBQUssZUFBZSxNQUFNLGNBQWMsQ0FBQztBQUNoRCxPQUFPLEtBQUssaUJBQWlCLE1BQU0sZ0JBQWdCLENBQUM7QUFDcEQsT0FBTyxLQUFLLGdCQUFnQixNQUFNLGVB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
|
|
@@ -270,9 +270,10 @@ export interface IRequest_Any_Cloudly_DeleteServiceById extends plugins.typedreq
|
|
|
270
270
|
/**
|
|
271
271
|
* Writes the complete runtime spec of one service.
|
|
272
272
|
*
|
|
273
|
-
* `expectedRevision` is the revision the caller read
|
|
274
|
-
* spec; any other stored revision refuses the write.
|
|
275
|
-
* service and answers with the stored spec at its new
|
|
273
|
+
* `expectedRevision` is the revision the caller read for the target `(serviceId, spec.clusterId)`,
|
|
274
|
+
* or `null` when that target has never had a spec; any other stored revision refuses the write.
|
|
275
|
+
* Cloudly copies the organization from the service and answers with the stored spec at its new
|
|
276
|
+
* target-local revision.
|
|
276
277
|
*/
|
|
277
278
|
export interface IRequest_Any_Cloudly_SetServiceRuntimeSpec extends plugins.typedrequestInterfaces.implementsTR<plugins.typedrequestInterfaces.ITypedRequest, IRequest_Any_Cloudly_SetServiceRuntimeSpec> {
|
|
278
279
|
method: 'setServiceRuntimeSpec';
|
|
@@ -287,8 +288,19 @@ export interface IRequest_Any_Cloudly_SetServiceRuntimeSpec extends plugins.type
|
|
|
287
288
|
};
|
|
288
289
|
}
|
|
289
290
|
/**
|
|
290
|
-
*
|
|
291
|
-
*
|
|
291
|
+
* The named refusal data when a scalar runtime-spec read finds more than one cluster target.
|
|
292
|
+
*
|
|
293
|
+
* This travels as `TypedResponseError.errorData`. The condition needs an explicit cluster or the
|
|
294
|
+
* paged read, never a retry of the same ambiguous request.
|
|
295
|
+
*/
|
|
296
|
+
export interface IServiceRuntimeSpecAmbiguityErrorData {
|
|
297
|
+
code: 'service-runtime-spec-ambiguous';
|
|
298
|
+
retryable: false;
|
|
299
|
+
}
|
|
300
|
+
/**
|
|
301
|
+
* The only runtime spec of a service and the producer's verdict on it. Zero targets answer both
|
|
302
|
+
* members as `null`; one target answers it, with `status: null` until the producer first decides it.
|
|
303
|
+
* More than one target refuses with `IServiceRuntimeSpecAmbiguityErrorData`; Cloudly never picks one.
|
|
292
304
|
*/
|
|
293
305
|
export interface IRequest_Any_Cloudly_GetServiceRuntimeSpec extends plugins.typedrequestInterfaces.implementsTR<plugins.typedrequestInterfaces.ITypedRequest, IRequest_Any_Cloudly_GetServiceRuntimeSpec> {
|
|
294
306
|
method: 'getServiceRuntimeSpec';
|
|
@@ -304,6 +316,63 @@ export interface IRequest_Any_Cloudly_GetServiceRuntimeSpec extends plugins.type
|
|
|
304
316
|
status: IServiceRuntimeStatus | null;
|
|
305
317
|
};
|
|
306
318
|
}
|
|
319
|
+
/** One service's runtime spec for one exact cluster target, or no such target. */
|
|
320
|
+
export interface IRequest_Any_Cloudly_GetServiceRuntimeSpecForCluster extends plugins.typedrequestInterfaces.implementsTR<plugins.typedrequestInterfaces.ITypedRequest, IRequest_Any_Cloudly_GetServiceRuntimeSpecForCluster> {
|
|
321
|
+
method: 'getServiceRuntimeSpecForCluster';
|
|
322
|
+
request: {
|
|
323
|
+
identity: IIdentity;
|
|
324
|
+
serviceId: string;
|
|
325
|
+
clusterId: string;
|
|
326
|
+
};
|
|
327
|
+
response: {
|
|
328
|
+
spec: null;
|
|
329
|
+
status: null;
|
|
330
|
+
} | {
|
|
331
|
+
spec: IServiceRuntimeSpec;
|
|
332
|
+
status: IServiceRuntimeStatus | null;
|
|
333
|
+
};
|
|
334
|
+
}
|
|
335
|
+
/**
|
|
336
|
+
* Every cluster target of one service, ordered by cluster id and read a bounded page at a time.
|
|
337
|
+
* `cursor` is opaque and `limit` runs from 1 through `serviceRuntimeContract.maximumSpecPageSize`;
|
|
338
|
+
* Cloudly refuses any other limit. A returned status belongs to the spec beside it.
|
|
339
|
+
*/
|
|
340
|
+
export interface IRequest_Any_Cloudly_GetServiceRuntimeSpecs extends plugins.typedrequestInterfaces.implementsTR<plugins.typedrequestInterfaces.ITypedRequest, IRequest_Any_Cloudly_GetServiceRuntimeSpecs> {
|
|
341
|
+
method: 'getServiceRuntimeSpecs';
|
|
342
|
+
request: {
|
|
343
|
+
identity: IIdentity;
|
|
344
|
+
serviceId: string;
|
|
345
|
+
cursor: string | null;
|
|
346
|
+
limit: number;
|
|
347
|
+
};
|
|
348
|
+
response: {
|
|
349
|
+
entries: Array<{
|
|
350
|
+
spec: IServiceRuntimeSpec;
|
|
351
|
+
status: IServiceRuntimeStatus | null;
|
|
352
|
+
}>;
|
|
353
|
+
nextCursor: string | null;
|
|
354
|
+
};
|
|
355
|
+
}
|
|
356
|
+
/**
|
|
357
|
+
* Removes one exact cluster target at the revision the administrator read.
|
|
358
|
+
*
|
|
359
|
+
* Cloudly derives every safety fact itself and fences them in the removal transaction: the current
|
|
360
|
+
* spec revision equals `expectedRevision`, that spec is held, every slot of this service on this
|
|
361
|
+
* cluster is fully settled and released, and the cluster's current phase still gives the spec
|
|
362
|
+
* producer authority. The caller supplies no phase, settlement, release or authority proof.
|
|
363
|
+
*/
|
|
364
|
+
export interface IRequest_Any_Cloudly_RemoveServiceRuntimeSpecForCluster extends plugins.typedrequestInterfaces.implementsTR<plugins.typedrequestInterfaces.ITypedRequest, IRequest_Any_Cloudly_RemoveServiceRuntimeSpecForCluster> {
|
|
365
|
+
method: 'removeServiceRuntimeSpecForCluster';
|
|
366
|
+
request: {
|
|
367
|
+
identity: IIdentity;
|
|
368
|
+
serviceId: string;
|
|
369
|
+
clusterId: string;
|
|
370
|
+
expectedRevision: number;
|
|
371
|
+
};
|
|
372
|
+
response: {
|
|
373
|
+
removed: true;
|
|
374
|
+
};
|
|
375
|
+
}
|
|
307
376
|
/** Every current runtime assignment of one service, one per replica slot. */
|
|
308
377
|
export interface IRequest_Any_Cloudly_GetServiceRuntimeAssignments extends plugins.typedrequestInterfaces.implementsTR<plugins.typedrequestInterfaces.ITypedRequest, IRequest_Any_Cloudly_GetServiceRuntimeAssignments> {
|
|
309
378
|
method: 'getServiceRuntimeAssignments';
|
package/package.json
CHANGED
package/readme.md
CHANGED
|
@@ -173,6 +173,10 @@ bodies and a pallet node posts this one, and the family retires with coreflow
|
|
|
173
173
|
rather than with this release. `ISparkSwarmNodeHeartbeatRequest` is now owned here,
|
|
174
174
|
so Cloudly and Spark no longer carry private copies of it, and every Swarm-era body
|
|
175
175
|
— request and answer alike — carries `protocol` and is judged in the same order.
|
|
176
|
+
For fleet cutover, that same observation may carry a bounded local Docker snapshot from the
|
|
177
|
+
reporting node and, only when control is available, a manager-visible service/task snapshot. The
|
|
178
|
+
existing node-token, reporter-session, sequence, digest and accepted-receipt rules authenticate
|
|
179
|
+
both; no separate fleet-report route exists.
|
|
176
180
|
|
|
177
181
|
Each of the four routes has its validator here, so a server never writes its own
|
|
178
182
|
member checks: `data.validateSparkSwarmNodeHeartbeatRequest`,
|
|
@@ -1035,6 +1039,105 @@ the record. Which phase may follow which belongs to the cutover, whose requests
|
|
|
1035
1039
|
(`service-multi-cluster-scope`, `service-authority-unsupported`, `platform-binding-present`) name
|
|
1036
1040
|
the `serviceId`.
|
|
1037
1041
|
|
|
1042
|
+
### Fleet Runtime Cutover Authority
|
|
1043
|
+
|
|
1044
|
+
`data.IFleetCutoverCensus` is Cloudly's accepted, Spark-authenticated Docker census. It carries
|
|
1045
|
+
only immutable Docker service/spec identity, exact mode and replica count, hashed constraint
|
|
1046
|
+
identity, the ownership labels used by the cutover, exact tasks and value-free mounts. A manager
|
|
1047
|
+
reports only manager-visible `/nodes`, `/services` and `/tasks` state. Every node separately reports
|
|
1048
|
+
its own complete local physical-container list through the existing authenticated
|
|
1049
|
+
`sparkSwarmNodeContracts.swarmObservation` route; a manager never attests remote Docker-daemon
|
|
1050
|
+
contents. The local list is fenced by exact sorted container-ID set digests read before and after
|
|
1051
|
+
all bounded inspect calls, so a container appearing or disappearing during inspection refuses the
|
|
1052
|
+
snapshot. The accepted census references two consecutive manager observations with identical
|
|
1053
|
+
Swarm and inventory digests and one current accepted local observation for every target node.
|
|
1054
|
+
Every reference preserves the authenticating node, credential generation, reporter session,
|
|
1055
|
+
sequence, observation time and fixed `freshUntil`; assembling a later census cannot renew an old
|
|
1056
|
+
observation. It never transports environment, arbitrary labels, mount paths, volume names,
|
|
1057
|
+
registry credentials or secret values.
|
|
1058
|
+
|
|
1059
|
+
Mount identity has three explicit canonical domains. `serve.zone/fleet-cutover-mount-source-identity`
|
|
1060
|
+
hashes `{ type, source }`, where `source` is the exact UTF-8 `Mount.Source` returned by Docker,
|
|
1061
|
+
including an empty string. `serve.zone/fleet-cutover-mount-target-identity` hashes `{ target }`,
|
|
1062
|
+
where `target` is the exact UTF-8 `Mount.Destination`. `serve.zone/fleet-cutover-mount-identity`
|
|
1063
|
+
then hashes `{ type, classification, sourceIdentityDigest, targetIdentityDigest, readOnly }`.
|
|
1064
|
+
All three use strict canonical JSON and no case, slash, path, volume-name or alias normalization.
|
|
1065
|
+
Only the digests and classification cross the wire. `unknown` type/classification remains visible
|
|
1066
|
+
and prevents Cloudly accepting a complete scope; missing, unmanaged or conflicting service/container
|
|
1067
|
+
ownership also prevents completion rather than omitting the container. Structural validation does
|
|
1068
|
+
not establish freshness, authentication, manager consensus, ownership or Docker truth; Cloudly
|
|
1069
|
+
establishes those policy facts while dereferencing the accepted observations.
|
|
1070
|
+
|
|
1071
|
+
`data.IFleetCutoverScope` is the server-owned authoritative service set. It starts `incomplete`;
|
|
1072
|
+
every `complete` entry binds an exact Docker service id to the current service authority and an
|
|
1073
|
+
accepted classification authority. `unknown` cannot appear in a complete structural snapshot.
|
|
1074
|
+
An authenticated administrator may submit `IFleetCutoverScopeClassificationRequest` against the
|
|
1075
|
+
exact current census, including for an unlabeled legacy Coretraffic or Corestore service. Cloudly
|
|
1076
|
+
still compares the declaration with current service, platform-service, credential, storage and
|
|
1077
|
+
census authority before accepting it. A classification is an operator decision, never a client
|
|
1078
|
+
proof boolean or a service-name inference.
|
|
1079
|
+
|
|
1080
|
+
`data.TFleetCutoverPhaseAdvance` permits only `swarm -> draining -> switching -> pallet` and carries
|
|
1081
|
+
opaque references to owner-accepted records. `requests.fleetcutover.advanceFleetCutoverPhase`
|
|
1082
|
+
dereferences and joins them inside Cloudly's phase CAS. Leaving `draining` requires the accepted
|
|
1083
|
+
fresh census/quiescence decision, the complete current scope and target set, every runtime spec
|
|
1084
|
+
held, and the accepted set of root-local volume fences. Entering `pallet` still requires every
|
|
1085
|
+
spec held. `switching` grants session and network preparation only; it runs no service. Structural
|
|
1086
|
+
snapshots enforce the closed forward shape but do not claim the referenced records exist or are
|
|
1087
|
+
current.
|
|
1088
|
+
|
|
1089
|
+
Before the first `swarm -> draining` CAS, Spark starts the replacement Coreflow32 relay as the
|
|
1090
|
+
exact Docker service/spec/image, delivers only its new generation-bearing credential and obtains
|
|
1091
|
+
the live accepted relay registration. Cloudly then revokes the old credential and accepts the
|
|
1092
|
+
current Spark bundle/unit/configuration and old-mode refusal evidence. This is a pre-switch Docker
|
|
1093
|
+
owner; it is never represented as a Pallet assignment. Downstream service holds and storage fences
|
|
1094
|
+
therefore depend on a live relay without requiring assignment authority that cannot exist yet.
|
|
1095
|
+
|
|
1096
|
+
The storage bootstrap has two different authorities. `IFleetCutoverVolumeHandoffIntent` is
|
|
1097
|
+
Cloudly's accepted pre-switch statement of exact service, volume, source-lineage and storage-request
|
|
1098
|
+
identity. It also binds the exact persistent `mountIdentityDigest` and accepted source-node
|
|
1099
|
+
observation. It is not a ready `IRuntimeStorageClaim`. Pallet persists a root-local
|
|
1100
|
+
`TFleetCutoverVolumeFence` in `held` state while the cluster is draining. That state carries no
|
|
1101
|
+
claim, session, assignment, attachment, reservation, confirmation or execution authority, and the
|
|
1102
|
+
storage owner must block all those operations for the volume. After the cluster reaches `pallet`,
|
|
1103
|
+
Corestore performs its one-shot initial lineage/ReadWriteOnce CAS for the same mount identity under
|
|
1104
|
+
that held native fence and returns `IFleetCutoverCorestoreAdoptionReceipt`, which for the first time
|
|
1105
|
+
binds the real ready
|
|
1106
|
+
`IRuntimeStorageClaim` reference. Only that exact accepted receipt can consume the Pallet fence.
|
|
1107
|
+
This separation prevents a pre-switch fence from fabricating provider readiness merely to satisfy
|
|
1108
|
+
cutover ordering.
|
|
1109
|
+
|
|
1110
|
+
`IFleetCutoverCoreflowRetirementEvidence` binds the real pre-switch Docker Coreflow32 relay by exact
|
|
1111
|
+
service ID, container ID, spec version/spec digest and image digest to accepted manager and local
|
|
1112
|
+
node observations. It requires no Pallet assignment. Cloudly dereferences those observations to
|
|
1113
|
+
require a live exact container without Docker/cgroup mounts, then joins its generation-bearing
|
|
1114
|
+
relay credential and accepted live registration to the current Spark credential, bundle, unit and
|
|
1115
|
+
accepted observation. It separately binds invalidation of the
|
|
1116
|
+
legacy credential, refusal of the old callable mode, and Spark's configuration CAS. The legacy
|
|
1117
|
+
source is identified by SHA-256 and may be `retained-inert` or `removed`; deletion and secure
|
|
1118
|
+
erasure are not cutover requirements. Its exact owner generation is retained with that disposition.
|
|
1119
|
+
Retained recovery evidence is valid only while the released
|
|
1120
|
+
owner cannot consume it into live mode and the old credential remains revoked.
|
|
1121
|
+
|
|
1122
|
+
The post-pallet order is represented without a second route or publication model. First Cloudly
|
|
1123
|
+
releases only the new ingress spec under an accepted empty published-port policy. It then accepts
|
|
1124
|
+
the existing cluster-ingress registration and route-table revision, exact Spark evidence that the
|
|
1125
|
+
old ingress is absent, the current source and target publication records and owning port-transfer
|
|
1126
|
+
receipt, and a readback of the current route revision as `IFleetCutoverIngressAuthority`. Only an
|
|
1127
|
+
application release may cite that authority. The legacy Docker Coretraffic instance therefore
|
|
1128
|
+
remains through `switching`; the new ingress runs without public ports before exact port ownership
|
|
1129
|
+
moves, and applications remain held until the new authoritative route is read back.
|
|
1130
|
+
|
|
1131
|
+
The owner methods live under `requests.fleetcutover`: administrator scope classification and
|
|
1132
|
+
forward phase CAS, root-local Pallet volume-fence hold/read/
|
|
1133
|
+
consume, one-shot Corestore adoption, ingress-authority read, and ingress/application spec release.
|
|
1134
|
+
Spark transports local and manager evidence through its existing authenticated Swarm-observation
|
|
1135
|
+
route, and Cloudly assembles census and Coreflow-retirement records from accepted owner state; there
|
|
1136
|
+
is no caller-supplied census or retirement proof endpoint.
|
|
1137
|
+
Accepted evidence references are opaque `{ id, generation, digest }` records. They contain no
|
|
1138
|
+
secret bytes and gain meaning only when the named server owner dereferences them under current
|
|
1139
|
+
authorization and policy.
|
|
1140
|
+
|
|
1038
1141
|
### Service Runtime Specs And Status
|
|
1039
1142
|
|
|
1040
1143
|
`data.IServiceRuntimeSpec` is what Cloudly runs for one service on a Pallet cluster:
|
|
@@ -1055,10 +1158,32 @@ an operator's service edit.
|
|
|
1055
1158
|
with sorted unique endpoint ids.
|
|
1056
1159
|
|
|
1057
1160
|
`snapshotServiceRuntimeSpec` checks all of that; whether the cluster, the nodes and the endpoints
|
|
1058
|
-
exist is Cloudly's.
|
|
1059
|
-
|
|
1060
|
-
`
|
|
1061
|
-
|
|
1161
|
+
exist is Cloudly's. One canonical service may have one runtime target on each of several clusters.
|
|
1162
|
+
Every public target keeps the same `IServiceRuntimeSpec`: `id` is the exact service id and
|
|
1163
|
+
`clusterId` names that target. Cloudly's private persistence joins those two values; no composite
|
|
1164
|
+
public service id is introduced.
|
|
1165
|
+
|
|
1166
|
+
`requests.service.setServiceRuntimeSpec { identity, serviceId, expectedRevision, spec }` writes
|
|
1167
|
+
`TServiceRuntimeSpecWritableData`, and Cloudly copies the organization from the service. Its
|
|
1168
|
+
compare-and-swap is for `(serviceId, spec.clusterId)`: `null` means that exact target is absent, and
|
|
1169
|
+
each target advances its own revision. The request bytes and public spec shape are unchanged.
|
|
1170
|
+
|
|
1171
|
+
`getServiceRuntimeSpecForCluster { identity, serviceId, clusterId }` reads one exact target.
|
|
1172
|
+
`getServiceRuntimeSpecs { identity, serviceId, cursor, limit }` reads targets in cluster-id order,
|
|
1173
|
+
with an opaque cursor and a limit from 1 through `serviceRuntimeContract.maximumSpecPageSize`.
|
|
1174
|
+
Both reads answer each spec with its producer status, which is `null` until the producer first
|
|
1175
|
+
decides the spec. A status never comes without its spec.
|
|
1176
|
+
|
|
1177
|
+
The original `getServiceRuntimeSpec { identity, serviceId }` remains a scalar compatibility read:
|
|
1178
|
+
zero targets answer `{ spec: null, status: null }`, and one target answers it. More than one target
|
|
1179
|
+
is refused with `IServiceRuntimeSpecAmbiguityErrorData { code: 'service-runtime-spec-ambiguous',
|
|
1180
|
+
retryable: false }` in `TypedResponseError.errorData`; Cloudly never selects a target implicitly.
|
|
1181
|
+
|
|
1182
|
+
`removeServiceRuntimeSpecForCluster { identity, serviceId, clusterId, expectedRevision }` removes
|
|
1183
|
+
one exact target only after Cloudly transactionally derives and fences all authority and safety
|
|
1184
|
+
facts: the revision still matches, the target is held, every target slot is fully settled and
|
|
1185
|
+
released, and the cluster's current phase still belongs to the spec producer. Callers provide no
|
|
1186
|
+
phase, settlement, release or authority booleans or evidence.
|
|
1062
1187
|
|
|
1063
1188
|
`data.IServiceRuntimeStatus { id, specRevision, state, reason, changedAt }` is the producer's verdict
|
|
1064
1189
|
on one spec revision, and each reason belongs to exactly one state. `converged` and `converging`
|