Check for nil RPC in listing (#13917)

Fixes #13915
This commit is contained in:
Klaus Post 2021-12-15 09:19:11 -08:00 committed by GitHub
parent 5f7e6d03ff
commit aca6dfbd60
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 17 additions and 7 deletions

View File

@ -199,13 +199,15 @@ func (z *erasureServerPools) listPath(ctx context.Context, o *listPathOptions) (
entries.truncate(0) entries.truncate(0)
go func() { go func() {
rpc := globalNotificationSys.restClientFromHash(o.Bucket) rpc := globalNotificationSys.restClientFromHash(o.Bucket)
ctx, cancel := context.WithTimeout(GlobalContext, 5*time.Second) if rpc != nil {
defer cancel() ctx, cancel := context.WithTimeout(GlobalContext, 5*time.Second)
c, err := rpc.GetMetacacheListing(ctx, *o) defer cancel()
if err == nil { c, err := rpc.GetMetacacheListing(ctx, *o)
c.error = "no longer used" if err == nil {
c.status = scanStateError c.error = "no longer used"
rpc.UpdateMetacacheListing(ctx, *c) c.status = scanStateError
rpc.UpdateMetacacheListing(ctx, *c)
}
} }
}() }()
o.ID = "" o.ID = ""

View File

@ -720,6 +720,11 @@ func (client *peerRESTClient) GetLocalDiskIDs(ctx context.Context) (diskIDs []st
// GetMetacacheListing - get a new or existing metacache. // GetMetacacheListing - get a new or existing metacache.
func (client *peerRESTClient) GetMetacacheListing(ctx context.Context, o listPathOptions) (*metacache, error) { func (client *peerRESTClient) GetMetacacheListing(ctx context.Context, o listPathOptions) (*metacache, error) {
if client == nil {
resp := localMetacacheMgr.getBucket(ctx, o.Bucket).findCache(o)
return &resp, nil
}
var reader bytes.Buffer var reader bytes.Buffer
err := gob.NewEncoder(&reader).Encode(o) err := gob.NewEncoder(&reader).Encode(o)
if err != nil { if err != nil {
@ -737,6 +742,9 @@ func (client *peerRESTClient) GetMetacacheListing(ctx context.Context, o listPat
// UpdateMetacacheListing - update an existing metacache it will unconditionally be updated to the new state. // UpdateMetacacheListing - update an existing metacache it will unconditionally be updated to the new state.
func (client *peerRESTClient) UpdateMetacacheListing(ctx context.Context, m metacache) (metacache, error) { func (client *peerRESTClient) UpdateMetacacheListing(ctx context.Context, m metacache) (metacache, error) {
if client == nil {
return localMetacacheMgr.updateCacheEntry(m)
}
b, err := m.MarshalMsg(nil) b, err := m.MarshalMsg(nil)
if err != nil { if err != nil {
return m, err return m, err