Exemple #1
0
        /// <summary>
        /// Sends a View request with retry.
        /// </summary>
        /// <typeparam name="T">The Type T of the <see cref="ViewRow{T}"/> value.</typeparam>
        /// <param name="viewQuery">The view query.</param>
        /// <returns>A <see cref="IViewResult{T}"/> with the results of the query.</returns>
        public override IViewResult <T> SendWithRetry <T>(IViewQuery viewQuery)
        {
            IViewResult <T> viewResult = null;

            try
            {
                do
                {
                    var server = ConfigInfo.GetServer();
                    viewResult = server.Send <T>(viewQuery);
                } while (
                    !viewResult.Success &&
                    !viewResult.CannotRetry() &&
                    viewQuery.RetryAttempts++ <= ConfigInfo.ClientConfig.MaxViewRetries);
            }
            catch (Exception e)
            {
                Log.Info(e);
                const string message = "View request failed, check Error and Exception fields for details.";
                viewResult = new ViewResult <T>
                {
                    Message    = message,
                    Error      = e.Message,
                    StatusCode = HttpStatusCode.BadRequest,
                    Success    = false,
                    Exception  = e
                };
            }
            return(viewResult);
        }
        /// <summary>
        /// Sends a View request with retry.
        /// </summary>
        /// <typeparam name="T">The Type T of the <see cref="ViewRow{T}"/> value.</typeparam>
        /// <param name="viewQuery">The view query.</param>
        /// <returns>A <see cref="IViewResult{T}"/> with the results of the query.</returns>
        /// <exception cref="ServiceNotSupportedException">The cluster does not support View services.</exception>
        public override IViewResult <T> SendWithRetry <T>(IViewQueryable viewQuery)
        {
            IViewResult <T> viewResult = null;

            try
            {
                //Is the cluster configured for View services?
                if (!ConfigInfo.IsViewCapable)
                {
                    throw new ServiceNotSupportedException(
                              ExceptionUtil.GetMessage(ExceptionUtil.ServiceNotSupportedMsg, "View"));
                }

                do
                {
                    var server = ConfigInfo.GetViewNode();
                    viewResult = server.Send <T>(viewQuery);
                } while (
                    !viewResult.Success &&
                    !viewResult.CannotRetry() &&
                    viewQuery.RetryAttempts++ <= ConfigInfo.ClientConfig.MaxViewRetries);
            }
            catch (Exception e)
            {
                Log.Info(e);
                const string message = "View request failed, check Error and Exception fields for details.";
                viewResult = new ViewResult <T>
                {
                    Message    = message,
                    Error      = e.Message,
                    StatusCode = HttpStatusCode.BadRequest,
                    Success    = false,
                    Exception  = e
                };
            }
            return(viewResult);
        }