Bug #7161
Updated by Tom Clegg over 9 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?