Skip to content

Commit 450d53c

Browse files
committed
feat:支持自定义初始化管理员帐户
1 parent 897c1ac commit 450d53c

File tree

7 files changed

+35
-50
lines changed

7 files changed

+35
-50
lines changed

apiserver/grpcserver/config/client_access.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ func (g *ConfigGRPCServer) PublishConfigFile(ctx context.Context,
9191
func (g *ConfigGRPCServer) UpsertAndPublishConfigFile(ctx context.Context,
9292
req *apiconfig.ConfigFilePublishInfo) (*apiconfig.ConfigClientResponse, error) {
9393
ctx = utils.ConvertGRPCContext(ctx)
94-
response := g.configServer.CasUpsertAndReleaseConfigFileFromClient(ctx, req)
94+
response := g.configServer.UpsertAndReleaseConfigFileFromClient(ctx, req)
9595
return &apiconfig.ConfigClientResponse{
9696
Code: response.Code,
9797
Info: response.Info,

config/api.go

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -105,8 +105,6 @@ type ConfigFileClientOperate interface {
105105
PublishConfigFileFromClient(ctx context.Context, req *apiconfig.ConfigFileRelease) *apiconfig.ConfigClientResponse
106106
// UpsertAndReleaseConfigFile 创建/更新配置文件并发布
107107
UpsertAndReleaseConfigFileFromClient(ctx context.Context, req *apiconfig.ConfigFilePublishInfo) *apiconfig.ConfigResponse
108-
// CasUpsertAndReleaseConfigFileFromClient 创建/更新配置文件并发布
109-
CasUpsertAndReleaseConfigFileFromClient(ctx context.Context, req *apiconfig.ConfigFilePublishInfo) *apiconfig.ConfigResponse
110108
// LongPullWatchFile 客户端监听配置文件
111109
LongPullWatchFile(ctx context.Context, req *apiconfig.ClientWatchConfigFileRequest) (WatchCallback, error)
112110
// GetConfigFileNamesWithCache 获取某个配置分组下的配置文件

config/client.go

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -327,9 +327,3 @@ func (s *Server) PublishConfigFileFromClient(ctx context.Context,
327327
configResponse := s.PublishConfigFile(ctx, client)
328328
return api.NewConfigClientResponseFromConfigResponse(configResponse)
329329
}
330-
331-
// CasUpsertAndReleaseConfigFileFromClient 创建/更新配置文件并发布
332-
func (s *Server) CasUpsertAndReleaseConfigFileFromClient(ctx context.Context,
333-
req *apiconfig.ConfigFilePublishInfo) *apiconfig.ConfigResponse {
334-
return s.CasUpsertAndReleaseConfigFile(ctx, req)
335-
}

config/config_file_release.go

Lines changed: 30 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -604,24 +604,48 @@ func (s *Server) UpsertAndReleaseConfigFile(ctx context.Context,
604604

605605
tx, err := s.storage.StartTx()
606606
if err != nil {
607-
log.Error("[Config][File] upsert config file when begin tx.", utils.RequestID(ctx), zap.Error(err))
607+
log.Error("[Config][File] upsert config file when begin tx.", utils.RequestID(ctx),
608+
zap.String("namespace", req.GetNamespace().GetValue()), zap.String("group", req.GetGroup().GetValue()),
609+
zap.String("fileName", req.GetFileName().GetValue()), zap.Error(err))
608610
return api.NewConfigResponse(commonstore.StoreCode2APICode(err))
609611
}
610612

611613
defer func() {
612614
_ = tx.Rollback()
613615
}()
616+
saveFile, err := s.storage.LockConfigFile(tx, &model.ConfigFileKey{
617+
Namespace: req.GetNamespace().GetValue(),
618+
Group: req.GetGroup().GetValue(),
619+
Name: req.GetFileName().GetValue(),
620+
})
621+
if err != nil {
622+
log.Error("[Config][File] lock config file when begin tx.", utils.RequestID(ctx),
623+
zap.String("namespace", req.GetNamespace().GetValue()), zap.String("group", req.GetGroup().GetValue()),
624+
zap.String("fileName", req.GetFileName().GetValue()), zap.Error(err))
625+
return api.NewConfigResponse(commonstore.StoreCode2APICode(err))
626+
}
614627

615628
historyRecords := []func(){}
616-
upsertResp := s.handleCreateConfigFile(ctx, tx, upsertFileReq)
617-
if upsertResp.GetCode().GetValue() == uint32(apimodel.Code_ExistedResource) {
618-
upsertResp = s.handleUpdateConfigFile(ctx, tx, upsertFileReq)
629+
630+
var upsertResp *apiconfig.ConfigResponse
631+
if saveFile == nil {
632+
upsertResp = s.handleCreateConfigFile(ctx, tx, upsertFileReq)
619633
historyRecords = append(historyRecords, func() {
620-
s.RecordHistory(ctx, configFileRecordEntry(ctx, upsertFileReq, model.OUpdate))
634+
s.RecordHistory(ctx, configFileRecordEntry(ctx, upsertFileReq, model.OCreate))
621635
})
622636
} else {
637+
actualMd5 := CalMd5(saveFile.Content)
638+
// 只有显示设置了 md5 字段值才会进入 CAS 发布流程
639+
if req.GetMd5().GetValue() != "" && req.GetMd5().GetValue() != actualMd5 {
640+
log.Error("[Config][File] cas compare config file.", utils.RequestID(ctx),
641+
zap.String("namespace", req.GetNamespace().GetValue()), zap.String("group", req.GetGroup().GetValue()),
642+
zap.String("fileName", req.GetFileName().GetValue()),
643+
zap.String("expect", req.GetMd5().GetValue()), zap.String("actual", actualMd5))
644+
return api.NewConfigResponse(apimodel.Code_DataConflict)
645+
}
646+
upsertResp = s.handleUpdateConfigFile(ctx, tx, upsertFileReq)
623647
historyRecords = append(historyRecords, func() {
624-
s.RecordHistory(ctx, configFileRecordEntry(ctx, upsertFileReq, model.OCreate))
648+
s.RecordHistory(ctx, configFileRecordEntry(ctx, upsertFileReq, model.OUpdate))
625649
})
626650
}
627651
if upsertResp.GetCode().GetValue() != uint32(apimodel.Code_ExecuteSuccess) {

config/config_file_release_test.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -744,7 +744,7 @@ func TestServer_CasUpsertAndReleaseConfigFile(t *testing.T) {
744744

745745
t.Run("publish_cas", func(t *testing.T) {
746746
// 第一次配置发布,就算带了 MD5,也是可以发布成功
747-
pubResp := testSuit.ConfigServer().CasUpsertAndReleaseConfigFileFromClient(testSuit.DefaultCtx, &config_manage.ConfigFilePublishInfo{
747+
pubResp := testSuit.ConfigServer().UpsertAndReleaseConfigFileFromClient(testSuit.DefaultCtx, &config_manage.ConfigFilePublishInfo{
748748
Namespace: utils.NewStringValue(mockNamespace),
749749
Group: utils.NewStringValue(mockGroup),
750750
FileName: utils.NewStringValue(mockFileName),
@@ -756,7 +756,7 @@ func TestServer_CasUpsertAndReleaseConfigFile(t *testing.T) {
756756
assert.Equal(t, uint32(apimodel.Code_ExecuteSuccess), pubResp.GetCode().GetValue(), pubResp.GetInfo().GetValue())
757757

758758
// MD5 不一致,直接发布失败
759-
pubResp = testSuit.ConfigServer().CasUpsertAndReleaseConfigFileFromClient(testSuit.DefaultCtx, &config_manage.ConfigFilePublishInfo{
759+
pubResp = testSuit.ConfigServer().UpsertAndReleaseConfigFileFromClient(testSuit.DefaultCtx, &config_manage.ConfigFilePublishInfo{
760760
Namespace: utils.NewStringValue(mockNamespace),
761761
Group: utils.NewStringValue(mockGroup),
762762
FileName: utils.NewStringValue(mockFileName),
@@ -779,7 +779,7 @@ func TestServer_CasUpsertAndReleaseConfigFile(t *testing.T) {
779779
assert.Equal(t, config.CalMd5(mockContent), queryRsp.GetConfigFileRelease().GetMd5().GetValue())
780780

781781
t.Run("md5_不匹配", func(t *testing.T) {
782-
pubResp := testSuit.ConfigServer().CasUpsertAndReleaseConfigFileFromClient(testSuit.DefaultCtx, &config_manage.ConfigFilePublishInfo{
782+
pubResp := testSuit.ConfigServer().UpsertAndReleaseConfigFileFromClient(testSuit.DefaultCtx, &config_manage.ConfigFilePublishInfo{
783783
Namespace: utils.NewStringValue(mockNamespace),
784784
Group: utils.NewStringValue(mockGroup),
785785
FileName: utils.NewStringValue(mockFileName),
@@ -792,7 +792,7 @@ func TestServer_CasUpsertAndReleaseConfigFile(t *testing.T) {
792792
})
793793

794794
t.Run("md5_匹配", func(t *testing.T) {
795-
pubResp := testSuit.ConfigServer().CasUpsertAndReleaseConfigFileFromClient(testSuit.DefaultCtx, &config_manage.ConfigFilePublishInfo{
795+
pubResp := testSuit.ConfigServer().UpsertAndReleaseConfigFileFromClient(testSuit.DefaultCtx, &config_manage.ConfigFilePublishInfo{
796796
Namespace: utils.NewStringValue(mockNamespace),
797797
Group: utils.NewStringValue(mockGroup),
798798
FileName: utils.NewStringValue(mockFileName),

config/interceptor/auth/client.go

Lines changed: 0 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -184,19 +184,3 @@ func (s *Server) GetConfigGroupsWithCache(ctx context.Context,
184184
ctx = context.WithValue(ctx, utils.ContextAuthContextKey, authCtx)
185185
return s.nextServer.GetConfigGroupsWithCache(ctx, req)
186186
}
187-
188-
// CasUpsertAndReleaseConfigFileFromClient 创建/更新配置文件并发布
189-
func (s *Server) CasUpsertAndReleaseConfigFileFromClient(ctx context.Context,
190-
req *apiconfig.ConfigFilePublishInfo) *apiconfig.ConfigResponse {
191-
192-
authCtx := s.collectConfigFilePublishAuthContext(ctx, []*apiconfig.ConfigFilePublishInfo{req},
193-
auth.Modify, auth.UpsertAndReleaseConfigFile)
194-
if _, err := s.policySvr.GetAuthChecker().CheckClientPermission(authCtx); err != nil {
195-
return api.NewConfigFileResponse(auth.ConvertToErrCode(err), nil)
196-
}
197-
198-
ctx = authCtx.GetRequestContext()
199-
ctx = context.WithValue(ctx, utils.ContextAuthContextKey, authCtx)
200-
201-
return s.nextServer.CasUpsertAndReleaseConfigFileFromClient(ctx, req)
202-
}

config/interceptor/paramcheck/client_check.go

Lines changed: 0 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -202,18 +202,3 @@ func (s *Server) GetConfigGroupsWithCache(ctx context.Context,
202202

203203
return s.nextServer.GetConfigGroupsWithCache(ctx, req)
204204
}
205-
206-
// CasUpsertAndReleaseConfigFileFromClient 创建/更新配置文件并发布
207-
func (s *Server) CasUpsertAndReleaseConfigFileFromClient(ctx context.Context,
208-
req *apiconfig.ConfigFilePublishInfo) *apiconfig.ConfigResponse {
209-
if err := CheckFileName(req.GetFileName()); err != nil {
210-
return api.NewConfigResponse(apimodel.Code_InvalidConfigFileName)
211-
}
212-
if err := utils.CheckResourceName(req.GetNamespace()); err != nil {
213-
return api.NewConfigResponse(apimodel.Code_InvalidNamespaceName)
214-
}
215-
if err := utils.CheckResourceName(req.GetGroup()); err != nil {
216-
return api.NewConfigResponse(apimodel.Code_InvalidConfigFileGroupName)
217-
}
218-
return s.nextServer.CasUpsertAndReleaseConfigFileFromClient(ctx, req)
219-
}

0 commit comments

Comments
 (0)