Summary:
Formerly, we were updating the metrics every 15 seconds. We were facing a couple of issues doing it manually:
- Outdated metrics in case of a one-time crash
- Metrics getting exposed for deleted PVs
Instead of fixing the bugs, I preferred to do it the right way. As per `python-prometheus` docs:
> Sometimes it is not possible to directly instrument code, as it is not in your control. This requires you to proxy metrics from other systems. To do so you need to create a custom collector...
Test Plan:
- Deploy on a cluster with existing rawfile PVs
- Send request to `:9100/metrics` and assert that metrics are exposed
- Delete a PV, and assert that its metrics disappear
Reviewers: h.marvi, bghadiri, sina_rad, mhyousefi
Reviewed By: h.marvi, bghadiri, sina_rad
Differential Revision: https://phab.hamravesh.ir/D815
Summary: Before this, we directly mounted the the rawfile on the mountpoint. In this revision the `STAGE_UNSTAGE_VOLUME` capability is implemented, meaning that the volume is first mounted to a staging path, and then `bind`-mounted to the actual path. This way we can free up loopback devices when they are not needed.
Test Plan:
- Create a pvc, and use it inside a pod
- Run `losetup -l` on the node running the pod, and assert the creation of a loop device
- Delete the pod, but not the pvc
- Run `losetup -l` on the same node, and assert the removal of the loop device
Reviewers: h.marvi, bghadiri
Differential Revision: https://phab.hamravesh.ir/D806