Оновлення до Umbraco 8.15
Наш клієнт має CRM-систему, яка була побудована на базі Umbraco 8.
Ця система має сітки на фронтенді, що дозволяють виконувати операції CRUD.
Оскільки системою користується багато користувачів, щодня необхідні оновлення до останньої версії Umbraco.
Ми виконуємо оновлення до останньої версії 8.15 і стикнулися з блокуваннями при спробі одночасного збереження кількох записів.
Метод збереження повертає таке повідомлення
"Транзакція (ID процесу 92) була заблокована на блокуючих ресурсах іншим процесом і була обрана як жертва блокування. Повторіть транзакцію."
Клієнтський код використовує такий метод для отримання імені поточного залогіненого користувача:
MembershipUser user = Membership.GetUser();
var groups = FrontendHelper.GetRoles(user);
Коли ми подивилися всередину методу Membership.GetUser в Umbraco MembershipHelper, ми виявили, що GetUser завжди виконує оновлення часу останнього входу, якщо користувач, який запитується, онлайн.
if (userIsOnline)
{
// при оновленні з 7.2 до 7.3 спроба збереження викличе помилку
if (UmbracoVersion.Current >= new Version(7, 3, 0, 0))
{
var now = DateTime.Now;
// оновити дані безпосередньо в базі замість повного збереження учасника, що вимагає блокувань БД
MemberService.SetLastLogin(username, now);
member.LastLoginDate = now;
member.UpdateDate = now;
}
}
Я не аналізував зміни коду, що викликають блокування в 8.15, але не в 8.6, але ми просто прибрали дорогі збереження в БД, коли потрібно отримати ім'я користувача, беручи його з Identity:
username = System.Web.HttpContext.Current.User.Identity.Name;
Тож будьте обережні, коли часто використовуєте деякі загальні методи.
І це історія про важливість QA в кожному незначному оновленні.
Тож якщо вам потрібна підтримка Umbraco або оновлення, просто надішліть нам повідомлення.