feat: expose config client id in polaris config endpoint

The config SDK context is created in the config-data phase, so its
startup logs may be dropped before the polaris log appenders are ready.
Exposing the client id via the endpoint gives tooling a reliable source
instead of grepping logs (the cloud verify script had to derive it from
the first SDKContext when no stream-establishment anchor log exists).

Co-authored-by: Cursor <cursoragent@cursor.com>
pull/1815/head
evelynwei 3 weeks ago
parent 61e6bc78f1
commit 400f9c86a6

@ -21,6 +21,7 @@ import java.util.HashMap;
import java.util.List;
import java.util.Map;
import com.tencent.cloud.polaris.config.PolarisConfigSDKContextManager;
import com.tencent.cloud.polaris.config.adapter.PolarisPropertySource;
import com.tencent.cloud.polaris.config.adapter.PolarisPropertySourceManager;
import com.tencent.cloud.polaris.config.config.PolarisConfigProperties;
@ -50,6 +51,22 @@ public class PolarisConfigEndpoint {
List<PolarisPropertySource> propertySourceList = PolarisPropertySourceManager.getAllPropertySources();
configInfo.put("PolarisPropertySource", propertySourceList);
configInfo.put("ClientId", getClientId());
return configInfo;
}
/**
* The config SDK context is created in the config-data phase, so its startup logs may be
* dropped before the polaris log appenders are ready. Exposing the client id here gives
* tooling a reliable source instead of grepping logs.
*/
private String getClientId() {
try {
return PolarisConfigSDKContextManager.innerGetConfigSDKContext().getValueContext().getClientId();
}
catch (Throwable throwable) {
return null;
}
}
}

@ -21,14 +21,19 @@ import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import com.tencent.cloud.polaris.config.PolarisConfigSDKContextManager;
import com.tencent.cloud.polaris.config.adapter.MockedConfigKVFile;
import com.tencent.cloud.polaris.config.adapter.PolarisPropertySource;
import com.tencent.cloud.polaris.config.adapter.PolarisPropertySourceManager;
import com.tencent.cloud.polaris.config.config.PolarisConfigProperties;
import com.tencent.polaris.api.plugin.common.ValueContext;
import com.tencent.polaris.client.api.SDKContext;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.junit.jupiter.MockitoExtension;
import static org.assertj.core.api.Assertions.assertThat;
@ -53,6 +58,11 @@ public class PolarisConfigEndpointTest {
PolarisPropertySourceManager.clearPropertySources();
}
@AfterEach
public void tearDown() {
PolarisConfigSDKContextManager.innerConfigDestroy();
}
@Test
public void testPolarisConfigEndpoint() {
Map<String, Object> content = new HashMap<>();
@ -69,4 +79,24 @@ public class PolarisConfigEndpointTest {
assertThat(polarisConfigProperties).isEqualTo(info.get("PolarisConfigProperties"));
assertThat(Collections.singletonList(polarisPropertySource)).isEqualTo(info.get("PolarisPropertySource"));
}
@Test
public void testPolarisConfigEndpointExposesClientId() {
SDKContext sdkContext = Mockito.mock(SDKContext.class);
ValueContext valueContext = Mockito.mock(ValueContext.class);
Mockito.when(sdkContext.getValueContext()).thenReturn(valueContext);
Mockito.when(valueContext.getClientId()).thenReturn("host_1234_0");
PolarisConfigSDKContextManager.setConfigSDKContext(sdkContext);
PolarisConfigEndpoint endpoint = new PolarisConfigEndpoint(polarisConfigProperties);
assertThat(endpoint.polarisConfig().get("ClientId")).isEqualTo("host_1234_0");
}
@Test
public void testPolarisConfigEndpointClientIdIsNullWhenContextAbsent() {
PolarisConfigEndpoint endpoint = new PolarisConfigEndpoint(polarisConfigProperties);
assertThat(endpoint.polarisConfig().get("ClientId")).isNull();
}
}

Loading…
Cancel
Save