when a new gateway(never joined a cluster before) joined a existing clsuter. `dog vdi object location` causes the new gateway exist because its backend storage is not initialized. this patch solves this problems by checking whether a node is gateway in `local_oid_exist` fucntion. simple return `SD_RES_NO_OBJ` to avoid using uninitialized pointer.
Signed-off-by: Jinzhi Chen <[email protected]> --- sheep/ops.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/sheep/ops.c b/sheep/ops.c index a617a83..44b3ed0 100644 --- a/sheep/ops.c +++ b/sheep/ops.c @@ -1073,6 +1073,9 @@ static int local_oid_exist(struct request *req) uint64_t oid = req->rq.obj.oid; uint8_t ec_index = local_ec_index(req->vinfo, oid); + if (sys->this_node.nr_vnodes == 0) + return SD_RES_NO_OBJ; + if (is_erasure_oid(oid) && ec_index == SD_MAX_COPIES) return SD_RES_NO_OBJ; -- 1.9.3 (Apple Git-50) -- sheepdog mailing list [email protected] http://lists.wpkg.org/mailman/listinfo/sheepdog
