Skip to content

Commit 30764a4

Browse files
committed
Bump downstairs repair service to version 2
This adds the debug /memory endpoint to the repair server. It's not needed for repair, and none of the actual repair protocol changed.
1 parent b880451 commit 30764a4

5 files changed

Lines changed: 168 additions & 8 deletions

File tree

downstairs-api/src/lib.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ api_versions!([
2323
// | example for the next person.
2424
// v
2525
// (next_int, IDENT),
26+
(2, MEMORY),
2627
(1, INITIAL),
2728
]);
2829

@@ -127,6 +128,7 @@ pub trait CrucibleDownstairsRepairApi {
127128
#[endpoint {
128129
method = GET,
129130
path = "/memory",
131+
versions = VERSION_MEMORY..,
130132
}]
131133
async fn get_memory(
132134
rqctx: RequestContext<Self::Context>,

downstairs/src/repair.rs

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,9 @@ use std::sync::Arc;
55
use crucible_downstairs_api::*;
66
use crucible_downstairs_types::repair::{ExtentFilePath, ExtentPath, FileType};
77
use dropshot::{
8-
Body, CompressionConfig, ConfigDropshot, HandlerTaskMode, HttpError,
9-
HttpResponseOk, HttpServerStarter, Path, RequestContext,
8+
Body, ClientSpecifiesVersionInHeader, CompressionConfig, ConfigDropshot,
9+
HandlerTaskMode, HttpError, HttpResponseOk, Path, RequestContext,
10+
VersionPolicy,
1011
};
1112
use hyper::{Response, StatusCode};
1213

@@ -68,10 +69,17 @@ pub fn repair_main(
6869
/*
6970
* Set up the server.
7071
*/
71-
let server =
72-
HttpServerStarter::new(&config_dropshot, api, context.into(), log)
73-
.map_err(|error| format!("failed to create server: {}", error))?
74-
.start();
72+
let server = dropshot::ServerBuilder::new(api, context.into(), log.clone())
73+
.config(config_dropshot)
74+
.version_policy(VersionPolicy::Dynamic(Box::new(
75+
ClientSpecifiesVersionInHeader::new(
76+
omicron_common::api::VERSION_HEADER,
77+
crucible_downstairs_api::latest_version(),
78+
),
79+
)))
80+
.build_starter()
81+
.map_err(|error| format!("failed to create server: {}", error))?
82+
.start();
7583
let local_addr = server.local_addr();
7684

7785
let h = tokio::spawn(async move {
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
ef04744d2a7ba34d6036ec7c39abcc49eeec25ef:openapi/downstairs-repair/downstairs-repair-1.0.0-178638.json

openapi/downstairs-repair/downstairs-repair-1.0.0-178638.json renamed to openapi/downstairs-repair/downstairs-repair-2.0.0-9f0059.json

Lines changed: 150 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
"url": "https://oxide.computer",
77
"email": "api@oxide.computer"
88
},
9-
"version": "1.0.0"
9+
"version": "2.0.0"
1010
},
1111
"paths": {
1212
"/extent/{eid}/files": {
@@ -87,6 +87,30 @@
8787
}
8888
}
8989
},
90+
"/memory": {
91+
"get": {
92+
"summary": "Memory usage report",
93+
"operationId": "get_memory",
94+
"responses": {
95+
"200": {
96+
"description": "successful operation",
97+
"content": {
98+
"application/json": {
99+
"schema": {
100+
"$ref": "#/components/schemas/MemoryReport"
101+
}
102+
}
103+
}
104+
},
105+
"4XX": {
106+
"$ref": "#/components/responses/Error"
107+
},
108+
"5XX": {
109+
"$ref": "#/components/responses/Error"
110+
}
111+
}
112+
}
113+
},
90114
"/newextent/{eid}/{file_type}": {
91115
"get": {
92116
"summary": "Get a specific extent file (data, database, or log files).",
@@ -219,6 +243,44 @@
219243
"value"
220244
]
221245
},
246+
"ConnectionMemoryReport": {
247+
"description": "Per-connection memory report",
248+
"type": "object",
249+
"properties": {
250+
"completed_ranges": {
251+
"type": "integer",
252+
"format": "uint",
253+
"minimum": 0
254+
},
255+
"completed_ranges_hwm": {
256+
"type": "integer",
257+
"format": "uint",
258+
"minimum": 0
259+
},
260+
"pending_jobs": {
261+
"type": "integer",
262+
"format": "uint",
263+
"minimum": 0
264+
},
265+
"pending_jobs_bytes": {
266+
"type": "integer",
267+
"format": "uint",
268+
"minimum": 0
269+
},
270+
"pending_jobs_capacity_hwm": {
271+
"type": "integer",
272+
"format": "uint",
273+
"minimum": 0
274+
}
275+
},
276+
"required": [
277+
"completed_ranges",
278+
"completed_ranges_hwm",
279+
"pending_jobs",
280+
"pending_jobs_bytes",
281+
"pending_jobs_capacity_hwm"
282+
]
283+
},
222284
"Error": {
223285
"description": "Error information from a response.",
224286
"type": "object",
@@ -238,6 +300,93 @@
238300
"request_id"
239301
]
240302
},
303+
"MemoryReport": {
304+
"description": "Summary of downstairs memory usage",
305+
"type": "object",
306+
"properties": {
307+
"active_connections": {
308+
"type": "integer",
309+
"format": "uint",
310+
"minimum": 0
311+
},
312+
"block_size": {
313+
"type": "integer",
314+
"format": "uint64",
315+
"minimum": 0
316+
},
317+
"bytes_per_extent": {
318+
"type": "integer",
319+
"format": "uint",
320+
"minimum": 0
321+
},
322+
"connections": {
323+
"type": "array",
324+
"items": {
325+
"$ref": "#/components/schemas/ConnectionMemoryReport"
326+
}
327+
},
328+
"dirty_extent_count": {
329+
"type": "integer",
330+
"format": "uint",
331+
"minimum": 0
332+
},
333+
"extent_count": {
334+
"type": "integer",
335+
"format": "uint32",
336+
"minimum": 0
337+
},
338+
"extent_meta_bytes": {
339+
"type": "integer",
340+
"format": "uint",
341+
"minimum": 0
342+
},
343+
"extent_size": {
344+
"type": "integer",
345+
"format": "uint64",
346+
"minimum": 0
347+
},
348+
"rayon_threads": {
349+
"type": "integer",
350+
"format": "uint",
351+
"minimum": 0
352+
},
353+
"read_bytes_hwm": {
354+
"type": "integer",
355+
"format": "uint",
356+
"minimum": 0
357+
},
358+
"region_bytes": {
359+
"type": "integer",
360+
"format": "uint",
361+
"minimum": 0
362+
},
363+
"tokio_worker_threads": {
364+
"type": "integer",
365+
"format": "uint",
366+
"minimum": 0
367+
},
368+
"write_bytes_hwm": {
369+
"type": "integer",
370+
"format": "uint",
371+
"minimum": 0
372+
}
373+
},
374+
"required": [
375+
"active_connections",
376+
"block_size",
377+
"bytes_per_extent",
378+
"connections",
379+
"dirty_extent_count",
380+
"extent_count",
381+
"extent_meta_bytes",
382+
"extent_size",
383+
"rayon_threads",
384+
"read_bytes_hwm",
385+
"region_bytes",
386+
"tokio_worker_threads",
387+
"write_bytes_hwm"
388+
]
389+
},
241390
"RegionDefinition": {
242391
"type": "object",
243392
"properties": {
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
downstairs-repair-1.0.0-178638.json
1+
downstairs-repair-2.0.0-9f0059.json

0 commit comments

Comments
 (0)