Hey John, can you take a quick look at https://github.com/ceph/ceph/pull/16250 and let me know if I'm on the right track? This successfully gets the epoch, so it seems to be basically working. I didn't the dtor called, which makes me a bit suspicious, but otherwise it seems to work fine. (Lazy gc?) It seems a bit weird that all methods are static and we don't use the PyObject *self... and instead pass around the _handle value explicitly as an argument. Is that just how it is? The examples I see seem to all be static as well. The plan is to wrap enough of OSDMap and CrushWrapper that a mgr module can exercise the upmap optimizer code and/or make CRUSH changes to run Loic's gradient optimization... Thanks! sage -- To unsubscribe from this list: send the line "unsubscribe ceph-devel" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html