mirror of
https://github.com/minio/minio.git
synced 2025-11-07 21:02:58 -05:00
fix: ignore existing target status when adding new targets (#17250)
This commit is contained in:
@@ -426,6 +426,34 @@ func (c Config) DelFrom(r io.Reader) error {
|
||||
return scanner.Err()
|
||||
}
|
||||
|
||||
// ContextKeyString is type(string) for contextKey
|
||||
type ContextKeyString string
|
||||
|
||||
// ContextKeyForTargetFromConfig - key for context for target from config
|
||||
const ContextKeyForTargetFromConfig = ContextKeyString("ContextKeyForTargetFromConfig")
|
||||
|
||||
// ParseConfigTargetID - read all targetIDs from reader
|
||||
func ParseConfigTargetID(r io.Reader) (ids map[string]bool, err error) {
|
||||
ids = make(map[string]bool)
|
||||
scanner := bufio.NewScanner(r)
|
||||
for scanner.Scan() {
|
||||
// Skip any empty lines, or comment like characters
|
||||
text := scanner.Text()
|
||||
if text == "" || strings.HasPrefix(text, KvComment) {
|
||||
continue
|
||||
}
|
||||
_, _, tgt, err := GetSubSys(text)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
ids[tgt] = true
|
||||
}
|
||||
if err := scanner.Err(); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// ReadConfig - read content from input and write into c.
|
||||
// Returns whether all parameters were dynamic.
|
||||
func (c Config) ReadConfig(r io.Reader) (dynOnly bool, err error) {
|
||||
|
||||
@@ -58,13 +58,24 @@ func TestSubSysNotificationTargets(ctx context.Context, cfg config.Config, subSy
|
||||
defer target.Close()
|
||||
}
|
||||
|
||||
tgts, ok := ctx.Value(config.ContextKeyForTargetFromConfig).(map[string]bool)
|
||||
if !ok {
|
||||
tgts = make(map[string]bool)
|
||||
}
|
||||
for _, target := range targetList {
|
||||
yes, err := target.IsActive()
|
||||
if err == nil && !yes {
|
||||
err = ErrTargetsOffline
|
||||
}
|
||||
if err != nil {
|
||||
return fmt.Errorf("error (%s): %w", target.ID(), err)
|
||||
if tgts[target.ID().ID] {
|
||||
// When target set should be online
|
||||
yes, err := target.IsActive()
|
||||
if err == nil && !yes {
|
||||
err = ErrTargetsOffline
|
||||
}
|
||||
if err != nil {
|
||||
return fmt.Errorf("error (%s): %w", target.ID(), err)
|
||||
}
|
||||
} else {
|
||||
// Just for call init.
|
||||
// Ignore target is online or offline
|
||||
_, _ = target.IsActive()
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user