summaryrefslogtreecommitdiffstats
path: root/python/knot_resolver/datamodel
diff options
context:
space:
mode:
Diffstat (limited to 'python/knot_resolver/datamodel')
-rw-r--r--python/knot_resolver/datamodel/config_schema.py4
-rw-r--r--python/knot_resolver/datamodel/defer_schema.py15
-rw-r--r--python/knot_resolver/datamodel/templates/defer.lua.j210
-rw-r--r--python/knot_resolver/datamodel/templates/policy-config.lua.j26
-rw-r--r--python/knot_resolver/datamodel/templates/worker-config.lua.j23
5 files changed, 38 insertions, 0 deletions
diff --git a/python/knot_resolver/datamodel/config_schema.py b/python/knot_resolver/datamodel/config_schema.py
index 641032dc..6329add3 100644
--- a/python/knot_resolver/datamodel/config_schema.py
+++ b/python/knot_resolver/datamodel/config_schema.py
@@ -17,6 +17,7 @@ from knot_resolver.datamodel.monitoring_schema import MonitoringSchema
from knot_resolver.datamodel.network_schema import NetworkSchema
from knot_resolver.datamodel.options_schema import OptionsSchema
from knot_resolver.datamodel.rate_limiting_schema import RateLimitingSchema
+from knot_resolver.datamodel.defer_schema import DeferSchema
from knot_resolver.datamodel.templates import POLICY_CONFIG_TEMPLATE, WORKER_CONFIG_TEMPLATE
from knot_resolver.datamodel.types import EscapedStr, IntPositive, WritableDir
from knot_resolver.datamodel.view_schema import ViewSchema
@@ -108,6 +109,7 @@ class KresConfig(ConfigSchema):
monitoring: Metrics exposisition configuration (Prometheus, Graphite)
lua: Custom Lua configuration.
rate_limiting: Configuration of rate limiting.
+ defer: Configuration of request prioritization (defer).
"""
version: int = 1
@@ -129,6 +131,7 @@ class KresConfig(ConfigSchema):
logging: LoggingSchema = LoggingSchema()
monitoring: MonitoringSchema = MonitoringSchema()
rate_limiting: Optional[RateLimitingSchema] = None
+ defer: DeferSchema = DeferSchema()
lua: LuaSchema = LuaSchema()
_LAYER = Raw
@@ -151,6 +154,7 @@ class KresConfig(ConfigSchema):
logging: LoggingSchema
monitoring: MonitoringSchema
rate_limiting: Optional[RateLimitingSchema]
+ defer: DeferSchema
lua: LuaSchema
def _hostname(self, obj: Raw) -> Any:
diff --git a/python/knot_resolver/datamodel/defer_schema.py b/python/knot_resolver/datamodel/defer_schema.py
new file mode 100644
index 00000000..38301e55
--- /dev/null
+++ b/python/knot_resolver/datamodel/defer_schema.py
@@ -0,0 +1,15 @@
+from knot_resolver.utils.modeling import ConfigSchema
+from knot_resolver.datamodel.types import TimeUnit
+
+
+class DeferSchema(ConfigSchema):
+ """
+ Configuration of request prioritization (defer).
+
+ ---
+ enabled: Use request prioritization.
+ log_period: Minimal time between two log messages, or '0s' to disable.
+ """
+
+ enabled: bool = False
+ log_period: TimeUnit = TimeUnit("0s")
diff --git a/python/knot_resolver/datamodel/templates/defer.lua.j2 b/python/knot_resolver/datamodel/templates/defer.lua.j2
new file mode 100644
index 00000000..131b71c4
--- /dev/null
+++ b/python/knot_resolver/datamodel/templates/defer.lua.j2
@@ -0,0 +1,10 @@
+{% from 'macros/common_macros.lua.j2' import boolean %}
+
+{% if cfg.defer.enabled and not disable_defer -%}
+assert(C.defer_init(
+ '{{ cfg.rundir }}/defer',
+ {{ cfg.defer.log_period.millis() }},
+ {{ cfg.workers }}) == 0)
+{% else %}
+assert(C.defer_init(nil, 0, 0) == 0)
+{%- endif %}
diff --git a/python/knot_resolver/datamodel/templates/policy-config.lua.j2 b/python/knot_resolver/datamodel/templates/policy-config.lua.j2
index 4c5c9048..9d88537a 100644
--- a/python/knot_resolver/datamodel/templates/policy-config.lua.j2
+++ b/python/knot_resolver/datamodel/templates/policy-config.lua.j2
@@ -35,6 +35,12 @@ cache.open({{ cfg.cache.size_max.bytes() }}, 'lmdb://{{ cfg.cache.storage }}')
-- FORWARD section ----------------------------------
{% include "forward.lua.j2" %}
+-- DEFER section ------------------------------------
+-- Force-disable defer to avoid the default defer config.
+{% set disable_defer = true %}
+{% include "defer.lua.j2" %}
+
+
{% endif %}
quit()
diff --git a/python/knot_resolver/datamodel/templates/worker-config.lua.j2 b/python/knot_resolver/datamodel/templates/worker-config.lua.j2
index c97f0820..be7fe150 100644
--- a/python/knot_resolver/datamodel/templates/worker-config.lua.j2
+++ b/python/knot_resolver/datamodel/templates/worker-config.lua.j2
@@ -46,6 +46,9 @@ nsid.name('{{ cfg.nsid }}' .. worker.id)
-- RATE-LIMITING section ------------------------------------
{% include "rate_limiting.lua.j2" %}
+-- DEFER section ------------------------------------
+{% include "defer.lua.j2" %}
+
{% endif %}
-- LUA section --------------------------------------