Software /
code /
prosody
Comparison
net/server_epoll.lua @ 10587:863aa36a9dd8
net.server_epoll: Add option for reducing debug logging
Sometimes all these things just drown out the logs you are interested
in with low-level socket noise.
Enabled since it's still new and experimental.
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Sun, 12 Jan 2020 20:35:04 +0100 |
parent | 10586:f86ed818a7f8 |
child | 10588:ceadf3d3fecf |
comparison
equal
deleted
inserted
replaced
10586:f86ed818a7f8 | 10587:863aa36a9dd8 |
---|---|
64 | 64 |
65 -- Maximum and minimum amount of time to sleep waiting for events (adjusted for pending timers) | 65 -- Maximum and minimum amount of time to sleep waiting for events (adjusted for pending timers) |
66 max_wait = 86400; | 66 max_wait = 86400; |
67 min_wait = 1e-06; | 67 min_wait = 1e-06; |
68 | 68 |
69 -- Enable extra noisy debug logging | |
70 -- TODO disable once considered stable | |
71 verbose = true; | |
72 | |
69 -- EXPERIMENTAL | 73 -- EXPERIMENTAL |
70 -- Whether to kill connections in case of callback errors. | 74 -- Whether to kill connections in case of callback errors. |
71 fatal_errors = false; | 75 fatal_errors = false; |
72 | 76 |
73 -- Attempt writes instantly | 77 -- Attempt writes instantly |
153 interface.log = log; | 157 interface.log = log; |
154 function interface:debug(msg, ...) --luacheck: ignore 212/self | 158 function interface:debug(msg, ...) --luacheck: ignore 212/self |
155 self.log("debug", msg, ...); | 159 self.log("debug", msg, ...); |
156 end | 160 end |
157 | 161 |
162 interface.noise = interface.debug; | |
163 function interface:noise(msg, ...) --luacheck: ignore 212/self | |
164 if cfg.verbose then | |
165 return self:debug(msg, ...); | |
166 end | |
167 end | |
168 | |
158 function interface:error(msg, ...) --luacheck: ignore 212/self | 169 function interface:error(msg, ...) --luacheck: ignore 212/self |
159 self.log("error", msg, ...); | 170 self.log("error", msg, ...); |
160 end | 171 end |
161 | 172 |
162 -- Replace the listener and tell the old one | 173 -- Replace the listener and tell the old one |
172 self:debug("Interface is missing listener callbacks"); | 183 self:debug("Interface is missing listener callbacks"); |
173 return; | 184 return; |
174 end | 185 end |
175 local listener = self.listeners["on"..what]; | 186 local listener = self.listeners["on"..what]; |
176 if not listener then | 187 if not listener then |
177 -- self:debug("Missing listener 'on%s'", what); -- uncomment for development and debugging | 188 self:noise("Missing listener 'on%s'", what); -- uncomment for development and debugging |
178 return; | 189 return; |
179 end | 190 end |
180 local ok, err = xpcall(listener, traceback, self, ...); | 191 local ok, err = xpcall(listener, traceback, self, ...); |
181 if not ok then | 192 if not ok then |
182 if cfg.fatal_errors then | 193 if cfg.fatal_errors then |
260 if self._readtimeout then | 271 if self._readtimeout then |
261 self._readtimeout:reschedule(t); | 272 self._readtimeout:reschedule(t); |
262 else | 273 else |
263 self._readtimeout = addtimer(t, function () | 274 self._readtimeout = addtimer(t, function () |
264 if self:on("readtimeout") then | 275 if self:on("readtimeout") then |
265 self:debug("Read timeout handled"); | 276 self:noise("Read timeout handled"); |
266 return cfg.read_timeout; | 277 return cfg.read_timeout; |
267 else | 278 else |
268 self:debug("Read timeout not handled, disconnecting"); | 279 self:debug("Read timeout not handled, disconnecting"); |
269 self:on("disconnect", "read timeout"); | 280 self:on("disconnect", "read timeout"); |
270 self:destroy(); | 281 self:destroy(); |
285 t = t or cfg.send_timeout; | 296 t = t or cfg.send_timeout; |
286 if self._writetimeout then | 297 if self._writetimeout then |
287 self._writetimeout:reschedule(t); | 298 self._writetimeout:reschedule(t); |
288 else | 299 else |
289 self._writetimeout = addtimer(t, function () | 300 self._writetimeout = addtimer(t, function () |
290 self:debug("Write timeout"); | 301 self:noise("Write timeout"); |
291 self:on("disconnect", "write timeout"); | 302 self:on("disconnect", "write timeout"); |
292 self:destroy(); | 303 self:destroy(); |
293 end); | 304 end); |
294 end | 305 end |
295 end | 306 end |
310 self:debug("Could not register in poller: %s(%d)", err, errno); | 321 self:debug("Could not register in poller: %s(%d)", err, errno); |
311 return ok, err; | 322 return ok, err; |
312 end | 323 end |
313 self._wantread, self._wantwrite = r, w; | 324 self._wantread, self._wantwrite = r, w; |
314 fds[fd] = self; | 325 fds[fd] = self; |
315 self:debug("Registered in poller"); | 326 self:noise("Registered in poller"); |
316 return true; | 327 return true; |
317 end | 328 end |
318 | 329 |
319 function interface:set(r, w) | 330 function interface:set(r, w) |
320 local fd = self:getfd(); | 331 local fd = self:getfd(); |
345 self:debug("Could not unregister: %s(%d)", err, errno); | 356 self:debug("Could not unregister: %s(%d)", err, errno); |
346 return ok, err; | 357 return ok, err; |
347 end | 358 end |
348 self._wantread, self._wantwrite = nil, nil; | 359 self._wantread, self._wantwrite = nil, nil; |
349 fds[fd] = nil; | 360 fds[fd] = nil; |
350 self:debug("Unregistered from poller"); | 361 self:noise("Unregistered from poller"); |
351 return true; | 362 return true; |
352 end | 363 end |
353 | 364 |
354 function interface:setflags(r, w) | 365 function interface:setflags(r, w) |
355 if not(self._wantread or self._wantwrite) then | 366 if not(self._wantread or self._wantwrite) then |
560 self.onreadable = nil; | 571 self.onreadable = nil; |
561 self:on("status", "ssl-handshake-complete"); | 572 self:on("status", "ssl-handshake-complete"); |
562 self:setwritetimeout(); | 573 self:setwritetimeout(); |
563 self:set(true, true); | 574 self:set(true, true); |
564 elseif err == "wantread" then | 575 elseif err == "wantread" then |
565 self:debug("TLS handshake to wait until readable"); | 576 self:noise("TLS handshake to wait until readable"); |
566 self:set(true, false); | 577 self:set(true, false); |
567 self:setreadtimeout(cfg.ssl_handshake_timeout); | 578 self:setreadtimeout(cfg.ssl_handshake_timeout); |
568 elseif err == "wantwrite" then | 579 elseif err == "wantwrite" then |
569 self:debug("TLS handshake to wait until writable"); | 580 self:noise("TLS handshake to wait until writable"); |
570 self:set(false, true); | 581 self:set(false, true); |
571 self:setwritetimeout(cfg.ssl_handshake_timeout); | 582 self:setwritetimeout(cfg.ssl_handshake_timeout); |
572 else | 583 else |
573 self:debug("TLS handshake error: %s", err); | 584 self:error("TLS handshake error: %s", err); |
574 self:on("disconnect", err); | 585 self:on("disconnect", err); |
575 self:destroy(); | 586 self:destroy(); |
576 end | 587 end |
577 end | 588 end |
578 | 589 |
639 self:setwritetimeout(cfg.connect_timeout); | 650 self:setwritetimeout(cfg.connect_timeout); |
640 return self:add(true, true); | 651 return self:add(true, true); |
641 end | 652 end |
642 | 653 |
643 function interface:pause() | 654 function interface:pause() |
644 self:debug("Pause reading"); | 655 self:noise("Pause reading"); |
645 return self:set(false); | 656 return self:set(false); |
646 end | 657 end |
647 | 658 |
648 function interface:resume() | 659 function interface:resume() |
649 self:debug("Resume reading"); | 660 self:noise("Resume reading"); |
650 return self:set(true); | 661 return self:set(true); |
651 end | 662 end |
652 | 663 |
653 -- Pause connection for some time | 664 -- Pause connection for some time |
654 function interface:pausefor(t) | 665 function interface:pausefor(t) |
655 self:debug("Pause for %fs", t); | 666 self:noise("Pause for %fs", t); |
656 if self._pausefor then | 667 if self._pausefor then |
657 self._pausefor:close(); | 668 self._pausefor:close(); |
658 end | 669 end |
659 if t == false then return; end | 670 if t == false then return; end |
660 self:set(false); | 671 self:set(false); |
661 self._pausefor = addtimer(t, function () | 672 self._pausefor = addtimer(t, function () |
662 self._pausefor = nil; | 673 self._pausefor = nil; |
663 self:set(true); | 674 self:set(true); |
664 self:debug("Resuming after pause, connection is %s", not self.conn and "missing" or self.conn:dirty() and "dirty" or "clean"); | 675 self:noise("Resuming after pause, connection is %s", not self.conn and "missing" or self.conn:dirty() and "dirty" or "clean"); |
665 if self.conn and self.conn:dirty() then | 676 if self.conn and self.conn:dirty() then |
666 self:onreadable(); | 677 self:onreadable(); |
667 end | 678 end |
668 end); | 679 end); |
669 end | 680 end |
678 | 689 |
679 function interface:pause_writes() | 690 function interface:pause_writes() |
680 if self._write_lock then | 691 if self._write_lock then |
681 return | 692 return |
682 end | 693 end |
683 self:debug("Pause writes"); | 694 self:noise("Pause writes"); |
684 self._write_lock = true; | 695 self._write_lock = true; |
685 self:setwritetimeout(false); | 696 self:setwritetimeout(false); |
686 self:set(nil, false); | 697 self:set(nil, false); |
687 end | 698 end |
688 | 699 |
689 function interface:resume_writes() | 700 function interface:resume_writes() |
690 if not self._write_lock then | 701 if not self._write_lock then |
691 return | 702 return |
692 end | 703 end |
693 self:debug("Resume writes"); | 704 self:noise("Resume writes"); |
694 self._write_lock = nil; | 705 self._write_lock = nil; |
695 if self.writebuffer[1] then | 706 if self.writebuffer[1] then |
696 self:setwritetimeout(); | 707 self:setwritetimeout(); |
697 self:set(nil, true); | 708 self:set(nil, true); |
698 end | 709 end |