REQ-3540: 添加租户时直接激活
This commit is contained in:
parent
5efbeaf9ad
commit
b99d7be9fc
@ -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);
|
||||
|
||||
Loading…
Reference in New Issue
Block a user