Написание PowerDNS бэк-энда в Lua - PullRequest
1 голос
/ 28 июня 2011

Я просто не могу заставить это работать. Сценарий отвечает правильно, и PowerDNS считает, что он работает, но тогда процесс никогда не выходит за рамки подтверждения его готовности.

Сервер PowerDNS застревает в read (), и все сетевые подключения через порт 53 полностью игнорируются. Сервер запускает процесс pdns_server, а также сам скрипт, и ничего не происходит. Вход на 9 уровне абсолютно бесполезен: ничего не происходит. То же самое относится и к "монитору pdns", за исключением того, что можно увидеть вывод stderr из скрипта.

Я поставил скрипт здесь . Это так расстраивает ... что мне не хватает? Это io.lines() звонок? Это потому что вход буферизирован?

Обновление: Я использую документацию , чтобы создать это. Я также посмотрел на другие языки (я знаю несколько) - такие как v6rev (хотя я не знаю Python) и этот пример бэкэнда в Java.

Обновление 2 Я бы лучше упомянул, что это также сочетается с gmysql бэкэндом; PowerDNS допускает несколько бэкэндов, хотя я не знаю специфики этого. Я изменил порядок бэкэндов в файле конфигурации, после чего изменений не было видно. Кроме того, запросы MySQL do работают. Без бэкэнда pipe бэкэнд MySQL прекрасно справляется с задачей.

1 Ответ

0 голосов
/ 28 июня 2011

Ни у кого нет никаких советов, так что ... это то, что я узнал.Это действительно связано с буферизацией - или, по крайней мере, так это выглядит.Изначально в коде были такие строки:

print("OK\tPowerDNS backend ok")

В этих строках была проблема;замена их на эту последовательность работала:

print("OK\tPowerDNS backend ok")
io.flush()

Однако - замена их на следующую последовательность сработала не :

io.write("OK\tPowerDNS backend ok")
io.flush()

Предположительно, это из-за некоторой разницымежду print() и io.write().Поиск деталей по вводу-выводу Lua без буферизации ничего не дал.Возможно, мне следует использовать io.stdout.write() вместо io.write().

Случайно я наткнулся на эту публикацию в списке рассылки Lua-Users, в котором упоминается setvbuf функция.Однако функция setvbuf кажется новой с Lua 5.1, поэтому она недоступна в Lua 5.0.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...