Skip to content

Commit 6fd56d3

Browse files
committed
drop ac when drop catalog
1 parent a5da62c commit 6fd56d3

File tree

8 files changed

+36
-9
lines changed

8 files changed

+36
-9
lines changed

fe/fe-core/src/main/java/org/apache/doris/analysis/DropCatalogStmt.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ public void analyze(Analyzer analyzer) throws UserException {
5959
if (!Env.getCurrentEnv().getAccessManager().checkCtlPriv(
6060
ConnectContext.get(), catalogName, PrivPredicate.DROP)) {
6161
ErrorReport.reportAnalysisException(ErrorCode.ERR_CATALOG_ACCESS_DENIED,
62-
analyzer.getQualifiedUser(), catalogName);
62+
ConnectContext.get().getQualifiedUser(), catalogName);
6363
}
6464
}
6565

fe/fe-core/src/main/java/org/apache/doris/catalog/external/TestExternalTable.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@
2828
import java.util.List;
2929

3030
/**
31-
* Elasticsearch external table.
31+
* TestExternalTable is a table for unit test.
3232
*/
3333
public class TestExternalTable extends ExternalTable {
3434
private static final Logger LOG = LogManager.getLogger(TestExternalTable.class);

fe/fe-core/src/main/java/org/apache/doris/datasource/CatalogIf.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -136,7 +136,7 @@ default T getDbOrAnalysisException(long dbId) throws AnalysisException {
136136
s -> new AnalysisException(ErrorCode.ERR_BAD_DB_ERROR.formatErrorMsg(s), ErrorCode.ERR_BAD_DB_ERROR));
137137
}
138138

139+
// Called when catalog is dropped
139140
default void onClose() {
140-
141141
}
142142
}

fe/fe-core/src/main/java/org/apache/doris/datasource/ExternalCatalog.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -296,6 +296,16 @@ public void write(DataOutput out) throws IOException {
296296
Text.writeString(out, GsonUtils.GSON.toJson(this));
297297
}
298298

299+
@Override
300+
public void onClose() {
301+
removeAccessController();
302+
CatalogIf.super.onClose();
303+
}
304+
305+
private void removeAccessController() {
306+
Env.getCurrentEnv().getAccessManager().removeAccessController(name);
307+
}
308+
299309
public void replayInitCatalog(InitCatalogLog log) {
300310
Map<String, Long> tmpDbNameToId = Maps.newConcurrentMap();
301311
Map<Long, ExternalDatabase> tmpIdToDb = Maps.newConcurrentMap();

fe/fe-core/src/main/java/org/apache/doris/datasource/JdbcExternalCatalog.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@ public JdbcExternalCatalog(long catalogId, String name, String resource, Map<Str
5252

5353
@Override
5454
public void onClose() {
55+
super.onClose();
5556
if (jdbcClient != null) {
5657
jdbcClient.closeClient();
5758
}

fe/fe-core/src/main/java/org/apache/doris/datasource/test/TestExternalCatalog.java

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -61,10 +61,6 @@ public TestExternalCatalog(long catalogId, String name, String resource, Map<Str
6161
}
6262
}
6363

64-
@Override
65-
public void onClose() {
66-
}
67-
6864
@Override
6965
protected void initLocalObjectsImpl() {
7066
}

fe/fe-core/src/main/java/org/apache/doris/mysql/privilege/AccessControllerManager.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,10 @@ private CatalogAccessController getAccessControllerOrDefault(String ctl) {
5757
return ctlToCtlAccessController.getOrDefault(ctl, internalAccessController);
5858
}
5959

60+
public boolean checkIfAccessControllerExist(String ctl) {
61+
return ctlToCtlAccessController.containsKey(ctl);
62+
}
63+
6064
public void createAccessController(String ctl, String acFactoryClassName, Map<String, String> prop) {
6165
Class<?> factoryClazz = null;
6266
try {
@@ -74,6 +78,11 @@ public void createAccessController(String ctl, String acFactoryClassName, Map<St
7478
}
7579
}
7680

81+
public void removeAccessController(String ctl) {
82+
ctlToCtlAccessController.remove(ctl);
83+
LOG.info("remove access controller for catalog {}", ctl);
84+
}
85+
7786
public Auth getAuth() {
7887
return sysAccessController.getAuth();
7988
}

fe/fe-core/src/test/java/org/apache/doris/datasource/ColumnPrivTest.java

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
import org.apache.doris.analysis.CreateTableStmt;
2424
import org.apache.doris.analysis.CreateUserStmt;
2525
import org.apache.doris.analysis.CreateViewStmt;
26+
import org.apache.doris.analysis.DropCatalogStmt;
2627
import org.apache.doris.analysis.GrantStmt;
2728
import org.apache.doris.analysis.ShowCatalogStmt;
2829
import org.apache.doris.analysis.UserIdentity;
@@ -56,12 +57,13 @@ public class ColumnPrivTest extends TestWithFeService {
5657
private static Auth auth;
5758
private static Env env;
5859
private CatalogMgr mgr;
60+
private ConnectContext rootCtx;
5961

6062
@Override
6163
protected void runBeforeAll() throws Exception {
6264
FeConstants.runningUnitTest = true;
6365
mgr = Env.getCurrentEnv().getCatalogMgr();
64-
ConnectContext rootCtx = createDefaultCtx();
66+
rootCtx = createDefaultCtx();
6567
env = Env.getCurrentEnv();
6668
auth = env.getAuth();
6769

@@ -116,14 +118,23 @@ protected void runBeforeAll() throws Exception {
116118
env.createTable(createTableStmt);
117119
}
118120

121+
@Override
122+
protected void runAfterAll() throws Exception {
123+
super.runAfterAll();
124+
rootCtx.setThreadLocalInfo();
125+
Assert.assertTrue(env.getAccessManager().checkIfAccessControllerExist("test1"));
126+
DropCatalogStmt stmt = (DropCatalogStmt) parseAndAnalyzeStmt("drop catalog test1");
127+
env.getCatalogMgr().dropCatalog(stmt);
128+
Assert.assertFalse(env.getAccessManager().checkIfAccessControllerExist("test1"));
129+
}
130+
119131
@Test
120132
public void testColumnPrivs() throws Exception {
121133
String showCatalogSql = "SHOW CATALOGS";
122134
ShowCatalogStmt showStmt = (ShowCatalogStmt) parseAndAnalyzeStmt(showCatalogSql);
123135
ShowResultSet showResultSet = mgr.showCatalogs(showStmt);
124136
Assertions.assertEquals(2, showResultSet.getResultRows().size());
125137

126-
ConnectContext rootCtx = createDefaultCtx();
127138
CreateRoleStmt createRole1 = (CreateRoleStmt) parseAndAnalyzeStmt("create role role1;", rootCtx);
128139
auth.createRole(createRole1);
129140
GrantStmt grantRole = (GrantStmt) parseAndAnalyzeStmt("grant select_priv on test1.*.* to role 'role1';",

0 commit comments

Comments
 (0)