mirror of
https://github.com/scylladb/scylladb.git
synced 2026-04-19 16:15:07 +00:00
Currently start() is not prepared to handle exceptions thrown from service initialization. It's easy to trigger such exceprion by starting two tests at the same time, which will result in socket bind error. Exception thrown from start() typically results in assertion failures like this one: seastar::sharded<Service>::~sharded() [with Service = database]: Assertion `_instances.empty()' failed. This patch fixes the problem by combining start() and stop() in a single do_with() and using RAII for stopping services. Now exceptions thrown from service initialization should stop services in proper order and let the original exception to pass through. Example result: fatal error in "test_new_schema_with_no_structural_change_is_propagated": std::runtime_error: bind: Address already in use Message-Id: <1458768018-27662-1-git-send-email-tgrabiec@scylladb.com>