Skip to content
Open
Show file tree
Hide file tree
Changes from 6 commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -28,8 +28,9 @@

public class ConfigCenterAddressManager extends AbstractAddressManager {

public ConfigCenterAddressManager(String projectName, List<String> addresses, EventBus eventBus) {
super(projectName, addresses);
public ConfigCenterAddressManager(String projectName, List<String> addresses, List<String> sameSideAddresses,
List<String> diffSideAddresses, EventBus eventBus) {
super(projectName, addresses, sameSideAddresses, diffSideAddresses);
eventBus.register(this);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@
import org.apache.servicecomb.http.client.common.HttpResponse;
import org.apache.servicecomb.http.client.common.HttpTransport;
import org.apache.servicecomb.http.client.common.HttpUtils;
import org.apache.servicecomb.http.client.event.OperationEvents.UnAuthorizedOperationEvent;
import org.apache.servicecomb.http.client.utils.ServiceCombServiceAvailableUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
Expand Down Expand Up @@ -61,12 +62,15 @@ public class ConfigCenterClient implements ConfigCenterOperation {

private final Map<String, List<String>> dimensionConfigNames = new HashMap<>();

private EventBus eventBus;

public ConfigCenterClient(ConfigCenterAddressManager addressManager, HttpTransport httpTransport) {
this.addressManager = addressManager;
this.httpTransport = httpTransport;
}

public void setEventBus(EventBus eventBus) {
this.eventBus = eventBus;
addressManager.setEventBus(eventBus);
}

Expand All @@ -88,6 +92,7 @@ public QueryConfigurationsResponse queryConfigurations(QueryConfigurationsReques
HttpRequest.GET);

HttpResponse httpResponse = httpTransport.doRequest(httpRequest);
recordAndSendUnAuthorizedEvent(httpResponse, address);
if (httpResponse.getStatusCode() == HttpStatus.SC_OK) {
Map<String, Map<String, Object>> allConfigMap = HttpUtils.deserialize(
httpResponse.getContent(),
Expand Down Expand Up @@ -121,21 +126,17 @@ public QueryConfigurationsResponse queryConfigurations(QueryConfigurationsReques
}
queryConfigurationsResponse.setConfigurations(configurations);
queryConfigurationsResponse.setChanged(true);
addressManager.recordSuccessState(address);
return queryConfigurationsResponse;
} else if (httpResponse.getStatusCode() == HttpStatus.SC_NOT_MODIFIED) {
queryConfigurationsResponse.setChanged(false);
addressManager.recordSuccessState(address);
return queryConfigurationsResponse;
} else if (httpResponse.getStatusCode() == HttpStatus.SC_TOO_MANY_REQUESTS) {
LOGGER.warn("rate limited, keep the local dimension [{}] configs unchanged.", dimensionsInfo);
queryConfigurationsResponse.setChanged(false);
addressManager.recordSuccessState(address);
return queryConfigurationsResponse;
} else if (httpResponse.getStatusCode() == HttpStatus.SC_BAD_REQUEST) {
throw new OperationException("Bad request for query configurations.");
} else {
addressManager.recordFailState(address);
throw new OperationException(
"read response failed. status:"
+ httpResponse.getStatusCode()
Expand All @@ -151,6 +152,16 @@ public QueryConfigurationsResponse queryConfigurations(QueryConfigurationsReques
}
}

private void recordAndSendUnAuthorizedEvent(HttpResponse response, String address) {
if (this.eventBus != null && response.getStatusCode() == HttpStatus.SC_UNAUTHORIZED) {
LOGGER.warn("query configuration unauthorized from server [{}], message [{}]", address, response.getMessage());
addressManager.recordFailState(address);
this.eventBus.post(new UnAuthorizedOperationEvent(address));
} else {
addressManager.recordSuccessState(address);
}
}

/**
* Only the name of the new configuration item is printed.
* No log is printed when the configuration content is updated.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,7 @@
import org.apache.servicecomb.http.client.common.HttpResponse;
import org.apache.servicecomb.http.client.common.HttpTransport;
import org.apache.servicecomb.http.client.common.HttpUtils;
import org.apache.servicecomb.http.client.event.OperationEvents.UnAuthorizedOperationEvent;
import org.apache.servicecomb.http.client.utils.ServiceCombServiceAvailableUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
Expand All @@ -71,13 +72,16 @@ public class KieClient implements KieConfigOperation {

private final Map<String, List<String>> dimensionConfigNames = new HashMap<>();

private EventBus eventBus;

public KieClient(KieAddressManager addressManager, HttpTransport httpTransport, KieConfiguration kieConfiguration) {
this.httpTransport = httpTransport;
this.addressManager = addressManager;
this.kieConfiguration = kieConfiguration;
}

public void setEventBus(EventBus eventBus) {
this.eventBus = eventBus;
addressManager.setEventBus(eventBus);
}

Expand All @@ -91,6 +95,7 @@ public ConfigurationsResponse queryConfigurations(ConfigurationsRequest request,

HttpRequest httpRequest = new HttpRequest(url, null, null, HttpRequest.GET);
HttpResponse httpResponse = httpTransport.doRequest(httpRequest);
recordAndSendUnAuthorizedEvent(httpResponse, address);
ConfigurationsResponse configurationsResponse = new ConfigurationsResponse();
if (httpResponse.getStatusCode() == HttpStatus.SC_OK) {
revision = httpResponse.getHeader("X-Kie-Revision");
Expand All @@ -100,24 +105,20 @@ public ConfigurationsResponse queryConfigurations(ConfigurationsRequest request,
configurationsResponse.setConfigurations(configurations);
configurationsResponse.setChanged(true);
configurationsResponse.setRevision(revision);
addressManager.recordSuccessState(address);
return configurationsResponse;
}
if (httpResponse.getStatusCode() == HttpStatus.SC_BAD_REQUEST) {
throw new OperationException("Bad request for query configurations.");
}
if (httpResponse.getStatusCode() == HttpStatus.SC_NOT_MODIFIED) {
configurationsResponse.setChanged(false);
addressManager.recordSuccessState(address);
return configurationsResponse;
}
if (httpResponse.getStatusCode() == HttpStatus.SC_TOO_MANY_REQUESTS) {
LOGGER.warn("rate limited, keep the local dimension [{}] configs unchanged.", request.getLabelsQuery());
configurationsResponse.setChanged(false);
addressManager.recordSuccessState(address);
return configurationsResponse;
}
addressManager.recordFailState(address);
throw new OperationException(
"read response failed. status:" + httpResponse.getStatusCode() + "; message:" +
httpResponse.getMessage() + "; content:" + httpResponse.getContent());
Expand All @@ -128,6 +129,16 @@ public ConfigurationsResponse queryConfigurations(ConfigurationsRequest request,
}
}

private void recordAndSendUnAuthorizedEvent(HttpResponse response, String address) {
if (this.eventBus != null && response.getStatusCode() == HttpStatus.SC_UNAUTHORIZED) {
LOGGER.warn("query configuration unauthorized from server [{}], message [{}]", address, response.getMessage());
addressManager.recordFailState(address);
this.eventBus.post(new UnAuthorizedOperationEvent(address));
} else {
addressManager.recordSuccessState(address);
}
}

/**
* Only the name of the new configuration item is printed.
* No log is printed when the configuration content is updated.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,8 +27,9 @@

public class KieAddressManager extends AbstractAddressManager {

public KieAddressManager(List<String> addresses, EventBus eventBus) {
super(addresses);
public KieAddressManager(List<String> addresses, List<String> sameSideAddresses, List<String> diffSideAddresses,
EventBus eventBus) {
super(addresses, sameSideAddresses, diffSideAddresses);
eventBus.register(this);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ class KieAddressManagerTest {
public void kieAddressManagerTest() throws NoSuchFieldException, IllegalAccessException {
addresses.add("http://127.0.0.1:30103");
addresses.add("https://127.0.0.2:30103");
addressManager1 = new KieAddressManager(addresses, new EventBus());
addressManager1 = new KieAddressManager(addresses, new ArrayList<>(), new ArrayList<>(), new EventBus());
Field addressManagerField = addressManager1.getClass().getSuperclass().getDeclaredField("index");
addressManagerField.setAccessible(true);
addressManagerField.set(addressManager1, 0);
Expand All @@ -64,7 +64,7 @@ public void onRefreshEndpointEvent() {
Map<String, List<String>> zoneAndRegion = new HashMap<>();
zoneAndRegion.put("sameZone", addressAZ);
zoneAndRegion.put("sameRegion", addressRG);
addressManager1 = new KieAddressManager(addresses, new EventBus());
addressManager1 = new KieAddressManager(addresses, new ArrayList<>(), new ArrayList<>(), new EventBus());
RefreshEndpointEvent event = new RefreshEndpointEvent(zoneAndRegion, "KIE");
addressManager1.refreshEndpoint(event, "KIE");

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,8 +29,9 @@

public class DashboardAddressManager extends AbstractAddressManager {

public DashboardAddressManager(List<String> addresses, EventBus eventBus) {
super(addresses);
public DashboardAddressManager(List<String> addresses, List<String> sameSideAddresses,
List<String> diffSideAddresses, EventBus eventBus) {
super(addresses, sameSideAddresses, diffSideAddresses);
eventBus.register(this);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ class AddressManagerTest {
public void kieAddressManagerTest() throws IllegalAccessException, NoSuchFieldException {
addresses.add("http://127.0.0.1:30103");
addresses.add("https://127.0.0.2:30103");
addressManager1 = new DashboardAddressManager(addresses, new EventBus());
addressManager1 = new DashboardAddressManager(addresses, new ArrayList<>(), new ArrayList<>(), new EventBus());
Field addressManagerField = addressManager1.getClass().getSuperclass().getDeclaredField("index");
addressManagerField.setAccessible(true);
addressManagerField.set(addressManager1, 0);
Expand All @@ -65,7 +65,7 @@ public void onRefreshEndpointEvent() {
Map<String, List<String>> zoneAndRegion = new HashMap<>();
zoneAndRegion.put("sameZone", addressAZ);
zoneAndRegion.put("sameRegion", addressRG);
addressManager1 = new DashboardAddressManager(addresses, new EventBus());
addressManager1 = new DashboardAddressManager(addresses, new ArrayList<>(), new ArrayList<>(), new EventBus());
RefreshEndpointEvent event = new RefreshEndpointEvent(zoneAndRegion, "CseMonitoring");
addressManager1.refreshEndpoint(event, "CseMonitoring");

Expand Down
Loading
Loading