Skip to content

Commit

Permalink
Close derby ops api default. (#12372)
Browse files Browse the repository at this point in the history
* Close derby ops api default.

* Fix unit test.
  • Loading branch information
KomachiSion authored Jul 18, 2024
1 parent fc5e502 commit ed7bd03
Show file tree
Hide file tree
Showing 6 changed files with 55 additions and 18 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,8 @@ public class ConfigCommonConfig extends AbstractDynamicConfig {

private int maxPushRetryTimes = 50;

private boolean derbyOpsEnabled = false;

private ConfigCommonConfig() {
super(CONFIG_COMMON);
resetConfig();
Expand All @@ -50,13 +52,28 @@ public void setMaxPushRetryTimes(int maxPushRetryTimes) {
this.maxPushRetryTimes = maxPushRetryTimes;
}

public boolean isDerbyOpsEnabled() {
return derbyOpsEnabled;
}

public void setDerbyOpsEnabled(boolean derbyOpsEnabled) {
this.derbyOpsEnabled = derbyOpsEnabled;
}

@Override
protected void getConfigFromEnv() {
maxPushRetryTimes = EnvUtil.getProperty("nacos.config.push.maxRetryTime", Integer.class, 50);
derbyOpsEnabled = EnvUtil.getProperty("nacos.config.derby.ops.enabled", Boolean.class, false);
}

@Override
protected String printConfig() {
return "ConfigCommonConfigs{" + "maxPushRetryTimes=" + maxPushRetryTimes + '}';
return toString();
}

@Override
public String toString() {
return "ConfigCommonConfig{" + "maxPushRetryTimes=" + maxPushRetryTimes + ", derbyOpsEnabled=" + derbyOpsEnabled
+ '}';
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -17,24 +17,25 @@
package com.alibaba.nacos.config.server.controller;

import com.alibaba.nacos.auth.annotation.Secured;
import com.alibaba.nacos.config.server.paramcheck.ConfigDefaultHttpParamExtractor;
import com.alibaba.nacos.core.paramcheck.ExtractorManager;
import com.alibaba.nacos.persistence.configuration.DatasourceConfiguration;
import com.alibaba.nacos.plugin.auth.constant.ActionTypes;
import com.alibaba.nacos.common.model.RestResult;
import com.alibaba.nacos.common.model.RestResultUtils;
import com.alibaba.nacos.common.notify.NotifyCenter;
import com.alibaba.nacos.common.utils.StringUtils;
import com.alibaba.nacos.config.server.configuration.ConfigCommonConfig;
import com.alibaba.nacos.config.server.constant.Constants;
import com.alibaba.nacos.persistence.model.event.DerbyImportEvent;
import com.alibaba.nacos.persistence.datasource.DynamicDataSource;
import com.alibaba.nacos.persistence.datasource.LocalDataSourceServiceImpl;
import com.alibaba.nacos.config.server.paramcheck.ConfigDefaultHttpParamExtractor;
import com.alibaba.nacos.config.server.service.dump.DumpService;
import com.alibaba.nacos.persistence.repository.embedded.operate.DatabaseOperate;
import com.alibaba.nacos.config.server.utils.LogUtil;
import com.alibaba.nacos.core.paramcheck.ExtractorManager;
import com.alibaba.nacos.core.utils.WebUtils;
import com.alibaba.nacos.persistence.configuration.DatasourceConfiguration;
import com.alibaba.nacos.persistence.datasource.DynamicDataSource;
import com.alibaba.nacos.persistence.datasource.LocalDataSourceServiceImpl;
import com.alibaba.nacos.persistence.model.event.DerbyImportEvent;
import com.alibaba.nacos.persistence.repository.embedded.operate.DatabaseOperate;
import com.alibaba.nacos.plugin.auth.constant.ActionTypes;
import com.alibaba.nacos.plugin.auth.constant.SignType;
import com.alibaba.nacos.sys.utils.ApplicationUtils;
import com.alibaba.nacos.common.utils.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.jdbc.core.JdbcTemplate;
Expand Down Expand Up @@ -106,8 +107,12 @@ public RestResult<Object> derbyOps(@RequestParam(value = "sql") String sql) {
if (!DatasourceConfiguration.isEmbeddedStorage()) {
return RestResultUtils.failed("The current storage mode is not Derby");
}
LocalDataSourceServiceImpl dataSourceService = (LocalDataSourceServiceImpl) DynamicDataSource
.getInstance().getDataSource();
if (!ConfigCommonConfig.getInstance().isDerbyOpsEnabled()) {
return RestResultUtils.failed(
"Derby ops is disabled, please set `nacos.config.derby.ops.enabled=true` to enabled this feature.");
}
LocalDataSourceServiceImpl dataSourceService = (LocalDataSourceServiceImpl) DynamicDataSource.getInstance()
.getDataSource();
if (StringUtils.startsWithIgnoreCase(sql, selectSign)) {
if (!StringUtils.containsIgnoreCase(sql, limitSign)) {
sql += limit;
Expand Down Expand Up @@ -139,6 +144,11 @@ public DeferredResult<RestResult<String>> importDerby(@RequestParam(value = "fil
response.setResult(RestResultUtils.failed("Limited to embedded storage mode"));
return response;
}
if (!ConfigCommonConfig.getInstance().isDerbyOpsEnabled()) {
response.setResult(RestResultUtils.failed(
"Derby ops is disabled, please set `nacos.config.derby.ops.enabled=true` to enabled this feature."));
return response;
}
DatabaseOperate databaseOperate = ApplicationUtils.getBean(DatabaseOperate.class);
WebUtils.onFileUpload(multipartFile, file -> {
NotifyCenter.publishEvent(new DerbyImportEvent(false));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,8 @@
import java.lang.reflect.Constructor;

import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertTrue;

/**
* Nacos config common configs test.
Expand Down Expand Up @@ -60,11 +62,20 @@ void setMaxPushRetryTimes() {
commonConfig.setMaxPushRetryTimes(maxPushRetryTimesOld);
}

@Test
void testSetDerbyOpsEnabled() {
assertFalse(commonConfig.isDerbyOpsEnabled());
commonConfig.setDerbyOpsEnabled(true);
assertTrue(commonConfig.isDerbyOpsEnabled());
}

@Test
void testUpgradeFromEvent() {
environment.setProperty("nacos.config.push.maxRetryTime", "100");
environment.setProperty("nacos.config.derby.ops.enabled", "true");
commonConfig.onEvent(ServerConfigChangeEvent.newEvent());
assertEquals(100, commonConfig.getMaxPushRetryTimes());
assertTrue(commonConfig.isDerbyOpsEnabled());
}

@Test
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,13 +17,13 @@
package com.alibaba.nacos.config.server.controller;

import com.alibaba.nacos.common.utils.JacksonUtils;
import com.alibaba.nacos.config.server.configuration.ConfigCommonConfig;
import com.alibaba.nacos.config.server.constant.Constants;
import com.alibaba.nacos.config.server.service.dump.DumpService;
import com.alibaba.nacos.persistence.configuration.DatasourceConfiguration;
import com.alibaba.nacos.persistence.datasource.DynamicDataSource;
import com.alibaba.nacos.persistence.datasource.LocalDataSourceServiceImpl;
import com.alibaba.nacos.persistence.repository.embedded.operate.DatabaseOperate;
import com.alibaba.nacos.sys.env.EnvUtil;
import com.alibaba.nacos.sys.utils.ApplicationUtils;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
Expand All @@ -33,7 +33,6 @@
import org.mockito.Mock;
import org.mockito.MockedStatic;
import org.mockito.Mockito;
import org.springframework.core.env.StandardEnvironment;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.mock.web.MockMultipartFile;
import org.springframework.mock.web.MockServletContext;
Expand Down Expand Up @@ -79,11 +78,11 @@ void after() {
datasourceConfigurationMockedStatic.close();
dynamicDataSourceMockedStatic.close();
applicationUtilsMockedStatic.close();
ConfigCommonConfig.getInstance().setDerbyOpsEnabled(false);
}

@BeforeEach
void init() {
EnvUtil.setEnvironment(new StandardEnvironment());
when(servletContext.getContextPath()).thenReturn("/nacos");
ReflectionTestUtils.setField(configOpsController, "dumpService", dumpService);
mockMvc = MockMvcBuilders.standaloneSetup(configOpsController).build();
Expand Down Expand Up @@ -112,7 +111,7 @@ void testSetLogLevel() throws Exception {

@Test
void testDerbyOps() throws Exception {

ConfigCommonConfig.getInstance().setDerbyOpsEnabled(true);
datasourceConfigurationMockedStatic.when(DatasourceConfiguration::isEmbeddedStorage).thenReturn(true);
DynamicDataSource dataSource = Mockito.mock(DynamicDataSource.class);
dynamicDataSourceMockedStatic.when(DynamicDataSource::getInstance).thenReturn(dataSource);
Expand All @@ -131,7 +130,7 @@ void testDerbyOps() throws Exception {

@Test
void testImportDerby() throws Exception {

ConfigCommonConfig.getInstance().setDerbyOpsEnabled(true);
datasourceConfigurationMockedStatic.when(DatasourceConfiguration::isEmbeddedStorage).thenReturn(true);

applicationUtilsMockedStatic.when(() -> ApplicationUtils.getBean(DatabaseOperate.class))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -79,6 +79,7 @@ public class BaseClusterTest extends HttpClient4Test {
static {
System.getProperties().setProperty("nacos.core.auth.enabled", "false");
System.getProperties().setProperty("embeddedStorage", "true");
System.getProperties().setProperty("nacos.config.derby.ops.enabled", "true");
String ip = InetUtils.getSelfIP();
clusterInfo = "nacos.member.list=" + ip + ":8847," + ip + ":8848," + ip + ":8849";

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,6 @@
import com.alibaba.nacos.test.base.BaseClusterTest;
import com.alibaba.nacos.test.base.ConfigCleanUtils;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.MethodOrderer.MethodName;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.TestMethodOrder;
Expand Down

0 comments on commit ed7bd03

Please sign in to comment.