mirror of
https://github.com/YunoHost/yunohost.git
synced 2024-09-03 20:06:10 +02:00
domains: make the domain cache expire after 15 seconds to prevent inconsistencies between CLI and API
This commit is contained in:
parent
23b83b5ef7
commit
73a7f93740
1 changed files with 15 additions and 5 deletions
|
@ -24,6 +24,7 @@
|
||||||
Manage domains
|
Manage domains
|
||||||
"""
|
"""
|
||||||
import os
|
import os
|
||||||
|
import time
|
||||||
from typing import List
|
from typing import List
|
||||||
from collections import OrderedDict
|
from collections import OrderedDict
|
||||||
|
|
||||||
|
@ -48,22 +49,30 @@ logger = getActionLogger("yunohost.domain")
|
||||||
DOMAIN_SETTINGS_DIR = "/etc/yunohost/domains"
|
DOMAIN_SETTINGS_DIR = "/etc/yunohost/domains"
|
||||||
|
|
||||||
# Lazy dev caching to avoid re-query ldap every time we need the domain list
|
# Lazy dev caching to avoid re-query ldap every time we need the domain list
|
||||||
|
# The cache automatically expire every 15 seconds, to prevent desync between
|
||||||
|
# yunohost CLI and API which run in different processes
|
||||||
domain_list_cache: List[str] = []
|
domain_list_cache: List[str] = []
|
||||||
|
domain_list_cache_timestamp = 0
|
||||||
main_domain_cache: str = None
|
main_domain_cache: str = None
|
||||||
|
main_domain_cache_timestamp = 0
|
||||||
|
DOMAIN_CACHE_DURATION = 15
|
||||||
|
|
||||||
|
|
||||||
def _get_maindomain(no_cache=False):
|
def _get_maindomain():
|
||||||
global main_domain_cache
|
global main_domain_cache
|
||||||
if not main_domain_cache or no_cache:
|
global main_domain_cache_timestamp
|
||||||
|
if not main_domain_cache or abs(main_domain_cache_timestamp - time.time()) > DOMAIN_CACHE_DURATION:
|
||||||
with open("/etc/yunohost/current_host", "r") as f:
|
with open("/etc/yunohost/current_host", "r") as f:
|
||||||
main_domain_cache = f.readline().rstrip()
|
main_domain_cache = f.readline().rstrip()
|
||||||
|
main_domain_cache_timestamp = time.time()
|
||||||
|
|
||||||
return main_domain_cache
|
return main_domain_cache
|
||||||
|
|
||||||
|
|
||||||
def _get_domains(exclude_subdomains=False, no_cache=False):
|
def _get_domains(exclude_subdomains=False):
|
||||||
global domain_list_cache
|
global domain_list_cache
|
||||||
if not domain_list_cache or no_cache:
|
global domain_list_cache_timestamp
|
||||||
|
if not domain_list_cache or abs(domain_list_cache_timestamp - time.time()) > DOMAIN_CACHE_DURATION:
|
||||||
from yunohost.utils.ldap import _get_ldap_interface
|
from yunohost.utils.ldap import _get_ldap_interface
|
||||||
|
|
||||||
ldap = _get_ldap_interface()
|
ldap = _get_ldap_interface()
|
||||||
|
@ -80,6 +89,7 @@ def _get_domains(exclude_subdomains=False, no_cache=False):
|
||||||
return list(reversed(domain))
|
return list(reversed(domain))
|
||||||
|
|
||||||
domain_list_cache = sorted(result, key=cmp_domain)
|
domain_list_cache = sorted(result, key=cmp_domain)
|
||||||
|
domain_list_cache_timestamp = time.time()
|
||||||
|
|
||||||
if exclude_subdomains:
|
if exclude_subdomains:
|
||||||
return [
|
return [
|
||||||
|
@ -443,7 +453,7 @@ def domain_main_domain(operation_logger, new_main_domain=None):
|
||||||
try:
|
try:
|
||||||
write_to_file("/etc/yunohost/current_host", new_main_domain)
|
write_to_file("/etc/yunohost/current_host", new_main_domain)
|
||||||
global main_domain_cache
|
global main_domain_cache
|
||||||
main_domain_cache = None
|
main_domain_cache = new_main_domain
|
||||||
_set_hostname(new_main_domain)
|
_set_hostname(new_main_domain)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.warning(str(e), exc_info=1)
|
logger.warning(str(e), exc_info=1)
|
||||||
|
|
Loading…
Add table
Reference in a new issue