mirror of
				https://gitee.com/gitea/gitea
				synced 2025-11-04 16:40:24 +08:00 
			
		
		
		
	Fix nodeinfo caching and prevent NPE if cache non-existent (#19721)
Extract from #19703 Signed-off-by: Andrew Thornton <art27@cantab.net>
This commit is contained in:
		@@ -30,8 +30,11 @@ func NodeInfo(ctx *context.APIContext) {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	nodeInfoUsage := structs.NodeInfoUsage{}
 | 
						nodeInfoUsage := structs.NodeInfoUsage{}
 | 
				
			||||||
	if setting.Federation.ShareUserStatistics {
 | 
						if setting.Federation.ShareUserStatistics {
 | 
				
			||||||
		info, ok := ctx.Cache.Get(cacheKeyNodeInfoUsage).(structs.NodeInfoUsage)
 | 
							cached := false
 | 
				
			||||||
		if !ok {
 | 
							if setting.CacheService.Enabled {
 | 
				
			||||||
 | 
								nodeInfoUsage, cached = ctx.Cache.Get(cacheKeyNodeInfoUsage).(structs.NodeInfoUsage)
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							if !cached {
 | 
				
			||||||
			usersTotal := int(user_model.CountUsers(nil))
 | 
								usersTotal := int(user_model.CountUsers(nil))
 | 
				
			||||||
			now := time.Now()
 | 
								now := time.Now()
 | 
				
			||||||
			timeOneMonthAgo := now.AddDate(0, -1, 0).Unix()
 | 
								timeOneMonthAgo := now.AddDate(0, -1, 0).Unix()
 | 
				
			||||||
@@ -42,7 +45,7 @@ func NodeInfo(ctx *context.APIContext) {
 | 
				
			|||||||
			allIssues, _ := models.CountIssues(&models.IssuesOptions{})
 | 
								allIssues, _ := models.CountIssues(&models.IssuesOptions{})
 | 
				
			||||||
			allComments, _ := models.CountComments(&models.FindCommentsOptions{})
 | 
								allComments, _ := models.CountComments(&models.FindCommentsOptions{})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			info = structs.NodeInfoUsage{
 | 
								nodeInfoUsage = structs.NodeInfoUsage{
 | 
				
			||||||
				Users: structs.NodeInfoUsageUsers{
 | 
									Users: structs.NodeInfoUsageUsers{
 | 
				
			||||||
					Total:          usersTotal,
 | 
										Total:          usersTotal,
 | 
				
			||||||
					ActiveMonth:    usersActiveMonth,
 | 
										ActiveMonth:    usersActiveMonth,
 | 
				
			||||||
@@ -51,12 +54,13 @@ func NodeInfo(ctx *context.APIContext) {
 | 
				
			|||||||
				LocalPosts:    int(allIssues),
 | 
									LocalPosts:    int(allIssues),
 | 
				
			||||||
				LocalComments: int(allComments),
 | 
									LocalComments: int(allComments),
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			if err := ctx.Cache.Put(cacheKeyNodeInfoUsage, nodeInfoUsage, 180); err != nil {
 | 
								if setting.CacheService.Enabled {
 | 
				
			||||||
				ctx.InternalServerError(err)
 | 
									if err := ctx.Cache.Put(cacheKeyNodeInfoUsage, nodeInfoUsage, 180); err != nil {
 | 
				
			||||||
				return
 | 
										ctx.InternalServerError(err)
 | 
				
			||||||
 | 
										return
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		nodeInfoUsage = info
 | 
					 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	nodeInfo := &structs.NodeInfo{
 | 
						nodeInfo := &structs.NodeInfo{
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user