01: /*
02: * <copyright>
03: *
04: * Copyright 1997-2004 BBNT Solutions, LLC
05: * under sponsorship of the Defense Advanced Research Projects
06: * Agency (DARPA).
07: *
08: * You can redistribute this software and/or modify it under the
09: * terms of the Cougaar Open Source License as published on the
10: * Cougaar Open Source Website (www.cougaar.org).
11: *
12: * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
13: * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
14: * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
15: * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
16: * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
17: * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
18: * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
19: * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
20: * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
21: * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
22: * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
23: *
24: * </copyright>
25: */
26:
27: package org.cougaar.core.service;
28:
29: import org.cougaar.core.mts.MessageAddress;
30:
31: import org.cougaar.core.component.Service;
32:
33: /**
34: * This service allows a component to query the agents registered
35: * with the node's {@link QuiescenceReportService} and mark agents
36: * as dead (ignorable) when they have been restarted on another
37: * node.
38: */
39: public interface AgentQuiescenceStateService extends Service {
40: /** Is the Node altogether quiescent */
41: boolean isNodeQuiescent();
42:
43: /**
44: * List the local agents with quiescence states for the Node to consider
45: * @return an array of MessagAddresses registered with the Nodes QuiescenceReportService
46: */
47: MessageAddress[] listAgentsRegistered();
48:
49: /**
50: * Is the named agent's quiescence service enabled (ie the Distributor is fully loaded)?
51: * @param agentAddress The agent to query
52: * @return true if the agent's quiescence service has been enabled and it counts towards Node quiescence
53: */
54: boolean isAgentEnabled(MessageAddress agentAddress);
55:
56: /**
57: * Is the named agent quiescent?
58: * @param agentAddress The agent to query
59: * @return true if the Agent's Distributor is quiescent
60: */
61: boolean isAgentQuiescent(MessageAddress agentAddress);
62:
63: /**
64: * Is the named agent alive for quiescence purposes, or has it been
65: * marked as dead to be ignored?
66: * @param agentAddress The agent to query
67: * @return false if the agent is dead and should be ignored for local quiescence
68: */
69: boolean isAgentAlive(MessageAddress agentAddress);
70:
71: /**
72: * Mark the named agent as dead - it has been restarted elsewhere, and should
73: * be ignored locally for quiescence calculations.
74: * @param agentAddress The Agent to mark as dead
75: */
76: void setAgentDead(MessageAddress agentAddress);
77:
78: /**
79: * Show the QuiescenceService clients that are blocking quiescence for this agent, if any
80: * @param agentAddress The Agent whose quiescence blockers to show
81: */
82: String getAgentQuiescenceBlockers(MessageAddress agentAddress);
83:
84: // Other options: list message numbers?
85: }
|