Неудаётся изменить группу у контакта (не меняется значение в MySql)

Обновил сервер до 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.

Syndicate content