diff options
author | Matthias Wachs <wachs@net.in.tum.de> | 2012-01-17 15:23:46 +0000 |
---|---|---|
committer | Matthias Wachs <wachs@net.in.tum.de> | 2012-01-17 15:23:46 +0000 |
commit | 9cee4b923780227e05b99e7c86f0c790461d3823 (patch) | |
tree | 9026bd44dcc9a3e49ace4b94a8336902a14d943f /src/ats | |
parent | be3bb33daa121f6cf3503b54537268491d07021b (diff) | |
download | gnunet-9cee4b923780227e05b99e7c86f0c790461d3823.tar.gz gnunet-9cee4b923780227e05b99e7c86f0c790461d3823.zip |
- improved error logging
Diffstat (limited to 'src/ats')
-rw-r--r-- | src/ats/gnunet-service-ats_addresses_mlp.c | 126 |
1 files changed, 119 insertions, 7 deletions
diff --git a/src/ats/gnunet-service-ats_addresses_mlp.c b/src/ats/gnunet-service-ats_addresses_mlp.c index 9369d927b..90ceea01d 100644 --- a/src/ats/gnunet-service-ats_addresses_mlp.c +++ b/src/ats/gnunet-service-ats_addresses_mlp.c | |||
@@ -34,16 +34,128 @@ | |||
34 | #endif | 34 | #endif |
35 | 35 | ||
36 | /** | 36 | /** |
37 | * Intercept GLPK terminal output | 37 | * Translate glpk solver error codes to text |
38 | * | 38 | * @param retcode return code |
39 | * @return string with result | ||
40 | */ | ||
41 | const char * | ||
42 | mlp_solve_to_string (int retcode) | ||
43 | { | ||
44 | switch (retcode) { | ||
45 | case 0: | ||
46 | return "ok"; | ||
47 | break; | ||
48 | case GLP_EBADB: | ||
49 | return "invalid basis"; | ||
50 | break; | ||
51 | case GLP_ESING: | ||
52 | return "singular matrix"; | ||
53 | break; | ||
54 | case GLP_ECOND: | ||
55 | return "ill-conditioned matrix"; | ||
56 | break; | ||
57 | case GLP_EBOUND: | ||
58 | return "invalid bounds"; | ||
59 | break; | ||
60 | case GLP_EFAIL: | ||
61 | return "solver failed"; | ||
62 | break; | ||
63 | case GLP_EOBJLL: | ||
64 | return "objective lower limit reached"; | ||
65 | break; | ||
66 | case GLP_EOBJUL: | ||
67 | return "objective upper limit reached"; | ||
68 | break; | ||
69 | case GLP_EITLIM: | ||
70 | return "iteration limit exceeded"; | ||
71 | break; | ||
72 | case GLP_ETMLIM: | ||
73 | return "time limit exceeded"; | ||
74 | break; | ||
75 | case GLP_ENOPFS: | ||
76 | return "no primal feasible solution"; | ||
77 | break; | ||
78 | case GLP_EROOT: | ||
79 | return "root LP optimum not provided"; | ||
80 | break; | ||
81 | case GLP_ESTOP: | ||
82 | return "search terminated by application"; | ||
83 | break; | ||
84 | case GLP_EMIPGAP: | ||
85 | return "relative mip gap tolerance reached"; | ||
86 | break; | ||
87 | case GLP_ENOFEAS: | ||
88 | return "no dual feasible solution"; | ||
89 | break; | ||
90 | case GLP_ENOCVG: | ||
91 | return "no convergence"; | ||
92 | break; | ||
93 | case GLP_EINSTAB: | ||
94 | return "numerical instability"; | ||
95 | break; | ||
96 | case GLP_EDATA: | ||
97 | return "invalid data"; | ||
98 | break; | ||
99 | case GLP_ERANGE: | ||
100 | return "result out of range"; | ||
101 | break; | ||
102 | default: | ||
103 | GNUNET_break (0); | ||
104 | return "unknown error"; | ||
105 | break; | ||
106 | } | ||
107 | GNUNET_break (0); | ||
108 | return "unknown error"; | ||
109 | } | ||
110 | |||
111 | |||
112 | /** | ||
113 | * Translate glpk status error codes to text | ||
114 | * @param retcode return code | ||
115 | * @return string with result | ||
39 | */ | 116 | */ |
117 | const char * | ||
118 | mlp_status_to_string (int retcode) | ||
119 | { | ||
120 | switch (retcode) { | ||
121 | case GLP_UNDEF: | ||
122 | return "solution is undefined"; | ||
123 | break; | ||
124 | case GLP_FEAS: | ||
125 | return "solution is feasible"; | ||
126 | break; | ||
127 | case GLP_INFEAS: | ||
128 | return "solution is infeasible"; | ||
129 | break; | ||
130 | case GLP_NOFEAS: | ||
131 | return "no feasible solution exists"; | ||
132 | break; | ||
133 | case GLP_OPT: | ||
134 | return "solution is optimal"; | ||
135 | break; | ||
136 | case GLP_UNBND: | ||
137 | return "solution is unbounded"; | ||
138 | break; | ||
139 | default: | ||
140 | GNUNET_break (0); | ||
141 | return "unknown error"; | ||
142 | break; | ||
143 | } | ||
144 | GNUNET_break (0); | ||
145 | return "unknown error"; | ||
146 | } | ||
40 | 147 | ||
148 | /** | ||
149 | * Intercept GLPK terminal output | ||
150 | * @param info the mlp handle | ||
151 | * @param s the string to print | ||
152 | * @return 0: glpk prints output on terminal, 0 != surpress output | ||
153 | */ | ||
41 | static int | 154 | static int |
42 | mlp_term_hook (void *info, const char *s) | 155 | mlp_term_hook (void *info, const char *s) |
43 | { | 156 | { |
44 | /* Not needed atm struct MLP_information *mlp = info; */ | 157 | /* Not needed atm struct MLP_information *mlp = info; */ |
45 | GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "%s", s); | 158 | GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "%s", s); |
46 | /* 0: glpk prints output on terminal, != surpress output */ | ||
47 | return 1; | 159 | return 1; |
48 | } | 160 | } |
49 | 161 | ||
@@ -171,7 +283,7 @@ lp_solv: | |||
171 | /* Problem was ill-defined, no way to handle that */ | 283 | /* Problem was ill-defined, no way to handle that */ |
172 | GNUNET_log_from (GNUNET_ERROR_TYPE_ERROR, | 284 | GNUNET_log_from (GNUNET_ERROR_TYPE_ERROR, |
173 | "ats-mlp", | 285 | "ats-mlp", |
174 | "Solving LP problem failed: glp_simplex error 0x%X\n", res); | 286 | "Solving LP problem failed: %s\n", mlp_solve_to_string(res)); |
175 | return GNUNET_SYSERR; | 287 | return GNUNET_SYSERR; |
176 | } | 288 | } |
177 | } | 289 | } |
@@ -200,7 +312,7 @@ lp_solv: | |||
200 | default: | 312 | default: |
201 | GNUNET_log_from (GNUNET_ERROR_TYPE_ERROR, | 313 | GNUNET_log_from (GNUNET_ERROR_TYPE_ERROR, |
202 | "ats-mlp", | 314 | "ats-mlp", |
203 | "Solving LP problem failed, no solution: glp_get_status 0x%X\n", res); | 315 | "Solving LP problem failed, no solution: %s\n", mlp_status_to_string(res)); |
204 | return GNUNET_SYSERR; | 316 | return GNUNET_SYSERR; |
205 | break; | 317 | break; |
206 | } | 318 | } |
@@ -248,7 +360,7 @@ mlp_solve_mlp_problem (struct GAS_MLP_Handle *mlp) | |||
248 | /* Problem was ill-defined, no way to handle that */ | 360 | /* Problem was ill-defined, no way to handle that */ |
249 | GNUNET_log_from (GNUNET_ERROR_TYPE_ERROR, | 361 | GNUNET_log_from (GNUNET_ERROR_TYPE_ERROR, |
250 | "ats-mlp", | 362 | "ats-mlp", |
251 | "Solving MLP problem failed: glp_intopt error 0x%X\n", res); | 363 | "Solving MLP problem failed: %s\n", mlp_solve_to_string(res)); |
252 | return GNUNET_SYSERR; | 364 | return GNUNET_SYSERR; |
253 | } | 365 | } |
254 | 366 | ||
@@ -275,7 +387,7 @@ mlp_solve_mlp_problem (struct GAS_MLP_Handle *mlp) | |||
275 | default: | 387 | default: |
276 | GNUNET_log_from (GNUNET_ERROR_TYPE_ERROR, | 388 | GNUNET_log_from (GNUNET_ERROR_TYPE_ERROR, |
277 | "ats-mlp", | 389 | "ats-mlp", |
278 | "Solving MLP problem failed, no solution: glp_mip_status 0x%X\n", res); | 390 | "Solving MLP problem failed, %s\n\n", mlp_status_to_string(res)); |
279 | return GNUNET_SYSERR; | 391 | return GNUNET_SYSERR; |
280 | break; | 392 | break; |
281 | } | 393 | } |