fix: skip broken (multiple)references in genericentry

This commit is contained in:
Cristian Vidmar 2025-09-19 15:57:52 +02:00
parent d91860c7e1
commit fb5ecfe7da
3 changed files with 29 additions and 29 deletions

View File

@ -1141,7 +1141,7 @@ func (genericEntry *GenericEntry) FieldAsMultipleReference(fieldName string, loc
} }
referencedEntry, err := genericEntry.CC.GetGenericEntry(cts.Sys.ID) referencedEntry, err := genericEntry.CC.GetGenericEntry(cts.Sys.ID)
if err != nil || referencedEntry == nil { if err != nil || referencedEntry == nil {
return nil, err continue
} }
refs = append(refs, &EntryReference{ refs = append(refs, &EntryReference{
ID: cts.Sys.ID, ID: cts.Sys.ID,
@ -1684,14 +1684,14 @@ func (cc *ContentfulClient) cacheSpace(ctx context.Context, contentTypes []strin
if errCanWeEvenConnect != nil { if errCanWeEvenConnect != nil {
if len(cc.offlineTemp.Entries) > 0 && (cc.Cache == nil || offlinePreviousState) { if len(cc.offlineTemp.Entries) > 0 && (cc.Cache == nil || offlinePreviousState) {
if cc.logFn != nil && cc.logLevel <= LogInfo { if cc.logFn != nil && cc.logLevel <= LogInfo {
cc.logFn(map[string]interface{}{"task": "UpdateCache"}, LogInfo, InfoFallingBackToFile) cc.logFn(map[string]interface{}{"task": "UpdateCache", "clientMode": cc.clientMode}, LogInfo, InfoFallingBackToFile)
} }
cc.cacheMutex.sharedDataGcLock.Lock() cc.cacheMutex.sharedDataGcLock.Lock()
cc.offline = true cc.offline = true
cc.cacheMutex.sharedDataGcLock.Unlock() cc.cacheMutex.sharedDataGcLock.Unlock()
} else { } else {
if cc.logFn != nil && cc.logLevel <= LogInfo { if cc.logFn != nil && cc.logLevel <= LogInfo {
cc.logFn(map[string]interface{}{"task": "UpdateCache"}, LogInfo, InfoPreservingExistingCache) cc.logFn(map[string]interface{}{"task": "UpdateCache", "clientMode": cc.clientMode}, LogInfo, InfoPreservingExistingCache)
} }
} }
} }
@ -1705,7 +1705,7 @@ func (cc *ContentfulClient) cacheSpace(ctx context.Context, contentTypes []strin
err := updateCacheForContentType(gctx, results, cc, tempCache, contentType) err := updateCacheForContentType(gctx, results, cc, tempCache, contentType)
if err != nil { if err != nil {
if cc.logFn != nil && cc.logLevel <= LogInfo { if cc.logFn != nil && cc.logLevel <= LogInfo {
cc.logFn(map[string]interface{}{"task": "UpdateCache", "contentType": contentType}, LogError, err.Error()) cc.logFn(map[string]interface{}{"task": "UpdateCache", "contentType": contentType, "clientMode": cc.clientMode}, LogError, err.Error())
} }
return err return err
} }
@ -1738,7 +1738,7 @@ func (cc *ContentfulClient) cacheSpace(ctx context.Context, contentTypes []strin
cc.offline = offlinePreviousState cc.offline = offlinePreviousState
cc.cacheMutex.sharedDataGcLock.Unlock() cc.cacheMutex.sharedDataGcLock.Unlock()
if cc.logFn != nil && cc.logLevel <= LogInfo { if cc.logFn != nil && cc.logLevel <= LogInfo {
cc.logFn(map[string]interface{}{"task": "UpdateCache"}, LogError, err.Error()) cc.logFn(map[string]interface{}{"task": "UpdateCache", "clientMode": cc.clientMode}, LogError, err.Error())
} }
return return
} }
@ -1746,7 +1746,7 @@ func (cc *ContentfulClient) cacheSpace(ctx context.Context, contentTypes []strin
<-resultsDone <-resultsDone
if cc.logFn != nil && cc.logLevel <= LogInfo { if cc.logFn != nil && cc.logLevel <= LogInfo {
cc.logFn(map[string]interface{}{"time elapsed": fmt.Sprint(time.Since(start)), "task": "UpdateCache"}, LogInfo, InfoUpdateCacheTime) cc.logFn(map[string]interface{}{"time elapsed": fmt.Sprint(time.Since(start)), "task": "UpdateCache", "clientMode": cc.clientMode}, LogInfo, InfoUpdateCacheTime)
} }
cc.cacheMutex.fullCacheGcLock.Lock() cc.cacheMutex.fullCacheGcLock.Lock()
cc.cacheMutex.sharedDataGcLock.Lock() cc.cacheMutex.sharedDataGcLock.Lock()
@ -2472,7 +2472,7 @@ func updateCacheForContentType(ctx context.Context, results chan ContentTypeResu
} }
cc.cacheMutex.genericEntriesGcLock.Unlock() cc.cacheMutex.genericEntriesGcLock.Unlock()
if cc.logFn != nil && cc.logLevel <= LogInfo { if cc.logFn != nil && cc.logLevel <= LogInfo {
cc.logFn(map[string]interface{}{"contentType":"{{ $contentType.Sys.ID }}", "method": "updateCacheForContentType", "size":len(all{{ firstCap $contentType.Sys.ID }})}, LogInfo, InfoCachedAllEntries) cc.logFn(map[string]interface{}{"contentType":"{{ $contentType.Sys.ID }}", "method": "updateCacheForContentType", "clientMode": cc.clientMode, "size":len(all{{ firstCap $contentType.Sys.ID }})}, LogInfo, InfoCachedAllEntries)
} }
{{ end }} {{ end }}
case assetWorkerType: case assetWorkerType:
@ -2482,7 +2482,7 @@ func updateCacheForContentType(ctx context.Context, results chan ContentTypeResu
} }
tempCache.assets = allAssets tempCache.assets = allAssets
if cc.logFn != nil && cc.logLevel <= LogInfo { if cc.logFn != nil && cc.logLevel <= LogInfo {
cc.logFn(map[string]interface{}{"contentType": "asset", "method": "updateCacheForContentType", "size": len(allAssets)}, LogInfo, InfoCachedAllAssets) cc.logFn(map[string]interface{}{"contentType": "asset", "method": "updateCacheForContentType", "clientMode": cc.clientMode, "size": len(allAssets)}, LogInfo, InfoCachedAllAssets)
} }
case tagWorkerType: case tagWorkerType:
@ -2492,7 +2492,7 @@ func updateCacheForContentType(ctx context.Context, results chan ContentTypeResu
} }
tempCache.tags = allTags tempCache.tags = allTags
if cc.logFn != nil && cc.logLevel <= LogInfo { if cc.logFn != nil && cc.logLevel <= LogInfo {
cc.logFn(map[string]interface{}{"contentType": "tag", "method": "updateCacheForContentType", "size": len(allTags)}, LogInfo, InfoCachedAllTags) cc.logFn(map[string]interface{}{"contentType": "tag", "method": "updateCacheForContentType", "clientMode": cc.clientMode, "size": len(allTags)}, LogInfo, InfoCachedAllTags)
} }
} }
return nil return nil
@ -2521,7 +2521,7 @@ func updateCacheForContentTypeAndEntity(ctx context.Context, cc *ContentfulClien
} }
} }
if cc.logFn != nil && cc.logLevel <= LogInfo && entityPayload == nil { if cc.logFn != nil && cc.logLevel <= LogInfo && entityPayload == nil {
cc.logFn(map[string]interface{}{"contentType": "Asset", "method": "updateCacheForContentTypeAndEntity", "entityID": entityID}, LogInfo, InfoUpdatedEntityCache) cc.logFn(map[string]interface{}{"contentType": "Asset", "method": "updateCacheForContentTypeAndEntity", "clientMode": cc.clientMode, "entityID": entityID}, LogInfo, InfoUpdatedEntityCache)
} }
{{ range $index , $contentType := $contentTypes }} {{ range $index , $contentType := $contentTypes }}
case ContentType{{ firstCap $contentType.Sys.ID }}: case ContentType{{ firstCap $contentType.Sys.ID }}:
@ -2533,13 +2533,13 @@ func updateCacheForContentTypeAndEntity(ctx context.Context, cc *ContentfulClien
return err return err
} }
if cc.logFn != nil && cc.logLevel <= LogInfo && entityPayload == nil { if cc.logFn != nil && cc.logLevel <= LogInfo && entityPayload == nil {
cc.logFn(map[string]interface{}{"contentType": "{{ $contentType.Sys.ID }}", "method": "updateCacheForContentTypeAndEntity", "entityID": entityID}, LogInfo, InfoUpdatedEntityCache) cc.logFn(map[string]interface{}{"contentType": "{{ $contentType.Sys.ID }}", "method": "updateCacheForContentTypeAndEntity", "clientMode": cc.clientMode, "entityID": entityID}, LogInfo, InfoUpdatedEntityCache)
} }
{{ end }} {{ end }}
} }
allTags, err := cc.getAllTags(ctx, false) allTags, err := cc.getAllTags(ctx, false)
if err != nil { if err != nil {
return fmt.Errorf("syncCache failed for tags: %s",err.Error()) return fmt.Errorf("syncCache failed for tags: %s, clientMode: %s",err.Error(), cc.clientMode)
} }
cc.cacheMutex.sharedDataGcLock.Lock() cc.cacheMutex.sharedDataGcLock.Lock()
cc.Cache.tags = allTags cc.Cache.tags = allTags

