Improve automated clear of alarms when a process is available again.

git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/ec/trunk@38082 72102866-910b-0410-8b05-ffd578937521
This commit is contained in:
Richard Frith-MacDonald 2014-09-16 11:10:35 +00:00
parent c590d3d66d
commit c8cc8ac0e0
2 changed files with 28 additions and 32 deletions

View file

@ -1,3 +1,9 @@
2014-09-16 Richard Frith-Macdonald <rfm@gnu.org>
* EcCommand.m: Simplify handling of loss of process and configuration
error alarms. Clear such alarms when we receive a ping from the
process.
2014-09-04 Richard Frith-Macdonald <rfm@gnu.org> 2014-09-04 Richard Frith-Macdonald <rfm@gnu.org>
* EcProcess.m: Fix missing clear after unable to register with name * EcProcess.m: Fix missing clear after unable to register with name

View file

@ -129,7 +129,6 @@ static NSString* cmdWord(NSArray* a, unsigned int pos)
NSDictionary *environment; NSDictionary *environment;
NSMutableDictionary *launches; NSMutableDictionary *launches;
NSMutableSet *launching; NSMutableSet *launching;
NSMutableSet *alarmed;
unsigned pingPosition; unsigned pingPosition;
NSTimer *terminating; NSTimer *terminating;
NSDate *lastUnanswered; NSDate *lastUnanswered;
@ -584,37 +583,33 @@ static NSString* cmdWord(NSArray* a, unsigned int pos)
r = [self findIn: clients byObject: (id)from]; r = [self findIn: clients byObject: (id)from];
if (r != nil) if (r != nil)
{ {
NSString *n = [r name]; NSString *managedObject;
NSString *n;
EcAlarm *a;
[r gnip: num]; [r gnip: num];
n = [r name];
/* After the first ping response from a client we assume /* After the first ping response from a client we assume
* that client has completed startup and is running OK. * that client has completed startup and is running OK.
* We can therefore clear any loss of client alarm. * We can therefore clear any loss of client alarm.
*/ */
if (nil != [alarmed member: n]) managedObject = EcMakeManagedObject(host, n, nil);
{ a = [EcAlarm alarmForManagedObject: managedObject
NSString *managedObject; at: nil
EcAlarm *a; withEventType: EcAlarmEventTypeProcessingError
probableCause: EcAlarmSoftwareProgramAbnormallyTerminated
[alarmed removeObject: n]; specificProblem: @"Process availability"
managedObject = EcMakeManagedObject(host, n, nil); perceivedSeverity: EcAlarmSeverityCleared
a = [EcAlarm alarmForManagedObject: managedObject proposedRepairAction: nil
at: nil additionalText: nil];
withEventType: EcAlarmEventTypeProcessingError [self alarm: a];
probableCause: EcAlarmSoftwareProgramAbnormallyTerminated [self clearConfigurationFor: managedObject
specificProblem: @"Process availability" specificProblem: @"Process launch"
perceivedSeverity: EcAlarmSeverityCleared additionalText: @"Process is now running"];
proposedRepairAction: nil [self clearConfigurationFor: managedObject
additionalText: nil]; specificProblem: @"Fatal configuration error"
[self alarm: a]; additionalText: @"Process is now running"];
[self clearConfigurationFor: managedObject
specificProblem: @"Process launch"
additionalText: @"Process is now running"];
[self clearConfigurationFor: managedObject
specificProblem: @"Fatal configuration error"
additionalText: @"Process is now running"];
}
} }
} }
} }
@ -1371,7 +1366,6 @@ static NSString* cmdWord(NSArray* a, unsigned int pos)
EcAlarm *a; EcAlarm *a;
s = EcMakeManagedObject(host, name, nil); s = EcMakeManagedObject(host, name, nil);
[alarmed addObject: name];
a = [EcAlarm alarmForManagedObject: s a = [EcAlarm alarmForManagedObject: s
at: nil at: nil
withEventType: EcAlarmEventTypeProcessingError withEventType: EcAlarmEventTypeProcessingError
@ -1424,7 +1418,6 @@ static NSString* cmdWord(NSArray* a, unsigned int pos)
{ {
[timer invalidate]; [timer invalidate];
} }
RELEASE(alarmed);
RELEASE(launching); RELEASE(launching);
RELEASE(launches); RELEASE(launches);
DESTROY(control); DESTROY(control);
@ -1610,7 +1603,6 @@ static NSString* cmdWord(NSArray* a, unsigned int pos)
clients = [[NSMutableArray alloc] initWithCapacity: 10]; clients = [[NSMutableArray alloc] initWithCapacity: 10];
launches = [[NSMutableDictionary alloc] initWithCapacity: 10]; launches = [[NSMutableDictionary alloc] initWithCapacity: 10];
launching = [[NSMutableSet alloc] initWithCapacity: 10]; launching = [[NSMutableSet alloc] initWithCapacity: 10];
alarmed = [[NSMutableSet alloc] initWithCapacity: 10];
timer = [NSTimer scheduledTimerWithTimeInterval: 5.0 timer = [NSTimer scheduledTimerWithTimeInterval: 5.0
target: self target: self
@ -1716,7 +1708,7 @@ static NSString* cmdWord(NSArray* a, unsigned int pos)
{ {
[launching addObject: key]; [launching addObject: key];
} }
else if (nil == [alarmed member: key]) else
{ {
NSString *managedObject; NSString *managedObject;
EcAlarm *a; EcAlarm *a;
@ -1724,7 +1716,6 @@ static NSString* cmdWord(NSArray* a, unsigned int pos)
/* We are re-attempting a launch of a program which never /* We are re-attempting a launch of a program which never
* contacted us and registered with us ... raise an alarm. * contacted us and registered with us ... raise an alarm.
*/ */
[alarmed addObject: key];
managedObject = EcMakeManagedObject(host, key, nil); managedObject = EcMakeManagedObject(host, key, nil);
a = [EcAlarm alarmForManagedObject: managedObject a = [EcAlarm alarmForManagedObject: managedObject
at: nil at: nil
@ -1807,11 +1798,10 @@ static NSString* cmdWord(NSArray* a, unsigned int pos)
@"bad program name to launch %@"), key]; @"bad program name to launch %@"), key];
[self information: m from: nil to: nil type: LT_AUDIT]; [self information: m from: nil to: nil type: LT_AUDIT];
} }
if (nil != failed && nil == [alarmed member: key]) if (nil != failed)
{ {
NSString *managedObject; NSString *managedObject;
[alarmed addObject: key];
managedObject = EcMakeManagedObject(host, key, nil); managedObject = EcMakeManagedObject(host, key, nil);
[self alarmConfigurationFor: managedObject [self alarmConfigurationFor: managedObject
specificProblem: @"Process launch" specificProblem: @"Process launch"