mirror of
https://github.com/pyMC-dev/pyMC_Repeater.git
synced 2026-08-07 17:33:16 +02:00
fix(advert): set default values to False for adaptive, rate limit, and penalty configurations
This commit is contained in:
@@ -6,9 +6,9 @@ Includes adaptive rate limiting based on mesh activity.
|
||||
"""
|
||||
|
||||
import asyncio
|
||||
import itertools
|
||||
import logging
|
||||
import time
|
||||
import itertools
|
||||
from collections import OrderedDict, deque
|
||||
from enum import Enum
|
||||
from typing import Dict, Optional, Tuple
|
||||
@@ -62,7 +62,7 @@ class AdvertHelper:
|
||||
|
||||
# --- Adaptive mode config ---
|
||||
adaptive_cfg = repeater_cfg.get("advert_adaptive", {})
|
||||
self._adaptive_enabled = bool(adaptive_cfg.get("enabled", True))
|
||||
self._adaptive_enabled = bool(adaptive_cfg.get("enabled", False))
|
||||
self._ewma_alpha = max(0.01, min(1.0, float(adaptive_cfg.get("ewma_alpha", 0.1))))
|
||||
self._tier_hysteresis_seconds = max(
|
||||
0.0, float(adaptive_cfg.get("hysteresis_seconds", 300.0))
|
||||
@@ -76,7 +76,7 @@ class AdvertHelper:
|
||||
|
||||
# --- Base rate limit config (scaled by tier) ---
|
||||
rate_cfg = repeater_cfg.get("advert_rate_limit", {})
|
||||
self._rate_limit_enabled = bool(rate_cfg.get("enabled", True))
|
||||
self._rate_limit_enabled = bool(rate_cfg.get("enabled", False))
|
||||
self._base_bucket_capacity = max(1.0, float(rate_cfg.get("bucket_capacity", 2)))
|
||||
self._base_refill_tokens = max(0.1, float(rate_cfg.get("refill_tokens", 1.0)))
|
||||
self._base_refill_interval = max(
|
||||
@@ -86,7 +86,7 @@ class AdvertHelper:
|
||||
|
||||
# --- Penalty box config ---
|
||||
penalty_cfg = repeater_cfg.get("advert_penalty_box", {})
|
||||
self._penalty_enabled = bool(penalty_cfg.get("enabled", True))
|
||||
self._penalty_enabled = bool(penalty_cfg.get("enabled", False))
|
||||
self._penalty_violation_threshold = max(1, int(penalty_cfg.get("violation_threshold", 2)))
|
||||
self._penalty_decay_seconds = max(
|
||||
1.0, float(penalty_cfg.get("violation_decay_seconds", 43200.0))
|
||||
@@ -665,7 +665,7 @@ class AdvertHelper:
|
||||
|
||||
# Adaptive mode config
|
||||
adaptive_cfg = repeater_cfg.get("advert_adaptive", {})
|
||||
self._adaptive_enabled = bool(adaptive_cfg.get("enabled", True))
|
||||
self._adaptive_enabled = bool(adaptive_cfg.get("enabled", False))
|
||||
self._ewma_alpha = max(0.01, min(1.0, float(adaptive_cfg.get("ewma_alpha", 0.1))))
|
||||
self._tier_hysteresis_seconds = max(
|
||||
0.0, float(adaptive_cfg.get("hysteresis_seconds", 300.0))
|
||||
@@ -678,7 +678,7 @@ class AdvertHelper:
|
||||
|
||||
# Base rate limit config
|
||||
rate_cfg = repeater_cfg.get("advert_rate_limit", {})
|
||||
self._rate_limit_enabled = bool(rate_cfg.get("enabled", True))
|
||||
self._rate_limit_enabled = bool(rate_cfg.get("enabled", False))
|
||||
self._base_bucket_capacity = max(1.0, float(rate_cfg.get("bucket_capacity", 2)))
|
||||
self._base_refill_tokens = max(0.1, float(rate_cfg.get("refill_tokens", 1.0)))
|
||||
self._base_refill_interval = max(
|
||||
@@ -688,7 +688,7 @@ class AdvertHelper:
|
||||
|
||||
# Penalty box config
|
||||
penalty_cfg = repeater_cfg.get("advert_penalty_box", {})
|
||||
self._penalty_enabled = bool(penalty_cfg.get("enabled", True))
|
||||
self._penalty_enabled = bool(penalty_cfg.get("enabled", False))
|
||||
self._penalty_violation_threshold = max(
|
||||
1, int(penalty_cfg.get("violation_threshold", 2))
|
||||
)
|
||||
|
||||
@@ -343,3 +343,38 @@ def test_advert_reload_config_and_cleanup_old_state_bounds_memory():
|
||||
assert "old" not in helper._recent_advert_hashes
|
||||
assert "pk" not in helper._penalty_until
|
||||
assert "oldpk" not in helper._bucket_state
|
||||
|
||||
|
||||
def test_advert_limiter_missing_sections_defaults_disabled():
|
||||
helper = AdvertHelper(local_identity=None, storage=None, config={"repeater": {}})
|
||||
|
||||
assert helper._adaptive_enabled is False
|
||||
assert helper._rate_limit_enabled is False
|
||||
assert helper._penalty_enabled is False
|
||||
|
||||
|
||||
def test_advert_limiter_partial_sections_without_enabled_remain_disabled_after_reload():
|
||||
helper = AdvertHelper(local_identity=None, storage=None, config={"repeater": {}})
|
||||
helper.config = {
|
||||
"repeater": {
|
||||
"advert_adaptive": {
|
||||
# enabled intentionally omitted
|
||||
"thresholds": {"normal": 2, "busy": 7, "congested": 12}
|
||||
},
|
||||
"advert_rate_limit": {
|
||||
# enabled intentionally omitted
|
||||
"bucket_capacity": 3,
|
||||
"refill_tokens": 2,
|
||||
},
|
||||
"advert_penalty_box": {
|
||||
# enabled intentionally omitted
|
||||
"violation_threshold": 2,
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
helper.reload_config()
|
||||
|
||||
assert helper._adaptive_enabled is False
|
||||
assert helper._rate_limit_enabled is False
|
||||
assert helper._penalty_enabled is False
|
||||
|
||||
Reference in New Issue
Block a user