mirror of
https://github.com/aptly-dev/aptly.git
synced 2026-06-02 04:50:49 +00:00
Database changes of resources need to be atomic
This commit is contained in:
committed by
Lorenzo Bolla
parent
1e7731c317
commit
f7f42a9cd8
+12
-21
@@ -99,8 +99,8 @@ type LocalRepoCollection struct {
|
|||||||
// NewLocalRepoCollection loads LocalRepos from DB and makes up collection
|
// NewLocalRepoCollection loads LocalRepos from DB and makes up collection
|
||||||
func NewLocalRepoCollection(db database.Storage) *LocalRepoCollection {
|
func NewLocalRepoCollection(db database.Storage) *LocalRepoCollection {
|
||||||
return &LocalRepoCollection{
|
return &LocalRepoCollection{
|
||||||
db: db,
|
db: db,
|
||||||
cache: make(map[string]*LocalRepo),
|
cache: make(map[string]*LocalRepo),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -158,23 +158,18 @@ func (collection *LocalRepoCollection) Add(repo *LocalRepo) error {
|
|||||||
|
|
||||||
// Update stores updated information about repo in DB
|
// Update stores updated information about repo in DB
|
||||||
func (collection *LocalRepoCollection) Update(repo *LocalRepo) error {
|
func (collection *LocalRepoCollection) Update(repo *LocalRepo) error {
|
||||||
transaction, err := collection.db.OpenTransaction()
|
batch := collection.db.CreateBatch()
|
||||||
if err != nil {
|
err := batch.Put(repo.Key(), repo.Encode())
|
||||||
return err
|
|
||||||
}
|
|
||||||
defer transaction.Discard()
|
|
||||||
|
|
||||||
err = transaction.Put(repo.Key(), repo.Encode())
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
if repo.packageRefs != nil {
|
if repo.packageRefs != nil {
|
||||||
err = transaction.Put(repo.RefKey(), repo.packageRefs.Encode())
|
err = batch.Put(repo.RefKey(), repo.packageRefs.Encode())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return transaction.Commit()
|
return batch.Write()
|
||||||
}
|
}
|
||||||
|
|
||||||
// LoadComplete loads additional information for local repo
|
// LoadComplete loads additional information for local repo
|
||||||
@@ -256,20 +251,16 @@ func (collection *LocalRepoCollection) Drop(repo *LocalRepo) error {
|
|||||||
|
|
||||||
delete(collection.cache, repo.UUID)
|
delete(collection.cache, repo.UUID)
|
||||||
|
|
||||||
if _, err = transaction.Get(repo.Key()); err != nil {
|
batch := collection.db.CreateBatch()
|
||||||
if err == database.ErrNotFound {
|
err = batch.Delete(repo.Key())
|
||||||
return errors.New("local repo not found")
|
if err != nil {
|
||||||
}
|
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
if err = transaction.Delete(repo.Key()); err != nil {
|
err = batch.Delete(repo.RefKey())
|
||||||
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
if err = transaction.Delete(repo.RefKey()); err != nil {
|
return batch.Write()
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
return transaction.Commit()
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -279,7 +279,6 @@ func (collection *PackageCollection) UpdateInTransaction(p *Package, transaction
|
|||||||
}
|
}
|
||||||
|
|
||||||
p.collection = collection
|
p.collection = collection
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+11
-15
@@ -885,7 +885,7 @@ type PublishedRepoCollection struct {
|
|||||||
// NewPublishedRepoCollection loads PublishedRepos from DB and makes up collection
|
// NewPublishedRepoCollection loads PublishedRepos from DB and makes up collection
|
||||||
func NewPublishedRepoCollection(db database.Storage) *PublishedRepoCollection {
|
func NewPublishedRepoCollection(db database.Storage) *PublishedRepoCollection {
|
||||||
return &PublishedRepoCollection{
|
return &PublishedRepoCollection{
|
||||||
db: db,
|
db: db,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -939,26 +939,27 @@ func (collection *PublishedRepoCollection) CheckDuplicate(repo *PublishedRepo) *
|
|||||||
|
|
||||||
// Update stores updated information about repo in DB
|
// Update stores updated information about repo in DB
|
||||||
func (collection *PublishedRepoCollection) Update(repo *PublishedRepo) error {
|
func (collection *PublishedRepoCollection) Update(repo *PublishedRepo) error {
|
||||||
transaction, err := collection.db.OpenTransaction()
|
batch := collection.db.CreateBatch()
|
||||||
|
|
||||||
|
err := batch.Put(repo.Key(), repo.Encode())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
defer transaction.Discard()
|
|
||||||
|
|
||||||
err = transaction.Put(repo.Key(), repo.Encode())
|
err = batch.Put(repo.Key(), repo.Encode())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
if repo.SourceKind == SourceLocalRepo {
|
if repo.SourceKind == SourceLocalRepo {
|
||||||
for component, item := range repo.sourceItems {
|
for component, item := range repo.sourceItems {
|
||||||
err = transaction.Put(repo.RefKey(component), item.packageRefs.Encode())
|
err = batch.Put(repo.RefKey(component), item.packageRefs.Encode())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return transaction.Commit()
|
return batch.Write()
|
||||||
}
|
}
|
||||||
|
|
||||||
// LoadComplete loads additional information for remote repo
|
// LoadComplete loads additional information for remote repo
|
||||||
@@ -1200,12 +1201,6 @@ func (collection *PublishedRepoCollection) Remove(publishedStorageProvider aptly
|
|||||||
storage, prefix, distribution string, collectionFactory *CollectionFactory, progress aptly.Progress,
|
storage, prefix, distribution string, collectionFactory *CollectionFactory, progress aptly.Progress,
|
||||||
force, skipCleanup bool) error {
|
force, skipCleanup bool) error {
|
||||||
|
|
||||||
transaction, err := collection.db.OpenTransaction()
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
defer transaction.Discard()
|
|
||||||
|
|
||||||
// TODO: load via transaction
|
// TODO: load via transaction
|
||||||
collection.loadList()
|
collection.loadList()
|
||||||
|
|
||||||
@@ -1258,17 +1253,18 @@ func (collection *PublishedRepoCollection) Remove(publishedStorageProvider aptly
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
err = transaction.Delete(repo.Key())
|
batch := collection.db.CreateBatch()
|
||||||
|
err = batch.Delete(repo.Key())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, component := range repo.Components() {
|
for _, component := range repo.Components() {
|
||||||
err = transaction.Delete(repo.RefKey(component))
|
err = batch.Delete(repo.RefKey(component))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return transaction.Commit()
|
return batch.Write()
|
||||||
}
|
}
|
||||||
|
|||||||
+12
-15
@@ -758,8 +758,8 @@ type RemoteRepoCollection struct {
|
|||||||
// NewRemoteRepoCollection loads RemoteRepos from DB and makes up collection
|
// NewRemoteRepoCollection loads RemoteRepos from DB and makes up collection
|
||||||
func NewRemoteRepoCollection(db database.Storage) *RemoteRepoCollection {
|
func NewRemoteRepoCollection(db database.Storage) *RemoteRepoCollection {
|
||||||
return &RemoteRepoCollection{
|
return &RemoteRepoCollection{
|
||||||
db: db,
|
db: db,
|
||||||
cache: make(map[string]*RemoteRepo),
|
cache: make(map[string]*RemoteRepo),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -817,24 +817,19 @@ func (collection *RemoteRepoCollection) Add(repo *RemoteRepo) error {
|
|||||||
|
|
||||||
// Update stores updated information about repo in DB
|
// Update stores updated information about repo in DB
|
||||||
func (collection *RemoteRepoCollection) Update(repo *RemoteRepo) error {
|
func (collection *RemoteRepoCollection) Update(repo *RemoteRepo) error {
|
||||||
transaction, err := collection.db.OpenTransaction()
|
batch := collection.db.CreateBatch()
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
defer transaction.Discard()
|
|
||||||
|
|
||||||
err = transaction.Put(repo.Key(), repo.Encode())
|
err := batch.Put(repo.Key(), repo.Encode())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
if repo.packageRefs != nil {
|
if repo.packageRefs != nil {
|
||||||
err = transaction.Put(repo.RefKey(), repo.packageRefs.Encode())
|
err = batch.Put(repo.RefKey(), repo.packageRefs.Encode())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
return batch.Write()
|
||||||
return transaction.Commit()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// LoadComplete loads additional information for remote repo
|
// LoadComplete loads additional information for remote repo
|
||||||
@@ -923,13 +918,15 @@ func (collection *RemoteRepoCollection) Drop(repo *RemoteRepo) error {
|
|||||||
|
|
||||||
delete(collection.cache, repo.UUID)
|
delete(collection.cache, repo.UUID)
|
||||||
|
|
||||||
if err = transaction.Delete(repo.Key()); err != nil {
|
batch := collection.db.CreateBatch()
|
||||||
|
err = batch.Delete(repo.Key())
|
||||||
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
if err = transaction.Delete(repo.RefKey()); err != nil {
|
err = batch.Delete(repo.RefKey())
|
||||||
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
return batch.Write()
|
||||||
return transaction.Commit()
|
|
||||||
}
|
}
|
||||||
|
|||||||
+14
-13
@@ -196,8 +196,8 @@ type SnapshotCollection struct {
|
|||||||
// NewSnapshotCollection loads Snapshots from DB and makes up collection
|
// NewSnapshotCollection loads Snapshots from DB and makes up collection
|
||||||
func NewSnapshotCollection(db database.Storage) *SnapshotCollection {
|
func NewSnapshotCollection(db database.Storage) *SnapshotCollection {
|
||||||
return &SnapshotCollection{
|
return &SnapshotCollection{
|
||||||
db: db,
|
db: db,
|
||||||
cache: map[string]*Snapshot{},
|
cache: map[string]*Snapshot{},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -219,22 +219,20 @@ func (collection *SnapshotCollection) Add(snapshot *Snapshot) error {
|
|||||||
|
|
||||||
// Update stores updated information about snapshot in DB
|
// Update stores updated information about snapshot in DB
|
||||||
func (collection *SnapshotCollection) Update(snapshot *Snapshot) error {
|
func (collection *SnapshotCollection) Update(snapshot *Snapshot) error {
|
||||||
transaction, err := collection.db.OpenTransaction()
|
batch := collection.db.CreateBatch()
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
defer transaction.Discard()
|
|
||||||
|
|
||||||
err = transaction.Put(snapshot.Key(), snapshot.Encode())
|
err := batch.Put(snapshot.Key(), snapshot.Encode())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
if snapshot.packageRefs != nil {
|
if snapshot.packageRefs != nil {
|
||||||
if err = transaction.Put(snapshot.RefKey(), snapshot.packageRefs.Encode()); err != nil {
|
err = batch.Put(snapshot.RefKey(), snapshot.packageRefs.Encode())
|
||||||
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return transaction.Commit()
|
|
||||||
|
return batch.Write()
|
||||||
}
|
}
|
||||||
|
|
||||||
// LoadComplete loads additional information about snapshot
|
// LoadComplete loads additional information about snapshot
|
||||||
@@ -406,15 +404,18 @@ func (collection *SnapshotCollection) Drop(snapshot *Snapshot) error {
|
|||||||
|
|
||||||
delete(collection.cache, snapshot.UUID)
|
delete(collection.cache, snapshot.UUID)
|
||||||
|
|
||||||
if err = transaction.Delete(snapshot.Key()); err != nil {
|
batch := collection.db.CreateBatch()
|
||||||
|
err = batch.Delete(snapshot.Key())
|
||||||
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
if err = transaction.Delete(snapshot.RefKey()); err != nil {
|
err = batch.Delete(snapshot.RefKey())
|
||||||
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
return transaction.Commit()
|
return batch.Write()
|
||||||
}
|
}
|
||||||
|
|
||||||
// Snapshot sorting methods
|
// Snapshot sorting methods
|
||||||
|
|||||||
Reference in New Issue
Block a user