Project

General

Profile

Bug #7161

Updated by Tom Clegg over 8 years ago

Functional requirements: 

 * The Python SDK Keep client will talk to all accessible Keep services, regardless of service type. 
 * The client will send the X-Keep-Desired-Replication header in all PUT requests, and respect the X-Keep-Replicas-Stored header in the response, regardless of service type (currently sends the request header only to proxies). 
 * The client only has one thread at a time writing to non-disk services: If services, to avoid sending redundant requests (e.g., if it wants to 2 replicas of a block, it doesn't send the block to two gateways that will each replicate the block 2+ times). 
 ** Easier to implement: if there are _any_ non-"disk" services in the "accessible" list, use ThreadLimiter(1). 

 *Future* work: 
 ** More general solution: Anticipate API server telling us max replication for each service, meanwhile say 1 for disks and 3 for others. Let a thread start writing only when @sum(max replication) < copies_todo@, i.e., we will need to write more copies even if all currently writing threads succeed with max replication. 

 TBD: How should KeepClient choose a timeout for non-disk, non-proxy services?

Back