aboutsummaryrefslogtreecommitdiff
path: root/src/ats
diff options
context:
space:
mode:
authorMatthias Wachs <wachs@net.in.tum.de>2012-01-17 15:23:46 +0000
committerMatthias Wachs <wachs@net.in.tum.de>2012-01-17 15:23:46 +0000
commit9cee4b923780227e05b99e7c86f0c790461d3823 (patch)
tree9026bd44dcc9a3e49ace4b94a8336902a14d943f /src/ats
parentbe3bb33daa121f6cf3503b54537268491d07021b (diff)
downloadgnunet-9cee4b923780227e05b99e7c86f0c790461d3823.tar.gz
gnunet-9cee4b923780227e05b99e7c86f0c790461d3823.zip
- improved error logging
Diffstat (limited to 'src/ats')
-rw-r--r--src/ats/gnunet-service-ats_addresses_mlp.c126
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 */
41const char *
42mlp_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 */
117const char *
118mlp_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 */
41static int 154static int
42mlp_term_hook (void *info, const char *s) 155mlp_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 }