Добро пожаловать, Гость. Пожалуйста авторизуйтесь здесь.
FGHIGate на GaNJa NeTWoRK ST@Ti0N - Просмотр сообщения в эхоконференции RU.FTN.DEVELOP
Введите FGHI ссылку:


Присутствуют сообщения из эхоконференции RU.FTN.DEVELOP с датами от 12 Jul 13 20:52:30 до 25 Apr 24 08:46:43, всего сообщений: 2456
Ответить на сообщение К списку сообщений Предыдущее сообщение Следующее сообщение
= Сообщение: 1731 из 2456 =================================== RU.FTN.DEVELOP =
От   : Nil Alexandrov                   2:5015/46          17 Mar 21 09:31:04
Кому : Alexey Fayans                                       17 Mar 21 09:31:04
Тема : sqpack will reset BaseMsgNum to 1
FGHI : area://RU.FTN.DEVELOP?msgid=2:5015/46+6051a7a5
На   : area://RU.FTN.DEVELOP?msgid=2:5030/1997@fidonet+605196e0
= Кодировка сообщения определена как: CP866 ==================================
Ответ: area://RU.FTN.DEVELOP?msgid=2:5030/1997@fidonet+6051b378
==============================================================================
Hello, Alexey!

Wednesday March 17 2021 08:25, from Alexey Fayans -> Nil Alexandrov:

NA>> Я считаю, что поведение sqpack, когда упакованная база начинает
NA>> нумерацию BaseMsgNum снова с 1цы не корректное.
AF> Не согласен.

Хорошо, а объясни тогда зачем нужен BaseMsgNum?

AF> Когда я работал с движком skMHL, помню, были проблемы с
AF> базами, в которых BaseMsgNum после пуржинга не
AF> сбрасывался.[...skipped...]
AF>   GetHighest:=JamBaseHeader.BaseMsgNum + JamBaseHeader.ActiveMsgs;

Ну и нижний порог будет как раз BaseMsgNum.

Вот, например, NNTP для ньюсгруппы показывает 3 числа - *всего*, *первое*, *последнее*.
Если из *последнего* вычесть *первое*, то иногда это будет *всего*, а может и чуть больше, на количество удалённых сообщений.
Я бы вычислил эти цифры вот так:
Всего сообщений = JamBaseHeader.ActiveMsgs
Первое сообщение = BaseMsgNum
Последнее сообщение = BaseMsgNum + (размер_файла(.jdx) / 8)    -- sizeof(s_JamIndex)==8

Предположим у нас BaseMsgNum был 1, и было 1000 сообщений. Нам надо удалить первые 500.
После пуржинга BaseMsgNum должен быть 500, и в базе последние 500 сообщений.
В следующий раз клиент подключится и запросит, а дай все сообщения начиная с 1000го, и мы ему, так 1000ое и есть последние, тогда клиент понимает, новых нет.
А если бы BaseMsgNum каждый раз сбрасывался в 1, то клиент говорит дай с 1000го, а ему в отвер, чувак, у меня вообщето всего-то 500.

AF> Хорошо бы посмотреть, что говорит стандарт JAM по этому поводу.

Стандарта прям в FTSC понятии нет, но есть JAM-001 писулька от 93-07-01.

BaseMsgNum                        Lowest message number in index file
---------------------------------------------------------------------
This field determines the lowest message number in the index file.
The value for this field is one (1) when a message area is first
created. By using this field, a message area can be packed (deleted
messages are removed) without renumbering it. If BaseMsgNum contains
500, the first index record points to message number 500.

BaseMsgNum has to be taken into account when an application
calculates the next available message number (for creating new
messages) as well as the highest and lowest message number in a
 message area.

Я прочитал и у меня всё сходится.

Best Regards, Nil
--- GoldED+/LNX 1.1.5
* Origin: -=NIL BBS=- (2:5015/46)

К главной странице гейта
Powered by NoSFeRaTU`s FGHIGate
Открытие страницы: 0.085000 секунды