0",ddlZddlZddlZddlZddlZddlmZddlmZm Z ddl m Z ddl m Z ddlmZddlmZddlmZdd lmZdd lmZdd lmZdd lmZmZdd lmZmZddl m!Z!m"Z"ddl#m$Z$ddl%m&Z&ddl'm(Z(m)Z)m*Z*ddl+m,Z,ddl-m.Z.dZ/e,Z0de1de1fdZ2de1de1de1de1de1de1de1fdZ3dede1de1d ee1dee1f d!Z4dede1d"e5de1d#e6de7f d$Z8d%e7de1ddfd&Z9d'ede1de1de6fd(Z:d)e5de7fd*Z; d0de1d)e5d'e ed-e7d.e1de6f d/ZError happened while writing redis config for user '%(user)s' )userr<)r.r& fullmatchstr IGNORECASErintr)rrDEFAULT_MAX_CACHE_MEMORY_USER_REDIS_CONF_PATTERNformatr!r"joindirnamermakedirsOSErrorIOErrorr _r) r/r0r1r2rr3r4r6_maxmemory_matchredis_config_contentr<s r-_write_redis_config_for_userrPOs..?@@J|M3y>>2=QQ +s3C3I3I!3L3L/M/MiiiiQiiiii7 3:: RW__->??MM% ; RW\\, >>  ] K T 2 2 2 2 2" ] ] ]A&N$O$O$%&]$^$^2>++  K+t,, 1E1T1Tttt  5is_cagefs_missingctj|}|r t|g}n dt|g}|dt |d\}}t j|t|j|j t j t j } | d\}}n#t j $rYnwxYw|dt | t | tj|jt$d} t'| } |d t | | t)d d S) z# Run subprocess with redis z/bin/cagefs_enter.proxiedz"[Start redis] Executing command=%s)rqrq) preexec_fnstdoutstderr)timeoutzCaptured stdout=%s, stderr=%s redis.pidz[Start redis] Redis pid=%sNz'Redis instance was not started for user)pwdgetpwnamrinforB subprocessPopenr pw_uidpw_gidPIPE communicateTimeoutExpireddecoder!r"rHpw_dirrrrK) rrrr/_loggeruser_pwdcommandrurvprocessr4 redis_pids r- __start_redisrsj|H%%HZ(*;</0EGXY LL5s7||DDDNFF(/8?;; G  ,,Q,77  $      LL0#fmmoo2F2FFMMOOH\H\]]]7<< LLL6|DDI LL-s9~~>>>?@@@ 4sB22CCrc tj|}|d|tj|jt}tj|d}tj|d}tj|d}t||j||||||d|||| ttj }t| |||dddS#ttf$rU} tj} |d || t%d d t'| id cYd } ~ Sd } ~ wwxYw)al Start redis server for supplied user (calls under user) :param _logger: Daemon's logger :param username: Username to setup redis :param maxmemory: maxmemory value to write to redis config :return: dict If redis was started for user - {"result": "success"} else - redis was not started - {"result": "error", "context": "...."} Starting redis for username=%sz redis.sockz redis.confryzaRedis config for user=%s is saved with parameters:socket_path=%s, config_path=%s, pidfile_path=%ssuccessTresult redis_enabledz;Error while starting redis server for user %s. Error is: %sz,Error while starting redis server: %(error)serrorrr?N)rzr{r|r!r"rHrrrPr r CAGEFSrrKrL traceback format_excrUrMrB) rr/r3rwpos_dirr2rr4is_cagefs_availablerYstr_excs r-_start_redis_server_for_userrs|H%%H LL18<<<w||HO];;H X|<< X|<<7<<+66L 8?HFWYj!*L::: LL#"".8HH--/@(GTTT#d;;; W ...&((UW_ahiiiJKK#SVV,.. . . . . . ..s)0DF+A E;5F;F old_redis_pidc|dkrdStstd tj|dn#t$rYdSt $rYnwxYwt t|dS)a Check existing process by PID and kill it: - If old_redis_pid == -1, nothing will kill, return False - else check process existance. if exi :param old_redis_pid: PID to check and kill :return: True - Can't kill process not owned by current user, this is error, continue work not allowed False - Process absent or was killed succesfully, continue work allowed Fz;Internal error! Trying to kill process with root privilegesrT)rr r!killPermissionErrorProcessLookupErrorrrQ)rs r-_check_redis_process_and_killr su   WUVVV   q!!!! tt       ... 5s= A AAFnois_log_debug_level force_reloadc|t}|d|t|t|t|ddt |rt d||ddS t |}|}no#t$rb}|r$| d|t||st d d |idcYd}~S|d i}Yd}~nd}~wwxYwtj |}t|||j |j|} | s|d krE|d |t|||dt jSdddS)a% Reloads redis for supplied user without logging and killing old redis process Calls only from redis_reloader.py script :param username: Username to setup redis :param old_redis_pid: Redis PID to kill, -1 - no PID to kill :param _logger: Daemon's logger :param is_log_debug_level: True - log messages/ False - no :param force_reload: reload redis w/o conditions :return: dict If redis was started for user - {"result": "success"} else - redis was not started - {"result": "error", "context": "...."} Nz_[Reload redis for user]: Request to reload redis for username=%s, old redis pid=%s,force_reloadF)effective_or_realset_envz@Can't kill old redis process for user '%(user)s'. PID is %(pid)s)r@pidrz unconditional reloadyesrmax_cache_memoryrr)rQr|rBrrrMr read_configrrUrzr{rprrrrdrE) r/rrrruser_config_class user_configrYpw_useris_redis_enables r-reload_redis_for_userr*s  LL ]##\"" $$$UEJJJJ$]33E^__$,]CCEE E &x00'3355      n OOZ\dfijkflfl m m m  bcc &133 3 3 3 3 3 3 LLi j j jKKKKKK l8$$G.w/6~w~{\\Ob,%// 5x@@@+GX,7OOD"C>>D)NFr)=rzr!r&rr}loggingrtypingrrsecureiorclcommon.clpwdrclcommon.cpapirclcommon.constr r clcommon.utilsr clwposr rMclwpos.cl_wpos_exceptionsr clwpos.daemon_redis_librr clwpos.utilsrrclwpos.user.configrrclwpos.optimization_featuresrclwpos.feature_suitesrclwpos.constantsrrrclwpos.logsetuprclcommon.cpapi.cpapiexceptionsrrFrQrBr.rPr_rDdictboolrprrrrrqr-rs !!!!!!!!,,,,,,//////&&&&&&""""""555555!!!!!!//////________9999999966666666======555555ffffffffff&&&&&&444444$ CC$'R3'Rc'Rs'Rgj'R47'RDG'RWZ'R'R'R'RTFcQT>B3iLPQTIB#V#s##TW#/3#8<####L#T#c#Y]####L#.&#.C#.C#.TX#.#.#.#.L<Z^PT3939C3939hvFV39.239JM39Y]393939393939rq