mirror of
https://github.com/gohugoio/hugo.git
synced 2024-11-07 20:30:36 -05:00
parent
19937a20ad
commit
758a876f90
2 changed files with 16 additions and 8 deletions
|
@ -93,7 +93,8 @@ type pageMap struct {
|
||||||
// Used for simple page lookups by name, e.g. "mypage.md" or "mypage".
|
// Used for simple page lookups by name, e.g. "mypage.md" or "mypage".
|
||||||
pageReverseIndex *contentTreeReverseIndex
|
pageReverseIndex *contentTreeReverseIndex
|
||||||
|
|
||||||
cachePages *dynacache.Partition[string, page.Pages]
|
cachePages1 *dynacache.Partition[string, page.Pages]
|
||||||
|
cachePages2 *dynacache.Partition[string, page.Pages]
|
||||||
cacheResources *dynacache.Partition[string, resource.Resources]
|
cacheResources *dynacache.Partition[string, resource.Resources]
|
||||||
cacheContentRendered *dynacache.Partition[string, *resources.StaleValue[contentSummary]]
|
cacheContentRendered *dynacache.Partition[string, *resources.StaleValue[contentSummary]]
|
||||||
cacheContentPlain *dynacache.Partition[string, *resources.StaleValue[contentPlainPlainWords]]
|
cacheContentPlain *dynacache.Partition[string, *resources.StaleValue[contentPlainPlainWords]]
|
||||||
|
@ -324,15 +325,19 @@ func (m *pageMap) forEeachPageIncludingBundledPages(include predicate.P[*pageSta
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *pageMap) getOrCreatePagesFromCache(
|
func (m *pageMap) getOrCreatePagesFromCache(
|
||||||
|
cache *dynacache.Partition[string, page.Pages],
|
||||||
key string, create func(string) (page.Pages, error),
|
key string, create func(string) (page.Pages, error),
|
||||||
) (page.Pages, error) {
|
) (page.Pages, error) {
|
||||||
return m.cachePages.GetOrCreate(key, create)
|
if cache == nil {
|
||||||
|
cache = m.cachePages1
|
||||||
|
}
|
||||||
|
return cache.GetOrCreate(key, create)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *pageMap) getPagesInSection(q pageMapQueryPagesInSection) page.Pages {
|
func (m *pageMap) getPagesInSection(q pageMapQueryPagesInSection) page.Pages {
|
||||||
cacheKey := q.Key()
|
cacheKey := q.Key()
|
||||||
|
|
||||||
pages, err := m.getOrCreatePagesFromCache(cacheKey, func(string) (page.Pages, error) {
|
pages, err := m.getOrCreatePagesFromCache(nil, cacheKey, func(string) (page.Pages, error) {
|
||||||
prefix := paths.AddTrailingSlash(q.Path)
|
prefix := paths.AddTrailingSlash(q.Path)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
|
@ -397,7 +402,7 @@ func (m *pageMap) getPagesInSection(q pageMapQueryPagesInSection) page.Pages {
|
||||||
func (m *pageMap) getPagesWithTerm(q pageMapQueryPagesBelowPath) page.Pages {
|
func (m *pageMap) getPagesWithTerm(q pageMapQueryPagesBelowPath) page.Pages {
|
||||||
key := q.Key()
|
key := q.Key()
|
||||||
|
|
||||||
v, err := m.cachePages.GetOrCreate(key, func(string) (page.Pages, error) {
|
v, err := m.cachePages1.GetOrCreate(key, func(string) (page.Pages, error) {
|
||||||
var pas page.Pages
|
var pas page.Pages
|
||||||
include := q.Include
|
include := q.Include
|
||||||
if include == nil {
|
if include == nil {
|
||||||
|
@ -434,7 +439,7 @@ func (m *pageMap) getPagesWithTerm(q pageMapQueryPagesBelowPath) page.Pages {
|
||||||
func (m *pageMap) getTermsForPageInTaxonomy(path, taxonomy string) page.Pages {
|
func (m *pageMap) getTermsForPageInTaxonomy(path, taxonomy string) page.Pages {
|
||||||
prefix := paths.AddLeadingSlash(taxonomy)
|
prefix := paths.AddLeadingSlash(taxonomy)
|
||||||
|
|
||||||
v, err := m.cachePages.GetOrCreate(prefix+path, func(string) (page.Pages, error) {
|
v, err := m.cachePages1.GetOrCreate(prefix+path, func(string) (page.Pages, error) {
|
||||||
var pas page.Pages
|
var pas page.Pages
|
||||||
|
|
||||||
err := m.treeTaxonomyEntries.WalkPrefix(
|
err := m.treeTaxonomyEntries.WalkPrefix(
|
||||||
|
@ -861,7 +866,8 @@ func newPageMap(i int, s *Site, mcache *dynacache.Cache, pageTrees *pageTrees) *
|
||||||
|
|
||||||
m = &pageMap{
|
m = &pageMap{
|
||||||
pageTrees: pageTrees.Shape(0, i),
|
pageTrees: pageTrees.Shape(0, i),
|
||||||
cachePages: dynacache.GetOrCreatePartition[string, page.Pages](mcache, fmt.Sprintf("/pags/%d", i), dynacache.OptionsPartition{Weight: 10, ClearWhen: dynacache.ClearOnRebuild}),
|
cachePages1: dynacache.GetOrCreatePartition[string, page.Pages](mcache, fmt.Sprintf("/pag1/%d", i), dynacache.OptionsPartition{Weight: 10, ClearWhen: dynacache.ClearOnRebuild}),
|
||||||
|
cachePages2: dynacache.GetOrCreatePartition[string, page.Pages](mcache, fmt.Sprintf("/pag2/%d", i), dynacache.OptionsPartition{Weight: 10, ClearWhen: dynacache.ClearOnRebuild}),
|
||||||
cacheResources: dynacache.GetOrCreatePartition[string, resource.Resources](mcache, fmt.Sprintf("/ress/%d", i), dynacache.OptionsPartition{Weight: 60, ClearWhen: dynacache.ClearOnRebuild}),
|
cacheResources: dynacache.GetOrCreatePartition[string, resource.Resources](mcache, fmt.Sprintf("/ress/%d", i), dynacache.OptionsPartition{Weight: 60, ClearWhen: dynacache.ClearOnRebuild}),
|
||||||
cacheContentRendered: dynacache.GetOrCreatePartition[string, *resources.StaleValue[contentSummary]](mcache, fmt.Sprintf("/cont/ren/%d", i), dynacache.OptionsPartition{Weight: 70, ClearWhen: dynacache.ClearOnChange}),
|
cacheContentRendered: dynacache.GetOrCreatePartition[string, *resources.StaleValue[contentSummary]](mcache, fmt.Sprintf("/cont/ren/%d", i), dynacache.OptionsPartition{Weight: 70, ClearWhen: dynacache.ClearOnChange}),
|
||||||
cacheContentPlain: dynacache.GetOrCreatePartition[string, *resources.StaleValue[contentPlainPlainWords]](mcache, fmt.Sprintf("/cont/pla/%d", i), dynacache.OptionsPartition{Weight: 70, ClearWhen: dynacache.ClearOnChange}),
|
cacheContentPlain: dynacache.GetOrCreatePartition[string, *resources.StaleValue[contentPlainPlainWords]](mcache, fmt.Sprintf("/cont/pla/%d", i), dynacache.OptionsPartition{Weight: 70, ClearWhen: dynacache.ClearOnChange}),
|
||||||
|
|
|
@ -380,7 +380,9 @@ func (p *pageState) TranslationKey() string {
|
||||||
// AllTranslations returns all translations, including the current Page.
|
// AllTranslations returns all translations, including the current Page.
|
||||||
func (p *pageState) AllTranslations() page.Pages {
|
func (p *pageState) AllTranslations() page.Pages {
|
||||||
key := p.Path() + "/" + "translations-all"
|
key := p.Path() + "/" + "translations-all"
|
||||||
pages, err := p.s.pageMap.getOrCreatePagesFromCache(key, func(string) (page.Pages, error) {
|
// This is called from Translations, so we need to use a different partition, cachePages2,
|
||||||
|
// to avoid potential deadlocks.
|
||||||
|
pages, err := p.s.pageMap.getOrCreatePagesFromCache(p.s.pageMap.cachePages2, key, func(string) (page.Pages, error) {
|
||||||
if p.m.pageConfig.TranslationKey != "" {
|
if p.m.pageConfig.TranslationKey != "" {
|
||||||
// translationKey set by user.
|
// translationKey set by user.
|
||||||
pas, _ := p.s.h.translationKeyPages.Get(p.m.pageConfig.TranslationKey)
|
pas, _ := p.s.h.translationKeyPages.Get(p.m.pageConfig.TranslationKey)
|
||||||
|
@ -413,7 +415,7 @@ func (p *pageState) AllTranslations() page.Pages {
|
||||||
// Translations returns the translations excluding the current Page.
|
// Translations returns the translations excluding the current Page.
|
||||||
func (p *pageState) Translations() page.Pages {
|
func (p *pageState) Translations() page.Pages {
|
||||||
key := p.Path() + "/" + "translations"
|
key := p.Path() + "/" + "translations"
|
||||||
pages, err := p.s.pageMap.getOrCreatePagesFromCache(key, func(string) (page.Pages, error) {
|
pages, err := p.s.pageMap.getOrCreatePagesFromCache(nil, key, func(string) (page.Pages, error) {
|
||||||
var pas page.Pages
|
var pas page.Pages
|
||||||
for _, pp := range p.AllTranslations() {
|
for _, pp := range p.AllTranslations() {
|
||||||
if !pp.Eq(p) {
|
if !pp.Eq(p) {
|
||||||
|
|
Loading…
Reference in a new issue