|  | @@ -216,7 +216,7 @@ class RemoteRepository:
 | 
	
		
			
				|  |  |          self.preload_ids = []
 | 
	
		
			
				|  |  |          self.msgid = 0
 | 
	
		
			
				|  |  |          self.to_send = b''
 | 
	
		
			
				|  |  | -        self.cache = {}
 | 
	
		
			
				|  |  | +        self.chunkid_to_msgids = {}
 | 
	
		
			
				|  |  |          self.ignore_responses = set()
 | 
	
		
			
				|  |  |          self.responses = {}
 | 
	
		
			
				|  |  |          self.ratelimit = SleepingBandwidthLimiter(args.remote_ratelimit * 1024 if args and args.remote_ratelimit else 0)
 | 
	
	
		
			
				|  | @@ -350,10 +350,10 @@ This problem will go away as soon as the server has been upgraded to 1.0.7+.
 | 
	
		
			
				|  |  |          if not calls:
 | 
	
		
			
				|  |  |              return
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -        def fetch_from_cache(args):
 | 
	
		
			
				|  |  | -            msgid = self.cache[args].pop(0)
 | 
	
		
			
				|  |  | -            if not self.cache[args]:
 | 
	
		
			
				|  |  | -                del self.cache[args]
 | 
	
		
			
				|  |  | +        def pop_preload_msgid(chunkid):
 | 
	
		
			
				|  |  | +            msgid = self.chunkid_to_msgids[chunkid].pop(0)
 | 
	
		
			
				|  |  | +            if not self.chunkid_to_msgids[chunkid]:
 | 
	
		
			
				|  |  | +                del self.chunkid_to_msgids[chunkid]
 | 
	
		
			
				|  |  |              return msgid
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          def handle_error(error, res):
 | 
	
	
		
			
				|  | @@ -424,21 +424,23 @@ This problem will go away as soon as the server has been upgraded to 1.0.7+.
 | 
	
		
			
				|  |  |                  while not self.to_send and (calls or self.preload_ids) and len(waiting_for) < MAX_INFLIGHT:
 | 
	
		
			
				|  |  |                      if calls:
 | 
	
		
			
				|  |  |                          if is_preloaded:
 | 
	
		
			
				|  |  | -                            if calls[0] in self.cache:
 | 
	
		
			
				|  |  | -                                waiting_for.append(fetch_from_cache(calls.pop(0)))
 | 
	
		
			
				|  |  | +                            assert cmd == "get", "is_preload is only supported for 'get'"
 | 
	
		
			
				|  |  | +                            if calls[0][0] in self.chunkid_to_msgids:
 | 
	
		
			
				|  |  | +                                waiting_for.append(pop_preload_msgid(calls.pop(0)[0]))
 | 
	
		
			
				|  |  |                          else:
 | 
	
		
			
				|  |  |                              args = calls.pop(0)
 | 
	
		
			
				|  |  | -                            if cmd == 'get' and args in self.cache:
 | 
	
		
			
				|  |  | -                                waiting_for.append(fetch_from_cache(args))
 | 
	
		
			
				|  |  | +                            if cmd == 'get' and args[0] in self.chunkid_to_msgids:
 | 
	
		
			
				|  |  | +                                waiting_for.append(pop_preload_msgid(args[0]))
 | 
	
		
			
				|  |  |                              else:
 | 
	
		
			
				|  |  |                                  self.msgid += 1
 | 
	
		
			
				|  |  |                                  waiting_for.append(self.msgid)
 | 
	
		
			
				|  |  |                                  self.to_send = msgpack.packb((1, self.msgid, cmd, args))
 | 
	
		
			
				|  |  |                      if not self.to_send and self.preload_ids:
 | 
	
		
			
				|  |  | -                        args = (self.preload_ids.pop(0),)
 | 
	
		
			
				|  |  | +                        chunk_id = self.preload_ids.pop(0)
 | 
	
		
			
				|  |  | +                        args = (chunk_id,)
 | 
	
		
			
				|  |  |                          self.msgid += 1
 | 
	
		
			
				|  |  | -                        self.cache.setdefault(args, []).append(self.msgid)
 | 
	
		
			
				|  |  | -                        self.to_send = msgpack.packb((1, self.msgid, cmd, args))
 | 
	
		
			
				|  |  | +                        self.chunkid_to_msgids.setdefault(chunk_id, []).append(self.msgid)
 | 
	
		
			
				|  |  | +                        self.to_send = msgpack.packb((1, self.msgid, 'get', args))
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |                  if self.to_send:
 | 
	
		
			
				|  |  |                      try:
 |