diff --git a/src/box/recovery.cc b/src/box/recovery.cc
index be6802377a469307c7b5f1f4d03444e54374414d..9a17428d4328a0651a637a134130ad18e93bceda 100644
--- a/src/box/recovery.cc
+++ b/src/box/recovery.cc
@@ -410,37 +410,24 @@ recover_snap(struct recovery_state *r)
 	struct log_io *snap;
 	int64_t lsn;
 
-	if (log_dir_scan(&r->snap_dir) != 0) {
-		say_error("can't find snapshot");
-		goto error;
-	}
+	if (log_dir_scan(&r->snap_dir) != 0)
+		panic("can't scan snapshot directory");
 	lsn = log_dir_greatest(&r->snap_dir);
-	if (lsn <= 0) {
-		say_error("can't find snapshot");
-		goto error;
-	}
+	if (lsn <= 0)
+		panic("can't find snapshot! "
+		      "Didn't you forget to initialize storage?");
 	snap = log_io_open_for_read(&r->snap_dir, lsn, &r->node_uuid, NONE);
-	if (snap == NULL) {
-		say_error("can't find/open snapshot");
-		goto error;
-	}
+	if (snap == NULL)
+		panic("can't open snapshot");
 
-	if (tt_uuid_is_nil(&r->node_uuid)) {
-		say_error("can't find node uuid in snapshot");
-		goto error;
-	}
+	if (tt_uuid_is_nil(&r->node_uuid))
+		panic("can't find node uuid in snapshot");
 
 	say_info("recover from `%s'", snap->filename);
-	if (recover_wal(r, snap) == 0) {
-		recovery_end_recover_snapshot(r);
-		return;
-	}
-error:
-	if (log_dir_greatest(&r->snap_dir) <= 0) {
-		say_crit("didn't you forget to initialize storage with --init-storage switch?");
-		_exit(1);
-	}
-	panic("snapshot recovery failed");
+	if (recover_wal(r, snap) != 0)
+		panic("can't process snapshot");
+
+	recovery_end_recover_snapshot(r);
 }
 
 #define LOG_EOF 0