The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Cтaтeйкa :(


<< Предыдущая ИНДЕКС Поиск в статьях src Установить закладку Перейти на закладку Следующая >>

_ RU.LINUX (2:5077/15.22) ___________________________________________ RU.LINUX _
 From : Vladimir Butenko                    2:5020/400      Sun 29 Nov 98 07:44 
 Subj : Re: Cтaтeйкa :(                                                         
________________________________________________________________________________
From: [email protected] (Vladimir Butenko)

In article <[email protected]>, Igor Nikolaev
<[email protected]> wrote:


> Да я почти ничего не понял, что же по сути до с точки зрения
> этого самого mbox делается? Он заблокирован или нет? Что будет
> если Вася удалил 1 и 3 сообщение, а Петя 2 и 3 (в ящике были
> 1..4 и во время этого безобразия sendmail пытается добавить
> пятое) ?

:-((((. Это грустно. Че делать будем? Давайте так - если это только Вы не
поняли, то как-нибудь в феврале ко мне под"едете (не с пустыми руками, как
понятно), и я Вам это на бумажке за пять минут нарисую - под рюмочку
чайка. А если это хотя бы 10 людям интересно - то я напрягусь и попробую
тогда с самого начала описать все подробно (это часов пять писАть, на
бумажке - полчаса - но welcome to the Unix world - we are text-only). Тем
более таланты мои лекторские весьма ограниченны, так что - пять часов -
это я не шучу :-(


Проблема в том, что Вы так и не смогли отрешиться от терминов
"майлбокс-файл", "блокировка файла" и прочего. А их ведь просто может не
быть - майлбокс-файлов-то. Тут вот про maildir поминали - так все, что я
говорил, это и к ним подходит. Попробуйте еще раз мое сумбурное
перечитать, а я пока повторю основное:

а) есть об"ект - майлбокс. Как он устроен - не Ваше дело.
б) клиенты общаются не напрямую с майлбоксом, а каждый клиент получает
некий "view". В общем случае - они у всех разные.
в) То, что мессадж появился в майлбоксе (сендмайл добавил или другой клиент) -
   вовсе не означает, что он появится в чьем-то view.

г) То, что мессадж удалился из чьего-то view - вовсе не означает, что он
тут же удалился и из майлбокса.

д) То, что мессадж удалился из майлбокса - не означает, что он исчез из
view - там от него может остаться "затычка" (как сейчас происходит со view
POP клиентов, когда кто-то удаляет мессадж из того майлбокса, которые они
уже получили по команде LIST, и удалений не ожидают).

Вот так примерно выглядит доступ к одному майлбоксу из 3 клиентов...

  +--------------+   +--------------+    +--------------+
  | POP client   |   | POP client   |    | IMAP client  |
  +--------------+   +--------------+    +--------------+ 
         |                  |                  |
         |                  |                  |
---------------------------Server-----------------------------------
         |                  |                  |
  +--------------+   +--------------+    +--------------+
  | POP client   |   | POP client   |    | IMAP client  |
  |     agent    |   |     agent    |    |     agent    |
  +--------------+   +--------------+    +--------------+ 
         |                  |                  |
         |                  |                  |
         |                  |                  |
  +--------------+   +--------------+    +--------------+
  | VMailboxView |   | VMailboxView |    | VMailboxView |
  +--------------+   +--------------+    +--------------+ 
  | ID, flags    |   |  ID, flags   |    |  ID, flags   | - Таблицы мессаджей,
  | ID, flags    |   |  ID, flags   |    |  ID, flags   |   у каждого - свои.
  +--------------+   +--------------+    +--------------+ 
              \             |             /
               \            |            /
                \           |           /
                 \          |          /
                  \         |         /
                   \        |        /
                    \       |       /
  Appends (SMTP,  +------------------+
     -----------> |      VMailbox    |   абстрактный об"кт "майлбокс"
  append,copy)    +------------------+\
                           ||          \  Таблица мессаджей в РЕАЛЬHОМ майлбоксе
                           ||           +--------------------------+
                           ||           | ID, flags, specific data |
                           ||           | ID, flags, specific data |
                           ||           +--------------------------+
                           \/ 
                  +------------------+
                  |                  |   конкретные манагеры, которые
      +-----------|    VUnixMailBox  |   выполняют операции над конкретными
      |           +------------------+   майлбоксами - Unix (BSD), Folder
      | VFolderMailbox      |            (MailDir)
      +---------------------+ 



Вся основная логика в - VMailbox. Один сказал - удали мессадж (POP в конце
сессии). Он (сейчас) - удаляет (обращением к конкретному манагеру этого
типа
майлбокса - файл перетрясает для BSD, мессадж-файл стирает для MailDir -
не важно, а во все mailView - подставляет для этого ID флажок "тю-тю" - то
есть - "ты думаешь, что он еще есть? таки ты совсем не ничего не еще не
знаешь". IMAP клиенты в нужный момент просмотрит свой view - и навыдает
expunge- клиенту, а из свой таблички ID, flags - удалит: клиент видит
стираение "мгновенно". POP так не может, поэтому.... - далее перечитывайте
мой мессадж с начала, я думаю, так будет понятно.


Я, конечно, предвижу вопрос - "а где же все это - все эти "об"екты" лежат?
А ответ прост - это все - в памяти. В ОЗУ, так сказать. Когда майлбокс
открывается - кем угодно, то создается об"ект VMailbox для него, и
генерится первый view. Когда подлетают новые клиенты - им выдается просто
новый view (по теперешним правилам сгенеренный - это просто копия таблицы
из VMailbox на данный момент, для реализации Вашей семантики - копия
таблицы, за исключением элементов с пометкой "был грохнут, но кому-то еще
нужен"). При закрытии последнего view - закрывается и VMailbox.

Поэтому, кстати, если два POP-a полезут одновременно к 100МБ ящику, то
парсится он будет только один раз - потом таблица разбора лежит в памяти
(ID/flags у VMailbox) и обновляется по мере стирания/добавления.

Вот, кстати, для VAccount это сделано, а тут - еще нет. Когда последний
view отлетел - надо бы не удалять VMailbox, а - кэшировать. Оченно
помогает для больших майлбоксов (архив майл листов - это тоже майлбокс).
Hо - не сделано пока. А - надо. Чтобы если я потратил 30 сек. серверного
времени на открытие майлбокса, а потом отлетел и через минуту опять к нему
полез - чтобы он не пересканировал опять. Кэшик нужен. Он почти есть, но
раз "почти" - значит нету. Там кэшик похитрее - он с учетом времени,
затраченного на разбор майлбокса должен работать. Если майлбокс - 50К, то
его проще разобрать опять, чем кэшировать. Точнее, он должен из кэша
раньше вылетать, чем тот, который минуту разбирали.

Вот такие тут гитики.... Так что - попробуйте теперь понять, что я тогда
написал - искренне надеюсь, что теперь будет понятнее. А нет -
спрашивайте.

> Игорь Hиколаев

-- 
Vladimir Butenko
Stalker Software, Inc.
--- ifmail v.2.14dev2
 * Origin: Stalker Software, Inc. (2:5020/400@fidonet)

<< Предыдущая ИНДЕКС Поиск в статьях src Установить закладку Перейти на закладку Следующая >>



Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру