Added a lot of different things

This commit is contained in:
Simon Martens
2024-12-02 19:32:25 +01:00
parent 3dbbe6629c
commit 51afda5ff2
17 changed files with 92 additions and 156 deletions

View File

@@ -95,7 +95,7 @@ func (l *Library) Serialize(commit string) {
wg.Wait()
go func() {
l.Cleanup(commit)
l.Cleanup()
}()
}
@@ -110,11 +110,11 @@ func (l *Library) Prepare(commit string) {
l.Pieces.Prepare(commit)
}
func (l *Library) Cleanup(commit string) {
l.Agents.Cleanup(commit)
l.Places.Cleanup(commit)
l.Works.Cleanup(commit)
l.Categories.Cleanup(commit)
l.Issues.Cleanup(commit)
l.Pieces.Cleanup(commit)
func (l *Library) Cleanup() {
l.Agents.Cleanup()
l.Places.Cleanup()
l.Works.Cleanup()
l.Categories.Cleanup()
l.Issues.Cleanup()
l.Pieces.Cleanup()
}

View File

@@ -56,10 +56,14 @@ func (p *XMLProvider[T]) Serialize(dataholder XMLRootElement[T], path string) er
return fmt.Errorf("No commit set")
}
p.mu.Lock()
commit := &p.parses[len(p.parses)-1]
p.mu.Unlock()
// Introduce goroutine for every path, locking on append:
if err := UnmarshalFile(path, dataholder); err != nil {
logging.Error(err, "Could not unmarshal file: "+path)
logging.ParseMessages.ParseErrors <- logging.ParseMessage{MessageType: logging.ErrorMessage, Message: "Could not unmarshal file: " + path}
logging.ParseMessages.LogError(logging.Unknown, path, "", "Could not unmarshal file.")
p.mu.Lock()
defer p.mu.Unlock()
p.failed = append(p.failed, path)
@@ -69,7 +73,7 @@ func (p *XMLProvider[T]) Serialize(dataholder XMLRootElement[T], path string) er
for _, item := range dataholder.Children() {
// INFO: Mostly it's just one ID, so the double loop is not that bad.
for _, id := range item.GetIDs() {
p.Infos.Store(id, ItemInfo{Source: path, Parse: &p.parses[len(p.parses)-1]})
p.Infos.Store(id, ItemInfo{Source: path, Parse: commit})
p.Items.Store(id, item)
}
}
@@ -86,11 +90,11 @@ func (p *XMLProvider[T]) Cleanup() {
return
}
lastcommit := p.parses[len(p.parses)-1].Commit
lastcommit := &p.parses[len(p.parses)-1]
todelete := make([]string, 0)
p.Infos.Range(func(key, value interface{}) bool {
info := value.(ItemInfo)
if info.Parse.Commit != lastcommit {
if info.Parse != lastcommit {
if !slices.Contains(p.failed, info.Source) {
todelete = append(todelete, key.(string))
}