REQ-3540: 添加租户时直接激活

This commit is contained in:
yanglin 2025-03-19 10:12:53 +08:00
parent 5efbeaf9ad
commit b99d7be9fc

View File

@ -72,24 +72,16 @@ public class FileDatabaseService {
private final AsyncUtils asyncUtils;
private final DocLogDao docLogDao;
@BizTransactional
public void addActivatedWorkspace(FileDatabaseAddWorkspaceRequest request) {
docLogDao.logRequest("addActivatedWorkspace", request.getWorkspaceId(), request);
addWorkspace0(request, FileDatabaseState.ACTIVATED);
IndexNode templateRoot = checkTemplateDatabase(request.getTemplateDatabaseCode());
FileDatabase db = transaction.execute(unused -> {
docLogDao.logRequest("addActivatedWorkspace", request.getWorkspaceId(), request);
return addWorkspace0(request);
});
asyncCopySubtree(db, templateRoot, null);
}
@BizTransactional
public void addActivatingWorkspace(FileDatabaseAddWorkspaceRequest request) {
docLogDao.logRequest("addActivatedWorkspace", request.getWorkspaceId(), request);
try {
addWorkspace0(request, FileDatabaseState.ACTIVATING);
}
catch (FileDatabaseExistsException ignored) {
log.warn("重复创建资料库: {}", request);
}
}
private void addWorkspace0(FileDatabaseAddWorkspaceRequest request, FileDatabaseState state) {
private FileDatabase addWorkspace0(FileDatabaseAddWorkspaceRequest request) {
String scopeUniqueCode = String.valueOf(request.getWorkspaceId());
TemplateDatabase templateDatabase = templateDatabaseQueryService.getOrThrow(request.getTemplateDatabaseCode());
FileDatabase savedDb = fileDatabaseDao.findForUpdateOrNull(templateDatabase.getScope(), scopeUniqueCode);
@ -101,13 +93,14 @@ public class FileDatabaseService {
db.setScope(templateDatabase.getScope());
db.setScopeUniqueCode(scopeUniqueCode);
db.setWorkspaceId(request.getWorkspaceId());
db.setState(state);
db.setState(FileDatabaseState.ACTIVATING);
db.setExpireDate(new Date(request.getExpiredDateMs()));
db.setAllowedCapacity(request.getAllowedCapacity());
db.setUsedCapacity(0);
db.setCreateAt(new Date());
db.setUpdateAt(new Date());
fileDatabaseDao.save(db);
return fileDatabaseDao.findOrNull(db.getCode());
}
public void active(FileDatabaseActiveRequest request) {
@ -116,21 +109,33 @@ public class FileDatabaseService {
FileDatabase db = fileDatabaseDao.getOrThrow(request.getCode());
if (db.isActivated())
return;
IndexNode template = indexManager.getOrThrow(db.getTemplateDatabaseCode());
IndexNode templateRoot = checkTemplateDatabase(db.getTemplateDatabaseCode());
asyncCopySubtree(db, templateRoot, () -> updateCapacity(request).update());
}
private void asyncCopySubtree(FileDatabase db, IndexNode templateRoot, Runnable nullablePostProcessor) {
Future<?> future = indexManager.async(() -> {
// don't inline in transaction
CopiedOssFiles copiedOssFiles = indexManager.copySubtreeOssFiles(template);
CopiedOssFiles copiedOssFiles = indexManager.copySubtreeOssFiles(templateRoot);
transaction.executeWithoutResult(unused -> {
FileDatabase reload = fileDatabaseDao.getForUpdateOrThrow(request.getCode());
FileDatabase reload = fileDatabaseDao.getForUpdateOrThrow(db.getCode());
if (reload.isActivated())
return;
indexManager.copySubTree(template, null, new SetScopeCopyFileVisitor(copiedOssFiles, db));
indexManager.copySubTree(templateRoot, null, new SetScopeCopyFileVisitor(copiedOssFiles, db));
fileDatabaseDao.updateState(db.getCode(), FileDatabaseState.ACTIVATED);
if (nullablePostProcessor != null)
nullablePostProcessor.run();
});
});
asyncUtils.getOrTimeout(future, "激活等待超时, 激活任务在后台运行, 请稍后刷新查看");
}
private IndexNode checkTemplateDatabase(String templateDatabaseCode) {
IndexNode indexNode = indexManager.getOrThrow(templateDatabaseCode);
BizAssertions.assertTrue(indexNode.isDatabase(), "只能选择资料库作为模板");
return indexNode;
}
@BizTransactional
public void reject(FileDatabaseAbortRequest request) {
docLogDao.logRequest("reject", request.getCode(), request);