Merge pull request #797 from reasonerjt/dev

Read from DB to refresh catalog cache
This commit is contained in:
Daniel Jiang 2016-09-13 18:51:10 +08:00 committed by GitHub
commit bbdf576962
4 changed files with 1325 additions and 1439 deletions

826
LICENSE

File diff suppressed because it is too large Load Diff

13
NOTICE
View File

@ -1,11 +1,10 @@
Harbor 0.1.0 Beta NOTICE
Harbor version 0.4.0 Beta
Copyright (c) 2016 VMware, Inc. All Rights Reserved. Copyright (c) 2016 VMware, Inc. All Rights Reserved.
This product is licensed to you under the Apache License, Version 2.0 (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.
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 these subcomponents is subject to the terms and conditions of the subcomponent's license, as noted in the LICENSE file.
This product may include a number of subcomponents with
separate copyright notices and license terms. Your use of the source
code for the these subcomponents is subject to the terms and
conditions of the subcomponent's license, as noted in the LICENSE file.

View 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}

View File

@ -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"
@ -29,8 +29,6 @@ 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) {