Skip to content
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

Fix telegram plugin build without mongo #128

Open
wants to merge 1 commit into
base: master
Choose a base branch
from

Conversation

vvd170501
Copy link
Contributor

No description provided.

@@ -16,6 +16,16 @@

#include "mongo_conn.h"

#if HAVE_LIBMONGOC - 0 > 0 || HAVE_LIBMONGO_CLIENT - 0 == 1
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Без mongo достаточно определить функцию mongo_conn_create, остальное не нужно

@@ -170,7 +190,7 @@ mongo_conn_free(struct mongo_conn *conn)
}
return NULL;
#else
return NULL;
#error mongo packages are missing
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Из-за #ifа в начале файла этот #else никогда не выполнится. Поставил #error, чтобы при возможном рефакторинге в будущем случайно не включить компиляцию ненужных функций.

telegram_pbs_fetch(struct mongo_conn *conn, const unsigned char *bot_id);
int
telegram_pbs_save(struct mongo_conn *conn, const struct telegram_pbs *pbs);
#define TELEGRAM_BOTS_TABLE_NAME "telegram_bots"
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Дальше перенесённый код из telegram_*.c

@@ -342,6 +344,10 @@ prepare_func(
err("telegram: invalid storage '%s'", storage);
return -1;
}
if (!conn) {
err("telegram: storage '%s' is not supported", storage);
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Для <storage>mongo</storage>, если ejudge скомпилирован без mongo

@vvd170501
Copy link
Contributor Author

vvd170501 commented Dec 28, 2022

Проверил сборку на ubuntu 22.04 с установленным пакетом libmongoc-dev и без него. Оба варианта собираются без ошибок.

Запустил с таким конфигом:

  ...
  <plugins>
    <plugin type="common" name="mongo" load="yes">
      <config>
      </config>
    </plugin>
    ...
    <plugin type="sn" name="telegram" load="yes">
      <config>
        <bots>
          <bot>...</bot>
        </bots>
      </config>
    </plugin>
  </plugins>
  ...

В сборке без mongo ej-jobs выдаёт ошибку при загрузке плагина:

2022-12-28T19:06:00Z:error:telegram: storage 'mongo' is not supported
2022-12-28T19:06:00Z:error:plugin_load_external: prepare failed for sn, telegram

В сборке с mongo такой конфиг работает. Получилось подписать пользователя на уведомления о ревью и отправить сообщение с реджектом посылки.

@blackav
Copy link
Owner

blackav commented Dec 28, 2022

Огромный MR с кучей удаляемого кода.

@blackav
Copy link
Owner

blackav commented Dec 28, 2022

Исправления отдельно, удаления отдельно.

@vvd170501
Copy link
Contributor Author

Исправления отдельно, удаления отдельно.

Перенёс исправления в #129

@vvd170501 vvd170501 force-pushed the telegram-remove-mongo branch 5 times, most recently from 0462261 to a5e4726 Compare December 29, 2022 13:53
@avm
Copy link
Contributor

avm commented Sep 18, 2024

@blackav что нужно сделать, чтобы это помержить?

@blackav
Copy link
Owner

blackav commented Sep 18, 2024

Вроде как фикс компиляции без монги переехал в #129 и давно вмержен. А этот патч удаляет очень много кода и трогает много файлов просто чтобы выпилить код монги.

@vvd170501
Copy link
Contributor Author

В #129 я перенёс фиксы недостающих зависимостей и логических багов (не помню, почему я изначально хотел добавить всё в одном PR).
Сборка без mongo всё ещё не работает. Одна из причин - ej_bson_t определяется только при наличии mongo, а функции, использующие этот тип, определяются всегда. Возможно, были ещё какие-то проблемы, но сейчас я не вспомню.

Наверное, можно было просто добавить дополнительных макросов во все telegram_*.c, но я посмотрел, как реализовано mysql-соединение (весь код, специфичный для mysql, лежит в mysql_conn.c), и решил сделать то же самое для mongo-соединения - перенести детали реализации в mongo_conn.c, а потом поместить всё содержимое файла под один общий #if.

@blackav
Copy link
Owner

blackav commented Sep 19, 2024

  • Нужно разделить зависимости от libmongoc и libbson. Libbson может использоваться независимо от libmongoc. И в ejudge libbson может использоваться для хранения протоколов.
  • Нужно отдельно выпилить код, который использует старую библиотеку libmongo-client. Эта библиотека выглядит заброшенной.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants