-
Notifications
You must be signed in to change notification settings - Fork 4
Expand file tree
/
Copy pathReplicationsClient.cs
More file actions
212 lines (197 loc) · 7.77 KB
/
Copy pathReplicationsClient.cs
File metadata and controls
212 lines (197 loc) · 7.77 KB
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
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
using Weaviate.Client.Models;
namespace Weaviate.Client;
/// <summary>
/// The replications client class
/// </summary>
public class ReplicationsClient
{
/// <summary>
/// The rest client
/// </summary>
private readonly Rest.WeaviateRestClient _restClient;
/// <summary>
/// Initializes a new instance of the <see cref="ReplicationsClient"/> class
/// </summary>
/// <param name="restClient">The rest client</param>
internal ReplicationsClient(Rest.WeaviateRestClient restClient)
{
_restClient = restClient;
}
/// <summary>
/// Get details of a specific replication operation by ID
/// </summary>
/// <param name="id">The unique identifier of the replication operation</param>
/// <param name="includeHistory">Whether to include status history</param>
/// <param name="cancellationToken">Cancellation token</param>
/// <returns>The replication operation, or null if not found</returns>
public async Task<ReplicationOperation?> Get(
Guid id,
bool includeHistory = false,
CancellationToken cancellationToken = default
)
{
var dto = await _restClient.ReplicationDetailsAsync(id, includeHistory, cancellationToken);
return dto is null ? null : ToModel(dto);
}
/// <summary>
/// List all replication operations with optional filters
/// </summary>
/// <param name="collection">Filter by collection name</param>
/// <param name="shard">Filter by shard name</param>
/// <param name="targetNode">Filter by target node name</param>
/// <param name="includeHistory">Whether to include status history</param>
/// <param name="cancellationToken">Cancellation token</param>
/// <returns>List of replication operations matching the filters</returns>
public async Task<IEnumerable<ReplicationOperation>> List(
string? collection = null,
string? shard = null,
string? targetNode = null,
bool includeHistory = false,
CancellationToken cancellationToken = default
)
{
var dtos = await _restClient.ListReplicationsAsync(
collection,
shard,
targetNode,
includeHistory,
cancellationToken
);
return dtos.Select(ToModel);
}
/// <summary>
/// List all replication operations (includes status history)
/// </summary>
/// <param name="cancellationToken">Cancellation token</param>
/// <returns>List of all replication operations</returns>
public async Task<IEnumerable<ReplicationOperation>> ListAll(
CancellationToken cancellationToken = default
)
{
return await List(includeHistory: true, cancellationToken: cancellationToken);
}
/// <summary>
/// Cancel a replication operation
/// </summary>
/// <param name="id">The unique identifier of the operation to cancel</param>
/// <param name="cancellationToken">Cancellation token</param>
public async Task Cancel(Guid id, CancellationToken cancellationToken = default)
{
await _restClient.CancelReplicationAsync(id, cancellationToken);
}
/// <summary>
/// Delete a replication operation
/// </summary>
/// <param name="id">The unique identifier of the operation to delete</param>
/// <param name="cancellationToken">Cancellation token</param>
public async Task Delete(Guid id, CancellationToken cancellationToken = default)
{
await _restClient.DeleteReplicationAsync(id, cancellationToken);
}
/// <summary>
/// Delete all replication operations
/// </summary>
/// <param name="cancellationToken">Cancellation token</param>
public async Task DeleteAll(CancellationToken cancellationToken = default)
{
await _restClient.DeleteAllReplicationsAsync(cancellationToken);
}
/// <summary>
/// Returns the model using the specified dto
/// </summary>
/// <param name="dto">The dto</param>
/// <returns>The replication operation</returns>
internal static ReplicationOperation ToModel(
Rest.Dto.ReplicationReplicateDetailsReplicaResponse dto
)
{
return new ReplicationOperation(
Id: dto.Id,
Collection: dto.Collection ?? string.Empty,
Shard: dto.Shard ?? string.Empty,
SourceNode: dto.SourceNode ?? string.Empty,
TargetNode: dto.TargetNode ?? string.Empty,
Type: ParseReplicationType(dto.Type),
Status: ParseStatus(dto.Status),
WhenStartedUnixMs: dto.WhenStartedUnixMs,
Uncancelable: dto.Uncancelable,
ScheduledForCancel: dto.ScheduledForCancel,
ScheduledForDelete: dto.ScheduledForDelete,
StatusHistory: dto.StatusHistory?.Select(ParseStatus).ToList()
);
}
/// <summary>
/// Parses the replication type using the specified type
/// </summary>
/// <param name="type">The type</param>
/// <returns>The replication type</returns>
private static ReplicationType ParseReplicationType(
Rest.Dto.ReplicationReplicateDetailsReplicaResponseType type
)
{
return type == Rest.Dto.ReplicationReplicateDetailsReplicaResponseType.MOVE
? ReplicationType.Move
: ReplicationType.Copy;
}
/// <summary>
/// Parses the status using the specified status
/// </summary>
/// <param name="status">The status</param>
/// <returns>The replication operation status</returns>
private static ReplicationOperationStatus ParseStatus(
Rest.Dto.ReplicationReplicateDetailsReplicaStatus? status
)
{
if (status is null)
{
return new ReplicationOperationStatus(ReplicationOperationState.Registered, null, null);
}
return new ReplicationOperationStatus(
State: ParseState(status.State),
WhenStartedUnixMs: status.WhenStartedUnixMs,
Errors: status.Errors?.Select(ParseError).ToList()
);
}
/// <summary>
/// Parses the state using the specified state
/// </summary>
/// <param name="state">The state</param>
/// <returns>The replication operation state</returns>
private static ReplicationOperationState ParseState(
Rest.Dto.ReplicationReplicateDetailsReplicaStatusState? state
)
{
return state switch
{
Rest.Dto.ReplicationReplicateDetailsReplicaStatusState.REGISTERED =>
ReplicationOperationState.Registered,
Rest.Dto.ReplicationReplicateDetailsReplicaStatusState.HYDRATING =>
ReplicationOperationState.Hydrating,
Rest.Dto.ReplicationReplicateDetailsReplicaStatusState.FINALIZING =>
ReplicationOperationState.Finalizing,
Rest.Dto.ReplicationReplicateDetailsReplicaStatusState.INTEGRATING =>
ReplicationOperationState.Integrating,
Rest.Dto.ReplicationReplicateDetailsReplicaStatusState.DEHYDRATING =>
ReplicationOperationState.Dehydrating,
Rest.Dto.ReplicationReplicateDetailsReplicaStatusState.READY =>
ReplicationOperationState.Ready,
Rest.Dto.ReplicationReplicateDetailsReplicaStatusState.CANCELLED =>
ReplicationOperationState.Cancelled,
_ => ReplicationOperationState.Registered,
};
}
/// <summary>
/// Parses the error using the specified error
/// </summary>
/// <param name="error">The error</param>
/// <returns>The replication operation error</returns>
private static ReplicationOperationError ParseError(
Rest.Dto.ReplicationReplicateDetailsReplicaStatusError error
)
{
return new ReplicationOperationError(
WhenErroredUnixMs: error.WhenErroredUnixMs ?? 0,
Message: error.Message ?? string.Empty
);
}
}