mirror of https://github.com/harness/drone.git
75 lines
2.2 KiB
Go
75 lines
2.2 KiB
Go
// Copyright 2021 Harness Inc. All rights reserved.
|
|
// Use of this source code is governed by the Polyform Free Trial License
|
|
// that can be found in the LICENSE.md file for this repository.
|
|
|
|
package database
|
|
|
|
import (
|
|
"context"
|
|
|
|
"github.com/harness/gitness/internal/store"
|
|
"github.com/harness/gitness/internal/store/database/mutex"
|
|
"github.com/harness/gitness/types"
|
|
)
|
|
|
|
var _ store.PipelineStore = (*PipelineStoreSync)(nil)
|
|
|
|
// NewPipelineStoreSync returns a new PipelineStoreSync.
|
|
func NewPipelineStoreSync(store *PipelineStore) *PipelineStoreSync {
|
|
return &PipelineStoreSync{base: store}
|
|
}
|
|
|
|
// PipelineStoreSync synronizes read and write access to the
|
|
// pipeline store. This prevents race conditions when the database
|
|
// type is sqlite3.
|
|
type PipelineStoreSync struct{ base *PipelineStore }
|
|
|
|
// Find finds the pipeline by id.
|
|
func (s *PipelineStoreSync) Find(ctx context.Context, id int64) (*types.Pipeline, error) {
|
|
mutex.RLock()
|
|
defer mutex.RUnlock()
|
|
return s.base.Find(ctx, id)
|
|
}
|
|
|
|
// FindToken finds the pipeline by token.
|
|
func (s *PipelineStoreSync) FindToken(ctx context.Context, token string) (*types.Pipeline, error) {
|
|
mutex.RLock()
|
|
defer mutex.RUnlock()
|
|
return s.base.FindToken(ctx, token)
|
|
}
|
|
|
|
// FindSlug finds the pipeline by slug.
|
|
func (s *PipelineStoreSync) FindSlug(ctx context.Context, slug string) (*types.Pipeline, error) {
|
|
mutex.RLock()
|
|
defer mutex.RUnlock()
|
|
return s.base.FindSlug(ctx, slug)
|
|
}
|
|
|
|
// List returns a list of pipelines by user.
|
|
func (s *PipelineStoreSync) List(ctx context.Context, id int64, opts types.Params) ([]*types.Pipeline, error) {
|
|
mutex.RLock()
|
|
defer mutex.RUnlock()
|
|
return s.base.List(ctx, id, opts)
|
|
}
|
|
|
|
// Create saves the pipeline details.
|
|
func (s *PipelineStoreSync) Create(ctx context.Context, pipeline *types.Pipeline) error {
|
|
mutex.Lock()
|
|
defer mutex.Unlock()
|
|
return s.base.Create(ctx, pipeline)
|
|
}
|
|
|
|
// Update updates the pipeline details.
|
|
func (s *PipelineStoreSync) Update(ctx context.Context, pipeline *types.Pipeline) error {
|
|
mutex.Lock()
|
|
defer mutex.Unlock()
|
|
return s.base.Update(ctx, pipeline)
|
|
}
|
|
|
|
// Delete deletes the pipeline.
|
|
func (s *PipelineStoreSync) Delete(ctx context.Context, pipeline *types.Pipeline) error {
|
|
mutex.Lock()
|
|
defer mutex.Unlock()
|
|
return s.base.Delete(ctx, pipeline)
|
|
}
|