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 their service type. type (EXCEPT MAYBE: do we want to exclude services that don't define a service type?    Ask Tom.) 
 * The For any service that isn't a disk, the client will send the X-Keep-Desired-Replication header in all PUT requests, the request, and respect the X-Keep-Replicas-Stored header in the response, regardless of service type (currently sends the request header only to proxies). as it currently does for proxies. 
 * The client only has one thread at a time writing to non-disk 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). 
 ** 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