Очень интересная разработка.<br>А что такое caterva?<br><br><div class="gmail_quote">9 апреля 2009 г. 16:07 пользователь Pavel Wolneykien <span dir="ltr"><<a href="mailto:manowar@altlinux.org">manowar@altlinux.org</a>></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 <<a href="mailto:nick.grechukh@gmail.com">nick.grechukh@gmail.com</a>> wrote:<br>
<br>
> 2009/4/9 Michael Shigorin <>:<br>
> > On Wed, Apr 08, 2009 at 11:58:42PM +0400, QA Team Robot wrote:<br>
> >> metalterator - Alterator meta-backend with additional Guile modules<br>
> >> * Wed Apr 08 2009 Paul Wolneykien <manowar@altlinux> 1.0-alt1<br>
> >> - Initial release.<br>
> ><br>
> > Расскажете подробнее? На <a href="http://www.altlinux.org/Alterator" target="_blank">http://www.altlinux.org/Alterator</a><br>
> > и в окрестностях ничего не нашёл, а интересно.<br>
<br>
Это радует, что интересно. ;)<br>
<br>
><br>
> 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@ сказал: "ФС -- это одна из самых клёвых встроенных БД!".<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>
операций более низкого уровня, дал термин "метабакенд" или<br>
"бакенд-для-бакенда". Название пакета "metalterator" было выбрано вместо<br>
alterator-meta как обладающее более интересным, неоднозначным прочтением.<br>
<br>
На сегодняшний день (ему уже 2 дня) metalterator умеет отображать на<br>
ФС как стандартные woo-команды "read", "write", "list", "new" и<br>
"delete", так и парочку специальных: "link" и "read-next". Первая<br>
создаёт ссылку на объект, путь до которого указано в параметре<br>
"name". Ссылки на несуществующие объекты удаляются при попытке их<br>
прочитать, поэтому есть кое-какая ссылочная целостность. Вторая команда<br>
позволяет прочесть указанные атрибуты объекта с одновременным их<br>
увеличением на 1, что удобно для генерации идентификаторов.<br>
<br>
Из интересных свойств можно отметить отображение имён параметров при<br>
чтении, и режим отладки.<br>
<br>
Отображение имён включается если в команде на чтение данных ("read"<br>
или "list") был указан один или несколько параметров. Сначала я думал<br>
использовать их только для выбора атрибутов объекта, сообщаемых в<br>
ответе. Но, поскольку в woo-команде нельзя перечислить имена параметров<br>
не сообщив их значений, то я решил что незачем этим значениям зря<br>
пропадать: теперь значения параметров запроса на чтение являются именами<br>
параметров ответа. Если была дана команда прочесть атрибут, который не<br>
задан в объекте, то будет явно возвращено значение #f. Для чтения всех<br>
атрибутов достаточно опустить список параметров в запросе "read". Запрос<br>
"list", наоборот, по умолчанию вернёт только имена объектов, а для<br>
выполнения дополнительных операций по чтению атрибутов об этом нужно<br>
явно сообщить, перечислив интересующие имена. Отображение имён, в этом<br>
случае, позволяет сразу же адаптировать ответы метабакенда для их<br>
передачи во фронтенд: например, "list" 'comment "label" позволит сразу<br>
же получить набор объектов (("obj1" label "val1") ("obj2" label<br>
"val2")...) из набора объектов (("obj1" comment "val1") ("obj2" comment<br>
"val2")...).<br>
<br>
Режим отладки включается записью положительного значения в атрибут<br>
корневого объекта метабакенда:<br>
<br>
alterator-cmdline /meta "write" debug-level 5<br>
<br>
установит максимальный уровень детализации отладочных сообщений.<br>
<br>
Да, совсем забыл: полное имя объекта, т.е. всё, что идёт после /meta<br>
интерпретируется как путь месту в ФС! К примеру,<br>
<br>
alterator-cmdline /meta/etc/metalterator/squid/squid "write" http_port "3128"<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>