etcd/etcdserver
James Shubin 368f70a37c etcdserver: Use panic instead of fatal on no space left error
When using the embed package to embed etcd, sometimes the storage prefix
being used might be full. In this case, this code path triggers, causing
an: `etcdserver: create wal error: no space left on device` error, which
causes a fatal. A fatal differs from a panic in that it also calls
os.Exit(1). In this situation, the calling program that embeds the etcd
server will be abruptly killed, which prevents it from cleaning up
safely, and giving a proper error message. Depending on what the calling
program is, this can cause corruption and data loss.

This patch switches the fatal to a panic. Ideally this would be a
regular error which would get propagated upwards to the StartEtcd
command, but in the meantime at least this can be caught with recover().

This fixes the most common fatal that I've experienced, but there are
surely more that need looking into. If possible, the errors should be
threaded down into the code path so that embedding etcd can be more
robust.

Fixes: https://github.com/etcd-io/etcd/issues/10588
2019-03-27 15:24:33 -04:00
..
api etcdserver/api/rafthttp: fix the location of close http body. 2019-03-11 22:20:38 +08:00
etcdserverpb etcdserver: update import paths to "go.etcd.io/etcd" 2018-08-28 17:47:55 -07:00
apply.go etcdserver: update import paths to "go.etcd.io/etcd" 2018-08-28 17:47:55 -07:00
apply_auth.go etcdserver: update import paths to "go.etcd.io/etcd" 2018-08-28 17:47:55 -07:00
apply_v2.go etcdserver: add missing lg assignment. 2019-01-05 09:24:48 +08:00
backend.go *: add flag to let etcd use the new boltdb freelistType feature 2019-02-14 11:07:08 +08:00
cluster_util.go etcdserver: clear message in cluster version decision 2018-10-08 16:05:10 -07:00
cluster_util_test.go etcdserver: update import paths to "go.etcd.io/etcd" 2018-08-28 17:47:55 -07:00
config.go *: add flag to let etcd use the new boltdb freelistType feature 2019-02-14 11:07:08 +08:00
config_test.go etcdserver: fix gofmt warnings with Go 1.11 2018-08-28 21:45:12 -07:00
consistent_index.go etcdserver: update LICENSE header 2016-05-12 20:49:40 -07:00
consistent_index_test.go etcdserver: update LICENSE header 2016-05-12 20:49:40 -07:00
corrupt.go etcdserver: update import paths to "go.etcd.io/etcd" 2018-08-28 17:47:55 -07:00
doc.go etcdserver: update LICENSE header 2016-05-12 20:49:40 -07:00
errors.go server: drop read request if found leader changed 2018-09-14 15:58:35 +08:00
metrics.go server: drop read request if found leader changed 2018-09-14 15:58:35 +08:00
quota.go etcdserver: update import paths to "go.etcd.io/etcd" 2018-08-28 17:47:55 -07:00
raft.go etcdserver: Use panic instead of fatal on no space left error 2019-03-27 15:24:33 -04:00
raft_test.go etcdserver: add a test to verify not to send duplicated append responses 2019-01-09 10:37:43 +08:00
server.go etcdserver/*: add "etcd_cluster_version" metric 2018-11-13 21:49:12 -08:00
server_access_control.go etcdserver: replace "hostWhitelist" with "AccessController" 2018-03-27 06:25:44 -07:00
server_test.go etcdserver: add a test to verify not to send duplicated append responses 2019-01-09 10:37:43 +08:00
snapshot_merge.go etcdserver: update import paths to "go.etcd.io/etcd" 2018-08-28 17:47:55 -07:00
storage.go etcdserver: update import paths to "go.etcd.io/etcd" 2018-08-28 17:47:55 -07:00
util.go *: rerun "gofmt" 2018-08-28 18:25:39 -07:00
util_test.go etcdserver: update import paths to "go.etcd.io/etcd" 2018-08-28 17:47:55 -07:00
v2_server.go etcdserver: update import paths to "go.etcd.io/etcd" 2018-08-28 17:47:55 -07:00
v3_server.go etcdserver: Remove infinite loop in doSerialize 2018-11-12 23:28:24 +03:00