public async Task <string> GetConfigAsync(GetConfigRequest request)
        {
            if (request == null)
            {
                throw new NacosException(ConstValue.CLIENT_INVALID_PARAM, "request param invalid");
            }

            request.Tenant = string.IsNullOrWhiteSpace(request.Tenant) ? _options.Namespace : request.Tenant;
            request.Group  = string.IsNullOrWhiteSpace(request.Group) ? ConstValue.DefaultGroup : request.Group;

            request.CheckParam();

            // read from local cache at first
            var config = await GetProcessor().GetFailoverAsync(request.DataId, request.Group, request.Tenant);

            if (!string.IsNullOrWhiteSpace(config))
            {
                _logger.LogInformation($"[get-config] get failover ok, dataId={request.DataId}, group={request.Group}, tenant={request.Tenant}, config ={config}");
                return(config);
            }

            try
            {
                config = await DoGetConfigAsync(request);
            }
            catch (NacosException ex)
            {
                if (ConstValue.NO_RIGHT == ex.ErrorCode)
                {
                    throw;
                }

                _logger.LogWarning($"[get-config] get from server error, dataId={request.DataId}, group={request.Group}, tenant={request.Tenant}, msg={ex.Message}");
            }

            if (!string.IsNullOrWhiteSpace(config))
            {
                _logger.LogInformation($"[get-config] content from server {config}, dataId={request.DataId}, group={request.Group}, tenant={request.Tenant}");
                await GetProcessor().SaveSnapshotAsync(request.DataId, request.Group, request.Tenant, config);

                return(config);
            }

            config = await GetProcessor().GetSnapshotAync(request.DataId, request.Group, request.Tenant);

            return(config);
        }
Exemplo n.º 2
0
        private async Task <string> DoGetConfigAsync(GetConfigRequest request)
        {
            var responseMessage = await GetAgent().GetAsync(RequestPathValue.CONFIGS, null, request.ToDict());

            switch (responseMessage.StatusCode)
            {
            case System.Net.HttpStatusCode.OK:
                var result = await responseMessage.Content.ReadAsStringAsync();

                return(result);

            case System.Net.HttpStatusCode.NotFound:
                await GetProcessor().SaveSnapshotAsync(GetAgent().GetName(), request.DataId, request.Group, request.Tenant, null);

                return(null);

            case System.Net.HttpStatusCode.Forbidden:
                throw new NacosException(ConstValue.NO_RIGHT, $"Insufficient privilege.");

            default:
                throw new NacosException((int)responseMessage.StatusCode, responseMessage.StatusCode.ToString());
            }
        }
Exemplo n.º 3
0
        private async Task <string> DoGetConfigAsync(GetConfigRequest request)
        {
            var responseMessage = await _clientFactory.DoRequestAsync(HttpMethod.Get, $"{GetBaseUrl()}{RequestPathValue.CONFIGS}", request.ToQueryString(), _options.DefaultTimeOut);

            switch (responseMessage.StatusCode)
            {
            case System.Net.HttpStatusCode.OK:
                var result = await responseMessage.Content.ReadAsStringAsync();

                return(result);

            case System.Net.HttpStatusCode.NotFound:
                await _processor.SaveSnapshotAsync(request.DataId, request.Group, request.Tenant, null);

                return(null);

            case System.Net.HttpStatusCode.Forbidden:
                throw new NacosException(ConstValue.NO_RIGHT, $"Insufficient privilege.");

            default:
                throw new NacosException((int)responseMessage.StatusCode, responseMessage.StatusCode.ToString());
            }
        }