Ошибка ZombieCheck при запуске RoundhousE

Я пытаюсь сделать выпуск нашего веб-приложения (используя tfs для развертывания в Azure), но продолжаю получать сообщение об ошибке, которое я не могу понять:

2018-07-10T07:07:27.7518609Z RoundhousE encountered an error. You were running in a transaction though, so the database should be in the state it was in prior to this piece running. This does not include a drop/create or any creation of a database, as those items can not run in a transaction.
2018-07-10T07:07:27.7520033Z System.InvalidOperationException: This SqlTransaction has completed; it is no longer usable.
2018-07-10T07:07:27.7520928Z    at System.Data.SqlClient.SqlTransaction.ZombieCheck()
2018-07-10T07:07:27.7521739Z    at System.Data.SqlClient.SqlTransaction.Rollback()
2018-07-10T07:07:27.7522799Z    at roundhouse.databases.AdoNetDatabase.rollback()
2018-07-10T07:07:27.7523835Z    at roundhouse.migrators.DefaultDatabaseMigrator.run_sql(String sql_to_run, String script_name, Boolean run_this_script_once, Boolean run_this_script_every_time, Int64 version_id, EnvironmentSet environment_set, String repository_version, String repository_path, ConnectionType connection_type)
2018-07-10T07:07:27.7525261Z    at roundhouse.runners.RoundhouseMigrationRunner.traverse_files_and_run_sql(String directory, Int64 version_id, MigrationsFolder migration_folder, EnvironmentSet migrating_environment_set, String repository_version, ConnectionType connection_type)
2018-07-10T07:07:27.7526355Z    at roundhouse.runners.RoundhouseMigrationRunner.log_and_traverse(MigrationsFolder folder, Int64 version_id, String new_version, ConnectionType connection_type)
2018-07-10T07:07:27.7527288Z    at roundhouse.runners.RoundhouseMigrationRunner.run()
2018-07-10T07:07:27.7535389Z This SqlTransaction has completed; it is no longer usable.
2018-07-10T07:07:27.7536462Z System.InvalidOperationException: This SqlTransaction has completed; it is no longer usable.
2018-07-10T07:07:27.7537385Z    at System.Data.SqlClient.SqlTransaction.ZombieCheck()
2018-07-10T07:07:27.7538815Z    at System.Data.SqlClient.SqlTransaction.Rollback()
2018-07-10T07:07:27.7539676Z    at roundhouse.databases.AdoNetDatabase.rollback()
2018-07-10T07:07:27.7540661Z    at roundhouse.migrators.DefaultDatabaseMigrator.run_sql(String sql_to_run, String script_name, Boolean run_this_script_once, Boolean run_this_script_every_time, Int64 version_id, EnvironmentSet environment_set, String repository_version, String repository_path, ConnectionType connection_type)
2018-07-10T07:07:27.7541750Z    at roundhouse.runners.RoundhouseMigrationRunner.traverse_files_and_run_sql(String directory, Int64 version_id, MigrationsFolder migration_folder, EnvironmentSet migrating_environment_set, String repository_version, ConnectionType connection_type)
2018-07-10T07:07:27.7542995Z    at roundhouse.runners.RoundhouseMigrationRunner.log_and_traverse(MigrationsFolder folder, Int64 version_id, String new_version, ConnectionType connection_type)
2018-07-10T07:07:27.7543950Z    at roundhouse.runners.RoundhouseMigrationRunner.run()
2018-07-10T07:07:27.7544856Z    at roundhouse.console.Program.run_migrator(ConfigurationPropertyHolder configuration)
2018-07-10T07:07:27.7545759Z    at roundhouse.console.Program.Main(String[] args)
2018-07-10T07:07:29.8091395Z ##[error]Process completed with exit code 1.

Это никогда не происходило при развертывании локально или в нашей демонстрационной среде. Это всегда происходит при попытке выполнить один и тот же простой сценарий SQL, который является пятым, который необходимо запустить. Сценарий отлично работает из SSMS для копии производственной базы данных, но для его завершения требуется более 10 минут. Сначала я подумал, что roundhousE может быть тайм-аут, но я попытался установить тайм-аут намного выше, и это не имело никакого эффекта.

У кого-нибудь есть понимание того, что здесь происходит?

Вот сценарий, если это поможет:

   UPDATE ut 
    SET ut.IsX = t.IsX 
    FROM UserTasks ut 
    INNER JOIN Procedures p 
    ON ut.ProcedureID = p.ID 
    INNER JOIN Types t 
    ON p.TypeID = t.ID;

1 ответ

Решение

Похоже, что моя первоначальная интуиция была правильной, и проблема была вызвана тайм-аутом запроса.

Я отредактировал время ожидания в нашем скрипте сборки, но забыл, что tfs вызывает roundhousE напрямую, и не изменил длину там. Это решило проблему.

Другие вопросы по тегам