0002-download-retry-on-slow-speed-and-reset.patch 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. From 66524bee738e98742c908d93c993d0a78a2d9891 Mon Sep 17 00:00:00 2001
  2. From: myfreeer <[email protected]>
  3. Date: Sat, 18 Nov 2017 11:55:04 +0800
  4. Subject: [PATCH 3/4] download: retry on slow speed and conection close
  5. This would provide better speed on bad network conditions
  6. ---
  7. src/DownloadCommand.cc | 2 +-
  8. src/SocketBuffer.cc | 3 ++-
  9. src/SocketCore.cc | 2 +-
  10. 3 files changed, 4 insertions(+), 3 deletions(-)
  11. diff --git a/src/DownloadCommand.cc b/src/DownloadCommand.cc
  12. index 2db41e4..f49eb80 100644
  13. --- a/src/DownloadCommand.cc
  14. +++ b/src/DownloadCommand.cc
  15. @@ -306,7 +306,7 @@ void DownloadCommand::checkLowestDownloadSpeed() const
  16. startupIdleTime_) {
  17. int nowSpeed = peerStat_->calculateDownloadSpeed();
  18. if (nowSpeed <= lowestDownloadSpeedLimit_) {
  19. - throw DL_ABORT_EX2(fmt(EX_TOO_SLOW_DOWNLOAD_SPEED, nowSpeed,
  20. + throw DL_RETRY_EX2(fmt(EX_TOO_SLOW_DOWNLOAD_SPEED, nowSpeed,
  21. lowestDownloadSpeedLimit_,
  22. getRequest()->getHost().c_str()),
  23. error_code::TOO_SLOW_DOWNLOAD_SPEED);
  24. diff --git a/src/SocketBuffer.cc b/src/SocketBuffer.cc
  25. index 62862ff..1906173 100644
  26. --- a/src/SocketBuffer.cc
  27. +++ b/src/SocketBuffer.cc
  28. @@ -39,6 +39,7 @@
  29. #include "SocketCore.h"
  30. #include "DlAbortEx.h"
  31. +#include "DlRetryEx.h"
  32. #include "message.h"
  33. #include "fmt.h"
  34. #include "LogFactory.h"
  35. @@ -158,7 +159,7 @@ ssize_t SocketBuffer::send()
  36. }
  37. ssize_t slen = socket_->writeVector(iov, num);
  38. if (slen == 0 && !socket_->wantRead() && !socket_->wantWrite()) {
  39. - throw DL_ABORT_EX(fmt(EX_SOCKET_SEND, "Connection closed."));
  40. + throw DL_RETRY_EX(fmt(EX_SOCKET_SEND, "Connection closed."));
  41. }
  42. // A2_LOG_NOTICE(fmt("num=%zu, amount=%d, bufq.size()=%zu, SEND=%d",
  43. // num, amount, bufq_.size(), slen));
  44. diff --git a/src/SocketCore.cc b/src/SocketCore.cc
  45. index 77dc30c..537375a 100644
  46. --- a/src/SocketCore.cc
  47. +++ b/src/SocketCore.cc
  48. @@ -1009,7 +1009,7 @@ bool SocketCore::tlsHandshake(TLSContext* tlsctx, const std::string& hostname)
  49. if (rv == TLS_ERR_ERROR) {
  50. // Damn those error.
  51. - throw DL_ABORT_EX(fmt("SSL/TLS handshake failure: %s",
  52. + throw DL_RETRY_EX(fmt("SSL/TLS handshake failure: %s",
  53. handshakeError.empty()
  54. ? tlsSession_->getLastErrorString().c_str()
  55. : handshakeError.c_str()));
  56. --
  57. 2.17.1