Refresh directory vector cache (epoch changed)
(self, blocking=True)
| 196 | elementfmt = "IQ128s" |
| 197 | |
| 198 | def refresh(self, blocking=True): |
| 199 | """Refresh directory vector cache (epoch changed)""" |
| 200 | directory = {} |
| 201 | directory_by_idx = {} |
| 202 | while True: |
| 203 | try: |
| 204 | with self.lock: |
| 205 | self.last_epoch = self.epoch |
| 206 | for i, direntry in enumerate( |
| 207 | StatsVector(self, self.directory_vector, self.elementfmt) |
| 208 | ): |
| 209 | path_raw = direntry[2].find(b"\x00") |
| 210 | path = direntry[2][:path_raw].decode("ascii") |
| 211 | directory[path] = StatsEntry(direntry[0], direntry[1]) |
| 212 | directory_by_idx[i] = path |
| 213 | self.directory = directory |
| 214 | self.directory_by_idx = directory_by_idx |
| 215 | return |
| 216 | except IOError: |
| 217 | if not blocking: |
| 218 | raise |
| 219 | |
| 220 | def __getitem__(self, item, blocking=True): |
| 221 | if not self.connected: |
no test coverage detected