mirror of
https://github.com/goharbor/harbor.git
synced 2024-11-29 21:54:13 +01:00
Merge pull request #797 from reasonerjt/dev
Read from DB to refresh catalog cache
This commit is contained in:
commit
bbdf576962
21
NOTICE
21
NOTICE
@ -1,11 +1,10 @@
|
|||||||
Harbor 0.1.0 Beta
|
NOTICE
|
||||||
|
|
||||||
Copyright (c) 2016 VMware, Inc. All Rights Reserved.
|
Harbor version 0.4.0 Beta
|
||||||
|
|
||||||
This product is licensed to you under the Apache License, Version 2.0 (the "License").
|
Copyright (c) 2016 VMware, Inc. All Rights Reserved.
|
||||||
You may not use this product except in compliance with the License.
|
|
||||||
|
This product is licensed to you under the Apache License, Version 2.0 (the "License"). You may not use this product except in compliance with the License.
|
||||||
This product may include a number of subcomponents with
|
|
||||||
separate copyright notices and license terms. Your use of the source
|
This product may include a number of subcomponents with separate copyright notices and license terms. Your use of these subcomponents is subject to the terms and conditions of the subcomponent's license, as noted in the LICENSE file.
|
||||||
code for the these subcomponents is subject to the terms and
|
|
||||||
conditions of the subcomponent's license, as noted in the LICENSE file.
|
|
||||||
|
@ -22,6 +22,7 @@ import (
|
|||||||
|
|
||||||
"github.com/vmware/harbor/dao"
|
"github.com/vmware/harbor/dao"
|
||||||
"github.com/vmware/harbor/models"
|
"github.com/vmware/harbor/models"
|
||||||
|
"github.com/vmware/harbor/service/cache"
|
||||||
"github.com/vmware/harbor/utils"
|
"github.com/vmware/harbor/utils"
|
||||||
"github.com/vmware/harbor/utils/log"
|
"github.com/vmware/harbor/utils/log"
|
||||||
)
|
)
|
||||||
@ -84,17 +85,12 @@ func (s *SearchAPI) Get() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
repos, err := dao.GetAllRepositories()
|
repositories, err := cache.GetRepoFromCache()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Errorf("failed to list repositories: %v", err)
|
log.Errorf("failed to list repositories: %v", err)
|
||||||
s.CustomAbort(http.StatusInternalServerError, "")
|
s.CustomAbort(http.StatusInternalServerError, "")
|
||||||
}
|
}
|
||||||
|
|
||||||
repositories := []string{}
|
|
||||||
for _, repo := range repos {
|
|
||||||
repositories = append(repositories, repo.Name)
|
|
||||||
}
|
|
||||||
|
|
||||||
sort.Strings(repositories)
|
sort.Strings(repositories)
|
||||||
repositoryResult := filterRepositories(repositories, projects, keyword)
|
repositoryResult := filterRepositories(repositories, projects, keyword)
|
||||||
result := &searchResult{Project: projectResult, Repository: repositoryResult}
|
result := &searchResult{Project: projectResult, Repository: repositoryResult}
|
||||||
|
57
service/cache/cache.go
vendored
57
service/cache/cache.go
vendored
@ -16,9 +16,9 @@
|
|||||||
package cache
|
package cache
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"os"
|
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
"github.com/vmware/harbor/dao"
|
||||||
"github.com/vmware/harbor/utils/log"
|
"github.com/vmware/harbor/utils/log"
|
||||||
"github.com/vmware/harbor/utils/registry"
|
"github.com/vmware/harbor/utils/registry"
|
||||||
"github.com/vmware/harbor/utils/registry/auth"
|
"github.com/vmware/harbor/utils/registry/auth"
|
||||||
@ -28,9 +28,7 @@ import (
|
|||||||
|
|
||||||
var (
|
var (
|
||||||
// Cache is the global cache in system.
|
// Cache is the global cache in system.
|
||||||
Cache cache.Cache
|
Cache cache.Cache
|
||||||
endpoint string
|
|
||||||
username string
|
|
||||||
)
|
)
|
||||||
|
|
||||||
const catalogKey string = "catalog"
|
const catalogKey string = "catalog"
|
||||||
@ -41,52 +39,17 @@ func init() {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
log.Errorf("Failed to initialize cache, error:%v", err)
|
log.Errorf("Failed to initialize cache, error:%v", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
endpoint = os.Getenv("REGISTRY_URL")
|
|
||||||
username = "admin"
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// RefreshCatalogCache calls registry's API to get repository list and write it to cache.
|
// RefreshCatalogCache calls registry's API to get repository list and write it to cache.
|
||||||
func RefreshCatalogCache() error {
|
func RefreshCatalogCache() error {
|
||||||
log.Debug("refreshing catalog cache...")
|
log.Debug("refreshing catalog cache...")
|
||||||
|
|
||||||
registryClient, err := NewRegistryClient(endpoint, true, username,
|
repos, err := getAllRepositories()
|
||||||
"registry", "catalog", "*")
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
Cache.Put(catalogKey, repos, 600*time.Second)
|
||||||
rs, err := registryClient.Catalog()
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
/*
|
|
||||||
repos := []string{}
|
|
||||||
|
|
||||||
for _, repo := range rs {
|
|
||||||
rc, ok := repositoryClients[repo]
|
|
||||||
if !ok {
|
|
||||||
rc, err = registry.NewRepositoryWithUsername(repo, endpoint, username)
|
|
||||||
if err != nil {
|
|
||||||
log.Errorf("error occurred while initializing repository client used by cache: %s %v", repo, err)
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
repositoryClients[repo] = rc
|
|
||||||
}
|
|
||||||
tags, err := rc.ListTag()
|
|
||||||
if err != nil {
|
|
||||||
log.Errorf("error occurred while list tag for %s: %v", repo, err)
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
|
|
||||||
if len(tags) != 0 {
|
|
||||||
repos = append(repos, repo)
|
|
||||||
log.Debugf("add %s to catalog cache", repo)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
|
|
||||||
Cache.Put(catalogKey, rs, 600*time.Second)
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -108,6 +71,18 @@ func GetRepoFromCache() ([]string, error) {
|
|||||||
return result.([]string), nil
|
return result.([]string), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func getAllRepositories() ([]string, error) {
|
||||||
|
var repos []string
|
||||||
|
rs, err := dao.GetAllRepositories()
|
||||||
|
if err != nil {
|
||||||
|
return repos, err
|
||||||
|
}
|
||||||
|
for _, e := range rs {
|
||||||
|
repos = append(repos, e.Name)
|
||||||
|
}
|
||||||
|
return repos, nil
|
||||||
|
}
|
||||||
|
|
||||||
// NewRegistryClient ...
|
// NewRegistryClient ...
|
||||||
func NewRegistryClient(endpoint string, insecure bool, username, scopeType, scopeName string,
|
func NewRegistryClient(endpoint string, insecure bool, username, scopeType, scopeName string,
|
||||||
scopeActions ...string) (*registry.Registry, error) {
|
scopeActions ...string) (*registry.Registry, error) {
|
||||||
|
Loading…
Reference in New Issue
Block a user