码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • Orchestrator中的hooks函数


    目录

    • hooks分类
    • hooks的执行

    Orchestrator中有很多hooks函数,用于调用外部服务做一些配置或者准备等工作。

    hooks分类

    Orchestrator中主要有以下这些hooks,按照其执行顺序依次为:

    • PreGracefulTakeoverProcesses(只对graceful执行)
    • OnFailureDetectionProcesses
    • PreFailoverProcesses
    • PostMasterFailoverProcesses
    • PostUnsuccessfulFailoverProcesses(失败时执行)
    • PostFailoverProcesses(成功时执行)
    • PostGracefulTakeoverProcesses(只对graceful执行)

    这些hooks分布在Orchestrator recovery 过程中的不同位置,用于调用外部服务,做一些补充工作。

    hooks的执行

    说到hooks,就要看下hooks是如何执行的,这里就涉及到executeProcesses函数:

    // executeProcesses executes a list of processes
    func executeProcesses(processes []string, description string, topologyRecovery *TopologyRecovery, failOnError bool) (err error) {
    	if len(processes) == 0 {
    		AuditTopologyRecovery(topologyRecovery, fmt.Sprintf("No %s hooks to run", description))
    		return nil
    	}
    
    	AuditTopologyRecovery(topologyRecovery, fmt.Sprintf("Running %d %s hooks", len(processes), description))
    	for i, command := range processes {
    		command, async := prepareCommand(command, topologyRecovery)
    		env := applyEnvironmentVariables(topologyRecovery)
    
    		fullDescription := fmt.Sprintf("%s hook %d of %d", description, i+1, len(processes))
    		if async {
    			fullDescription = fmt.Sprintf("%s (async)", fullDescription)
    		}
    		if async {
    			// Ignore errors
    			go executeProcess(command, env, topologyRecovery, fullDescription)
    		} else {
    			if cmdErr := executeProcess(command, env, topologyRecovery, fullDescription); cmdErr != nil {
    				if failOnError {
    					AuditTopologyRecovery(topologyRecovery, fmt.Sprintf("Not running further %s hooks", description))
    					return cmdErr
    				}
    				if err == nil {
    					// Keep first error encountered
    					err = cmdErr
    				}
    			}
    		}
    	}
    	AuditTopologyRecovery(topologyRecovery, fmt.Sprintf("done running %s hooks", description))
    	return err
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35

    位于go/logic/topology_recovery.go文件中。

    所有hook执行都通过调用该函数来实现,这个函数最后一个参数,表示,如果hook执行失败时,是否会导致recovery异常退出。

    通过分析这个函数的调用关系,整理如下结论:
    下面参数指定的hook脚本执行失败会导致recovery过程异常退出:

    • PreFailoverProcesses
    • OnFailureDetectionProcesses
    • PreGracefulTakeoverProcesses
      其余的hook执行失败都不会导致recovery异常退出。

    在executeProcesses中,通过环境环境变量传递参数,调用shell脚本。

  • 相关阅读:
    PostgreSQL的学习心得和知识总结(八十六)|深入理解PostgreSQL数据库HOOK技术及开源hooks文档介绍
    一站式服务:教你搭建AI知识库
    【项目】云备份系统基础功能实现
    Android项目使用gradle配置新旧方式对比
    利用NoteExpress统一Elsevier旗下期刊参考文献格式
    线性代数---第四章线性方程组
    DC/DC开关电源学习笔记(十二)Boost升压电路仿真及工程应用案例
    使用Compose实现基于MVI架构、retrofit2、支持 glance 小部件的TODO应用
    机器学习:争取被遗忘的权利
    自动化运维场景在数据中心的落地之网络策略自动化管理-人保科技
  • 原文地址:https://blog.csdn.net/lanyang123456/article/details/127130086
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号