1 /*
2 * dmucs_host_state.cc: the DMUCS host state implementation.
3 *
4 * Copyright (C) 2005, 2006 Victor T. Norman
5 *
6 * This program is free software; you can redistribute it and/or modify it
7 * under the terms of the GNU General Public License as published by the
8 * Free Software Foundation; either version 2 of the License, or (at your
9 * option) any later version.
10 *
11 * This program is distributed in the hope that it will be useful, but
12 * WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
14 * Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License along
17 * with this program; if not, write to the Free Software Foundation, Inc.,
18 * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
19 */
20
21 #include "dmucs_host_state.h"
22 #include "dmucs_db.h"
23
24
25
26 DmucsHostStateAvail *DmucsHostStateAvail::instance_ = NULL;
27
28
29 DmucsHostStateAvail *
getInstance()30 DmucsHostStateAvail::getInstance()
31 {
32 if (instance_ == NULL) {
33 instance_ = new DmucsHostStateAvail();
34 }
35 return instance_;
36 }
37
38
39 void
unavail(DmucsHost * host)40 DmucsHostStateAvail::unavail(DmucsHost *host)
41 {
42 /* Remove the CPUs from the cpus database. */
43 DmucsDb::getInstance()->delCpusFromTier(host, host->getTier(),
44 host->getIpAddrInt());
45 /* Move the host to the overloaded state: remove from availHosts_ and
46 add to overloadedHosts_. */
47 removeFromDb(host);
48 DmucsHostState::changeState(host, DmucsHostStateUnavail::getInstance());
49 }
50
51
52 void
silent(DmucsHost * host)53 DmucsHostStateAvail::silent(DmucsHost *host)
54 {
55 /* Remove the CPUs from the cpus database. */
56 DmucsDb::getInstance()->delCpusFromTier(host, host->getTier(),
57 host->getIpAddrInt());
58 /* Move the host to the overloaded state: remove from availHosts_ and
59 add to overloadedHosts_. */
60 removeFromDb(host);
61 DmucsHostState::changeState(host, DmucsHostStateSilent::getInstance());
62 }
63
64
65 void
overloaded(DmucsHost * host)66 DmucsHostStateAvail::overloaded(DmucsHost *host)
67 {
68 /* Remove the CPUs from the cpus database. */
69 DmucsDb::getInstance()->delCpusFromTier(host, host->getTier(),
70 host->getIpAddrInt());
71 /* Move the host to the overloaded state: remove from availHosts_ and
72 add to overloadedHosts_. */
73 removeFromDb(host);
74 DmucsHostState::changeState(host, DmucsHostStateOverloaded::getInstance());
75 }
76
77
78 void
removeFromDb(DmucsHost * host)79 DmucsHostStateAvail::removeFromDb(DmucsHost *host)
80 {
81 DmucsDb::getInstance()->delFromAvailDb(host);
82 }
83
84 void
addToDb(DmucsHost * host)85 DmucsHostStateAvail::addToDb(DmucsHost *host)
86 {
87 DmucsDb::getInstance()->addToAvailDb(host);
88 }
89
90
91 /* ====================================================================== */
92
93 DmucsHostStateUnavail *DmucsHostStateUnavail::instance_ = NULL;
94
95 DmucsHostStateUnavail *
getInstance()96 DmucsHostStateUnavail::getInstance()
97 {
98 if (instance_ == NULL) {
99 instance_ = new DmucsHostStateUnavail();
100 }
101 return instance_;
102 }
103
104 void
avail(DmucsHost * host)105 DmucsHostStateUnavail::avail(DmucsHost *host)
106 {
107 removeFromDb(host);
108
109 int tier = host->getTier();
110 if (tier == 0) {
111 DmucsHostState::changeState(host,
112 DmucsHostStateOverloaded::getInstance());
113 } else {
114 DmucsHostState::changeState(host, DmucsHostStateAvail::getInstance());
115 }
116 }
117
118
119 void
addToDb(DmucsHost * host)120 DmucsHostStateUnavail::addToDb(DmucsHost *host)
121 {
122 DmucsDb::getInstance()->addToUnavailDb(host);
123 }
124
125
126 void
removeFromDb(DmucsHost * host)127 DmucsHostStateUnavail::removeFromDb(DmucsHost *host)
128 {
129 DmucsDb::getInstance()->delFromUnavailDb(host);
130 }
131
132
133 /* ====================================================================== */
134
135 DmucsHostStateSilent *DmucsHostStateSilent::instance_ = NULL;
136
137 DmucsHostStateSilent *
getInstance()138 DmucsHostStateSilent::getInstance()
139 {
140 if (instance_ == NULL) {
141 instance_ = new DmucsHostStateSilent();
142 }
143 return instance_;
144 }
145
146 void
avail(DmucsHost * host)147 DmucsHostStateSilent::avail(DmucsHost *host)
148 {
149 removeFromDb(host);
150 DmucsHostState::changeState(host, DmucsHostStateAvail::getInstance());
151 }
152
153
154 void
unavail(DmucsHost * host)155 DmucsHostStateSilent::unavail(DmucsHost *host)
156 {
157 removeFromDb(host);
158 DmucsHostState::changeState(host, DmucsHostStateUnavail::getInstance());
159 }
160
161
162 void
addToDb(DmucsHost * host)163 DmucsHostStateSilent::addToDb(DmucsHost *host)
164 {
165 DmucsDb::getInstance()->addToSilentDb(host);
166 }
167
168
169 void
removeFromDb(DmucsHost * host)170 DmucsHostStateSilent::removeFromDb(DmucsHost *host)
171 {
172 DmucsDb::getInstance()->delFromSilentDb(host);
173 }
174
175
176
177 /* ====================================================================== */
178
179
180 DmucsHostStateOverloaded *DmucsHostStateOverloaded::instance_ = NULL;
181
182 DmucsHostStateOverloaded *
getInstance()183 DmucsHostStateOverloaded::getInstance()
184 {
185 if (instance_ == NULL) {
186 instance_ = new DmucsHostStateOverloaded();
187 }
188 return instance_;
189 }
190
191 void
avail(DmucsHost * host)192 DmucsHostStateOverloaded::avail(DmucsHost *host)
193 {
194 removeFromDb(host);
195 DmucsHostState::changeState(host, DmucsHostStateAvail::getInstance());
196 }
197
198
199 void
unavail(DmucsHost * host)200 DmucsHostStateOverloaded::unavail(DmucsHost *host)
201 {
202 removeFromDb(host);
203 DmucsHostState::changeState(host, DmucsHostStateUnavail::getInstance());
204 }
205
206
207 void
silent(DmucsHost * host)208 DmucsHostStateOverloaded::silent(DmucsHost *host)
209 {
210 removeFromDb(host);
211 DmucsHostState::changeState(host, DmucsHostStateSilent::getInstance());
212 }
213
214
215 void
addToDb(DmucsHost * host)216 DmucsHostStateOverloaded::addToDb(DmucsHost *host)
217 {
218 DmucsDb::getInstance()->addToOverloadedDb(host);
219 }
220
221
222 void
removeFromDb(DmucsHost * host)223 DmucsHostStateOverloaded::removeFromDb(DmucsHost *host)
224 {
225 DmucsDb::getInstance()->delFromOverloadedDb(host);
226 }
227