fix: crash in globalTierJournal when TierConfig is not initialized (#17791)

This commit is contained in:
Harshavardhana
2023-08-03 14:16:15 -07:00
committed by GitHub
parent b762fbaf21
commit 239ccc9c40
4 changed files with 23 additions and 21 deletions
+18 -13
View File
@@ -32,7 +32,7 @@ import (
)
//go:generate msgp -file $GOFILE -unexported
//msgp:ignore tierJournal tierDiskJournal walkfn
//msgp:ignore TierJournal tierDiskJournal walkfn
type tierDiskJournal struct {
sync.RWMutex
@@ -40,7 +40,8 @@ type tierDiskJournal struct {
file *os.File // active journal file
}
type tierJournal struct {
// TierJournal holds an in-memory and an on-disk delete journal of tiered content.
type TierJournal struct {
*tierDiskJournal // for processing legacy journal entries
*tierMemJournal // for processing new journal entries
}
@@ -62,24 +63,28 @@ func newTierDiskJournal() *tierDiskJournal {
return &tierDiskJournal{}
}
// initTierDeletionJournal intializes an in-memory journal built using a
// buffered channel for new journal entries. It also initializes the on-disk
// journal only to process existing journal entries made from previous versions.
func initTierDeletionJournal(ctx context.Context) (*tierJournal, error) {
j := &tierJournal{
tierMemJournal: newTierMemJoural(1000),
// NewTierJournal initializes tier deletion journal
func NewTierJournal() *TierJournal {
j := &TierJournal{
tierMemJournal: newTierMemJournal(1000),
tierDiskJournal: newTierDiskJournal(),
}
return j
}
// Init intializes an in-memory journal built using a
// buffered channel for new journal entries. It also initializes the on-disk
// journal only to process existing journal entries made from previous versions.
func (t *TierJournal) Init(ctx context.Context) error {
for _, diskPath := range globalEndpoints.LocalDisksPaths() {
j.diskPath = diskPath
t.diskPath = diskPath
go j.deletePending(ctx) // for existing journal entries from previous MinIO versions
go j.processEntries(ctx) // for newer journal entries circa free-versions
return j, nil
go t.deletePending(ctx) // for existing journal entries from previous MinIO versions
go t.processEntries(ctx) // for newer journal entries circa free-versions
return nil
}
return nil, errors.New("no local drive found")
return errors.New("no local drive found")
}
// rotate rotates the journal. If a read-only journal already exists it does