1251c01b73
Previously the SupportsBlocking option was specified by a method on the type, and all the other options were specified from RegisterOptions. This change moves RegisterOptions to a method on the type, and moves SupportsBlocking into the options struct. Currently there are only 2 cache-types. So all cache-types can implement this method by embedding a struct with those predefined values. In the future if a cache type needs to be registered more than once with different options it can remove the embedded type and implement the method in a way that allows for paramaterization.
37 lines
1.1 KiB
Go
37 lines
1.1 KiB
Go
package cachetype
|
|
|
|
import (
|
|
"time"
|
|
|
|
"github.com/hashicorp/consul/agent/cache"
|
|
)
|
|
|
|
// RegisterOptionsBlockingRefresh can be embedded into a struct to implement
|
|
// part of the agent/cache.Type interface.
|
|
// When embedded into a struct it identifies the cache type as one which
|
|
// supports blocking, and uses refresh to keep the cache fresh.
|
|
type RegisterOptionsBlockingRefresh struct{}
|
|
|
|
func (r RegisterOptionsBlockingRefresh) RegisterOptions() cache.RegisterOptions {
|
|
return cache.RegisterOptions{
|
|
// Maintain a blocking query, retry dropped connections quickly
|
|
Refresh: true,
|
|
SupportsBlocking: true,
|
|
RefreshTimer: 0 * time.Second,
|
|
RefreshTimeout: 10 * time.Minute,
|
|
}
|
|
}
|
|
|
|
// RegisterOptionsNoRefresh can be embedded into a struct to implement
|
|
// part of the agent/cache.Type interface.
|
|
// When embedded into a struct it identifies the cache type as one which
|
|
// does not support blocking, and should not be refreshed.
|
|
type RegisterOptionsNoRefresh struct{}
|
|
|
|
func (r RegisterOptionsNoRefresh) RegisterOptions() cache.RegisterOptions {
|
|
return cache.RegisterOptions{
|
|
Refresh: false,
|
|
SupportsBlocking: false,
|
|
}
|
|
}
|