Create a lightweight method for checking of a clones status
Goal
If we try to request GET /clone/cloneID
during reset:
err = ZfsDestroyClone(j.runner, j.config.ModeZfs.ZfsPool, name)
if err != nil {
return errors.Wrap(err, "failed to destroy clone")
}
err = ZfsCreateClone(j.runner, j.config.ModeZfs.ZfsPool, name, snapshotID,
j.config.ModeZfs.MountDir, j.config.OSUsername)
if err != nil {
return errors.Wrap(err, "failed to create a clone")
}
there is a probability to receive a false-negative result
2020/02/12 02:46:38 [DEBUG] Run(Local): "zfs destroy -R zpool/dblab_clone_6000"
2020/02/12 02:46:39 [INFO] -> GET /clone/joe-bp1l0454h85sr82l6fo0
2020/02/12 02:46:39 [DEBUG] Run(Local): "zfs list -po name,used,mountpoint,compressratio,available,type,origin,creation,referenced,logicalreferenced,logicalused,dblab:datastateat -S dblab:datastateat -S creation -t filesystem -r zpool"
2020/02/12 02:46:39 [DEBUG] Failed to get clone: failed to get a session state: cannot get session state: specified ZFS pool does not exist
2020/02/12 02:46:39 [DEBUG] Response: Code "NOT_FOUND". Message: Not found. Detail: Requested object does not exist. Hint: Specify your request.
2020/02/12 02:46:39 [DEBUG] Not found
2020/02/12 02:46:39 [DEBUG] Run(Local): "zfs clone -o mountpoint=/var/lib/dblab/clones/dblab_clone_6000 zpool/clone_pre_20200211092040@snapshot_20200211092040 zpool/dblab_clone_6000 && chown -R root /var/lib/dblab/clones/dblab_clone_6000"
2020/02/12 02:46:40 [DEBUG] Run(Local): output ""
2020/02/12 02:46:40 [DEBUG] Starting Postgres...
TODO / How to implement
- Create a new method for retrieving a clone status without a session state.
- Use this method in API for reset and delete methods
OR Alternative:
- skip the session state error, use default clone size
Acceptance criteria
Edited by Artyom Kartasov