Compare commits

...

1 Commits

Author SHA1 Message Date
nityanandagohain
7ed7d193e7 fix: opamp collector reconnect send updated config 2026-09-23 20:41:25 +05:30
5 changed files with 46 additions and 1 deletions

View File

@@ -105,6 +105,17 @@ func (m *Manager) RecommendAgentConfig(orgId valuer.UUID, currentConfYaml []byte
configId string,
err error,
) {
return m.recommendAgentConfig(orgId, currentConfYaml, true)
}
// Implements opamp.AgentConfigProvider
func (m *Manager) PreviewAgentConfig(orgId valuer.UUID, currentConfYaml []byte) ([]byte, error) {
recommendation, _, err := m.recommendAgentConfig(orgId, currentConfYaml, false)
return recommendation, err
}
func (m *Manager) recommendAgentConfig(orgId valuer.UUID, currentConfYaml []byte, recordDeployment bool) ([]byte, string, error) {
var configId string
recommendation := currentConfYaml
settingVersionsUsed := []string{}
@@ -134,6 +145,9 @@ func (m *Manager) RecommendAgentConfig(orgId valuer.UUID, currentConfYaml []byte
settingVersionsUsed = append(settingVersionsUsed, configId)
if !recordDeployment {
continue
}
_ = m.updateDeployStatus(
context.Background(),
orgId,

View File

@@ -239,7 +239,7 @@ func (ic *LogParsingPipelineController) getNormalizePipeline() pipelinetypes.Get
},
Config: []pipelinetypes.PipelineOperator{
{
ID: uuid.NewString(),
ID: "normalize_body_default",
Type: "normalize",
Enabled: true,
If: "body != nil",

View File

@@ -128,6 +128,12 @@ func (ta *MockAgentConfigProvider) HasReportedDeploymentStatus(orgID valuer.UUID
return exists
}
// AgentConfigProvider interface
func (ta *MockAgentConfigProvider) PreviewAgentConfig(orgId valuer.UUID, baseConfYaml []byte) ([]byte, error) {
recommendedYaml, _, err := ta.RecommendAgentConfig(orgId, baseConfYaml)
return recommendedYaml, err
}
// AgentConfigProvider interface
func (ta *MockAgentConfigProvider) GetDeployStatusByHash(_ context.Context, _ valuer.UUID, _ string) (opamptypes.DeployStatus, error) {
return opamptypes.DeployStatusUnknown, nil

View File

@@ -24,6 +24,8 @@ type Agent struct {
remoteConfig *protobufs.AgentRemoteConfig
Status *protobufs.AgentToServer
reconnectConfigChecked bool
// can this agent be load balancer
CanLB bool
@@ -291,6 +293,11 @@ func (agent *Agent) processStatusUpdate(
// We need to recalculate the config.
configChanged = agent.updateRemoteConfig(configProvider)
} else if agent.remoteConfig == nil && !agent.reconnectConfigChecked && agent.Config != "" {
// A running agent reconnected after a server restart; settings may have
// changed while it was away (e.g. startup reconciliation).
agent.reconnectConfigChecked = true
configChanged = agent.updateRemoteConfigIfStale(configProvider)
}
// If remote config is changed and different from what the Agent has then
@@ -312,6 +319,20 @@ func (agent *Agent) processStatusUpdate(
}
}
// updateRemoteConfigIfStale records a deployment only when the recommendation
// differs from the agent's effective config.
func (agent *Agent) updateRemoteConfigIfStale(configProvider AgentConfigProvider) bool {
recommendedConfig, err := configProvider.PreviewAgentConfig(agent.OrgID, []byte(agent.Config))
if err != nil {
agent.logger.Error("could not preview config recommendation for agent", "agent_id", agent.AgentID, errors.Attr(err))
return false
}
if string(recommendedConfig) == agent.Config {
return false
}
return agent.updateRemoteConfig(configProvider)
}
func (agent *Agent) updateRemoteConfig(configProvider AgentConfigProvider) bool {
recommendedConfig, confId, err := configProvider.RecommendAgentConfig(agent.OrgID, []byte(agent.Config))
if err != nil {

View File

@@ -18,6 +18,10 @@ type AgentConfigProvider interface {
err error,
)
// PreviewAgentConfig returns the config RecommendAgentConfig would, without
// recording a deployment.
PreviewAgentConfig(orgId valuer.UUID, currentConfYaml []byte) ([]byte, error)
// Report deployment status for config recommendations generated by RecommendAgentConfig
ReportConfigDeploymentStatus(
orgId valuer.UUID,