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 return
} }
c.repoFinder.MarkChanged(ctx, repo.ID)
*repo = *newRepo *repo = *newRepo
} }

View File

@ -58,7 +58,7 @@ func (s *Service) triggerPREventOnBranchUpdate(ctx context.Context,
var commitTitle string var commitTitle string
err := func() error { err := func() error {
repo, err := s.repoGitInfoCache.Get(ctx, event.Payload.RepoID) repo, err := s.repoFinder.FindByID(ctx, event.Payload.RepoID)
if err != nil { if err != nil {
return fmt.Errorf("failed to get repo git info: %w", err) 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 { s.forEveryOpenPR(ctx, event.Payload.RepoID, event.Payload.Ref, func(pr *types.PullReq) error {
// First check if the merge base has changed // 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 { if err != nil {
return fmt.Errorf("failed to get target repo git info: %w", err) 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], event *events.Event[*gitevents.BranchDeletedPayload],
) error { ) error {
s.forEveryOpenPR(ctx, event.Payload.RepoID, event.Payload.Ref, func(pr *types.PullReq) 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 { if err != nil {
return fmt.Errorf("failed to get repo info: %w", err) 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, targetRepoID, pullreqID int64,
newSourceSHA, newMergeBaseSHA string, newSourceSHA, newMergeBaseSHA string,
) error { ) error {
repoGit, err := s.repoGitInfoCache.Get(ctx, targetRepoID) repoGit, err := s.repoFinder.FindByID(ctx, targetRepoID)
if err != nil { if err != nil {
return fmt.Errorf("failed to get repo git info: %w", err) 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, func (s *Service) handleFileViewedOnBranchUpdate(ctx context.Context,
event *events.Event[*pullreqevents.BranchUpdatedPayload], event *events.Event[*pullreqevents.BranchUpdatedPayload],
) error { ) error {
repoGit, err := s.repoGitInfoCache.Get(ctx, event.Payload.TargetRepoID) repoGit, err := s.repoFinder.FindByID(ctx, event.Payload.TargetRepoID)
if err != nil { if err != nil {
return fmt.Errorf("failed to get repo git info: %w", err) 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, func (s *Service) updateHeadRefOnBranchUpdate(ctx context.Context,
event *events.Event[*pullreqevents.BranchUpdatedPayload], event *events.Event[*pullreqevents.BranchUpdatedPayload],
) error { ) error {
repoGit, err := s.repoGitInfoCache.Get(ctx, event.Payload.TargetRepoID) repoGit, err := s.repoFinder.FindByID(ctx, event.Payload.TargetRepoID)
if err != nil { if err != nil {
return fmt.Errorf("failed to get repo git info: %w", err) return fmt.Errorf("failed to get repo git info: %w", err)
} }

View File

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

View File

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

View File

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

View File

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

View File

@ -26,9 +26,6 @@ type (
// SpacePathCache caches a raw path to a space path. // SpacePathCache caches a raw path to a space path.
SpacePathCache cache.Cache[string, *types.SpacePath] 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 caches infraprovider resourceIDs to infraprovider resource.
InfraProviderResourceCache cache.ExtendedCache[int64, *types.InfraProviderResource] InfraProviderResourceCache cache.ExtendedCache[int64, *types.InfraProviderResource]
) )

View File

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

View File

@ -326,11 +326,6 @@ type (
) error ) 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 defines the membership data storage.
MembershipStore interface { MembershipStore interface {
Find(ctx context.Context, key types.MembershipKey) (*types.Membership, error) 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, ProvideStageStore,
ProvideStepStore, ProvideStepStore,
ProvideSecretStore, ProvideSecretStore,
ProvideRepoGitInfoView,
ProvideMembershipStore, ProvideMembershipStore,
ProvideTokenStore, ProvideTokenStore,
ProvidePullReqStore, ProvidePullReqStore,
@ -231,11 +230,6 @@ func ProvidePluginStore(db *sqlx.DB) store.PluginStore {
return NewPluginStore(db) return NewPluginStore(db)
} }
// ProvideRepoGitInfoView provides a repo git UID view.
func ProvideRepoGitInfoView(db *sqlx.DB) store.RepoGitInfoView {
return NewRepoGitInfoView(db)
}
func ProvideMembershipStore( func ProvideMembershipStore(
db *sqlx.DB, db *sqlx.DB,
principalInfoCache store.PrincipalInfoCache, principalInfoCache store.PrincipalInfoCache,

View File

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