mirror of
https://github.com/facebook/sapling.git
synced 2024-10-09 16:31:02 +03:00
scmstore: track FileStore write errors
Summary: Adds tracking of FileStore write errors. Write batches will still abort after the first failure as written. Reviewed By: DurhamG Differential Revision: D29997203 fbshipit-source-id: e1cc2ffc4a8d97ca935a7fc9aab30bde3dc548b2
This commit is contained in:
parent
34dfc6d1f7
commit
d9a885a6df
@ -202,8 +202,6 @@ impl WriteMetrics {
|
||||
self.ok += keys;
|
||||
}
|
||||
|
||||
// TODO(meyer): Add write error tracking.
|
||||
#[allow(dead_code)]
|
||||
pub(crate) fn err(&mut self, keys: usize) {
|
||||
self.err += keys;
|
||||
}
|
||||
|
@ -245,13 +245,16 @@ impl FileStore {
|
||||
|
||||
#[instrument(skip(self, entries))]
|
||||
pub fn write_batch(&self, entries: impl Iterator<Item = (Key, Bytes, Metadata)>) -> Result<()> {
|
||||
// TODO(meyer): Track error metrics too and don't fail the whole batch for a single write error.
|
||||
// TODO(meyer): Don't fail the whole batch for a single write error.
|
||||
let mut metrics = FileStoreWriteMetrics::default();
|
||||
let mut indexedlog_local = self.indexedlog_local.as_ref().map(|l| l.write_lock());
|
||||
for (key, bytes, meta) in entries {
|
||||
if meta.is_lfs() {
|
||||
metrics.lfsptr.item(1);
|
||||
self.write_lfsptr(&mut indexedlog_local, key, bytes, meta)?;
|
||||
if let Err(e) = self.write_lfsptr(&mut indexedlog_local, key, bytes, meta) {
|
||||
metrics.lfsptr.err(1);
|
||||
return Err(e);
|
||||
}
|
||||
metrics.lfsptr.ok(1);
|
||||
continue;
|
||||
}
|
||||
@ -262,11 +265,17 @@ impl FileStore {
|
||||
.map_or(false, |threshold| hg_blob_len > threshold)
|
||||
{
|
||||
metrics.lfs.item(1);
|
||||
self.write_lfs(key, bytes)?;
|
||||
if let Err(e) = self.write_lfs(key, bytes) {
|
||||
metrics.lfs.err(1);
|
||||
return Err(e);
|
||||
}
|
||||
metrics.lfs.ok(1);
|
||||
} else {
|
||||
metrics.nonlfs.item(1);
|
||||
self.write_nonlfs(&mut indexedlog_local, key, bytes, meta)?;
|
||||
if let Err(e) = self.write_nonlfs(&mut indexedlog_local, key, bytes, meta) {
|
||||
metrics.nonlfs.err(1);
|
||||
return Err(e);
|
||||
}
|
||||
metrics.nonlfs.ok(1);
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user