|
7 | 7 | from functools import wraps
|
8 | 8 | import time
|
9 | 9 | from contextlib import contextmanager
|
| 10 | +import copy |
10 | 11 |
|
11 | 12 | import attr
|
12 | 13 | import grpc
|
@@ -267,19 +268,24 @@ async def save(self):
|
267 | 268 | logging.debug("Running Save")
|
268 | 269 | self.save_scheduled = False
|
269 | 270 |
|
270 |
| - with warn_if_slow("dump resources"): |
271 |
| - resources = self._get_resources() |
272 |
| - resources = yaml.dump(resources) |
273 |
| - resources = resources.encode() |
274 |
| - with warn_if_slow("dump places"): |
275 |
| - places = self._get_places() |
276 |
| - places = yaml.dump(places) |
277 |
| - places = places.encode() |
278 |
| - |
279 |
| - logging.debug("Awaiting resources") |
280 |
| - await self.loop.run_in_executor(None, atomic_replace, "resources.yaml", resources) |
281 |
| - logging.debug("Awaiting places") |
282 |
| - await self.loop.run_in_executor(None, atomic_replace, "places.yaml", places) |
| 271 | + with warn_if_slow("create resources snapshot"): |
| 272 | + resources = copy.deepcopy(self._get_resources()) |
| 273 | + with warn_if_slow("create places snapshot"): |
| 274 | + places = copy.deepcopy(self._get_places()) |
| 275 | + |
| 276 | + def save_sync(resources, places): |
| 277 | + with warn_if_slow("dump resources"): |
| 278 | + resources = yaml.dump(resources) |
| 279 | + resources = resources.encode() |
| 280 | + with warn_if_slow("dump places"): |
| 281 | + places = yaml.dump(places) |
| 282 | + places = places.encode() |
| 283 | + with warn_if_slow("write resources"): |
| 284 | + atomic_replace("resources.yaml", resources) |
| 285 | + with warn_if_slow("write places"): |
| 286 | + atomic_replace("places.yaml", places) |
| 287 | + |
| 288 | + await self.loop.run_in_executor(None, save_sync, resources, places) |
283 | 289 |
|
284 | 290 | def load(self):
|
285 | 291 | try:
|
|
0 commit comments