View File

@ -1171,7 +1171,7 @@ func (genericEntry *GenericEntry) FieldAsMultipleReference(fieldName string, loc
} }
referencedEntry, err := genericEntry.CC.GetGenericEntry(cts.Sys.ID) referencedEntry, err := genericEntry.CC.GetGenericEntry(cts.Sys.ID)
if err != nil || referencedEntry == nil { if err != nil || referencedEntry == nil {
return nil, err continue
} }
refs = append(refs, &EntryReference{ refs = append(refs, &EntryReference{
ID: cts.Sys.ID, ID: cts.Sys.ID,
@ -1713,14 +1713,14 @@ func (cc *ContentfulClient) cacheSpace(ctx context.Context, contentTypes []strin
if errCanWeEvenConnect != nil { if errCanWeEvenConnect != nil {
if len(cc.offlineTemp.Entries) > 0 && (cc.Cache == nil || offlinePreviousState) { if len(cc.offlineTemp.Entries) > 0 && (cc.Cache == nil || offlinePreviousState) {
if cc.logFn != nil && cc.logLevel <= LogInfo { if cc.logFn != nil && cc.logLevel <= LogInfo {
cc.logFn(map[string]interface{}{"task": "UpdateCache"}, LogInfo, InfoFallingBackToFile) cc.logFn(map[string]interface{}{"task": "UpdateCache", "clientMode": cc.clientMode}, LogInfo, InfoFallingBackToFile)
} }
cc.cacheMutex.sharedDataGcLock.Lock() cc.cacheMutex.sharedDataGcLock.Lock()
cc.offline = true cc.offline = true
cc.cacheMutex.sharedDataGcLock.Unlock() cc.cacheMutex.sharedDataGcLock.Unlock()
} else { } else {
if cc.logFn != nil && cc.logLevel <= LogInfo { if cc.logFn != nil && cc.logLevel <= LogInfo {
cc.logFn(map[string]interface{}{"task": "UpdateCache"}, LogInfo, InfoPreservingExistingCache) cc.logFn(map[string]interface{}{"task": "UpdateCache", "clientMode": cc.clientMode}, LogInfo, InfoPreservingExistingCache)
} }
} }
} }
@ -1734,7 +1734,7 @@ func (cc *ContentfulClient) cacheSpace(ctx context.Context, contentTypes []strin
err := updateCacheForContentType(gctx, results, cc, tempCache, contentType) err := updateCacheForContentType(gctx, results, cc, tempCache, contentType)
if err != nil { if err != nil {
if cc.logFn != nil && cc.logLevel <= LogInfo { if cc.logFn != nil && cc.logLevel <= LogInfo {
cc.logFn(map[string]interface{}{"task": "UpdateCache", "contentType": contentType}, LogError, err.Error()) cc.logFn(map[string]interface{}{"task": "UpdateCache", "contentType": contentType, "clientMode": cc.clientMode}, LogError, err.Error())
} }
return err return err
} }
@ -1767,7 +1767,7 @@ func (cc *ContentfulClient) cacheSpace(ctx context.Context, contentTypes []strin
cc.offline = offlinePreviousState cc.offline = offlinePreviousState
cc.cacheMutex.sharedDataGcLock.Unlock() cc.cacheMutex.sharedDataGcLock.Unlock()
if cc.logFn != nil && cc.logLevel <= LogInfo { if cc.logFn != nil && cc.logLevel <= LogInfo {
cc.logFn(map[string]interface{}{"task": "UpdateCache"}, LogError, err.Error()) cc.logFn(map[string]interface{}{"task": "UpdateCache", "clientMode": cc.clientMode}, LogError, err.Error())
} }
return return
} }
@ -1775,7 +1775,7 @@ func (cc *ContentfulClient) cacheSpace(ctx context.Context, contentTypes []strin
<-resultsDone <-resultsDone
if cc.logFn != nil && cc.logLevel <= LogInfo { if cc.logFn != nil && cc.logLevel <= LogInfo {
cc.logFn(map[string]interface{}{"time elapsed": fmt.Sprint(time.Since(start)), "task": "UpdateCache"}, LogInfo, InfoUpdateCacheTime) cc.logFn(map[string]interface{}{"time elapsed": fmt.Sprint(time.Since(start)), "task": "UpdateCache", "clientMode": cc.clientMode}, LogInfo, InfoUpdateCacheTime)
} }
cc.cacheMutex.fullCacheGcLock.Lock() cc.cacheMutex.fullCacheGcLock.Lock()
cc.cacheMutex.sharedDataGcLock.Lock() cc.cacheMutex.sharedDataGcLock.Lock()
@ -2515,7 +2515,7 @@ func updateCacheForContentType(ctx context.Context, results chan ContentTypeResu
} }
cc.cacheMutex.genericEntriesGcLock.Unlock() cc.cacheMutex.genericEntriesGcLock.Unlock()
if cc.logFn != nil && cc.logLevel <= LogInfo { if cc.logFn != nil && cc.logLevel <= LogInfo {
cc.logFn(map[string]interface{}{"contentType": "brand", "method": "updateCacheForContentType", "size": len(allBrand)}, LogInfo, InfoCachedAllEntries) cc.logFn(map[string]interface{}{"contentType": "brand", "method": "updateCacheForContentType", "clientMode": cc.clientMode, "size": len(allBrand)}, LogInfo, InfoCachedAllEntries)
} }
case ContentTypeCategory: case ContentTypeCategory:
@ -2534,7 +2534,7 @@ func updateCacheForContentType(ctx context.Context, results chan ContentTypeResu
} }
cc.cacheMutex.genericEntriesGcLock.Unlock() cc.cacheMutex.genericEntriesGcLock.Unlock()
if cc.logFn != nil && cc.logLevel <= LogInfo { if cc.logFn != nil && cc.logLevel <= LogInfo {
cc.logFn(map[string]interface{}{"contentType": "category", "method": "updateCacheForContentType", "size": len(allCategory)}, LogInfo, InfoCachedAllEntries) cc.logFn(map[string]interface{}{"contentType": "category", "method": "updateCacheForContentType", "clientMode": cc.clientMode, "size": len(allCategory)}, LogInfo, InfoCachedAllEntries)
} }
case ContentTypeProduct: case ContentTypeProduct:
@ -2553,7 +2553,7 @@ func updateCacheForContentType(ctx context.Context, results chan ContentTypeResu
} }
cc.cacheMutex.genericEntriesGcLock.Unlock() cc.cacheMutex.genericEntriesGcLock.Unlock()
if cc.logFn != nil && cc.logLevel <= LogInfo { if cc.logFn != nil && cc.logLevel <= LogInfo {
cc.logFn(map[string]interface{}{"contentType": "product", "method": "updateCacheForContentType", "size": len(allProduct)}, LogInfo, InfoCachedAllEntries) cc.logFn(map[string]interface{}{"contentType": "product", "method": "updateCacheForContentType", "clientMode": cc.clientMode, "size": len(allProduct)}, LogInfo, InfoCachedAllEntries)
} }
case assetWorkerType: case assetWorkerType:
@ -2563,7 +2563,7 @@ func updateCacheForContentType(ctx context.Context, results chan ContentTypeResu
} }
tempCache.assets = allAssets tempCache.assets = allAssets
if cc.logFn != nil && cc.logLevel <= LogInfo { if cc.logFn != nil && cc.logLevel <= LogInfo {
cc.logFn(map[string]interface{}{"contentType": "asset", "method": "updateCacheForContentType", "size": len(allAssets)}, LogInfo, InfoCachedAllAssets) cc.logFn(map[string]interface{}{"contentType": "asset", "method": "updateCacheForContentType", "clientMode": cc.clientMode, "size": len(allAssets)}, LogInfo, InfoCachedAllAssets)
} }
case tagWorkerType: case tagWorkerType:
@ -2573,7 +2573,7 @@ func updateCacheForContentType(ctx context.Context, results chan ContentTypeResu
} }
tempCache.tags = allTags tempCache.tags = allTags
if cc.logFn != nil && cc.logLevel <= LogInfo { if cc.logFn != nil && cc.logLevel <= LogInfo {
cc.logFn(map[string]interface{}{"contentType": "tag", "method": "updateCacheForContentType", "size": len(allTags)}, LogInfo, InfoCachedAllTags) cc.logFn(map[string]interface{}{"contentType": "tag", "method": "updateCacheForContentType", "clientMode": cc.clientMode, "size": len(allTags)}, LogInfo, InfoCachedAllTags)
} }
} }
return nil return nil
@ -2602,7 +2602,7 @@ func updateCacheForContentTypeAndEntity(ctx context.Context, cc *ContentfulClien
} }
} }
if cc.logFn != nil && cc.logLevel <= LogInfo && entityPayload == nil { if cc.logFn != nil && cc.logLevel <= LogInfo && entityPayload == nil {
cc.logFn(map[string]interface{}{"contentType": "Asset", "method": "updateCacheForContentTypeAndEntity", "entityID": entityID}, LogInfo, InfoUpdatedEntityCache) cc.logFn(map[string]interface{}{"contentType": "Asset", "method": "updateCacheForContentTypeAndEntity", "clientMode": cc.clientMode, "entityID": entityID}, LogInfo, InfoUpdatedEntityCache)
} }
case ContentTypeBrand: case ContentTypeBrand:
@ -2614,7 +2614,7 @@ func updateCacheForContentTypeAndEntity(ctx context.Context, cc *ContentfulClien
return err return err
} }
if cc.logFn != nil && cc.logLevel <= LogInfo && entityPayload == nil { if cc.logFn != nil && cc.logLevel <= LogInfo && entityPayload == nil {
cc.logFn(map[string]interface{}{"contentType": "brand", "method": "updateCacheForContentTypeAndEntity", "entityID": entityID}, LogInfo, InfoUpdatedEntityCache) cc.logFn(map[string]interface{}{"contentType": "brand", "method": "updateCacheForContentTypeAndEntity", "clientMode": cc.clientMode, "entityID": entityID}, LogInfo, InfoUpdatedEntityCache)
} }
case ContentTypeCategory: case ContentTypeCategory:
@ -2626,7 +2626,7 @@ func updateCacheForContentTypeAndEntity(ctx context.Context, cc *ContentfulClien
return err return err
} }
if cc.logFn != nil && cc.logLevel <= LogInfo && entityPayload == nil { if cc.logFn != nil && cc.logLevel <= LogInfo && entityPayload == nil {
cc.logFn(map[string]interface{}{"contentType": "category", "method": "updateCacheForContentTypeAndEntity", "entityID": entityID}, LogInfo, InfoUpdatedEntityCache) cc.logFn(map[string]interface{}{"contentType": "category", "method": "updateCacheForContentTypeAndEntity", "clientMode": cc.clientMode, "entityID": entityID}, LogInfo, InfoUpdatedEntityCache)
} }
case ContentTypeProduct: case ContentTypeProduct:
@ -2638,13 +2638,13 @@ func updateCacheForContentTypeAndEntity(ctx context.Context, cc *ContentfulClien
return err return err
} }
if cc.logFn != nil && cc.logLevel <= LogInfo && entityPayload == nil { if cc.logFn != nil && cc.logLevel <= LogInfo && entityPayload == nil {
cc.logFn(map[string]interface{}{"contentType": "product", "method": "updateCacheForContentTypeAndEntity", "entityID": entityID}, LogInfo, InfoUpdatedEntityCache) cc.logFn(map[string]interface{}{"contentType": "product", "method": "updateCacheForContentTypeAndEntity", "clientMode": cc.clientMode, "entityID": entityID}, LogInfo, InfoUpdatedEntityCache)
} }
} }
allTags, err := cc.getAllTags(ctx, false) allTags, err := cc.getAllTags(ctx, false)
if err != nil { if err != nil {
return fmt.Errorf("syncCache failed for tags: %s", err.Error()) return fmt.Errorf("syncCache failed for tags: %s, clientMode: %s", err.Error(), cc.clientMode)
} }
cc.cacheMutex.sharedDataGcLock.Lock() cc.cacheMutex.sharedDataGcLock.Lock()
cc.Cache.tags = allTags cc.Cache.tags = allTags

View File

@ -1,2 +1,2 @@
// gocontentful version: 1.1.4 // gocontentful version: 1.1.5
package testapi package testapi