Project

General

Profile

Feature #17349

Updated by Nico César about 3 years ago

This specification is for the server side (client side of this will be on separate tickets,). The component railsapi (endpoint /arvados/v1/collections) and making sure that controller has all the plumbing in place  

 This ticket will cover (api) 

 * railsapi    (including storing in the database) 
 * controller 
 * documentation updates with the new behaviour 

 This ticket will not cover 

 * client behaviour 
 * keep-balance behavirour 


 Current behaviour for collections' "replicas_desired" is to accept a Number[1] or 'null'. Also there is an undocumented attribute "storage_classes_desired" This has to be changed the database has the correct field type and "storage_classes_confirmed" 


 stores correctly 

 To complete Epic #16107 all components in Arvados should be able to send a number of storage tiers and their desired replication for each tier.  

 Valid values:  

 |_. replicas_desired Request Values |_. storage_classes_desired |_. defaultCollectionReplication |_. Collection Effective Value |_. Notes | 
 | null replicas_desired=null (or omited from the request)    | null | 3 | {"default": 3} |    current behaviour | 
 | null replicas_desired=null (or omited from the request)    | null |     | {"default": 2} | current behaviour see [2] | 
 | 42 | null replicas_desired=42    | 2 | 2| {"default": 42} |    | 
 | 34 replicas_desired={"default": 34} | null    | 2 | {"default": 34} |    | 
 | 1    |["archival"] replicas_desired={"archival": 1} | 2 | {"default": 0, 1, "archival": 1} |    To be talked in next grooming session. | 
 | replicas_desired={"default": 1    |["default","archival"] "archival": 1} | 2 | {"default": 1, "archival": 1} |    | 


 
 | replicas_desired={"archival": 2} | 2 | {"default": 0, "archival": 2} | To be talked in next grooming session. | 

 This are values that should be rejected (To be talked in next grooming session) 

 |_. Invalid values |_. Notes | 
 | replicas_desired="42"    | strings should not be allowed | 
 | replicas_desired={"default": "34"} | strings should not be allowed | 
 | replicas_desired={"archival": -1} | negative numbers should not be allowed| 
 | replicas_desired={} | empty json object should not be allowed | 

 The "Effective value" is the amount of copies has to be stored in each storage class the database and when the collection is queried, should be return as a JSON object. 

 To be talked in next grooming session:  
 * For the error send the user an error, we only will discuss the API errors. arv-put, arvados-cwl-runner and other clients will have their own ticket  
 * What should we do when returning current values ? should we return replicas_desired=42 or replicas_desired={"default":42} ?  
 * How will backward compatibility works here?  
 * if the current effective value is {"default": 1, "archival": 1}, how old client will react? 

 [1] https://doc.arvados.org/v2.1/api/methods/collections.html 
 [2] https://doc.arvados.org/v2.0/sdk/python/arvados/arvados.collection-pysrc.html#Collection._my_block_manager

Back