A Gradual Journey to Typed Python

Python as a gradually typed language yeilds higher development velocity and reduced maintenance.
Python is much loved by developers for its ease of development, its low time to minimum viable product and, some might say, its dynamic typing. I’ve been using dynamically typed Python for the better part of a decade now, for those same reasons. Dynamically typed Python is rapid to develop in, features amorphous blobs of data and works great for writing code quickly. Gradual typing and static analysis split the difference between the reduced velocity of a strongly typed language and the likewise reduced velocity of maintaining code where the input and output data types are unclear.

Copy Ceph Pool Objects to Another Pool

Code and explainantion for copying objects between ceph pools using librados.
Sometimes it is necessary to copy Ceph pool objects from one Ceph pool to another - such as when changing CRUSH/erasure rule sets on an expanding cluster. There is a built-in command in RADOS for doing this. However the command in question, rados cppool , has some limitations. It only seems to work with replicated target pools. Thus it cannot copy Ceph pool objects from a erasure pool to a replicated pool, or between erasure pools.