Очень интересная разработка.<br>А что такое caterva?<br><br><div class="gmail_quote">9 апреля 2009 г. 16:07 пользователь Pavel Wolneykien <span dir="ltr">&lt;<a href="mailto:manowar@altlinux.org">manowar@altlinux.org</a>&gt;</span> написал:<br>
<blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"><br>
Mykola S. Grechukh &lt;<a href="mailto:nick.grechukh@gmail.com">nick.grechukh@gmail.com</a>&gt; wrote:<br>
<br>
&gt; 2009/4/9 Michael Shigorin &lt;&gt;:<br>
&gt; &gt; On Wed, Apr 08, 2009 at 11:58:42PM +0400, QA Team Robot wrote:<br>
&gt; &gt;&gt; metalterator - Alterator meta-backend with additional Guile modules<br>
&gt; &gt;&gt; * Wed Apr 08 2009 Paul Wolneykien &lt;manowar@altlinux&gt; 1.0-alt1<br>
&gt; &gt;&gt; - Initial release.<br>
&gt; &gt;<br>
&gt; &gt; Расскажете подробнее?  На <a href="http://www.altlinux.org/Alterator" target="_blank">http://www.altlinux.org/Alterator</a><br>
&gt; &gt; и в окрестностях ничего не нашёл, а интересно.<br>
<br>
  Это радует, что интересно. ;)<br>
<br>
&gt;<br>
&gt; description at <a href="http://tinyurl.com/d3x4ar" target="_blank">http://tinyurl.com/d3x4ar</a>  ?<br>
<br>
  Да, окромя аннотации к пакету ничего пока нету. :)<br>
  Но если дело пойдёт, то и документация обязательно появится.<br>
<br>
  Значит дело было так. Собрался я писать модуль для Squid (во второй<br>
раз, но это отдельная история). После разговора с wart@ и ldv@ мне стало<br>
совершенно понятно, что для работы с относительно сложным<br>
конфигурационным файлом нужна БД: ни читать, ни писать отдельные<br>
значения в файл нельзя -- всё перепутается. Зато сгенерировать такой<br>
файл целиком задача на порядок проще.<br>
<br>
  Тогда я стал думать: какую БД мне выбрать? Ясно что самую простую,<br>
поскольку данных, которыми может управлять пользователь в пределах<br>
одного модуля, скорее всего, немного. Поэтому критерием поиска БД стало<br>
удобство отображения в неё объектов Альтератора. И вот тут я понял, что<br>
неплохим хранилищем для этих объектов будет обычная файловая система! На<br>
что inger@ сказал: &quot;ФС -- это одна из самых клёвых встроенных БД!&quot;.<br>
<br>
 Ясно, что для отображения объектов в ФС нужен был отдельный набор<br>
функций. Начав выдумывать сигнатуры функций я заметил, что базовый набор<br>
повторяет woo-команды woo-read, woo-write, woo-new и woo-delete. Тогда я<br>
решил, что было бы интересно напрямую подключить БД к шине<br>
Woo-bus. Таким образом, вместо библиотеки я решил написать отдельный<br>
бакенд, который бы отображал woo-команды на файловую систему.<br>
<br>
  Конечно же работа модуля конфигуратора зачастую не исчерпывается<br>
чтением и записью состояний объектов, но кто сказал, что бакенды не<br>
могут выстраиваться в цепочки? Внутри Альтератора есть прямой доступ к<br>
шине, а внешние бакенды могут использовать команду alterator-cmdline.<br>
Так что идея мне показалась не такой уж плохой и я взялся за её<br>
реализацию. Образ бакенда, использующего другой бакенд для<br>
операций более низкого уровня, дал термин &quot;метабакенд&quot; или<br>
&quot;бакенд-для-бакенда&quot;. Название пакета &quot;metalterator&quot; было выбрано вместо<br>
alterator-meta как обладающее более интересным, неоднозначным прочтением.<br>
<br>
  На сегодняшний день (ему уже 2 дня) metalterator умеет отображать на<br>
