Обновил сервер до Ejabberd 2.1.2
Создал новую бд из схемы, которая была с сервером Ejabberd 2.1.2, и скопировал туда недостающие данные.
В клиенте Psi+ меняю группу у контакта. Но после переподключения к серверу контакт возвращается в предыдущую группу. В бд данные не меняются.
В логах Ejabberd есть такая запись:
=ERROR REPORT==== 2010-03-10 22:27:13 ===
E(<0.16728.3>:ejabberd_odbc:317) : SQL transaction restarts exceeded
** Restarts: 10
** Last abort reason: "#23000Duplicate entry 'mccoder-2read.ru@rss.portal-on.ru' for key 'i_rosteru_user_jid'"
** Stacktrace: [{ejabberd_odbc,sql_query_t,1},
{odbc_queries,update_roster,5},
{mod_roster_odbc,'-process_item_set/3-fun-0-',7},
{ejabberd_odbc,outer_transaction,3},
{ejabberd_odbc,handle_call,3},
{gen_server,handle_msg,5},
{proc_lib,init_p,5}]
** When State == {state,<0.16729.3>,mysql}
Сервер почему-то пытается еще раз добавить запись в roster.
При этом добавлять новых пользователей я могу, не меняется только группа.
Если в версии 2.1.2 есть баги, то на какую лучше откатиться?
Re: Неудаётся изменить группу у контакта
Этот баг я уже где-то видел, но не могу воспроизвести.
У вас есть возможность залогировать запросы mysql и показать ту часть где затыкается? В логе надо будет найти кучу rollback (по дефолту - 10) и прихватить ещё пару-тройку запросов которые были до него и после него.
До него и после ничего нет, а
До него и после ничего нет, а вот сами 10 rollback запросов:
begin
select username, jid, nick, subscription, ask, askmessage, server, subscribe, type from rosterusers where username='[MY_NAME]' and jid='[CONTACT_JID]'
update rosterusers set username='[MY_NAME]', jid='[CONTACT_JID]', nick='[CONTACT_NAME]', subscription='B', ask='N', askmessage='', server='N', subscribe='', type='item' where username='[MY_NAME]' and jid='[CONTACT_JID]'
insert into rosterusers(username, jid, nick, subscription, ask, askmessage, server, subscribe, type) values ('[MY_NAME]', '[CONTACT_JID]', '[CONTACT_NAME]', 'B', 'N', '', 'N', '', 'item')
rollback
begin
select username, jid, nick, subscription, ask, askmessage, server, subscribe, type from rosterusers where username='[MY_NAME]' and jid='[CONTACT_JID]'
update rosterusers set username='[MY_NAME]', jid='[CONTACT_JID]', nick='[CONTACT_NAME]', subscription='B', ask='N', askmessage='', server='N', subscribe='', type='item' where username='[MY_NAME]' and jid='[CONTACT_JID]'
insert into rosterusers(username, jid, nick, subscription, ask, askmessage, server, subscribe, type) values ('[MY_NAME]', '[CONTACT_JID]', '[CONTACT_NAME]', 'B', 'N', '', 'N', '', 'item')
rollback
begin
select username, jid, nick, subscription, ask, askmessage, server, subscribe, type from rosterusers where username='[MY_NAME]' and jid='[CONTACT_JID]'
update rosterusers set username='[MY_NAME]', jid='[CONTACT_JID]', nick='[CONTACT_NAME]', subscription='B', ask='N', askmessage='', server='N', subscribe='', type='item' where username='[MY_NAME]' and jid='[CONTACT_JID]'
insert into rosterusers(username, jid, nick, subscription, ask, askmessage, server, subscribe, type) values ('[MY_NAME]', '[CONTACT_JID]', '[CONTACT_NAME]', 'B', 'N', '', 'N', '', 'item')
rollback
begin
select username, jid, nick, subscription, ask, askmessage, server, subscribe, type from rosterusers where username='[MY_NAME]' and jid='[CONTACT_JID]'
update rosterusers set username='[MY_NAME]', jid='[CONTACT_JID]', nick='[CONTACT_NAME]', subscription='B', ask='N', askmessage='', server='N', subscribe='', type='item' where username='[MY_NAME]' and jid='[CONTACT_JID]'
insert into rosterusers(username, jid, nick, subscription, ask, askmessage, server, subscribe, type) values ('[MY_NAME]', '[CONTACT_JID]', '[CONTACT_NAME]', 'B', 'N', '', 'N', '', 'item')
rollback
begin
select username, jid, nick, subscription, ask, askmessage, server, subscribe, type from rosterusers where username='[MY_NAME]' and jid='[CONTACT_JID]'
update rosterusers set username='[MY_NAME]', jid='[CONTACT_JID]', nick='[CONTACT_NAME]', subscription='B', ask='N', askmessage='', server='N', subscribe='', type='item' where username='[MY_NAME]' and jid='[CONTACT_JID]'
insert into rosterusers(username, jid, nick, subscription, ask, askmessage, server, subscribe, type) values ('[MY_NAME]', '[CONTACT_JID]', '[CONTACT_NAME]', 'B', 'N', '', 'N', '', 'item')
rollback
begin
select username, jid, nick, subscription, ask, askmessage, server, subscribe, type from rosterusers where username='[MY_NAME]' and jid='[CONTACT_JID]'
update rosterusers set username='[MY_NAME]', jid='[CONTACT_JID]', nick='[CONTACT_NAME]', subscription='B', ask='N', askmessage='', server='N', subscribe='', type='item' where username='[MY_NAME]' and jid='[CONTACT_JID]'
insert into rosterusers(username, jid, nick, subscription, ask, askmessage, server, subscribe, type) values ('[MY_NAME]', '[CONTACT_JID]', '[CONTACT_NAME]', 'B', 'N', '', 'N', '', 'item')
rollback
begin
select username, jid, nick, subscription, ask, askmessage, server, subscribe, type from rosterusers where username='[MY_NAME]' and jid='[CONTACT_JID]'
update rosterusers set username='[MY_NAME]', jid='[CONTACT_JID]', nick='[CONTACT_NAME]', subscription='B', ask='N', askmessage='', server='N', subscribe='', type='item' where username='[MY_NAME]' and jid='[CONTACT_JID]'
insert into rosterusers(username, jid, nick, subscription, ask, askmessage, server, subscribe, type) values ('[MY_NAME]', '[CONTACT_JID]', '[CONTACT_NAME]', 'B', 'N', '', 'N', '', 'item')
rollback
begin
select username, jid, nick, subscription, ask, askmessage, server, subscribe, type from rosterusers where username='[MY_NAME]' and jid='[CONTACT_JID]'
update rosterusers set username='[MY_NAME]', jid='[CONTACT_JID]', nick='[CONTACT_NAME]', subscription='B', ask='N', askmessage='', server='N', subscribe='', type='item' where username='[MY_NAME]' and jid='[CONTACT_JID]'
insert into rosterusers(username, jid, nick, subscription, ask, askmessage, server, subscribe, type) values ('[MY_NAME]', '[CONTACT_JID]', '[CONTACT_NAME]', 'B', 'N', '', 'N', '', 'item')
rollback
begin
select username, jid, nick, subscription, ask, askmessage, server, subscribe, type from rosterusers where username='[MY_NAME]' and jid='[CONTACT_JID]'
update rosterusers set username='[MY_NAME]', jid='[CONTACT_JID]', nick='[CONTACT_NAME]', subscription='B', ask='N', askmessage='', server='N', subscribe='', type='item' where username='[MY_NAME]' and jid='[CONTACT_JID]'
insert into rosterusers(username, jid, nick, subscription, ask, askmessage, server, subscribe, type) values ('[MY_NAME]', '[CONTACT_JID]', '[CONTACT_NAME]', 'B', 'N', '', 'N', '', 'item')
rollback
begin
select username, jid, nick, subscription, ask, askmessage, server, subscribe, type from rosterusers where username='[MY_NAME]' and jid='[CONTACT_JID]'
update rosterusers set username='[MY_NAME]', jid='[CONTACT_JID]', nick='[CONTACT_NAME]', subscription='B', ask='N', askmessage='', server='N', subscribe='', type='item' where username='[MY_NAME]' and jid='[CONTACT_JID]'
insert into rosterusers(username, jid, nick, subscription, ask, askmessage, server, subscribe, type) values ('[MY_NAME]', '[CONTACT_JID]', '[CONTACT_NAME]', 'B', 'N', '', 'N', '', 'item')
rollback
begin
select username, jid, nick, subscription, ask, askmessage, server, subscribe, type from rosterusers where username='[MY_NAME]' and jid='[CONTACT_JID]'
update rosterusers set username='[MY_NAME]', jid='[CONTACT_JID]', nick='[CONTACT_NAME]', subscription='B', ask='N', askmessage='', server='N', subscribe='', type='item' where username='[MY_NAME]' and jid='[CONTACT_JID]'
insert into rosterusers(username, jid, nick, subscription, ask, askmessage, server, subscribe, type) values ('[MY_NAME]', '[CONTACT_JID]', '[CONTACT_NAME]', 'B', 'N', '', 'N', '', 'item')
rollback
получается что после обновления он неполучает положительного ответа, и поэтому считает что в бд записи нет и пытается её вставить.
Какая версия mysql драйвера?
Какая версия mysql драйвера?
Вот из лога:
* src/odbc/odbc_queries.erl: replaced string:join/2 function.
Removed ugly "catch" statement from update_t/4.
WARNING: this change requires last version of mysql driver.
You can update it from ejabberd-modules repository.
Release of Erlang 5.6/OTP
Release of Erlang 5.6/OTP R12B
название папок:
mysql-2007.0702
odbc-2.10
mnesia-4.4
Ну надо обновить mysql
Ну надо обновить mysql драйвер.
Спасибо за помощь. моя
Спасибо за помощь.
моя ошибка, невнимательно прочитал Release Notes.