New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Open
pavel-pimenov opened this Issue Aug 23, 2015 · 5 comments

Comments

Projects
None yet
1 participant
@pavel-pimenov
Copy link
Owner

pavel-pimenov commented Aug 23, 2015

From Pavel.Pimenov@gmail.com on March 14, 2013 06:24:19

  1. В ревизии https://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: http://code.google.com/p/flylinkdc/issues/detail?id=931

@pavel-pimenov

This comment has been minimized.

Copy link
Owner

pavel-pimenov commented Aug 23, 2015

From a.rain...@gmail.com on March 14, 2013 13:22:33

Это не лишние данные, обсуждали же, что в плохие источники юзер может попасть по многим причинам. А после перезапуска программы лучше вернуть все найденные ранее источники в хорошие, и если плохие так и остались плохими - они будут автоматом переведены в плохие. Собственно комментарий:

  • Исправлены ошибки при сохранении источников у закачек в базу - теряли не
    полные источники, а так же источники, временно помеченные как "плохие".
@pavel-pimenov

This comment has been minimized.

Copy link
Owner

pavel-pimenov commented Aug 23, 2015

From Pavel.Pimenov@gmail.com on March 14, 2013 19:25:56

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

@pavel-pimenov

This comment has been minimized.

Copy link
Owner

pavel-pimenov commented Aug 23, 2015

From Pavel.Pimenov@gmail.com on March 14, 2013 23:35:02

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

Это я в свое время лоханулся и не построил уникальный индекс по полям
(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

Attachment: fly-queue-source-unque-violations.png

@pavel-pimenov

This comment has been minimized.

Copy link
Owner

pavel-pimenov commented Aug 23, 2015

From a.rain...@gmail.com on June 23, 2013 05:31:26

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

@pavel-pimenov

This comment has been minimized.

Copy link
Owner

pavel-pimenov commented Aug 23, 2015

From Pavel.Pimenov@gmail.com on July 01, 2013 23:28:34

Дубликаты по CID - проблема не закрыта https://code.google.com/p/flylinkdc/source/detail?r=14334 http://www.flickr.com/photos/96019675@N02/9186810812/ 1. Ник заполнен и CID тоже
но при этом стоит число - количество вложений CountSubSource integer
лежит число 2

  1. В дочерней таблице при том три записи и одна из них без ника. http://www.flickr.com/photos/96019675@N02/9186831154/ Тут дубликат CID-а
    одно и тоже значения и в мастер таблице и в дочерней.
    что это значит?
    ведь в этом случае CID добавляется два раза в коллекцию
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment