提交 761491eb 编写于 作者: W Wido den Hollander 提交者: Ján Tomko

rbd: Include return statuses from librados/librbd in logging

With this information it's easier for the user to debug what is
going wrong.
上级 723e2f84
...@@ -51,6 +51,7 @@ static int virStorageBackendRBDOpenRADOSConn(virStorageBackendRBDStatePtr ptr, ...@@ -51,6 +51,7 @@ static int virStorageBackendRBDOpenRADOSConn(virStorageBackendRBDStatePtr ptr,
virStoragePoolObjPtr pool) virStoragePoolObjPtr pool)
{ {
int ret = -1; int ret = -1;
int r = 0;
unsigned char *secret_value = NULL; unsigned char *secret_value = NULL;
size_t secret_value_size; size_t secret_value_size;
char *rados_key = NULL; char *rados_key = NULL;
...@@ -65,10 +66,9 @@ static int virStorageBackendRBDOpenRADOSConn(virStorageBackendRBDStatePtr ptr, ...@@ -65,10 +66,9 @@ static int virStorageBackendRBDOpenRADOSConn(virStorageBackendRBDStatePtr ptr,
if (pool->def->source.auth.cephx.username != NULL) { if (pool->def->source.auth.cephx.username != NULL) {
VIR_DEBUG("Using cephx authorization"); VIR_DEBUG("Using cephx authorization");
if (rados_create(&ptr->cluster, r = rados_create(&ptr->cluster, pool->def->source.auth.cephx.username);
pool->def->source.auth.cephx.username) < 0) { if (r < 0) {
virReportError(VIR_ERR_INTERNAL_ERROR, "%s", virReportSystemError(-r, "%s", _("failed to initialize RADOS"));
_("failed to initialize RADOS"));
goto cleanup; goto cleanup;
} }
...@@ -198,10 +198,10 @@ static int virStorageBackendRBDOpenRADOSConn(virStorageBackendRBDStatePtr ptr, ...@@ -198,10 +198,10 @@ static int virStorageBackendRBDOpenRADOSConn(virStorageBackendRBDStatePtr ptr,
} }
ptr->starttime = time(0); ptr->starttime = time(0);
if (rados_connect(ptr->cluster) < 0) { r = rados_connect(ptr->cluster);
virReportError(VIR_ERR_INTERNAL_ERROR, if (r < 0) {
_("failed to connect to the RADOS monitor on: %s"), virReportSystemError(-r, _("failed to connect to the RADOS monitor on: %s"),
mon_buff); mon_buff);
goto cleanup; goto cleanup;
} }
...@@ -219,6 +219,16 @@ cleanup: ...@@ -219,6 +219,16 @@ cleanup:
return ret; return ret;
} }
static int virStorageBackendRBDOpenIoCTX(virStorageBackendRBDStatePtr ptr, virStoragePoolObjPtr pool)
{
int r = rados_ioctx_create(ptr->cluster, pool->def->source.name, &ptr->ioctx);
if (r < 0) {
virReportSystemError(-r, _("failed to create the RBD IoCTX. Does the pool '%s' exist?"),
pool->def->source.name);
}
return r;
}
static int virStorageBackendRBDCloseRADOSConn(virStorageBackendRBDStatePtr ptr) static int virStorageBackendRBDCloseRADOSConn(virStorageBackendRBDStatePtr ptr)
{ {
int ret = 0; int ret = 0;
...@@ -248,18 +258,21 @@ static int volStorageBackendRBDRefreshVolInfo(virStorageVolDefPtr vol, ...@@ -248,18 +258,21 @@ static int volStorageBackendRBDRefreshVolInfo(virStorageVolDefPtr vol,
virStorageBackendRBDStatePtr ptr) virStorageBackendRBDStatePtr ptr)
{ {
int ret = -1; int ret = -1;
int r = 0;
rbd_image_t image; rbd_image_t image;
if (rbd_open(ptr->ioctx, vol->name, &image, NULL) < 0) {
virReportError(VIR_ERR_INTERNAL_ERROR, r = rbd_open(ptr->ioctx, vol->name, &image, NULL);
_("failed to open the RBD image '%s'"), if (r < 0) {
vol->name); virReportSystemError(-r, _("failed to open the RBD image '%s'"),
vol->name);
return ret; return ret;
} }
rbd_image_info_t info; rbd_image_info_t info;
if (rbd_stat(image, &info, sizeof(info)) < 0) { r = rbd_stat(image, &info, sizeof(info));
virReportError(VIR_ERR_INTERNAL_ERROR, "%s", if (r < 0) {
_("failed to stat the RBD image")); virReportSystemError(-r, _("failed to stat the RBD image '%s'"),
vol->name);
goto cleanup; goto cleanup;
} }
...@@ -297,6 +310,7 @@ static int virStorageBackendRBDRefreshPool(virConnectPtr conn, ...@@ -297,6 +310,7 @@ static int virStorageBackendRBDRefreshPool(virConnectPtr conn,
size_t max_size = 1024; size_t max_size = 1024;
int ret = -1; int ret = -1;
int len = -1; int len = -1;
int r = 0;
char *name, *names = NULL; char *name, *names = NULL;
virStorageBackendRBDState ptr; virStorageBackendRBDState ptr;
ptr.cluster = NULL; ptr.cluster = NULL;
...@@ -306,26 +320,22 @@ static int virStorageBackendRBDRefreshPool(virConnectPtr conn, ...@@ -306,26 +320,22 @@ static int virStorageBackendRBDRefreshPool(virConnectPtr conn,
goto cleanup; goto cleanup;
} }
if (rados_ioctx_create(ptr.cluster, if (virStorageBackendRBDOpenIoCTX(&ptr, pool) < 0) {
pool->def->source.name, &ptr.ioctx) < 0) {
virReportError(VIR_ERR_INTERNAL_ERROR,
_("failed to create the RBD IoCTX. Does the pool '%s' exist?"),
pool->def->source.name);
goto cleanup; goto cleanup;
} }
struct rados_cluster_stat_t clusterstat; struct rados_cluster_stat_t clusterstat;
if (rados_cluster_stat(ptr.cluster, &clusterstat) < 0) { r = rados_cluster_stat(ptr.cluster, &clusterstat);
virReportError(VIR_ERR_INTERNAL_ERROR, "%s", if (r < 0) {
_("failed to stat the RADOS cluster")); virReportSystemError(-r, "%s", _("failed to stat the RADOS cluster"));
goto cleanup; goto cleanup;
} }
struct rados_pool_stat_t poolstat; struct rados_pool_stat_t poolstat;
if (rados_ioctx_pool_stat(ptr.ioctx, &poolstat) < 0) { r = rados_ioctx_pool_stat(ptr.ioctx, &poolstat);
virReportError(VIR_ERR_INTERNAL_ERROR, if (r < 0) {
_("failed to stat the RADOS pool '%s'"), virReportSystemError(-r, _("failed to stat the RADOS pool '%s'"),
pool->def->source.name); pool->def->source.name);
goto cleanup; goto cleanup;
} }
...@@ -398,6 +408,7 @@ static int virStorageBackendRBDDeleteVol(virConnectPtr conn, ...@@ -398,6 +408,7 @@ static int virStorageBackendRBDDeleteVol(virConnectPtr conn,
unsigned int flags) unsigned int flags)
{ {
int ret = -1; int ret = -1;
int r = 0;
virStorageBackendRBDState ptr; virStorageBackendRBDState ptr;
ptr.cluster = NULL; ptr.cluster = NULL;
ptr.ioctx = NULL; ptr.ioctx = NULL;
...@@ -412,19 +423,14 @@ static int virStorageBackendRBDDeleteVol(virConnectPtr conn, ...@@ -412,19 +423,14 @@ static int virStorageBackendRBDDeleteVol(virConnectPtr conn,
goto cleanup; goto cleanup;
} }
if (rados_ioctx_create(ptr.cluster, if (virStorageBackendRBDOpenIoCTX(&ptr, pool) < 0) {
pool->def->source.name, &ptr.ioctx) < 0) {
virReportError(VIR_ERR_INTERNAL_ERROR,
_("failed to create the RBD IoCTX. Does the pool '%s' exist?"),
pool->def->source.name);
goto cleanup; goto cleanup;
} }
if (rbd_remove(ptr.ioctx, vol->name) < 0) { r = rbd_remove(ptr.ioctx, vol->name);
virReportError(VIR_ERR_INTERNAL_ERROR, if (r < 0) {
_("failed to remove volume '%s/%s'"), virReportSystemError(-r, _("failed to remove volume '%s/%s'"),
pool->def->source.name, pool->def->source.name, vol->name);
vol->name);
goto cleanup; goto cleanup;
} }
...@@ -488,6 +494,7 @@ virStorageBackendRBDBuildVol(virConnectPtr conn, ...@@ -488,6 +494,7 @@ virStorageBackendRBDBuildVol(virConnectPtr conn,
ptr.cluster = NULL; ptr.cluster = NULL;
ptr.ioctx = NULL; ptr.ioctx = NULL;
int ret = -1; int ret = -1;
int r = 0;
VIR_DEBUG("Creating RBD image %s/%s with size %llu", VIR_DEBUG("Creating RBD image %s/%s with size %llu",
pool->def->source.name, pool->def->source.name,
...@@ -498,13 +505,8 @@ virStorageBackendRBDBuildVol(virConnectPtr conn, ...@@ -498,13 +505,8 @@ virStorageBackendRBDBuildVol(virConnectPtr conn,
if (virStorageBackendRBDOpenRADOSConn(&ptr, conn, pool) < 0) if (virStorageBackendRBDOpenRADOSConn(&ptr, conn, pool) < 0)
goto cleanup; goto cleanup;
if (rados_ioctx_create(ptr.cluster, if (virStorageBackendRBDOpenIoCTX(&ptr, pool) < 0)
pool->def->source.name, &ptr.ioctx) < 0) {
virReportError(VIR_ERR_INTERNAL_ERROR,
_("failed to create the RBD IoCTX. Does the pool '%s' exist?"),
pool->def->source.name);
goto cleanup; goto cleanup;
}
if (vol->target.encryption != NULL) { if (vol->target.encryption != NULL) {
virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
...@@ -512,11 +514,11 @@ virStorageBackendRBDBuildVol(virConnectPtr conn, ...@@ -512,11 +514,11 @@ virStorageBackendRBDBuildVol(virConnectPtr conn,
goto cleanup; goto cleanup;
} }
if (virStorageBackendRBDCreateImage(ptr.ioctx, vol->name, vol->capacity) < 0) { r = virStorageBackendRBDCreateImage(ptr.ioctx, vol->name, vol->capacity);
virReportError(VIR_ERR_INTERNAL_ERROR, if (r < 0) {
_("failed to create volume '%s/%s'"), virReportSystemError(-r, _("failed to create volume '%s/%s'"),
pool->def->source.name, pool->def->source.name,
vol->name); vol->name);
goto cleanup; goto cleanup;
} }
...@@ -543,11 +545,7 @@ static int virStorageBackendRBDRefreshVol(virConnectPtr conn, ...@@ -543,11 +545,7 @@ static int virStorageBackendRBDRefreshVol(virConnectPtr conn,
goto cleanup; goto cleanup;
} }
if (rados_ioctx_create(ptr.cluster, if (virStorageBackendRBDOpenIoCTX(&ptr, pool) < 0) {
pool->def->source.name, &ptr.ioctx) < 0) {
virReportError(VIR_ERR_INTERNAL_ERROR,
_("failed to create the RBD IoCTX. Does the pool '%s' exist?"),
pool->def->source.name);
goto cleanup; goto cleanup;
} }
...@@ -573,6 +571,7 @@ static int virStorageBackendRBDResizeVol(virConnectPtr conn ATTRIBUTE_UNUSED, ...@@ -573,6 +571,7 @@ static int virStorageBackendRBDResizeVol(virConnectPtr conn ATTRIBUTE_UNUSED,
ptr.ioctx = NULL; ptr.ioctx = NULL;
rbd_image_t image = NULL; rbd_image_t image = NULL;
int ret = -1; int ret = -1;
int r = 0;
virCheckFlags(0, -1); virCheckFlags(0, -1);
...@@ -580,25 +579,21 @@ static int virStorageBackendRBDResizeVol(virConnectPtr conn ATTRIBUTE_UNUSED, ...@@ -580,25 +579,21 @@ static int virStorageBackendRBDResizeVol(virConnectPtr conn ATTRIBUTE_UNUSED,
goto cleanup; goto cleanup;
} }
if (rados_ioctx_create(ptr.cluster, if (virStorageBackendRBDOpenIoCTX(&ptr, pool) < 0) {
pool->def->source.name, &ptr.ioctx) < 0) {
virReportError(VIR_ERR_INTERNAL_ERROR,
_("failed to create the RBD IoCTX. Does the pool '%s' exist?"),
pool->def->source.name);
goto cleanup; goto cleanup;
} }
if (rbd_open(ptr.ioctx, vol->name, &image, NULL) < 0) { r = rbd_open(ptr.ioctx, vol->name, &image, NULL);
virReportError(VIR_ERR_INTERNAL_ERROR, if (r < 0) {
_("failed to open the RBD image '%s'"), virReportSystemError(-r, _("failed to open the RBD image '%s'"),
vol->name); vol->name);
goto cleanup; goto cleanup;
} }
if (rbd_resize(image, capacity) < 0) { r = rbd_resize(image, capacity);
virReportError(VIR_ERR_INTERNAL_ERROR, if (r < 0) {
_("failed to resize the RBD image '%s'"), virReportSystemError(-r, _("failed to resize the RBD image '%s'"),
vol->name); vol->name);
goto cleanup; goto cleanup;
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册