Skip to content

feat: add HasActorCfg method #344

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 2 commits into from
May 10, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion integration_test/message_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -612,7 +612,7 @@ func testUpdateFilledMessageByID(ctx context.Context, t *testing.T, api, apiSign
res, err := api.GetMessageByUid(ctx, msg.ID)
assert.NoError(t, err)
if res.SignedCid != nil {
assert.Equal(t, types.OnChainMsg, res.State)
assert.Equal(t, types.OnChainMsg, res.State, "id", res.ID, "msg", res)
assert.True(t, res.Height > 0)
assert.False(t, res.TipSetKey.IsEmpty())
return
Expand Down
10 changes: 10 additions & 0 deletions models/mysql/actor_cfg.go
Original file line number Diff line number Diff line change
Expand Up @@ -93,6 +93,16 @@ func (s *mysqlActorCfgRepo) SaveActorCfg(ctx context.Context, actorCfg *types.Ac
return s.DB.Save(fromActorCfg(actorCfg)).Error
}

func (s *mysqlActorCfgRepo) HasActorCfg(ctx context.Context, methodType *types.MethodType) (bool, error) {
var count int64
if err := s.DB.Table("actor_cfg").Where("code = ? and method = ?", mtypes.NewDBCid(methodType.Code),
methodType.Method).Count(&count).Error; err != nil {
return false, err
}

return count > 0, nil
}

func (s *mysqlActorCfgRepo) GetActorCfgByMethodType(ctx context.Context, methodType *types.MethodType) (*types.ActorCfg, error) {
var a mysqlActorCfg
if err := s.DB.Take(&a, "code = ? and method = ?", mtypes.NewDBCid(methodType.Code), methodType.Method).Error; err != nil {
Expand Down
18 changes: 18 additions & 0 deletions models/mysql/actor_cfg_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ func Test_mysqlActorCfgRepo_SaveActorCfg(t *testing.T) {
r, mock, sqlDB := setup(t)
t.Run("mysql test save actor config", wrapper(testSaveActorCfg, r, mock))
t.Run("mysql test get actor config by id", wrapper(testGetActorTypeById, r, mock))
t.Run("mysql test has actor config", wrapper(testHasActorCfg, r, mock))
t.Run("mysql test get actor config by method type", wrapper(testGetActorTypeByMethodType, r, mock))
t.Run("mysql test list actor config by id", wrapper(testListActorType, r, mock))
t.Run("mysql test delete actor config by method types", wrapper(testDeleteActorCfgByMethodType, r, mock))
Expand Down Expand Up @@ -81,6 +82,23 @@ func testGetActorTypeById(t *testing.T, r repo.Repo, mock sqlmock.Sqlmock) {
assert.Equal(t, actorCfg, *actorCfgR)
}

func testHasActorCfg(t *testing.T, r repo.Repo, mock sqlmock.Sqlmock) {
ctx := context.Background()
var actorCfg types.ActorCfg
testutil.Provide(t, &actorCfg)

mock.ExpectQuery(regexp.QuoteMeta("SELECT count(*) FROM `actor_cfg` WHERE code = ? and method = ?")).
WithArgs(mtypes.NewDBCid(actorCfg.Code), actorCfg.Method).
WillReturnRows(sqlmock.NewRows([]string{"count"}).AddRow(1))

has, err := r.ActorCfgRepo().HasActorCfg(ctx, &types.MethodType{
Code: actorCfg.Code,
Method: actorCfg.Method,
})
assert.NoError(t, err)
assert.True(t, has)
}

func testGetActorTypeByMethodType(t *testing.T, r repo.Repo, mock sqlmock.Sqlmock) {
ctx := context.Background()
var actorCfg types.ActorCfg
Expand Down
1 change: 1 addition & 0 deletions models/repo/actor_cfg_repo.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ import (
type ActorCfgRepo interface {
SaveActorCfg(ctx context.Context, address *types.ActorCfg) error
GetActorCfgByMethodType(ctx context.Context, methodType *types.MethodType) (*types.ActorCfg, error)
HasActorCfg(ctx context.Context, methodType *types.MethodType) (bool, error)
GetActorCfgByID(ctx context.Context, id shared.UUID) (*types.ActorCfg, error)
ListActorCfg(ctx context.Context) ([]*types.ActorCfg, error)
DelActorCfgByMethodType(ctx context.Context, addr *types.MethodType) error
Expand Down
10 changes: 10 additions & 0 deletions models/sqlite/actor_cfg.go
Original file line number Diff line number Diff line change
Expand Up @@ -92,6 +92,16 @@ func (s *sqliteActorCfgRepo) SaveActorCfg(ctx context.Context, actorCfg *types.A
return s.DB.Save(fromActorCfg(actorCfg)).Error
}

func (s *sqliteActorCfgRepo) HasActorCfg(ctx context.Context, methodType *types.MethodType) (bool, error) {
var count int64
if err := s.DB.Table("actor_cfg").Where("code = ? and method = ?", mtypes.NewDBCid(methodType.Code),
methodType.Method).Count(&count).Error; err != nil {
return false, err
}

return count > 0, nil
}

func (s *sqliteActorCfgRepo) GetActorCfgByMethodType(ctx context.Context, methodType *types.MethodType) (*types.ActorCfg, error) {
var a sqliteActorCfg
if err := s.DB.Take(&a, "code = ? and method = ?", mtypes.DBCid(methodType.Code), sqliteUint64(methodType.Method)).Error; err != nil {
Expand Down
13 changes: 13 additions & 0 deletions models/sqlite/actor_cfg_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,19 @@ func Test_fromActorCfg(t *testing.T) {
assertActorCfgValue(t, actorCfg, actorActorCfg)
}

// HasActorCfg
for _, actorCfg := range expectActorCfgs {
has, err := actorCfgRepo.HasActorCfg(ctx, &types.MethodType{
Code: actorCfg.Code,
Method: actorCfg.Method,
})
assert.NoError(t, err)
assert.True(t, has)
}
has, err := actorCfgRepo.HasActorCfg(ctx, &types.MethodType{})
assert.NoError(t, err)
assert.False(t, has)

//UpdateSelectSpec
for _, actorCfg := range expectActorCfgs {
updateAsset := func(cfg func() (*types.ActorCfg, *types.ChangeGasSpecParams)) {
Expand Down
16 changes: 14 additions & 2 deletions service/message_selector.go
Original file line number Diff line number Diff line change
Expand Up @@ -620,16 +620,28 @@ func (w *work) getActorCfg(ctx context.Context, msg *types.Message, nv network.V
w.actorCache.Add(key, actor)
}

actorCfg, err := w.repo.ActorCfgRepo().GetActorCfgByMethodType(ctx, &types.MethodType{
mt := &types.MethodType{
Code: actor.Code,
Method: msg.Method,
})
}

// https://github.com/filecoin-project/venus/issues/5939
has, err := w.repo.ActorCfgRepo().HasActorCfg(ctx, mt)
if err != nil {
return nil, err
}
if !has {
return nil, nil
}

actorCfg, err := w.repo.ActorCfgRepo().GetActorCfgByMethodType(ctx, mt)
if err != nil {
if err == gorm.ErrRecordNotFound {
return nil, nil
}
return nil, err
}

return actorCfg, nil
}

Expand Down