func returnData()

in server/resource/v1/kv_resource.go [204:256]


func returnData(rctx *restful.Context, request *model.ListKVRequest) {
	revStr := rctx.ReadQueryParameter(common.QueryParamRev)
	wait := rctx.ReadQueryParameter(common.QueryParamWait)
	if wait != "" {
		duration, err := time.ParseDuration(wait)
		if err != nil {
			WriteErrResponse(rctx, config.ErrInvalidParams, err.Error())
			return
		}

		var cancel context.CancelFunc
		rctx.Ctx, cancel = context.WithTimeout(rctx.Ctx, duration)
		defer cancel()
	}
	if revStr == "" {
		if wait == "" {
			queryAndResponse(rctx, request)
			return
		}
		if !isLegalWaitRequest(rctx, request) {
			return
		}
		if watch(rctx, request, wait) {
			return
		}
		rctx.WriteHeader(http.StatusNotModified)
		return
	}
	revised, err := revNotMatch(rctx.Ctx, revStr, request.Domain)
	if err != nil {
		if err == ErrInvalidRev {
			WriteErrResponse(rctx, config.ErrInvalidParams, err.Error())
			return
		}
		WriteErrResponse(rctx, config.ErrInternal, err.Error())
		return
	}
	if revised {
		queryAndResponse(rctx, request)
		return
	} else if wait != "" {
		if !isLegalWaitRequest(rctx, request) {
			return
		}
		if watch(rctx, request, wait) {
			return
		}
		rctx.WriteHeader(http.StatusNotModified)
		return
	} else {
		rctx.WriteHeader(http.StatusNotModified)
	}
}