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

2678
LICENSE

File diff suppressed because it is too large Load Diff

21
NOTICE
View File

@ -1,11 +1,10 @@
Harbor 0.1.0 Beta
Copyright (c) 2016 VMware, Inc. All Rights Reserved.
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
code for the these subcomponents is subject to the terms and
conditions of the subcomponent's license, as noted in the LICENSE file.
NOTICE
Harbor version 0.4.0 Beta
Copyright (c) 2016 VMware, Inc. All Rights Reserved.
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 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/models"
"github.com/vmware/harbor/service/cache"
"github.com/vmware/harbor/utils"
"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 {
log.Errorf("failed to list repositories: %v", err)
s.CustomAbort(http.StatusInternalServerError, "")
}
repositories := []string{}
for _, repo := range repos {
repositories = append(repositories, repo.Name)
}
sort.Strings(repositories)
repositoryResult := filterRepositories(repositories, projects, keyword)
result := &searchResult{Project: projectResult, Repository: repositoryResult}

View File

@ -16,9 +16,9 @@
package cache
import (
"os"
"time"
"github.com/vmware/harbor/dao"
"github.com/vmware/harbor/utils/log"
"github.com/vmware/harbor/utils/registry"
"github.com/vmware/harbor/utils/registry/auth"
@ -28,9 +28,7 @@ import (
var (
// Cache is the global cache in system.
Cache cache.Cache
endpoint string
username string
Cache cache.Cache
)
const catalogKey string = "catalog"
@ -41,52 +39,17 @@ func init() {
if err != nil {
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.
func RefreshCatalogCache() error {
log.Debug("refreshing catalog cache...")
registryClient, err := NewRegistryClient(endpoint, true, username,
"registry", "catalog", "*")
repos, err := getAllRepositories()
if err != nil {
return err
}
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)
Cache.Put(catalogKey, repos, 600*time.Second)
return nil
}
@ -108,6 +71,18 @@ func GetRepoFromCache() ([]string, error) {
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 ...
func NewRegistryClient(endpoint string, insecure bool, username, scopeType, scopeName string,
scopeActions ...string) (*registry.Registry, error) {