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