ФС как стандартные woo-команды &quot;read&quot;, &quot;write&quot;, &quot;list&quot;, &quot;new&quot; и<br>
&quot;delete&quot;, так и парочку специальных: &quot;link&quot; и &quot;read-next&quot;. Первая<br>
создаёт ссылку на объект, путь до которого указано в параметре<br>
&quot;name&quot;. Ссылки на несуществующие объекты удаляются при попытке их<br>
прочитать, поэтому есть кое-какая ссылочная целостность. Вторая команда<br>
позволяет прочесть указанные атрибуты объекта с одновременным их<br>
увеличением на 1, что удобно для генерации идентификаторов.<br>
<br>
  Из интересных свойств можно отметить отображение имён параметров при<br>
чтении, и режим отладки.<br>
<br>
  Отображение имён включается если в команде на чтение данных (&quot;read&quot;<br>
или &quot;list&quot;) был указан один или несколько параметров. Сначала я думал<br>
использовать их только для выбора атрибутов объекта, сообщаемых в<br>
ответе. Но, поскольку в woo-команде нельзя перечислить имена параметров<br>
не сообщив их значений, то я решил что незачем этим значениям зря<br>
пропадать: теперь значения параметров запроса на чтение являются именами<br>
параметров ответа. Если была дана команда прочесть атрибут, который не<br>
задан в объекте, то будет явно возвращено значение #f. Для чтения всех<br>
атрибутов достаточно опустить список параметров в запросе &quot;read&quot;. Запрос<br>
&quot;list&quot;, наоборот, по умолчанию вернёт только имена объектов, а для<br>
выполнения дополнительных операций по чтению атрибутов об этом нужно<br>
явно сообщить, перечислив интересующие имена. Отображение имён, в этом<br>
случае, позволяет сразу же адаптировать ответы метабакенда для их<br>
передачи во фронтенд: например, &quot;list&quot; &#39;comment &quot;label&quot; позволит сразу<br>
же получить набор объектов ((&quot;obj1&quot; label &quot;val1&quot;) (&quot;obj2&quot; label<br>
&quot;val2&quot;)...) из набора объектов ((&quot;obj1&quot; comment &quot;val1&quot;) (&quot;obj2&quot; comment<br>
&quot;val2&quot;)...).<br>
<br>
  Режим отладки включается записью положительного значения в атрибут<br>
корневого объекта метабакенда:<br>
<br>
  alterator-cmdline /meta &quot;write&quot; debug-level 5<br>
<br>
установит максимальный уровень детализации отладочных сообщений.<br>
<br>
  Да, совсем забыл: полное имя объекта, т.е. всё, что идёт после /meta<br>
интерпретируется как путь месту в ФС! К примеру,<br>
<br>
  alterator-cmdline /meta/etc/metalterator/squid/squid &quot;write&quot; http_port &quot;3128&quot;<br>
<br>
обновит значение http_port в файле /etc/metalterator/squid/squid.scm.<br>
<br>
  В настоящее время единственным пользователем метабакенда является<br>
бакенд squid из пакета alterator-squid-1.0-alt1. Кстати сказать:<br>
конфигурацию по умолчанию этот пакет несёт с собой в виде набора файлов,<br>
которые он кладёт как есть прямо в /etc/metalterator/squid. По моему это<br>
тоже очень удобно!<br>
<br>
  Для адаптации ответов метабакенда (отрезания имени пославшего ответ<br>
объекта) существует макрос meta, определённый в модуле (alterator<br>
metalterator).<br>
<br>
  Павел.<br>
_______________________________________________<br>
devel-conf mailing list<br>
<a href="mailto:devel-conf@lists.altlinux.org">devel-conf@lists.altlinux.org</a><br>
<a href="https://lists.altlinux.org/mailman/listinfo/devel-conf" target="_blank">https://lists.altlinux.org/mailman/listinfo/devel-conf</a></blockquote></div><br>