chore: [CODE-3148]: remove repo git info cache (#3421)

* remove repo git info cache
This commit is contained in:
Marko Gaćeša 2025-02-12 17:04:11 +00:00 committed by Harness
parent 0e372cc7ec
commit a4a05b6281
15 changed files with 18 additions and 108 deletions

View File

@ -374,7 +374,5 @@ func (c *Controller) updateLastGITPushTime(
return
}
c.repoFinder.MarkChanged(ctx, repo.ID)
*repo = *newRepo
}

View File

@ -58,7 +58,7 @@ func (s *Service) triggerPREventOnBranchUpdate(ctx context.Context,
var commitTitle string
err := func() error {
repo, err := s.repoGitInfoCache.Get(ctx, event.Payload.RepoID)
repo, err := s.repoFinder.FindByID(ctx, event.Payload.RepoID)
if err != nil {
return fmt.Errorf("failed to get repo git info: %w", err)
}
@ -86,7 +86,7 @@ func (s *Service) triggerPREventOnBranchUpdate(ctx context.Context,
s.forEveryOpenPR(ctx, event.Payload.RepoID, event.Payload.Ref, func(pr *types.PullReq) error {
// First check if the merge base has changed
targetRepo, err := s.repoGitInfoCache.Get(ctx, pr.TargetRepoID)
targetRepo, err := s.repoFinder.FindByID(ctx, pr.TargetRepoID)
if err != nil {
return fmt.Errorf("failed to get target repo git info: %w", err)
}
@ -178,7 +178,7 @@ func (s *Service) closePullReqOnBranchDelete(ctx context.Context,
event *events.Event[*gitevents.BranchDeletedPayload],
) error {
s.forEveryOpenPR(ctx, event.Payload.RepoID, event.Payload.Ref, func(pr *types.PullReq) error {
targetRepo, err := s.repoGitInfoCache.Get(ctx, pr.TargetRepoID)
targetRepo, err := s.repoFinder.FindByID(ctx, pr.TargetRepoID)
if err != nil {
return fmt.Errorf("failed to get repo info: %w", err)
}

View File

@ -43,7 +43,7 @@ func (s *Service) updateCodeComments(ctx context.Context,
targetRepoID, pullreqID int64,
newSourceSHA, newMergeBaseSHA string,
) error {
repoGit, err := s.repoGitInfoCache.Get(ctx, targetRepoID)
repoGit, err := s.repoFinder.FindByID(ctx, targetRepoID)
if err != nil {
return fmt.Errorf("failed to get repo git info: %w", err)
}

View File

@ -34,7 +34,7 @@ import (
func (s *Service) handleFileViewedOnBranchUpdate(ctx context.Context,
event *events.Event[*pullreqevents.BranchUpdatedPayload],
) error {
repoGit, err := s.repoGitInfoCache.Get(ctx, event.Payload.TargetRepoID)
repoGit, err := s.repoFinder.FindByID(ctx, event.Payload.TargetRepoID)
if err != nil {
return fmt.Errorf("failed to get repo git info: %w", err)
}

View File

@ -31,7 +31,7 @@ import (
func (s *Service) updateHeadRefOnBranchUpdate(ctx context.Context,
event *events.Event[*pullreqevents.BranchUpdatedPayload],
) error {
repoGit, err := s.repoGitInfoCache.Get(ctx, event.Payload.TargetRepoID)
repoGit, err := s.repoFinder.FindByID(ctx, event.Payload.TargetRepoID)
if err != nil {
return fmt.Errorf("failed to get repo git info: %w", err)
}

View File

@ -128,14 +128,14 @@ func (s *Service) updateMergeData(
}()
// load repository objects
targetRepo, err := s.repoGitInfoCache.Get(ctx, pr.TargetRepoID)
targetRepo, err := s.repoFinder.FindByID(ctx, pr.TargetRepoID)
if err != nil {
return err
}
sourceRepo := targetRepo
if pr.TargetRepoID != pr.SourceRepoID {
sourceRepo, err = s.repoGitInfoCache.Get(ctx, pr.SourceRepoID)
sourceRepo, err = s.repoFinder.FindByID(ctx, pr.SourceRepoID)
if err != nil {
return err
}

View File

@ -25,6 +25,7 @@ import (
pullreqevents "github.com/harness/gitness/app/events/pullreq"
"github.com/harness/gitness/app/githook"
"github.com/harness/gitness/app/services/codecomments"
"github.com/harness/gitness/app/services/refcache"
"github.com/harness/gitness/app/sse"
"github.com/harness/gitness/app/store"
"github.com/harness/gitness/app/url"
@ -38,7 +39,7 @@ import (
type Service struct {
pullreqEvReporter *pullreqevents.Reporter
git git.Interface
repoGitInfoCache store.RepoGitInfoCache
repoFinder refcache.RepoFinder
repoStore store.RepoStore
pullreqStore store.PullReqStore
activityStore store.PullReqActivityStore
@ -62,7 +63,7 @@ func New(ctx context.Context,
pullreqEvReaderFactory *events.ReaderFactory[*pullreqevents.Reader],
pullreqEvReporter *pullreqevents.Reporter,
git git.Interface,
repoGitInfoCache store.RepoGitInfoCache,
repoFinder refcache.RepoFinder,
repoStore store.RepoStore,
pullreqStore store.PullReqStore,
activityStore store.PullReqActivityStore,
@ -77,7 +78,7 @@ func New(ctx context.Context,
service := &Service{
pullreqEvReporter: pullreqEvReporter,
git: git,
repoGitInfoCache: repoGitInfoCache,
repoFinder: repoFinder,
repoStore: repoStore,
pullreqStore: pullreqStore,
activityStore: activityStore,

View File

@ -41,7 +41,6 @@ type ListService struct {
git git.Interface
authorizer authz.Authorizer
spaceStore store.SpaceStore
repoGitInfoCache store.RepoGitInfoCache
pullreqStore store.PullReqStore
checkStore store.CheckStore
repoFinder refcache.RepoFinder
@ -54,7 +53,6 @@ func NewListService(
git git.Interface,
authorizer authz.Authorizer,
spaceStore store.SpaceStore,
repoGitInfoCache store.RepoGitInfoCache,
pullreqStore store.PullReqStore,
checkStore store.CheckStore,
repoFinder refcache.RepoFinder,
@ -66,7 +64,6 @@ func NewListService(
git: git,
authorizer: authorizer,
spaceStore: spaceStore,
repoGitInfoCache: repoGitInfoCache,
pullreqStore: pullreqStore,
checkStore: checkStore,
repoFinder: repoFinder,
@ -229,13 +226,13 @@ func (c *ListService) backfillStats(
return nil
}
repoGitInfo, err := c.repoGitInfoCache.Get(ctx, pr.TargetRepoID)
repo, err := c.repoFinder.FindByID(ctx, pr.TargetRepoID)
if err != nil {
return fmt.Errorf("failed get repo git info to fetch diff stats: %w", err)
}
output, err := c.git.DiffStats(ctx, &git.DiffParams{
ReadParams: git.CreateReadParams(repoGitInfo),
ReadParams: git.CreateReadParams(repo),
BaseRef: pr.MergeBaseSHA,
HeadRef: pr.SourceSHA,
})

View File

@ -47,7 +47,7 @@ func ProvideService(ctx context.Context,
pullReqEvFactory *events.ReaderFactory[*pullreqevents.Reader],
pullReqEvReporter *pullreqevents.Reporter,
git git.Interface,
repoGitInfoCache store.RepoGitInfoCache,
repoFinder refcache.RepoFinder,
repoStore store.RepoStore,
pullreqStore store.PullReqStore,
activityStore store.PullReqActivityStore,
@ -65,7 +65,7 @@ func ProvideService(ctx context.Context,
pullReqEvFactory,
pullReqEvReporter,
git,
repoGitInfoCache,
repoFinder,
repoStore,
pullreqStore,
activityStore,
@ -84,7 +84,6 @@ func ProvideListService(
git git.Interface,
authorizer authz.Authorizer,
spaceStore store.SpaceStore,
repoGitInfoCache store.RepoGitInfoCache,
pullreqStore store.PullReqStore,
checkStore store.CheckStore,
repoFinder refcache.RepoFinder,
@ -96,7 +95,6 @@ func ProvideListService(
git,
authorizer,
spaceStore,
repoGitInfoCache,
pullreqStore,
checkStore,
repoFinder,

View File

@ -26,9 +26,6 @@ type (
// SpacePathCache caches a raw path to a space path.
SpacePathCache cache.Cache[string, *types.SpacePath]
// RepoGitInfoCache caches repository IDs to values GitUID.
RepoGitInfoCache cache.Cache[int64, *types.RepositoryGitInfo]
// InfraProviderResourceCache caches infraprovider resourceIDs to infraprovider resource.
InfraProviderResourceCache cache.ExtendedCache[int64, *types.InfraProviderResource]
)

View File

@ -28,7 +28,6 @@ import (
var WireSet = wire.NewSet(
ProvidePrincipalInfoCache,
ProvidePathCache,
ProvideRepoGitInfoCache,
ProvideInfraProviderResourceCache,
)
@ -45,11 +44,6 @@ func ProvidePathCache(
return New(pathStore, spacePathTransformation)
}
// ProvideRepoGitInfoCache provides a cache for storing types.RepositoryGitInfo objects.
func ProvideRepoGitInfoCache(getter store.RepoGitInfoView) store.RepoGitInfoCache {
return cache.New[int64, *types.RepositoryGitInfo](getter, 15*time.Minute)
}
// ProvideInfraProviderResourceCache provides a cache for storing types.InfraProviderResource objects.
func ProvideInfraProviderResourceCache(getter store.InfraProviderResourceView) store.InfraProviderResourceCache {
return cache.NewExtended[int64, *types.InfraProviderResource](getter, 5*time.Minute)

View File

@ -326,11 +326,6 @@ type (
) error
}
// RepoGitInfoView defines the repository GitUID view.
RepoGitInfoView interface {
Find(ctx context.Context, id int64) (*types.RepositoryGitInfo, error)
}
// MembershipStore defines the membership data storage.
MembershipStore interface {
Find(ctx context.Context, key types.MembershipKey) (*types.Membership, error)

View File

@ -1,62 +0,0 @@
// Copyright 2023 Harness, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package database
import (
"context"
"github.com/harness/gitness/app/store"
"github.com/harness/gitness/store/database"
"github.com/harness/gitness/store/database/dbtx"
"github.com/harness/gitness/types"
"github.com/jmoiron/sqlx"
)
var _ store.RepoGitInfoView = (*RepoGitInfoView)(nil)
// NewRepoGitInfoView returns a new RepoGitInfoView.
// It's used by the repository git UID cache.
func NewRepoGitInfoView(db *sqlx.DB) *RepoGitInfoView {
return &RepoGitInfoView{
db: db,
}
}
type RepoGitInfoView struct {
db *sqlx.DB
}
func (s *RepoGitInfoView) Find(ctx context.Context, id int64) (*types.RepositoryGitInfo, error) {
const sqlQuery = `
SELECT repo_git_uid, repo_parent_id
FROM repositories
WHERE repo_id = $1`
db := dbtx.GetAccessor(ctx, s.db)
v := db.QueryRowContext(ctx, sqlQuery, id)
if err := v.Err(); err != nil {
return nil, database.ProcessSQLErrorf(ctx, err, "failed to find git uid by repository id")
}
var result = types.RepositoryGitInfo{ID: id}
if err := v.Scan(&result.GitUID, &result.ParentID); err != nil {
return nil, database.ProcessSQLErrorf(ctx, err, "failed to scan git uid")
}
return &result, nil
}

View File

@ -44,7 +44,6 @@ var WireSet = wire.NewSet(
ProvideStageStore,
ProvideStepStore,
ProvideSecretStore,
ProvideRepoGitInfoView,
ProvideMembershipStore,
ProvideTokenStore,
ProvidePullReqStore,
@ -231,11 +230,6 @@ func ProvidePluginStore(db *sqlx.DB) store.PluginStore {
return NewPluginStore(db)
}
// ProvideRepoGitInfoView provides a repo git UID view.
func ProvideRepoGitInfoView(db *sqlx.DB) store.RepoGitInfoView {
return NewRepoGitInfoView(db)
}
func ProvideMembershipStore(
db *sqlx.DB,
principalInfoCache store.PrincipalInfoCache,

View File

@ -285,9 +285,7 @@ func initSystem(ctx context.Context, config *types.Config) (*server.System, erro
spaceIdentifier := check.ProvideSpaceIdentifierCheck()
secretStore := database.ProvideSecretStore(db)
connectorStore := database.ProvideConnectorStore(db, secretStore)
repoGitInfoView := database.ProvideRepoGitInfoView(db)
repoGitInfoCache := cache.ProvideRepoGitInfoCache(repoGitInfoView)
listService := pullreq.ProvideListService(transactor, gitInterface, authorizer, spaceStore, repoGitInfoCache, pullReqStore, checkStore, repoFinder, labelService, protectionManager)
listService := pullreq.ProvideListService(transactor, gitInterface, authorizer, spaceStore, pullReqStore, checkStore, repoFinder, labelService, protectionManager)
exporterRepository, err := exporter.ProvideSpaceExporter(provider, gitInterface, repoStore, jobScheduler, executor, encrypter, streamer)
if err != nil {
return nil, err
@ -379,7 +377,7 @@ func initSystem(ctx context.Context, config *types.Config) (*server.System, erro
if err != nil {
return nil, err
}
pullreqService, err := pullreq.ProvideService(ctx, config, readerFactory, eventsReaderFactory, reporter4, gitInterface, repoGitInfoCache, repoStore, pullReqStore, pullReqActivityStore, principalInfoCache, codeCommentView, migrator, pullReqFileViewStore, pubSub, provider, streamer)
pullreqService, err := pullreq.ProvideService(ctx, config, readerFactory, eventsReaderFactory, reporter4, gitInterface, repoFinder, repoStore, pullReqStore, pullReqActivityStore, principalInfoCache, codeCommentView, migrator, pullReqFileViewStore, pubSub, provider, streamer)
if err != nil {
return nil, err
}