(ctx context.Context, revision, configPath, serverLogFile string, shared *servercommon.ControllerIngesterShared)
| 61 | type Controller struct{} |
| 62 | |
| 63 | func Start(ctx context.Context, revision, configPath, serverLogFile string, shared *servercommon.ControllerIngesterShared) { |
| 64 | common.InitEnvData() |
| 65 | flag.Parse() |
| 66 | |
| 67 | serverCfg := config.DefaultConfig() |
| 68 | serverCfg.Load(configPath) |
| 69 | cfg := &serverCfg.ControllerConfig |
| 70 | bytes, _ := yaml.Marshal(cfg) |
| 71 | log.Info("==================== Launching DeepFlow-Server-Controller ====================") |
| 72 | log.Infof("controller config:\n%s", string(bytes)) |
| 73 | setGlobalConfig(cfg) |
| 74 | |
| 75 | httpServer := http.NewServer(serverLogFile, cfg) |
| 76 | httpServer.Start() |
| 77 | |
| 78 | defer router.SetInitStageForHealthChecker(router.OK) |
| 79 | |
| 80 | router.SetInitStageForHealthChecker("Election init") |
| 81 | // start election |
| 82 | if common.IsStandaloneRunningMode() == false { |
| 83 | // in standalone mode, We have no way to elect because there is no k8s module |
| 84 | go election.Start(ctx, cfg) |
| 85 | } |
| 86 | |
| 87 | isMasterController := IsMasterController(cfg) |
| 88 | if isMasterController { |
| 89 | router.SetInitStageForHealthChecker(router.StageMetadbMigration) |
| 90 | migrateMetadb(cfg) |
| 91 | } |
| 92 | |
| 93 | router.SetInitStageForHealthChecker("Metadb init") |
| 94 | // 初始化 Metadb |
| 95 | if err := metadb.GetDBs().Init(cfg.MetadbCfg); err != nil { |
| 96 | log.Errorf("init metadb failed: %s", err.Error()) |
| 97 | time.Sleep(time.Second) |
| 98 | os.Exit(0) |
| 99 | } |
| 100 | |
| 101 | if isMasterController && revision != "" { |
| 102 | var masterSysConfig model.SysConfiguration |
| 103 | err := metadb.DefaultDB. |
| 104 | Where(model.SysConfiguration{ParamName: common.SYS_CONFIG_MASTER_COMMIT_ID}). |
| 105 | Assign(model.SysConfiguration{Value: revision}). |
| 106 | FirstOrCreate(&masterSysConfig).Error |
| 107 | if err != nil { |
| 108 | log.Warningf("upsert master sys config param (%s:%s) failed: %s", common.SYS_CONFIG_MASTER_COMMIT_ID, revision, err.Error()) |
| 109 | } |
| 110 | } else if !IsMasterRegion(cfg) { |
| 111 | var masterSysConfig model.SysConfiguration |
| 112 | err := metadb.DefaultDB.Where(model.SysConfiguration{ParamName: common.SYS_CONFIG_MASTER_COMMIT_ID}).First(&masterSysConfig).Error |
| 113 | if err != nil { |
| 114 | log.Warningf("get master sys config param (%s) failed: %s", common.SYS_CONFIG_MASTER_COMMIT_ID, err.Error()) |
| 115 | } else { |
| 116 | if revision != masterSysConfig.Value { |
| 117 | log.Errorf("current commit id (%s) is different from master commit id (%s)", revision, masterSysConfig.Value) |
| 118 | os.Exit(0) |
| 119 | } |
| 120 | } |
nothing calls this directly
no test coverage detected