Últimos Cambios |
||
Blog personal: El hilo del laberinto |
Última Actualización: 15 de enero de 2009 - Jueves
Cuando cerramos una sesión de BitTornado, el programa almacena en disco información sobre cada uno de los torrents en servicio. Estos datos permiten que BitTornado arranque rápidamente, ya que sabe qué torrents ya tiene completos y cuál es el estado de los torrents parciales. Lamentablemente, si el programa muere de forma abrupta (por ejemplo, porque se va la luz), dicha caché no existe, y el siguiente lanzamiento de BitTornado será muy lento porque tiene que revisar la consistencia de, potencialmente, cientos de ficheros de torrent y sus ficheros de datos asociados.
BitTornado almacena esta información de caché al terminar, y la recarga al ser reiniciado. Durante dicha recarga elimina esos datos de disco, ya que cualquier actualización de un torrent incompleto invalida dicha información, y es peligroso depender de datos anticuados. El problema es que esta invalidación afecta también a los torrents que ya tenemos completos (somos "seed") que, por definición, no van a cambiar. No sería necesario eliminar esa información del disco duro, y el mantenerla en él nos permite disponer de ella aunque la instancia actual de BitTornado se corte de forma abrupta, sin tener ocasión de almacenar la información de caché actualizada.
Otro cambio simple e interesante es almacenar inmediatamente en disco la información de caché en cuanto se completa un torrent, en vez de esperar a la grabación completa de toda la caché cuando el programa termina de forma correcta.
En resumen:
El parche es el siguiente:
Index: BitTornado/launchmanycore.py =================================================================== --- BitTornado/launchmanycore.py (revision 9) +++ BitTornado/launchmanycore.py (revision 11) @@ -137,6 +137,7 @@ def finished(self): self.seed = True + self.d.finished() def error(self, msg): if self.doneflag.isSet(): Index: BitTornado/download_bt1.py =================================================================== --- BitTornado/download_bt1.py (revision 9) +++ BitTornado/download_bt1.py (revision 11) @@ -325,6 +325,8 @@ self.rawserver = rawserver self.port = port + self.completado = False + self.info = self.response['info'] if "length" in self.info : @@ -645,7 +647,8 @@ self._reqmorefunc, self.rerequest_ondownloadmore) if self.priority: self.fileselector.set_priorities_now(self.priority) - self.appdataobj.deleteTorrentData(self.infohash) + if not self.completado : + self.appdataobj.deleteTorrentData(self.infohash) # erase old data once you've started modifying it if self.config['super_seeder']: @@ -742,6 +745,15 @@ def getPortHandler(self): return self.encoder + def finished(self, torrentdata = {}) : + self.completado = True + if self.fileselector : + if not self.failed : + torrentdata['resume data'] = self.fileselector.pickle() + try: + self.appdataobj.writeTorrentData(self.infohash,torrentdata) + except : + pass def shutdown(self, torrentdata = {}): if self.checking or self.started:
Este parche realiza las dos operaciones propuestas: por un lado, cuando se carga un torrent desde la caché no se elimina de la misma si lo tenemos completo (somos "seed") y, por otro lado, actualizamos al momento la caché para los torrents que vamos completando, en vez de esperar a finalizar el programa adecuadamente.
Con este cambio, BitTornado no necesita revisar los torrents "seed", aunque haya terminado de forma abrupta.
Como detalle curioso, el parche refresca el fichero de caché en disco cuando somos "seed", a medida que se va arrancando el programa. Esto hace que su fecha se mantenga "fresca", lo que resulta útil cuando llega la hora de expirar viejos datos de la caché.
Más información sobre los OpenBadges
Donación BitCoin: 19niBN42ac2pqDQFx6GJZxry2JQSFvwAfS