prometheus/storage/local
beorn7 0ea5801e47 Handle errors caused by data corruption more gracefully
This requires all the panic calls upon unexpected data to be converted
into errors returned. This pollute the function signatures quite
lot. Well, this is Go...

The ideas behind this are the following:

- panic only if it's a programming error. Data corruptions happen, and
  they are not programming errors.

- If we detect a data corruption, we "quarantine" the series,
  essentially removing it from the database and putting its data into
  a separate directory for forensics.

- Failure during writing to a series file is not considered corruption
  automatically. It will call setDirty, though, so that a
  crashrecovery upon the next restart will commence and check for
  that.

- Series quarantining and setDirty calls are logged and counted in
  metrics, but are hidden from the user of the interfaces in
  interface.go, whith the notable exception of Append(). The reasoning
  is that we treat corruption by removing the corrupted series, i.e. a
  query for it will return no results on its next call anyway, so
  return no results right now. In the case of Append(), we want to
  tell the user that no data has been appended, though.

Minor side effects:

- Now consistently using filepath.* instead of path.*.

- Introduced structured logging where I touched it. This makes things
  less consistent, but a complete change to structured logging would
  be out of scope for this PR.
2016-03-02 23:02:34 +01:00
..
codable Replace metric.LabelPair with model.LabelPair 2015-08-22 13:32:13 +02:00
fixtures/b0 Add benchmark for loading chunks and chunk descs. 2015-03-19 19:28:21 +01:00
index Handle errors caused by data corruption more gracefully 2016-03-02 23:02:34 +01:00
chunk.go Handle errors caused by data corruption more gracefully 2016-03-02 23:02:34 +01:00
crashrecovery.go Handle errors caused by data corruption more gracefully 2016-03-02 23:02:34 +01:00
delta.go Handle errors caused by data corruption more gracefully 2016-03-02 23:02:34 +01:00
delta_helpers.go Switch from client_golang/model to common/model 2015-08-21 13:33:38 +02:00
doubledelta.go Handle errors caused by data corruption more gracefully 2016-03-02 23:02:34 +01:00
instrumentation.go Handle errors caused by data corruption more gracefully 2016-03-02 23:02:34 +01:00
interface.go Handle errors caused by data corruption more gracefully 2016-03-02 23:02:34 +01:00
locker.go Switch from client_golang/model to common/model 2015-08-21 13:33:38 +02:00
locker_test.go Switch from client_golang/model to common/model 2015-08-21 13:33:38 +02:00
mapper.go Switch to common/log 2015-10-03 10:21:43 +02:00
mapper_test.go Switch from client_golang/model to common/model 2015-08-21 13:33:38 +02:00
persistence.go Handle errors caused by data corruption more gracefully 2016-03-02 23:02:34 +01:00
persistence_test.go Handle errors caused by data corruption more gracefully 2016-03-02 23:02:34 +01:00
preload.go Handle errors caused by data corruption more gracefully 2016-03-02 23:02:34 +01:00
series.go Handle errors caused by data corruption more gracefully 2016-03-02 23:02:34 +01:00
storage.go Handle errors caused by data corruption more gracefully 2016-03-02 23:02:34 +01:00
storage_test.go Handle errors caused by data corruption more gracefully 2016-03-02 23:02:34 +01:00
test_helpers.go Fix some dead code, missing error checks, shadowings. 2015-09-14 12:21:34 +02:00