|
1 | 1 | # SPDX-License-Identifier: MIT |
2 | | -import os, sys, os.path, time, logging |
| 2 | +import os, sys, os.path, time, logging, random |
3 | 3 | from dataclasses import dataclass |
4 | 4 |
|
5 | 5 | from urllib import request |
@@ -35,9 +35,12 @@ def get_size(self): |
35 | 35 | fd = request.urlopen(req) |
36 | 36 | return int(fd.getheader("Content-length")) |
37 | 37 |
|
38 | | - def get_partial(self, off, size): |
| 38 | + def get_partial(self, off, size, bypass_cache=False): |
39 | 39 | #print("get_partial", off, size) |
40 | | - req = request.Request(self.url, method="GET") |
| 40 | + url = self.url |
| 41 | + if bypass_cache: |
| 42 | + url += f"?{random.random()}" |
| 43 | + req = request.Request(url, method="GET") |
41 | 44 | req.add_header("Range", f"bytes={off}-{off+size-1}") |
42 | 45 | fd = request.urlopen(req, timeout=self.TIMEOUT) |
43 | 46 |
|
@@ -75,7 +78,7 @@ def get_block(self, blk, readahead=1): |
75 | 78 | sleep = 1 |
76 | 79 | for retry in range(retries + 1): |
77 | 80 | try: |
78 | | - data = self.get_partial(off, size) |
| 81 | + data = self.get_partial(off, size, bypass_cache=(retry == retries)) |
79 | 82 | except Exception as e: |
80 | 83 | if retry == retries: |
81 | 84 | p_error(f"Exceeded maximum retries downloading data.") |
|
0 commit comments