Skip to content

Commit c5c5ffc

Browse files
authored
[fwutil]: Set default socket timeout for FW download to 30 sec. (sonic-net#821)
Signed-off-by: Nazarii Hnydyn <[email protected]>
1 parent 81c5930 commit c5c5ffc

File tree

1 file changed

+12
-2
lines changed

1 file changed

+12
-2
lines changed

fwutil/lib.py

+12-2
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
import click
1010
import os
1111
import json
12+
import socket
1213
import urllib
1314
import subprocess
1415
import sonic_device_util
@@ -45,7 +46,8 @@ class URL(object):
4546
PB_INFO_SEPARATOR = " | "
4647
PB_FULL_TERMINAL_WIDTH = 0
4748

48-
TMP_PATH = "/tmp"
49+
DOWNLOAD_TIMEOUT = 30
50+
DOWNLOAD_PATH_TEMPLATE = "/tmp/{}"
4951

5052
def __init__(self, url):
5153
self.__url = url
@@ -115,13 +117,21 @@ def retrieve(self):
115117
if not extension:
116118
raise RuntimeError("Filename is malformed: did not find an extension")
117119

120+
default_timeout = socket.getdefaulttimeout()
121+
socket.setdefaulttimeout(self.DOWNLOAD_TIMEOUT)
122+
118123
try:
119124
filename, headers = urllib.urlretrieve(
120125
self.__url,
121-
"{}/{}".format(self.TMP_PATH, basename),
126+
self.DOWNLOAD_PATH_TEMPLATE.format(basename),
122127
self.__reporthook
123128
)
129+
except:
130+
if os.path.exists(self.DOWNLOAD_PATH_TEMPLATE.format(basename)):
131+
os.remove(self.DOWNLOAD_PATH_TEMPLATE.format(basename))
132+
raise
124133
finally:
134+
socket.setdefaulttimeout(default_timeout)
125135
self.__pb_reset()
126136

127137
return filename, headers

0 commit comments

Comments
 (0)