There are two properties described: stateless and functional,
Stateless advantages: Horizontally scalable, Allows partial failures (nodes can go down or network can malfunction), Easily deployable via docker
Functional means core behavior is implemented as pure functions which enables easy unit tests. Property based testing also possible
Each log is identified in the table on the left, it gets expanded to string on the right. The format strings gets expanded based on keyword args. There is also provision to split large logs as in `execute-convergence`.
Detailed error handling specific to Rax public cloud
Response logging for debugging
The implementation of APIs does not know about concrete details like specific service URI, authentication, service catalog, tenant ID and so on. In fact they don’t know about underlying framework used.
The auth part is implemented with caching authenticator where for every request code always auths and invalidates it when it receives 401. All this is completely shielded from actual API implementation
This is part of code that takes the tenant id and generates the final HTTP request to be sent. Request is bare minimum function that returns step to execute HTTP request. Notice how it adds functionality to function using decorators
The idea of scoping effect on a tenant was applied to logging.