CHUNGYUN / flylinkdc

Automatically exported from code.google.com/p/flylinkdc
0 stars 0 forks source link

TODO Провести ревизию кода по заполнению fly_queue_source #931

Open GoogleCodeExporter opened 9 years ago

GoogleCodeExporter commented 9 years ago
1. В ревизии http://code.google.com/p/flylinkdc/source/detail?r=11936#
исправлен код CFlylinkDBManager::merge_queue_item
2. Таблица источников не имеет уникальности
 "CREATE TABLE IF NOT EXISTS fly_queue_source(id integer PRIMARY KEY AUTOINCREMENT NOT NULL,\n"
                "fly_queue_id integer not null,\n"
                "CID char(24) not null,\n"
                "Nick text\n"

3. Ежик в нее похоже скидывает лишние данные 
с нарушением целостности.
вот этим кодом.
                for (auto j = p_QueueItem->getSourcesL().cbegin()/* + 1*/; j != p_QueueItem->getSourcesL().cend(); ++j)
                {
                    // [-] if (j->isSet(QueueItem::Source::FLAG_PARTIAL)) continue; [-] IRainman fix: Each partial source will eventually become full, you can not lose them.
                    l_sql_source->bind(1, l_id);
                    l_sql_source->bind(2, j->getUser().user->getCID().data(), 24, SQLITE_TRANSIENT);
                    l_sql_source->bind(3, j->getUser().user->getFirstNick(), SQLITE_TRANSIENT);
                    l_sql_source->executenonquery();
                }
                // [+] IRainman fix: All the bad sources of potential time bad, they must be re-add, not delete.
                for (auto j = p_QueueItem->getBadSourcesL().cbegin()/* + 1*/; j != p_QueueItem->getBadSourcesL().cend(); ++j)
                {
                    l_sql_source->bind(1, l_id);
                    l_sql_source->bind(2, j->getUser().user->getCID().data(), 24, SQLITE_TRANSIENT);
                    l_sql_source->bind(3, j->getUser().user->getFirstNick(), SQLITE_TRANSIENT);
                    l_sql_source->executenonquery();
                }
                // [~] IRainman fix.

Original issue reported on code.google.com by Pavel.Pimenov@gmail.com on 14 Mar 2013 at 5:24

GoogleCodeExporter commented 9 years ago
Это не лишние данные, обсуждали же, что в 
плохие источники юзер может попасть по 
многим причинам. А после перезапуска 
программы лучше вернуть все найденные 
ранее источники в хорошие, и если плохие 
так и остались плохими - они будут 
автоматом переведены в плохие. Собственно 
комментарий:
* Исправлены ошибки при сохранении 
источников у закачек в базу - теряли не
полные источники, а так же источники, 
временно помеченные как "плохие".

Original comment by a.rain...@gmail.com on 14 Mar 2013 at 8:22

GoogleCodeExporter commented 9 years ago
Эти два массива никогда не пересекаются?
т.е. CID тут уникальный в пределах fly_queue_id? 

Original comment by Pavel.Pimenov@gmail.com on 15 Mar 2013 at 2:25

GoogleCodeExporter commented 9 years ago
1. Качаем файлы
2. Убивам приложение в диспетчере.
4. Данные очереди остаются в sql-базе и 
подгружаются при следующем старте
5. В программе на файлах висит "соедиение" но 
ничего не качается
   висяк продолжается пока не пройдет операция 
      "Ищутся альтернативные источники по ТТН для XXX"
6. И сразу находятся и начинается скачка
7. Открываем базу и видим дубликаты

Это я в свое время лоханулся и не построил 
уникальный индекс по полям 
(fly_queue_id,CID)

TODO 
1. Подумать и починить закачку сразу после 
старта (проверить как ведут себя 
оригинальные клиенты).
2. Построить уникальный индекс (fly_queue_id,CID) 
обязательно с лидирующим fly_queue_id
3. Одиночный индекс CREATE INDEX i_fly_queue_source_id ON 
fly_queue_source(fly_queue_id) убить т.е. его заменит 
пункт 2

Original comment by Pavel.Pimenov@gmail.com on 15 Mar 2013 at 6:35

Attachments:

GoogleCodeExporter commented 9 years ago
>>Эти два массива никогда не пересекаются?
Нет не пересекутся, когда менеджер 
помечает источник как плохой, он 
перемещает его из одной коллекции в другую.

Original comment by a.rain...@gmail.com on 23 Jun 2013 at 12:31

GoogleCodeExporter commented 9 years ago
Дубликаты по CID - проблема не закрыта
https://code.google.com/p/flylinkdc/source/detail?r=14334

http://www.flickr.com/photos/96019675@N02/9186810812/
1. Ник заполнен и CID тоже
но при этом стоит число - количество 
вложений CountSubSource integer
лежит число 2

2. В дочерней таблице при том три записи и 
одна из них без ника.
http://www.flickr.com/photos/96019675@N02/9186831154/

Тут дубликат CID-а 
одно и тоже значения и в мастер таблице и в 
дочерней.
что это значит?
ведь в этом случае CID добавляется два раза в 
коллекцию

Original comment by Pavel.Pimenov@gmail.com on 2 Jul 2013 at 6:28