madf 279 Опубликовано: 2008-07-12 09:09:20 Share Опубликовано: 2008-07-12 09:09:20 А покажи, плиз, код include/utime.h Там в операторах одно время были проблемы. Может, тебе достался непофикшенный вариант? Ссылка на сообщение Поделиться на других сайтах
madf 279 Опубликовано: 2008-07-12 09:22:37 Share Опубликовано: 2008-07-12 09:22:37 Еще, теоретически, юзер может застревать в фазе 4. В Process_CONN_SYN добавь вывод фазы. Чтобы уж наверняка. Ссылка на сообщение Поделиться на других сайтах
napTu 4 Опубликовано: 2008-07-12 19:21:30 Автор Share Опубликовано: 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 сейчас проблему наблюдаю у двух пользователей. куда копать не понимаю... странно, но перезапуск сервера не изменил ситуацию. возможно это у них с фаерволом проблема. всё же ситуация не вчерашняя, тогда не было фазопереходов. жду дальше... Ссылка на сообщение Поделиться на других сайтах
madf 279 Опубликовано: 2008-07-13 07:02:47 Share Опубликовано: 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. Такова логика работы протокола. Нужно понять в каком месте "зависает" юзер. Ссылка на сообщение Поделиться на других сайтах
napTu 4 Опубликовано: 2008-07-13 07:41:09 Автор Share Опубликовано: 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 ... Ссылка на сообщение Поделиться на других сайтах
napTu 4 Опубликовано: 2008-07-13 07:51:59 Автор Share Опубликовано: 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 Ссылка на сообщение Поделиться на других сайтах
Garik 51 Опубликовано: 2008-07-16 08:50:15 Share Опубликовано: 2008-07-16 08:50:15 Наблюдаю точь в точь описанную в топике проблему с авторизацией. Примерно, раз в три-четыре дня появляется жалоба о невозможности подключиться. Решается проблема только перезагрузкой сервера. у нас та же фигня! сервер 2.405 с вебадминкой Алферова, ось фря 7. Ссылка на сообщение Поделиться на других сайтах
madf 279 Опубликовано: 2008-07-16 08:59:22 Share Опубликовано: 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 авторизованных юзеров - остальные "вешались". А у вас сколько? Ссылка на сообщение Поделиться на других сайтах
Dimension 37 Опубликовано: 2008-07-16 16:20:19 Share Опубликовано: 2008-07-16 16:20:19 +1 к теме. У нас такой же баг. Написал тут http://local.com.ua/forum/index.php?showtopic=12223 , а потом уже нашел эту тему. Уже замучался перегружать стг... З.Ы. юзеров онлайн до 60-ти Ссылка на сообщение Поделиться на других сайтах
napTu 4 Опубликовано: 2008-07-16 21:02:00 Автор Share Опубликовано: 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) Ссылка на сообщение Поделиться на других сайтах
Dimension 37 Опубликовано: 2008-07-19 11:24:13 Share Опубликовано: 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) Попробывали. Нам этот способ не помог, висяки остались! ((( Ссылка на сообщение Поделиться на других сайтах
napTu 4 Опубликовано: 2008-07-22 10:50:30 Автор Share Опубликовано: 2008-07-22 10:50:30 да, точно, ситуация повторяется... Ссылка на сообщение Поделиться на других сайтах
Slava 1 Опубликовано: 2008-07-22 11:43:38 Share Опубликовано: 2008-07-22 11:43:38 Доброго времени суток! вопрос к разработчикам в версии 2.405 в changelog-е есть пункт Исправлена ошибка, приводящая к неправильной работе модуля mod_auth_ia.so исправляет ли он эту проблему так как на версии 2.404 такая проблема повторяется примерно раз в 2 дня при 250 пользователях в базе и онлайн 15-30 чел Ссылка на сообщение Поделиться на других сайтах
madf 279 Опубликовано: 2008-07-23 11:04:56 Share Опубликовано: 2008-07-23 11:04:56 Доброго времени суток!вопрос к разработчикам в версии 2.405 в changelog-е есть пункт исправляет ли он эту проблему так как на версии 2.404 такая проблема повторяется примерно раз в 2 дня при 250 пользователях в базе и онлайн 15-30 чел Именно обсуждаемую проблему - нет, не исправил. Иначе бы мы ее не обсуждали Ссылка на сообщение Поделиться на других сайтах
Garik 51 Опубликовано: 2008-07-29 06:55:31 Share Опубликовано: 2008-07-29 06:55:31 Именно обсуждаемую проблему - нет, не исправил. Иначе бы мы ее не обсуждали есть вариант как-то временно решить проблемку путем "костыля" например? очень досаждает ставить всем "всегда онлайн" не подходит. Ссылка на сообщение Поделиться на других сайтах
madf 279 Опубликовано: 2008-07-29 07:17:16 Share Опубликовано: 2008-07-29 07:17:16 Нет. Ссылка на сообщение Поделиться на других сайтах
madf 279 Опубликовано: 2008-07-29 07:27:02 Share Опубликовано: 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 Ссылка на сообщение Поделиться на других сайтах
napTu 4 Опубликовано: 2008-07-29 23:34:21 Автор Share Опубликовано: 2008-07-29 23:34:21 после того как я себя пропатчил, а это уже больше 10 дней, проблема встретилась один раз, тогда как ранее это повторялось как минимум раз в 3-4 дня. всё же мой костыль, по моему, решает траблу в большей части. Поживем, посмотрим... Кстати у меня 2.404, мож в этом дело? Ссылка на сообщение Поделиться на других сайтах
madf 279 Опубликовано: 2008-07-30 06:13:27 Share Опубликовано: 2008-07-30 06:13:27 после того как я себя пропатчил, а это уже больше 10 дней, проблема встретилась один раз, тогда как ранее это повторялось как минимум раз в 3-4 дня. всё же мой костыль, по моему, решает траблу в большей части. Поживем, посмотрим... Кстати у меня 2.404, мож в этом дело? В 405-й были решены некоторые проблемы с mod_auth_ia, в частности - с отрицательными временными интервалами. Ссылка на сообщение Поделиться на других сайтах
Dimension 37 Опубликовано: 2008-08-07 07:21:52 Share Опубликовано: 2008-08-07 07:21:52 В 405-й были решены некоторые проблемы с mod_auth_ia, в частности - с отрицательными временными интервалами. поставили вот эту 405ую - 5 дней, полет нормальный, ни одного висяка пока замечено не было З.Ы. дебаг описанный выше включили... Ссылка на сообщение Поделиться на других сайтах
madf 279 Опубликовано: 2008-08-07 07:43:02 Share Опубликовано: 2008-08-07 07:43:02 поставили вот эту 405ую - 5 дней, полет нормальный, ни одного висяка пока замечено не былоЗ.Ы. дебаг описанный выше включили... А какова нагрузка на серв? Сколько юзеров и сколько из них онлайн? Пока косяки замечались в крупных сетях... Ссылка на сообщение Поделиться на других сайтах
Dimension 37 Опубликовано: 2008-08-09 08:16:14 Share Опубликовано: 2008-08-09 08:16:14 глюк, прибейте пост Ссылка на сообщение Поделиться на других сайтах
Dimension 37 Опубликовано: 2008-08-09 08:16:40 Share Опубликовано: 2008-08-09 08:16:40 А какова нагрузка на серв? Сколько юзеров и сколько из них онлайн?Пока косяки замечались в крупных сетях... отписал в личку Ссылка на сообщение Поделиться на других сайтах
hexer 5 Опубликовано: 2008-08-10 10:39:06 Share Опубликовано: 2008-08-10 10:39:06 та же фигня, в базе 350 чел, онлайн обычно около 100 чел. Вроде не такая уж и крупная сеть. И некоторые клиенты не могут подключиться ао несколько суток уже, и перезагрузка уже не помогает! Ссылка на сообщение Поделиться на других сайтах
Dimension 37 Опубликовано: 2008-08-10 12:57:55 Share Опубликовано: 2008-08-10 12:57:55 та же фигня, в базе 350 чел, онлайн обычно около 100 чел. Вроде не такая уж и крупная сеть. И некоторые клиенты не могут подключиться ао несколько суток уже, и перезагрузка уже не помогает! ну это уже вероятно другая проблема... Ссылка на сообщение Поделиться на других сайтах
Рекомендованные сообщения
Создайте аккаунт или войдите в него для комментирования
Вы должны быть пользователем, чтобы оставить комментарий
Создать аккаунт
Зарегистрируйтесь для получения аккаунта. Это просто!
Зарегистрировать аккаунтВойти
Уже зарегистрированы? Войдите здесь.
Войти сейчас