madf 279 Posted 2008-07-12 09:09:20 Share Posted 2008-07-12 09:09:20 А покажи, плиз, код include/utime.h Там в операторах одно время были проблемы. Может, тебе достался непофикшенный вариант? Link to post Share on other sites
madf 279 Posted 2008-07-12 09:22:37 Share Posted 2008-07-12 09:22:37 Еще, теоретически, юзер может застревать в фазе 4. В Process_CONN_SYN добавь вывод фазы. Чтобы уж наверняка. Link to post Share on other sites
napTu 4 Posted 2008-07-12 19:21:30 Author Share Posted 2008-07-12 19:21:30 в таймаутере всё в порядке. принимаем пакет от пользователя, переводим в фазу 2 и отправляем пакет: inetaccess.cpp > 20:46:25 > recv from 192.168.10.217 5554 len=64 inetaccess.cpp > 20:46:25 > User Plan FOUND! inetaccess.cpp > 20:46:25 > ======================> InitEncrypt dont needed inetaccess.cpp > 20:46:25 > User Plan phase changed from 1 to 2 inetaccess.cpp > 20:46:25 > Phase changed from 1 to 2 inetaccess.cpp > 20:46:25 > 1215884811.7439 192 bytes sent to 192.168.10.217:5555 len=192 далее таймаутер отсчитывает время, периодически принимаются пакеты от пользователя, но отбрасываются по фазе 2: inetaccess.cpp > 20:46:31 > Phase2.user Plan curtime-2ndtime 6, udelay 15 inetaccess.cpp > 20:46:31 > recv from 192.168.10.217 5554 len=64 inetaccess.cpp > 20:46:31 > User Plan FOUND! inetaccess.cpp > 20:46:31 > ======================> InitEncrypt dont needed inetaccess.cpp > 20:46:31 > User Plan phase not1 and not3 - return from CONN_SYN_6. phase 2 таймаутер отсчитывает до 15 секунд и переводит назад в фазу 1 inetaccess.cpp > 20:46:40 > Phase2.user Plan curtime-2ndtime 14, udelay 15 inetaccess.cpp > 20:46:40 > Phase2.user Plan curtime-2ndtime 15, udelay 15 inetaccess.cpp > 20:46:40 > Phase2. BIGGER THAT ZERO VALUE inetaccess.cpp > 20:46:40 > Phase changed from 2 to 1. Reason: timeout сейчас проблему наблюдаю у двух пользователей. куда копать не понимаю... странно, но перезапуск сервера не изменил ситуацию. возможно это у них с фаерволом проблема. всё же ситуация не вчерашняя, тогда не было фазопереходов. жду дальше... Link to post Share on other sites
madf 279 Posted 2008-07-13 07:02:47 Share Posted 2008-07-13 07:02:47 Изначально пользователь находится в фазе 1. Он присылает пакет CONN_SYN - запрос на соединение. Сервер переводит его в фазу 2 и посылает запрос на подтверждение соединения: CONN_SYN_ACK. Если пользователь не присылает пакет CONN_ACK до тайм-аута - он переходит в фазу 1. Если присылает - переходит в фазу 3. В фазе 3 пользователю периодически посылаются пакеты ALIVE_SYN. Если пользователь в течении тайм-аута не отвечает ALIVE_ACK - он переходит в фазу 2. Если от пользователя в фазе 3 приходит пакет DISCONN_SYN - он переходит в фазу 4 и ему отсылается запрос подтверждения отключения DISCONN_SYN_ACK. Откуда у него 3 пути: по тайм-ауту в фазу 3, по CONN_SYN в фазу 2 и по DISCONN_ACK в фазу 1. Такова логика работы протокола. Нужно понять в каком месте "зависает" юзер. Link to post Share on other sites
napTu 4 Posted 2008-07-13 07:41:09 Author Share Posted 2008-07-13 07:41:09 дело в том что я сижу уже на немного измененном таймаутере, исходя из предположения что сбивается временная метка: if (it->second.phase == 2) { rz= currTime - it->second.phaseTime; printfd(__FILE__, "Phase2.user %s curtime-2ndtime %d, udelay %d \n" , it->second.user->GetLogin().c_str() , rz.tv_sec , iaSettings.GetUserDelay() ); if ( (currTime - it->second.phaseTime) > iaSettings.GetUserDelay() || (currTime - it->second.phaseTime) < 0 ) { if ((currTime - it->second.phaseTime) < 0 ) { printfd(__FILE__, "Phase2. LOWER ZERO VALUE \n" ); } else { printfd(__FILE__, "Phase2. BIGGER THAT ZERO VALUE \n" ); } it->second.phase = 1; т.е. если it->second.phaseTime слишком велик, то мы должны получить отсчет таймаута меньший чем 0 и в старом варианте очень долго достигать значения 15 секунд, а в новом - сразу переходить в фазу 1. Это самое я и пронаблюдал вчера неоднократно: inetaccess.cpp > 15:07:08 > Phase2.user Plan curtime-2ndtime 14, udelay 15 inetaccess.cpp > 15:07:08 > Phase2.user Plan curtime-2ndtime -4280, udelay 15 inetaccess.cpp > 15:07:08 > Phase2. LOWER ZERO VALUE inetaccess.cpp > 15:07:08 > Phase changed from 2 to 1. Reason: timeout ..... inetaccess.cpp > 18:41:41 > Phase2.user Kukushata curtime-2ndtime 1, udelay 15 inetaccess.cpp > 18:41:41 > Phase2.user Kukushata curtime-2ndtime -4293, udelay 15 inetaccess.cpp > 18:41:41 > Phase2. LOWER ZERO VALUE inetaccess.cpp > 18:41:41 > Phase changed from 2 to 1. Reason: timeout ..... inetaccess.cpp > 19:53:15 > Phase2.user FeratX curtime-2ndtime 10, udelay 15 inetaccess.cpp > 19:53:15 > Phase2.user Plan curtime-2ndtime 11, udelay 15 inetaccess.cpp > 19:53:15 > Phase2.user FeratX curtime-2ndtime -4284, udelay 15 inetaccess.cpp > 19:53:15 > Phase2. LOWER ZERO VALUE inetaccess.cpp > 19:53:15 > Phase changed from 2 to 1. Reason: timeout inetaccess.cpp > 19:53:15 > Phase2.user Plan curtime-2ndtime -4283, udelay 15 inetaccess.cpp > 19:53:15 > Phase2. LOWER ZERO VALUE inetaccess.cpp > 19:53:15 > Phase changed from 2 to 1. Reason: timeout ..... inetaccess.cpp > 21:04:46 > Phase2.user Galas curtime-2ndtime 3, udelay 15 inetaccess.cpp > 21:04:46 > Phase2.user Galas curtime-2ndtime -4291, udelay 15 inetaccess.cpp > 21:04:46 > Phase2. LOWER ZERO VALUE inetaccess.cpp > 21:04:46 > Phase changed from 2 to 1. Reason: timeout ... Link to post Share on other sites
napTu 4 Posted 2008-07-13 07:51:59 Author Share Posted 2008-07-13 07:51:59 насчет include/utime.h у него размер 3144байт, идет в дистрибутивах, которые я качаю уже не одну версию. Сомневаюсь чтобы мне "достался непофикшенный вариант", хотя... да вот собственно и он: # cat utime.h #ifndef UTIME_H #define UTIME_H /* * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ /* * Date: 22.12.2007 */ /* * Author : Boris Mikhailenko <stg34@stargazer.dp.ua> */ /* $Revision: 1.2 $ $Date: 2008/01/05 23:37:58 $ $Author: faust $ */ #include <sys/time.h> #include <time.h> struct UTIME: public timeval { UTIME() { tv_sec = 0; tv_usec = 0; } UTIME(time_t t) { tv_sec = t; tv_usec = 0; } UTIME(long long a, long long { tv_sec = a; tv_usec = b; } bool operator<(const UTIME & rhs) const { if (tv_sec < rhs.tv_sec) return true; else if (tv_sec > rhs.tv_sec) return false; else if (tv_usec < rhs.tv_usec) return true; return false; } bool operator<=(const UTIME & rhs) const { if (tv_sec < rhs.tv_sec) return true; else if (tv_sec > rhs.tv_sec) return false; else if (tv_usec < rhs.tv_usec) return true; else if (tv_usec > rhs.tv_usec) return false; return true; } bool operator>(const UTIME & rhs) const { if (tv_sec > rhs.tv_sec) return true; else if (tv_sec < rhs.tv_sec) return false; else if (tv_usec > rhs.tv_usec) return true; return false; } bool operator>=(const UTIME & rhs) const { if (tv_sec > rhs.tv_sec) return true; else if (tv_sec < rhs.tv_sec) return false; else if (tv_usec > rhs.tv_usec) return true; else if (tv_usec < rhs.tv_usec) return false; return true; } bool operator==(const UTIME & rhs) const { //cout << tv_sec << "." << tv_usec << " " << rhs.tv_sec << "." << rhs.tv_usec << endl; //cout << (tv_sec == rhs.tv_sec) << " " << (tv_usec == rhs.tv_usec) << endl; return (tv_sec == rhs.tv_sec) && (tv_usec == rhs.tv_usec); } UTIME operator+(const UTIME & rhs) { // TODO optimize long long a, b; a = tv_sec * 1000000 + tv_usec; b = rhs.tv_sec * 1000000 + rhs.tv_usec; tv_sec = (a + / 1000000; tv_usec = (a + % 1000000; return UTIME((a + / 1000000, (a + % 1000000); } UTIME operator-(const UTIME & rhs) { // TODO optimize long long a, b; a = tv_sec * 1000000 + tv_usec; b = rhs.tv_sec * 1000000 + rhs.tv_usec; return UTIME((a - / 1000000, (a - % 1000000); } }; #endif //UTIME_H Link to post Share on other sites
Garik 51 Posted 2008-07-16 08:50:15 Share Posted 2008-07-16 08:50:15 Наблюдаю точь в точь описанную в топике проблему с авторизацией. Примерно, раз в три-четыре дня появляется жалоба о невозможности подключиться. Решается проблема только перезагрузкой сервера. у нас та же фигня! сервер 2.405 с вебадминкой Алферова, ось фря 7. Link to post Share on other sites
madf 279 Posted 2008-07-16 08:59:22 Share Posted 2008-07-16 08:59:22 inetaccess.cpp > 15:07:08 > Phase2.user Plan curtime-2ndtime 14, udelay 15 inetaccess.cpp > 15:07:08 > Phase2.user Plan curtime-2ndtime -4280, udelay 15 - почему 2 раза? К стати, вчера товарищ поделился интересным наблюдением: он не смох превысить предел в 890 авторизованных юзеров - остальные "вешались". А у вас сколько? Link to post Share on other sites
Dimension 39 Posted 2008-07-16 16:20:19 Share Posted 2008-07-16 16:20:19 +1 к теме. У нас такой же баг. Написал тут http://local.com.ua/forum/index.php?showtopic=12223 , а потом уже нашел эту тему. Уже замучался перегружать стг... З.Ы. юзеров онлайн до 60-ти Link to post Share on other sites
napTu 4 Posted 2008-07-16 21:02:00 Author Share Posted 2008-07-16 21:02:00 inetaccess.cpp > 15:07:08 > Phase2.user Plan curtime-2ndtime 14, udelay 15 inetaccess.cpp > 15:07:08 > Phase2.user Plan curtime-2ndtime -4280, udelay 15 - почему 2 раза? действительно, интересно... еслибы раз залип, то надолго... тут такое дело - этот юзер вообще не подключается, ему похоже фаервол мешает. К стати, вчера товарищ поделился интересным наблюдением: он не смох превысить предел в 890 авторизованных юзеров - остальные "вешались". А у вас сколько? у нас много меньше за последние несколько дней я так спокойно еще никогда себя не чувствовал простой патч для исправления этого бага - вписать в ...argazer/plugins/authorization/inetaccess/inetaccess.cpp в процедуру ::Timeouter строчку int AUTH_IA::Timeouter() { STG_LOCKER lock(&mutex, __FILE__, __LINE__); map<uint32_t, IA_USER>::iterator it; it = ip2user.begin(); uint32_t sip; //UTIME rz; //printfd(__FILE__, "ip2user.size=%d \n", ip2user.size()); while (it != ip2user.end()) { sip = it->first; if (it->second.phase == 0) it->second.phase = 1; static UTIME currTime; gettimeofday(&currTime, NULL); [b]if (currTime < it->second.phaseTime) { it->second.phaseTime=currTime; //#ifdef IA_DEBUG printfd(__FILE__, "Bad phasetime value - corrected\n"); //#endif }[/b] if (it->second.phase == 2) Link to post Share on other sites
Dimension 39 Posted 2008-07-19 11:24:13 Share Posted 2008-07-19 11:24:13 за последние несколько дней я так спокойно еще никогда себя не чувствовал простой патч для исправления этого бага - вписать в ...argazer/plugins/authorization/inetaccess/inetaccess.cpp в процедуру ::Timeouter строчку int AUTH_IA::Timeouter() { STG_LOCKER lock(&mutex, __FILE__, __LINE__); map<uint32_t, IA_USER>::iterator it; it = ip2user.begin(); uint32_t sip; //UTIME rz; //printfd(__FILE__, "ip2user.size=%d \n", ip2user.size()); while (it != ip2user.end()) { sip = it->first; if (it->second.phase == 0) it->second.phase = 1; static UTIME currTime; gettimeofday(&currTime, NULL); [b]if (currTime < it->second.phaseTime) { it->second.phaseTime=currTime; //#ifdef IA_DEBUG printfd(__FILE__, "Bad phasetime value - corrected\n"); //#endif }[/b] if (it->second.phase == 2) Попробывали. Нам этот способ не помог, висяки остались! ((( Link to post Share on other sites
napTu 4 Posted 2008-07-22 10:50:30 Author Share Posted 2008-07-22 10:50:30 да, точно, ситуация повторяется... Link to post Share on other sites
Slava 1 Posted 2008-07-22 11:43:38 Share Posted 2008-07-22 11:43:38 Доброго времени суток! вопрос к разработчикам в версии 2.405 в changelog-е есть пункт Исправлена ошибка, приводящая к неправильной работе модуля mod_auth_ia.so исправляет ли он эту проблему так как на версии 2.404 такая проблема повторяется примерно раз в 2 дня при 250 пользователях в базе и онлайн 15-30 чел Link to post Share on other sites
madf 279 Posted 2008-07-23 11:04:56 Share Posted 2008-07-23 11:04:56 Доброго времени суток!вопрос к разработчикам в версии 2.405 в changelog-е есть пункт исправляет ли он эту проблему так как на версии 2.404 такая проблема повторяется примерно раз в 2 дня при 250 пользователях в базе и онлайн 15-30 чел Именно обсуждаемую проблему - нет, не исправил. Иначе бы мы ее не обсуждали Link to post Share on other sites
Garik 51 Posted 2008-07-29 06:55:31 Share Posted 2008-07-29 06:55:31 Именно обсуждаемую проблему - нет, не исправил. Иначе бы мы ее не обсуждали есть вариант как-то временно решить проблемку путем "костыля" например? очень досаждает ставить всем "всегда онлайн" не подходит. Link to post Share on other sites
madf 279 Posted 2008-07-29 07:17:16 Share Posted 2008-07-29 07:17:16 Нет. Link to post Share on other sites
madf 279 Posted 2008-07-29 07:27:02 Share Posted 2008-07-29 07:27:02 Владельцам 405-й версии: попробуйте раскоментировать строки //#define IA_DEBUG (1) //#define IA_PHASE_DEBUG (1) в файле inetaccess.h, пересобрать его, положить в модули и перезапустить стг. После того как будет воспроизведен баг - отошлите мне файлик /var/log/stargazer.log.ia.log на faust@stg.dp.ua Link to post Share on other sites
napTu 4 Posted 2008-07-29 23:34:21 Author Share Posted 2008-07-29 23:34:21 после того как я себя пропатчил, а это уже больше 10 дней, проблема встретилась один раз, тогда как ранее это повторялось как минимум раз в 3-4 дня. всё же мой костыль, по моему, решает траблу в большей части. Поживем, посмотрим... Кстати у меня 2.404, мож в этом дело? Link to post Share on other sites
madf 279 Posted 2008-07-30 06:13:27 Share Posted 2008-07-30 06:13:27 после того как я себя пропатчил, а это уже больше 10 дней, проблема встретилась один раз, тогда как ранее это повторялось как минимум раз в 3-4 дня. всё же мой костыль, по моему, решает траблу в большей части. Поживем, посмотрим... Кстати у меня 2.404, мож в этом дело? В 405-й были решены некоторые проблемы с mod_auth_ia, в частности - с отрицательными временными интервалами. Link to post Share on other sites
Dimension 39 Posted 2008-08-07 07:21:52 Share Posted 2008-08-07 07:21:52 В 405-й были решены некоторые проблемы с mod_auth_ia, в частности - с отрицательными временными интервалами. поставили вот эту 405ую - 5 дней, полет нормальный, ни одного висяка пока замечено не было З.Ы. дебаг описанный выше включили... Link to post Share on other sites
madf 279 Posted 2008-08-07 07:43:02 Share Posted 2008-08-07 07:43:02 поставили вот эту 405ую - 5 дней, полет нормальный, ни одного висяка пока замечено не былоЗ.Ы. дебаг описанный выше включили... А какова нагрузка на серв? Сколько юзеров и сколько из них онлайн? Пока косяки замечались в крупных сетях... Link to post Share on other sites
Dimension 39 Posted 2008-08-09 08:16:14 Share Posted 2008-08-09 08:16:14 глюк, прибейте пост Link to post Share on other sites
Dimension 39 Posted 2008-08-09 08:16:40 Share Posted 2008-08-09 08:16:40 А какова нагрузка на серв? Сколько юзеров и сколько из них онлайн?Пока косяки замечались в крупных сетях... отписал в личку Link to post Share on other sites
hexer 5 Posted 2008-08-10 10:39:06 Share Posted 2008-08-10 10:39:06 та же фигня, в базе 350 чел, онлайн обычно около 100 чел. Вроде не такая уж и крупная сеть. И некоторые клиенты не могут подключиться ао несколько суток уже, и перезагрузка уже не помогает! Link to post Share on other sites
Dimension 39 Posted 2008-08-10 12:57:55 Share Posted 2008-08-10 12:57:55 та же фигня, в базе 350 чел, онлайн обычно около 100 чел. Вроде не такая уж и крупная сеть. И некоторые клиенты не могут подключиться ао несколько суток уже, и перезагрузка уже не помогает! ну это уже вероятно другая проблема... Link to post Share on other sites
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now