From b55a5f7c0922db1b4fa4d2d6816f346f69c52d48 Mon Sep 17 00:00:00 2001 From: Andrey Golev Date: Wed, 11 Mar 2020 16:08:32 +0200 Subject: [PATCH] BuntDB with delete executions and fixed tests --- dkron/agent.go | 4 +- dkron/api.go | 4 +- dkron/job.go | 4 +- dkron/job_test.go | 14 +- dkron/queries_test.go | 4 +- dkron/storage.go | 2 - dkron/store.go | 277 ++++++++-------------- dkron/store_test.go | 49 ++-- go.mod | 3 +- go.sum | 110 ++------- website/content/basics/getting-started.md | 2 +- website/content/usage/storage.md | 2 +- 12 files changed, 148 insertions(+), 327 deletions(-) diff --git a/dkron/agent.go b/dkron/agent.go index b283d7a82..d9a318e4f 100644 --- a/dkron/agent.go +++ b/dkron/agent.go @@ -276,7 +276,7 @@ func (a *Agent) setupRaft() error { // Create the BoltDB backend s, err := raftboltdb.NewBoltStore(filepath.Join(a.config.DataDir, "raft", "raft.db")) if err != nil { - return fmt.Errorf("error creating new badger store: %s", err) + return fmt.Errorf("error creating new raft store: %s", err) } a.raftStore = s stableStore = s @@ -455,7 +455,7 @@ func (a *Agent) StartServer() { } if a.Store == nil { - s, err := NewStore(filepath.Join(a.config.DataDir, a.config.NodeName)) + s, err := NewStore(a) if err != nil { log.WithError(err).Fatal("dkron: Error initializing store") } diff --git a/dkron/api.go b/dkron/api.go index 526a380d1..46eb1f20d 100644 --- a/dkron/api.go +++ b/dkron/api.go @@ -4,10 +4,10 @@ import ( "fmt" "net/http" - "github.com/dgraph-io/badger/v2" "github.com/gin-contrib/expvar" "github.com/gin-gonic/gin" "github.com/sirupsen/logrus" + "github.com/tidwall/buntdb" status "google.golang.org/grpc/status" ) @@ -224,7 +224,7 @@ func (h *HTTPTransport) executionsHandler(c *gin.Context) { executions, err := h.agent.Store.GetExecutions(job.Name) if err != nil { - if err == badger.ErrKeyNotFound { + if err == buntdb.ErrNotFound { renderJSON(c, http.StatusOK, &[]Execution{}) return } diff --git a/dkron/job.go b/dkron/job.go index 3c8a8fdcf..33ce7fbeb 100644 --- a/dkron/job.go +++ b/dkron/job.go @@ -6,13 +6,13 @@ import ( "regexp" "time" - "github.com/dgraph-io/badger/v2" "github.com/distribworks/dkron/v2/extcron" "github.com/distribworks/dkron/v2/ntime" "github.com/distribworks/dkron/v2/plugin" proto "github.com/distribworks/dkron/v2/plugin/types" "github.com/golang/protobuf/ptypes" "github.com/sirupsen/logrus" + "github.com/tidwall/buntdb" ) const ( @@ -297,7 +297,7 @@ func (j *Job) GetParent(store *Store) (*Job, error) { parentJob, err := store.GetJob(j.ParentJob, nil) if err != nil { - if err == badger.ErrKeyNotFound { + if err == buntdb.ErrNotFound { return nil, ErrParentJobNotFound } return nil, err diff --git a/dkron/job_test.go b/dkron/job_test.go index fe343c60f..2d594b4ce 100644 --- a/dkron/job_test.go +++ b/dkron/job_test.go @@ -1,8 +1,6 @@ package dkron import ( - "io/ioutil" - "os" "testing" "github.com/distribworks/dkron/v2/plugin" @@ -12,11 +10,7 @@ import ( ) func TestJobGetParent(t *testing.T) { - dir, err := ioutil.TempDir("", "dkron-test") - require.NoError(t, err) - defer os.RemoveAll(dir) - - s, err := NewStore(dir) + s, err := NewStore(nil) defer s.Shutdown() require.NoError(t, err) @@ -105,11 +99,7 @@ func TestToProto(t *testing.T) { } func Test_isRunnable(t *testing.T) { - dir, err := ioutil.TempDir("", "dkron-test") - require.NoError(t, err) - defer os.RemoveAll(dir) - - s, err := NewStore(dir) + s, err := NewStore(nil) a := &Agent{ Store: s, } diff --git a/dkron/queries_test.go b/dkron/queries_test.go index 11f090dfe..44e089086 100644 --- a/dkron/queries_test.go +++ b/dkron/queries_test.go @@ -7,10 +7,10 @@ import ( "testing" "time" - "github.com/dgraph-io/badger/v2" "github.com/hashicorp/serf/testutil" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" + "github.com/tidwall/buntdb" ) func TestRunQuery(t *testing.T) { @@ -37,7 +37,7 @@ func TestRunQuery(t *testing.T) { // Test error with no job _, err = a.RunQuery("foo", &Execution{}) - assert.True(t, errors.Is(err, badger.ErrKeyNotFound)) + assert.True(t, errors.Is(err, buntdb.ErrNotFound)) j1 := &Job{ Name: "test_job", diff --git a/dkron/storage.go b/dkron/storage.go index 89e192768..557cf892e 100644 --- a/dkron/storage.go +++ b/dkron/storage.go @@ -10,9 +10,7 @@ type Storage interface { SetJob(job *Job, copyDependentJobs bool) error DeleteJob(name string) (*Job, error) SetExecution(execution *Execution) (string, error) - DeleteExecutions(jobName string) error SetExecutionDone(execution *Execution) (bool, error) - GetJobs(options *JobOptions) ([]*Job, error) GetJob(name string, options *JobOptions) (*Job, error) GetExecutions(jobName string) ([]*Execution, error) diff --git a/dkron/store.go b/dkron/store.go index 0ed834984..9ec7df764 100644 --- a/dkron/store.go +++ b/dkron/store.go @@ -5,24 +5,19 @@ import ( "errors" "fmt" "io" - "os" "sort" + "strings" "sync" - "time" - "github.com/dgraph-io/badger/v2" - "github.com/dgraph-io/badger/v2/options" dkronpb "github.com/distribworks/dkron/v2/plugin/types" "github.com/golang/protobuf/proto" "github.com/sirupsen/logrus" + "github.com/tidwall/buntdb" ) const ( // MaxExecutions to maintain in the storage MaxExecutions = 100 - - defaultGCInterval = 5 * time.Minute - defaultGCDiscardRatio = 0.7 ) var ( @@ -32,9 +27,10 @@ var ( // Store is the local implementation of the Storage interface. // It gives dkron the ability to manipulate its embedded storage -// BadgerDB. +// BuntDB. type Store struct { - db *badger.DB + agent *Agent + db *buntdb.DB lock *sync.Mutex // for closed bool } @@ -44,69 +40,30 @@ type JobOptions struct { Metadata map[string]string `json:"tags"` } -// NewStore creates a new Storage instance. -func NewStore(dir string) (*Store, error) { - dirExists, err := exists(dir) - if err != nil { - return nil, fmt.Errorf("Ivalid directory %s: %w", dir, err) - } - - // Remove previous existing Badger dir as we don't reuse data there - if dirExists { - if err := os.RemoveAll(dir); err != nil { - return nil, fmt.Errorf("error deleting directory %s: %w", dir, err) - } - } - - // Try to create the data directory - if err := os.MkdirAll(dir, 0700); err != nil { - return nil, fmt.Errorf("Error creating directory %s: %w", dir, err) - } - - opts := badger.DefaultOptions(dir). - WithValueLogLoadingMode(options.FileIO). - WithLogger(log) +type kv struct { + Key string + Value []byte +} - db, err := badger.Open(opts) +// NewStore creates a new Storage instance. +func NewStore(a *Agent) (*Store, error) { + db, err := buntdb.Open(":memory:") if err != nil { return nil, err } store := &Store{ - db: db, - lock: &sync.Mutex{}, + db: db, + agent: a, + lock: &sync.Mutex{}, } - go store.runGcLoop() - return store, nil } -func (s *Store) runGcLoop() { - ticker := time.NewTicker(defaultGCInterval) - defer ticker.Stop() - for range ticker.C { - s.lock.Lock() - closed := s.closed - s.lock.Unlock() - if closed { - break - } - - // One call would only result in removal of at max one log file. - // As an optimization, you could also immediately re-run it whenever it returns nil error - //(indicating a successful value log GC), as shown below. - again: - err := s.db.RunValueLogGC(defaultGCDiscardRatio) - if err == nil { - goto again - } - } -} - -func (s *Store) setJobTxnFunc(pbj *dkronpb.Job) func(txn *badger.Txn) error { - return func(txn *badger.Txn) error { - jobKey := fmt.Sprintf("jobs/%s", pbj.Name) +func (s *Store) setJobTxFunc(pbj *dkronpb.Job) func(tx *buntdb.Tx) error { + return func(tx *buntdb.Tx) error { + jobKey := fmt.Sprintf("jobs:%s", pbj.Name) jb, err := proto.Marshal(pbj) if err != nil { @@ -114,7 +71,7 @@ func (s *Store) setJobTxnFunc(pbj *dkronpb.Job) func(txn *badger.Txn) error { } log.WithField("job", pbj.Name).Debug("store: Setting job") - if err := txn.Set([]byte(jobKey), jb); err != nil { + if _, _, err := tx.Set(jobKey, string(jb), nil); err != nil { return err } @@ -122,11 +79,6 @@ func (s *Store) setJobTxnFunc(pbj *dkronpb.Job) func(txn *badger.Txn) error { } } -// DB is the getter for the BadgerDB instance -func (s *Store) DB() *badger.DB { - return s.db -} - // SetJob stores a job in the storage func (s *Store) SetJob(job *Job, copyDependentJobs bool) error { var pbej dkronpb.Job @@ -143,10 +95,10 @@ func (s *Store) SetJob(job *Job, copyDependentJobs bool) error { } } - err := s.db.Update(func(txn *badger.Txn) error { + err := s.db.Update(func(tx *buntdb.Tx) error { // Get if the requested job already exist - err := s.getJobTxnFunc(job.Name, &pbej)(txn) - if err != nil && err != badger.ErrKeyNotFound { + err := s.getJobTxFunc(job.Name, &pbej)(tx) + if err != nil && err != buntdb.ErrNotFound { return err } @@ -180,7 +132,7 @@ func (s *Store) SetJob(job *Job, copyDependentJobs bool) error { } pbj := job.ToProto() - s.setJobTxnFunc(pbj)(txn) + s.setJobTxFunc(pbj)(tx) return nil }) if err != nil { @@ -252,11 +204,11 @@ func (s *Store) addToParent(child *Job) error { // SetExecutionDone saves the execution and updates the job with the corresponding // results func (s *Store) SetExecutionDone(execution *Execution) (bool, error) { - err := s.db.Update(func(txn *badger.Txn) error { + err := s.db.Update(func(tx *buntdb.Tx) error { // Load the job from the store var pbj dkronpb.Job - if err := s.getJobTxnFunc(execution.JobName, &pbj)(txn); err != nil { - if err == badger.ErrKeyNotFound { + if err := s.getJobTxFunc(execution.JobName, &pbj)(tx); err != nil { + if err == buntdb.ErrNotFound { log.Warning(ErrExecutionDoneForDeletedJob) return ErrExecutionDoneForDeletedJob } @@ -268,7 +220,7 @@ func (s *Store) SetExecutionDone(execution *Execution) (bool, error) { // Save the execution to store pbe := execution.ToProto() - if err := s.setExecutionTxnFunc(key, pbe)(txn); err != nil { + if err := s.setExecutionTxFunc(key, pbe)(tx); err != nil { return err } @@ -282,13 +234,13 @@ func (s *Store) SetExecutionDone(execution *Execution) (bool, error) { pbj.ErrorCount++ } - status, err := s.computeStatus(pbj.Name, pbe.Group, txn) + status, err := s.computeStatus(pbj.Name, pbe.Group, tx) if err != nil { return err } pbj.Status = status - if err := s.setJobTxnFunc(&pbj)(txn); err != nil { + if err := s.setJobTxFunc(&pbj)(tx); err != nil { return err } @@ -320,32 +272,21 @@ func (s *Store) jobHasMetadata(job *Job, metadata map[string]string) bool { func (s *Store) GetJobs(options *JobOptions) ([]*Job, error) { jobs := make([]*Job, 0) - err := s.db.View(func(txn *badger.Txn) error { - it := txn.NewIterator(badger.DefaultIteratorOptions) - defer it.Close() - prefix := []byte("jobs") - for it.Seek(prefix); it.ValidForPrefix(prefix); it.Next() { - item := it.Item() - v, err := item.ValueCopy(nil) - if err != nil { - return err - } + prefix := "jobs:" + err := s.db.View(func(tx *buntdb.Tx) error { + err := tx.Ascend("", func(key, value string) bool { + if strings.HasPrefix(key, prefix) { + var pbj dkronpb.Job + _ = proto.Unmarshal([]byte(value), &pbj) + job := NewJobFromProto(&pbj) - var pbj dkronpb.Job - if err := proto.Unmarshal(v, &pbj); err != nil { - return err - } - job := NewJobFromProto(&pbj) - - if options != nil { - if options.Metadata != nil && len(options.Metadata) > 0 && !s.jobHasMetadata(job, options.Metadata) { - continue + if options == nil || (options.Metadata == nil || len(options.Metadata) == 0 || s.jobHasMetadata(job, options.Metadata)) { + jobs = append(jobs, job) } } - - jobs = append(jobs, job) - } - return nil + return true + }) + return err }) return jobs, err @@ -355,7 +296,7 @@ func (s *Store) GetJobs(options *JobOptions) ([]*Job, error) { func (s *Store) GetJob(name string, options *JobOptions) (*Job, error) { var pbj dkronpb.Job - err := s.db.View(s.getJobTxnFunc(name, &pbj)) + err := s.db.View(s.getJobTxFunc(name, &pbj)) if err != nil { return nil, err } @@ -366,19 +307,14 @@ func (s *Store) GetJob(name string, options *JobOptions) (*Job, error) { } // This will allow reuse this code to avoid nesting transactions -func (s *Store) getJobTxnFunc(name string, pbj *dkronpb.Job) func(txn *badger.Txn) error { - return func(txn *badger.Txn) error { - item, err := txn.Get([]byte("jobs/" + name)) +func (s *Store) getJobTxFunc(name string, pbj *dkronpb.Job) func(tx *buntdb.Tx) error { + return func(tx *buntdb.Tx) error { + item, err := tx.Get("jobs:" + name) if err != nil { return err } - res, err := item.ValueCopy(nil) - if err != nil { - return err - } - - if err := proto.Unmarshal(res, pbj); err != nil { + if err := proto.Unmarshal([]byte(item), pbj); err != nil { return err } @@ -394,10 +330,10 @@ func (s *Store) getJobTxnFunc(name string, pbj *dkronpb.Job) func(txn *badger.Tx // all its executions and references to it. func (s *Store) DeleteJob(name string) (*Job, error) { var job *Job - err := s.db.Update(func(txn *badger.Txn) error { + err := s.db.Update(func(tx *buntdb.Tx) error { // Get the job var pbj dkronpb.Job - if err := s.getJobTxnFunc(name, &pbj)(txn); err != nil { + if err := s.getJobTxFunc(name, &pbj)(tx); err != nil { return err } // Check if the job has dependent jobs @@ -408,11 +344,12 @@ func (s *Store) DeleteJob(name string) (*Job, error) { } job = NewJobFromProto(&pbj) - if err := s.DeleteExecutions(name); err != nil { + if err := s.deleteExecutionsTxFunc(name)(tx); err != nil { return err } - return txn.Delete([]byte("jobs/" + name)) + _, err := tx.Delete("jobs:" + name) + return err }) if err != nil { return nil, err @@ -440,50 +377,32 @@ func (s *Store) GetExecutions(jobName string) ([]*Execution, error) { return s.unmarshalExecutions(kvs) } -type kv struct { - Key string - Value []byte -} - func (s *Store) list(prefix string, checkRoot bool) ([]kv, error) { var found bool kvs := []kv{} - err := s.db.View(s.listTxnFunc(prefix, &kvs, &found)) + err := s.db.View(s.listTxFunc(prefix, &kvs, &found)) if err == nil && !found && checkRoot { - return nil, badger.ErrKeyNotFound + return nil, buntdb.ErrNotFound } return kvs, err } -func (*Store) listTxnFunc(prefix string, kvs *[]kv, found *bool) func(txn *badger.Txn) error { - return func(txn *badger.Txn) error { - it := txn.NewIterator(badger.DefaultIteratorOptions) - defer it.Close() - - prefix := []byte(prefix) - - for it.Seek(prefix); it.ValidForPrefix(prefix); it.Next() { - *found = true - item := it.Item() - k := item.Key() - - // ignore self in listing - if bytes.Equal(trimDirectoryKey(k), prefix) { - continue - } - - body, err := item.ValueCopy(nil) - if err != nil { - return err +func (*Store) listTxFunc(prefix string, kvs *[]kv, found *bool) func(tx *buntdb.Tx) error { + return func(tx *buntdb.Tx) error { + err := tx.Ascend("", func(key, value string) bool { + if strings.HasPrefix(key, prefix) { + *found = true + // ignore self in listing + if !bytes.Equal(trimDirectoryKey([]byte(key)), []byte(prefix)) { + kv := kv{Key: key, Value: []byte(value)} + *kvs = append(*kvs, kv) + } } - - kv := kv{Key: string(k), Value: body} - *kvs = append(*kvs, kv) - } - - return nil + return true + }) + return err } } @@ -539,22 +458,18 @@ func (s *Store) GetGroupedExecutions(jobName string) (map[int64][]*Execution, [] return groups, byGroup, nil } -func (*Store) setExecutionTxnFunc(key string, pbe *dkronpb.Execution) func(txn *badger.Txn) error { - return func(txn *badger.Txn) error { +func (*Store) setExecutionTxFunc(key string, pbe *dkronpb.Execution) func(tx *buntdb.Tx) error { + return func(tx *buntdb.Tx) error { // Get previous execution - i, err := txn.Get([]byte(key)) - if err != nil && err != badger.ErrKeyNotFound { + i, err := tx.Get(key) + if err != nil && err != buntdb.ErrNotFound { return err } // Do nothing if a previous execution exists and is // more recent, avoiding non ordered execution set - if i != nil { - v, err := i.ValueCopy(nil) - if err != nil { - return err - } + if i != "" { var p dkronpb.Execution - if err := proto.Unmarshal(v, &p); err != nil { + if err := proto.Unmarshal([]byte(i), &p); err != nil { return err } // Compare existing execution @@ -567,7 +482,9 @@ func (*Store) setExecutionTxnFunc(key string, pbe *dkronpb.Execution) func(txn * if err != nil { return err } - return txn.Set([]byte(key), eb) + + _, _, err = tx.Set(key, string(eb), nil) + return err } } @@ -582,7 +499,7 @@ func (s *Store) SetExecution(execution *Execution) (string, error) { "finished": execution.FinishedAt.String(), }).Debug("store: Setting key") - err := s.db.Update(s.setExecutionTxnFunc(key, pbe)) + err := s.db.Update(s.setExecutionTxFunc(key, pbe)) if err != nil { log.WithError(err).WithFields(logrus.Fields{ @@ -593,7 +510,7 @@ func (s *Store) SetExecution(execution *Execution) (string, error) { } execs, err := s.GetExecutions(execution.JobName) - if err != nil && err != badger.ErrKeyNotFound { + if err != nil && err != buntdb.ErrNotFound { log.WithError(err). WithField("job", execution.JobName). Error("store: Error getting executions for job") @@ -611,9 +528,10 @@ func (s *Store) SetExecution(execution *Execution) (string, error) { "job": execs[i].JobName, "execution": execs[i].Key(), }).Debug("store: to detele key") - err = s.db.Update(func(txn *badger.Txn) error { + err = s.db.Update(func(tx *buntdb.Tx) error { k := fmt.Sprintf("executions/%s/%s", execs[i].JobName, execs[i].Key()) - return txn.Delete([]byte(k)) + _, err := tx.Delete(k) + return err }) if err != nil { log.WithError(err). @@ -627,9 +545,23 @@ func (s *Store) SetExecution(execution *Execution) (string, error) { } // DeleteExecutions removes all executions of a job -func (s *Store) DeleteExecutions(jobName string) error { - prefix := fmt.Sprintf("executions/%s/", jobName) - return s.db.DropPrefix([]byte(prefix)) +func (s *Store) deleteExecutionsTxFunc(jobName string) func(tx *buntdb.Tx) error { + return func(tx *buntdb.Tx) error { + var delkeys []string + prefix := fmt.Sprintf("executions/%s", jobName) + tx.Ascend("", func(key, value string) bool { + if strings.HasPrefix(key, prefix) { + delkeys = append(delkeys, key) + } + return true + }) + + for _, k := range delkeys { + _, _ = tx.Delete(k) + } + + return nil + } } // Shutdown close the KV store @@ -637,17 +569,14 @@ func (s *Store) Shutdown() error { return s.db.Close() } -// Snapshot creates a backup of the data stored in Badger +// Snapshot stub for Raft func (s *Store) Snapshot(w io.WriteCloser) error { - _, err := s.db.Backup(w, 0) - return err + return nil } -// Restore load data created with backup in to Badger -// Default value for maxPendingWrites is 256, to minimise memory usage -// and overall finish time. +// Restore stub for Raft func (s *Store) Restore(r io.ReadCloser) error { - return s.db.Load(r, 256) + return nil } func (s *Store) unmarshalExecutions(items []kv) ([]*Execution, error) { @@ -665,13 +594,13 @@ func (s *Store) unmarshalExecutions(items []kv) ([]*Execution, error) { return executions, nil } -func (s *Store) computeStatus(jobName string, exGroup int64, txn *badger.Txn) (string, error) { +func (s *Store) computeStatus(jobName string, exGroup int64, tx *buntdb.Tx) (string, error) { // compute job status based on execution group kvs := []kv{} found := false prefix := fmt.Sprintf("executions/%s/", jobName) - if err := s.listTxnFunc(prefix, &kvs, &found)(txn); err != nil { + if err := s.listTxFunc(prefix, &kvs, &found)(tx); err != nil { return "", err } diff --git a/dkron/store_test.go b/dkron/store_test.go index e55cee333..d463178d8 100644 --- a/dkron/store_test.go +++ b/dkron/store_test.go @@ -1,22 +1,17 @@ package dkron import ( - "io/ioutil" - "os" "testing" "time" - "github.com/dgraph-io/badger/v2" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" + "github.com/tidwall/buntdb" ) func TestStore(t *testing.T) { - dir, err := ioutil.TempDir("", "dkron-test") - require.NoError(t, err) - defer os.RemoveAll(dir) - - s, err := NewStore(dir) + a := NewAgent(nil) + s, err := NewStore(a) require.NoError(t, err) defer s.Shutdown() @@ -85,15 +80,14 @@ func TestStore(t *testing.T) { assert.NoError(t, err) _, err = s.DeleteJob("test") - assert.EqualError(t, err, badger.ErrKeyNotFound.Error()) + assert.EqualError(t, err, buntdb.ErrNotFound.Error()) _, err = s.DeleteJob("test2") assert.NoError(t, err) } func TestStore_AddDependentJobToParent(t *testing.T) { - s, dir := setupStore(t) - defer cleanupStore(dir, s) + s := setupStore(t) storeJob(t, s, "parent1") storeChildJob(t, s, "child1", "parent1") @@ -103,8 +97,7 @@ func TestStore_AddDependentJobToParent(t *testing.T) { } func TestStore_ParentIsUpdatedAfterDeletingDependentJob(t *testing.T) { - s, dir := setupStore(t) - defer cleanupStore(dir, s) + s := setupStore(t) storeJob(t, s, "parent1") storeChildJob(t, s, "child1", "parent1") @@ -120,8 +113,7 @@ func TestStore_ParentIsUpdatedAfterDeletingDependentJob(t *testing.T) { } func TestStore_DependentJobsUpdatedAfterSwappingParent(t *testing.T) { - s, dir := setupStore(t) - defer cleanupStore(dir, s) + s := setupStore(t) storeJob(t, s, "parent1") storeChildJob(t, s, "child1", "parent1") @@ -141,8 +133,7 @@ func TestStore_DependentJobsUpdatedAfterSwappingParent(t *testing.T) { } func TestStore_JobBecomesDependentJob(t *testing.T) { - s, dir := setupStore(t) - defer cleanupStore(dir, s) + s := setupStore(t) storeJob(t, s, "child1") storeJob(t, s, "parent1") @@ -153,8 +144,7 @@ func TestStore_JobBecomesDependentJob(t *testing.T) { } func TestStore_JobBecomesIndependentJob(t *testing.T) { - s, dir := setupStore(t) - defer cleanupStore(dir, s) + s := setupStore(t) storeJob(t, s, "parent1") storeChildJob(t, s, "child1", "parent1") @@ -165,8 +155,7 @@ func TestStore_JobBecomesIndependentJob(t *testing.T) { } func TestStore_ChildIsUpdatedAfterDeletingParentJob(t *testing.T) { - s, dir := setupStore(t) - defer cleanupStore(dir, s) + s := setupStore(t) storeJob(t, s, "parent1") storeChildJob(t, s, "child1", "parent1") @@ -180,8 +169,7 @@ func TestStore_ChildIsUpdatedAfterDeletingParentJob(t *testing.T) { } func TestStore_GetJobsWithMetadata(t *testing.T) { - s, dir := setupStore(t) - defer cleanupStore(dir, s) + s := setupStore(t) metadata := make(map[string]string) metadata["t1"] = "v1" @@ -470,21 +458,12 @@ func scaffoldJob() *Job { } } -func setupStore(t *testing.T) (*Store, string) { - dir, err := ioutil.TempDir("", "dkron-test") - require.NoError(t, err) - +func setupStore(t *testing.T) *Store { a := NewAgent(nil) - s, err := NewStore(dir) + s, err := NewStore(a) require.NoError(t, err) a.Store = s - - return s, dir -} - -func cleanupStore(dir string, s *Store) { - s.Shutdown() - os.RemoveAll(dir) + return s } func loadJob(t *testing.T, s *Store, name string) *Job { diff --git a/go.mod b/go.mod index 9b68ab6d0..2fa553526 100644 --- a/go.mod +++ b/go.mod @@ -6,7 +6,6 @@ require ( github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da github.com/aws/aws-sdk-go v1.16.23 // indirect github.com/boltdb/bolt v1.3.1 // indirect - github.com/dgraph-io/badger/v2 v2.0.1 github.com/dnaeon/go-vcr v1.0.1 // indirect github.com/gin-contrib/expvar v0.0.0-20180827025536-251166f58ff2 github.com/gin-contrib/multitemplate v0.0.0-20170922032617-bbc6daf6024b @@ -40,12 +39,14 @@ require ( github.com/spf13/pflag v1.0.3 github.com/spf13/viper v1.3.2 github.com/stretchr/testify v1.4.0 + github.com/tidwall/buntdb v1.1.2 golang.org/x/net v0.0.0-20200301022130-244492dfa37a golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527 // indirect golang.org/x/text v0.3.2 // indirect google.golang.org/genproto v0.0.0-20190404172233-64821d5d2107 // indirect google.golang.org/grpc v1.19.1 gopkg.in/go-playground/validator.v8 v8.18.2 // indirect + launchpad.net/gocheck v0.0.0-20140225173054-000000000087 // indirect ) replace github.com/hashicorp/mdns => github.com/hashicorp/mdns v1.0.1 diff --git a/go.sum b/go.sum index b62b98fdd..c374afb7c 100644 --- a/go.sum +++ b/go.sum @@ -4,15 +4,9 @@ github.com/Azure/azure-sdk-for-go v16.0.0+incompatible h1:gr1qKY/Ll72VjFTZmaBwRK github.com/Azure/azure-sdk-for-go v16.0.0+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc= github.com/Azure/go-autorest v10.7.0+incompatible h1:dB+dKSLGdJLEhU/FoZTSNSPMZuE5H4M5p5zgSct7qwM= github.com/Azure/go-autorest v10.7.0+incompatible/go.mod h1:r+4oMnoxhatjLLJ6zxSWATqVooLgysK6ZNox3g/xq24= -github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/DataDog/datadog-go v0.0.0-20170427165718-0ddda6bee211 h1:hOSWYZBOWXZwYN+huYLFKsb4f6uohHgpx6cLlAXOqjA= github.com/DataDog/datadog-go v0.0.0-20170427165718-0ddda6bee211/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ= -github.com/DataDog/zstd v1.4.1 h1:3oxKN3wbHibqx897utPC2LTQU4J+IHWWJO+glkAkpFM= -github.com/DataDog/zstd v1.4.1/go.mod h1:1jcaCB/ufaK+sKp1NBhlGmpz41jOoPQ35bpF36t7BBo= -github.com/OneOfOne/xxhash v1.2.2 h1:KMrpdQIwFcEqXDklaen+P1axHaj9BSKzvpUUfnHldSE= -github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= -github.com/abdullin/seq v0.0.0-20160510034733-d5467c17e7af h1:DBNMBMuMiWYu0b+8KMJuWmfCkcxl09JwdlqwDZZ6U14= github.com/abdullin/seq v0.0.0-20160510034733-d5467c17e7af/go.mod h1:5Jv4cbFiHJMsVxt52+i0Ha45fjshj6wxYr1r19tB9bw= github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e h1:QEF07wC0T1rKkctt1RINW/+RMTVmiwxETico2l3gxJA= github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o= @@ -26,8 +20,6 @@ github.com/aws/aws-sdk-go v1.16.23/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpi github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= github.com/boltdb/bolt v1.3.1 h1:JQmyP4ZBrce+ZQu0dY660FMfatumYDLun9hBCUVIkF4= github.com/boltdb/bolt v1.3.1/go.mod h1:clJnj/oiGkjum5o1McbSZDSLxVThjynRyGBgiAx27Ps= -github.com/cespare/xxhash v1.1.0 h1:a6HrQnmkObjyL+Gs60czilIUGqrzKutQD6XZog3p+ko= -github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk= @@ -39,25 +31,11 @@ github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/denverdino/aliyungo v0.0.0-20170926055100-d3308649c661 h1:lrWnAyy/F72MbxIxFUzKmcMCdt9Oi8RzpAxzTNQHD7o= github.com/denverdino/aliyungo v0.0.0-20170926055100-d3308649c661/go.mod h1:dV8lFg6daOBZbT6/BDGIz6Y3WFGn8juu6G+CQ6LHtl0= -github.com/dgraph-io/badger/v2 v2.0.0-rc4 h1:SEdIJ58VRyWaeyUREe8M59PSLlF6mm3IBW0hWfLIa1Q= -github.com/dgraph-io/badger/v2 v2.0.0-rc4/go.mod h1:YoRSIp1LmAJ7zH7tZwRvjNMUYLxB4wl3ebYkaIruZ04= -github.com/dgraph-io/badger/v2 v2.0.0 h1:Cr05o2TUd2IcLbEY0aGd8mbjm1YyQpy+dswo3BcDXrE= -github.com/dgraph-io/badger/v2 v2.0.0/go.mod h1:YoRSIp1LmAJ7zH7tZwRvjNMUYLxB4wl3ebYkaIruZ04= -github.com/dgraph-io/badger/v2 v2.0.1 h1:+D6dhIqC6jIeCclnxMHqk4HPuXgrRN5UfBsLR4dNQ3A= -github.com/dgraph-io/badger/v2 v2.0.1/go.mod h1:YoRSIp1LmAJ7zH7tZwRvjNMUYLxB4wl3ebYkaIruZ04= -github.com/dgraph-io/ristretto v0.0.0-20191025175511-c1f00be0418e h1:aeUNgwup7PnDOBAD1BOKAqzb/W/NksOj6r3dwKKuqfg= -github.com/dgraph-io/ristretto v0.0.0-20191025175511-c1f00be0418e/go.mod h1:edzKIzGvqUCMzhTVWbiTSe75zD9Xxq0GtSBtFmaUTZs= github.com/dgrijalva/jwt-go v3.2.0+incompatible h1:7qlOGliEKZXTDg6OTjfoBKDXWrumCAMpl/TFQ4/5kLM= github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= -github.com/dgryski/go-farm v0.0.0-20190423205320-6a90982ecee2 h1:tdlZCpZ/P9DhczCTSixgIKmwPv6+wP5DGjqLYw5SUiA= -github.com/dgryski/go-farm v0.0.0-20190423205320-6a90982ecee2/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw= github.com/digitalocean/godo v1.1.1 h1:v0A7yF3xmKLjjdJGIeBbINfMufcrrRhqZsxuVQMoT+U= github.com/digitalocean/godo v1.1.1/go.mod h1:h6faOIcZ8lWIwNQ+DN7b3CgX4Kwby5T+nbpNqkUIozU= -github.com/distribworks/dkron v1.2.5 h1:AHYcf3oLHa8impTjO8rhq2Y21kYsL2oZ4X1Hd0wMWSk= -github.com/dnaeon/go-vcr v1.0.1 h1:r8L/HqC0Hje5AXMu1ooW8oyQyOFv4GxqpL0nRP7SLLY= github.com/dnaeon/go-vcr v1.0.1/go.mod h1:aBB1+wY4s93YsC3HHjMBMrwTj2R9FHDzUr9KyGc8n1E= -github.com/dustin/go-humanize v1.0.0 h1:VSnTsYCnlFHaM2/igO1h6X3HA71jcobQuxemgkq4zYo= -github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= github.com/fsnotify/fsnotify v1.4.7 h1:IXs+QLmnXW2CcXuY+8Mzv/fWEsPGWxqefPtCP5CnV9I= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= @@ -67,12 +45,8 @@ github.com/gin-contrib/expvar v0.0.0-20180827025536-251166f58ff2 h1:O4zBnkbwY6lD github.com/gin-contrib/expvar v0.0.0-20180827025536-251166f58ff2/go.mod h1:mO3bltIbG/imM6BHifhDpdYHn+yLFGjKzjSebsjoe2M= github.com/gin-contrib/multitemplate v0.0.0-20170922032617-bbc6daf6024b h1:D/1/eV4p38Ohv2z9qrDiS9QIobfBJ4u4vtXFoFn/jDU= github.com/gin-contrib/multitemplate v0.0.0-20170922032617-bbc6daf6024b/go.mod h1:62qM8p4crGvNKE413gTzn4eMFin1VOJfMDWMRzHdvqM= -github.com/gin-contrib/sse v0.0.0-20170109093832-22d885f9ecc7 h1:AzN37oI0cOS+cougNAV9szl6CVoj2RYwzS3DpUQNtlY= -github.com/gin-contrib/sse v0.0.0-20170109093832-22d885f9ecc7/go.mod h1:VJ0WA2NBN22VlZ2dKZQPAPnyWw5XTlK1KymzLKsr59s= github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE= github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI= -github.com/gin-gonic/gin v1.3.0 h1:kCmZyPklC0gVdL728E6Aj20uYBJV93nj/TkwBTKhFbs= -github.com/gin-gonic/gin v1.3.0/go.mod h1:7cKuhb5qV2ggCFctp2fJQ+ErvciLZrIeoOSOm6mUr7Y= github.com/gin-gonic/gin v1.5.0 h1:fi+bqFAx/oLK54somfCtEZs9HeH1LHVoEPUgARpTqyc= github.com/gin-gonic/gin v1.5.0/go.mod h1:Nd6IXA8m5kNZdNEHMBd93KT+mdY3+bewLgRvmCsR2Do= github.com/go-ini/ini v1.25.4/go.mod h1:ByCAeIL28uOIIG0E3PJtZPDL8WnHpFKFOtgjp+3Ies8= @@ -88,19 +62,13 @@ github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfU github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6 h1:ZgQEtGgCBiWRM39fZuwSd1LwSqqSW0hOdXCYYDX0R3I= github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= -github.com/golang/protobuf v1.2.0 h1:P3YflyNX/ehuJFLhxviNdFxQPkGK5cDcApsge1SqnvM= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.1 h1:YF8+flBXS5eO826T4nzqPrxfhQThhXl0YzfuUPu4SBg= -github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.2 h1:6nsPYzhq5kReh6QImI3k5qWzO4PEbvbIW2cwSfR/6xs= github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/snappy v0.0.1 h1:Qgr9rKW7uDUkrbSmQeiDsGa8SjGyCOGtuasMWwvp2P4= -github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c h1:964Od4U6p2jUkFxvCydnIczKteheJEzHRToSGK3Bnlw= github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/go-querystring v0.0.0-20170111101155-53e6ce116135 h1:zLTLjkaOFEFIOxY5BWLFLwh+cL8vOBW4XJ2aqLE/Tf0= github.com/google/go-querystring v0.0.0-20170111101155-53e6ce116135/go.mod h1:odCYkC5MyYFN7vkCjXpyrEuKhc/BUO6wN/zVPAxq5ck= -github.com/google/gofuzz v0.0.0-20170612174753-24818f796faf h1:+RRA9JqSOZFfKrOeqr2z77+8R2RKyh8PG66dcu1V0ck= github.com/google/gofuzz v0.0.0-20170612174753-24818f796faf/go.mod h1:HP5RmnzzSNb993RKQDq4+1A4ia9nllfqcQFTQJedwGI= github.com/google/gofuzz v1.0.0 h1:A8PeW59pxE9IoFRqBp37U+mSNaQoZ46F1f0f863XSXw= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= @@ -118,7 +86,6 @@ github.com/hashicorp/go-discover v0.0.0-20190522154730-8aba54d36e17/go.mod h1:FT github.com/hashicorp/go-hclog v0.0.0-20180709165350-ff2cf002a8dd/go.mod h1:9bjs9uLqI8l75knNv3lV1kA55veR+WUPSiKIWcQHudI= github.com/hashicorp/go-hclog v0.8.0 h1:z3ollgGRg8RjfJH6UVBaG54R70GFd++QOkvnJH3VSBY= github.com/hashicorp/go-hclog v0.8.0/go.mod h1:5CU+agLiy3J7N7QjHK5d05KxGsuXiQLrjA0H7acj2lQ= -github.com/hashicorp/go-immutable-radix v1.0.0 h1:AKDB1HM5PWEA7i4nhcpwOrO2byshxBjXVn/J/3+z5/0= github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= github.com/hashicorp/go-immutable-radix v1.1.0 h1:vN9wG1D6KG6YHRTWr8512cxGOVgTMEfgEdSj/hr8MPc= github.com/hashicorp/go-immutable-radix v1.1.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= @@ -128,18 +95,14 @@ github.com/hashicorp/go-multierror v1.0.0 h1:iVjPR7a6H0tWELX5NxNe7bYopibicUzc7uP github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk= github.com/hashicorp/go-plugin v1.0.1 h1:4OtAfUGbnKC6yS48p0CtMX2oFYtzFZVv6rok3cRWgnE= github.com/hashicorp/go-plugin v1.0.1/go.mod h1:++UyYGoz3o5w9ZzAdZxtQKrWWP+iqPBn3cQptSMzBuY= -github.com/hashicorp/go-sockaddr v1.0.0 h1:GeH6tui99pF4NJgfnhp+L6+FfobzVW3Ah46sLo0ICXs= github.com/hashicorp/go-sockaddr v1.0.0/go.mod h1:7Xibr9yA9JjQq1JpNB2Vw7kxv8xerXegt+ozgdvDeDU= github.com/hashicorp/go-sockaddr v1.0.2 h1:ztczhD1jLxIRjVejw8gFomI1BQZOe2WoVOu0SyteCQc= github.com/hashicorp/go-sockaddr v1.0.2/go.mod h1:rB4wwRAUzs07qva3c5SdrY/NEtAUjGlgmH/UkBUC97A= -github.com/hashicorp/go-syslog v1.0.0 h1:KaodqZuhUoZereWVIYmpUgZysurB1kBLX2j0MwMrUAE= github.com/hashicorp/go-syslog v1.0.0/go.mod h1:qPfqrKkXGihmCqbJM2mZgkZGvKG1dFdvsLplgctolz4= github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= -github.com/hashicorp/go-uuid v1.0.1 h1:fv1ep09latC32wFoVwnqcnKJGnMSdBanPczbHAYm1BE= github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= github.com/hashicorp/go-version v1.2.0 h1:3vNe/fWF5CBgRIguda1meWhsZHy3m8gCJ5wx+dIzX/E= github.com/hashicorp/go-version v1.2.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= -github.com/hashicorp/golang-lru v0.5.0 h1:CL2msUPvZTLb5O648aiLNJw3hnBxN2+1Jq8rCOH9wdo= github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/golang-lru v0.5.1 h1:0hERBMJE1eitiLkihrMvRVBYAkpHzc/J3QdDN+dAcgU= github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= @@ -164,9 +127,7 @@ github.com/hashicorp/yamux v0.0.0-20181012175058-2f1d1f20f75d/go.mod h1:+NfK9FKe github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= github.com/imdario/mergo v0.3.6 h1:xTNEAn+kxVO7dTZGu0CegyqKZmoWFI0rF8UxjlB2d28= github.com/imdario/mergo v0.3.6/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= -github.com/inconshreveable/mousetrap v1.0.0 h1:Z8tu5sraLXCXIcARxBp/8cbvlwVa7Z1NHg9XEKhtSvM= github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= -github.com/jarcoal/httpmock v0.0.0-20180424175123-9c70cfe4a1da h1:FjHUJJ7oBW4G/9j1KzlHaXL09LyMVM9rupS39lncbXk= github.com/jarcoal/httpmock v0.0.0-20180424175123-9c70cfe4a1da/go.mod h1:ks+b9deReOc7jgqp+e7LuFiCBH6Rm5hL32cLcEAArb4= github.com/jmespath/go-jmespath v0.0.0-20160202185014-0b12d6b521d8/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af h1:pmfjZENx5imkbgOkpRUYLnmbU7UEFbjtDA2hxJ1ichM= @@ -175,22 +136,13 @@ github.com/jordan-wright/email v0.0.0-20180115032944-94ae17dedda2 h1:BkuA0hfZuy4 github.com/jordan-wright/email v0.0.0-20180115032944-94ae17dedda2/go.mod h1:1c7szIrayyPPB/987hsnvNzLushdWf4o/79s3P08L8A= github.com/joyent/triton-go v0.0.0-20180628001255-830d2b111e62 h1:JHCT6xuyPUrbbgAPE/3dqlvUKzRHMNuTBKKUb6OeR/k= github.com/joyent/triton-go v0.0.0-20180628001255-830d2b111e62/go.mod h1:U+RSyWxWd04xTqnuOQxnai7XGS2PrPY2cfGoDKtMHjA= -github.com/json-iterator/go v1.1.5 h1:gL2yXlmiIo4+t+y32d4WGwOjKGYcGOuyrg46vadswDE= github.com/json-iterator/go v1.1.5/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= -github.com/json-iterator/go v1.1.6 h1:MrUvLMLTMxbqFJ9kzlvat/rYZqZnW3u4wkLzWTaFwKs= -github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= github.com/json-iterator/go v1.1.7 h1:KfgG9LzI+pYjr4xvmz/5H4FXjokeP+rlHLhv3iH62Fo= github.com/json-iterator/go v1.1.7/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/jtolds/gls v4.2.1+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= github.com/kardianos/osext v0.0.0-20170510131534-ae77be60afb1 h1:PJPDf8OUfOK1bb/NeTKd4f1QXZItOX389VN3B6qC8ro= github.com/kardianos/osext v0.0.0-20170510131534-ae77be60afb1/go.mod h1:1NbS8ALrpOvjt0rHPNLyCIeMtbizbir8U//inJ+zuB8= -github.com/konsorten/go-windows-terminal-sequences v1.0.1 h1:mweAR1A6xJ3oS2pRaGiHgQ4OO8tzTaLawm8vnODuwDk= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= -github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI= -github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= -github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= -github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= -github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/leodido/go-urn v1.1.0 h1:Sm1gr51B1kKyfD2BlRcLSiEkffoG96g6TPv6eRoEiB8= github.com/leodido/go-urn v1.1.0/go.mod h1:+cyI34gQWZcE1eQU7NVgKkkzdXDQHr1dBMtdAPozLkw= github.com/linode/linodego v0.7.1 h1:4WZmMpSA2NRwlPZcc0+4Gyn7rr99Evk9bnr0B3gXRKE= @@ -198,20 +150,16 @@ github.com/linode/linodego v0.7.1/go.mod h1:ga11n3ivecUrPCHN0rANxKmfWBJVkOXfLMZi github.com/magiconair/properties v1.8.0 h1:LLgXmsheXeRoUOBOjtwPQCWIYqM/LU1ayDtDePerRcY= github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= -github.com/mattn/go-isatty v0.0.3 h1:ns/ykhmWi7G9O+8a448SecJU3nSMBXJfqQkl0upE1jI= github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= github.com/mattn/go-isatty v0.0.9 h1:d5US/mDsogSGW37IV293h//ZFaeajb69h+EHFsv2xGg= github.com/mattn/go-isatty v0.0.9/go.mod h1:YNRxwqDuOph6SZLI9vUUz6OYw3QyUt7WiY2yME+cCiQ= -github.com/mattn/go-shellwords v0.0.0-20160315040826-525bedee691b h1:wdxxNEOv2NWWo/9MbMO/zEMq7DJOcpWQG8CH4YSW1nA= github.com/mattn/go-shellwords v0.0.0-20160315040826-525bedee691b/go.mod h1:3xCvwCdWdlDJUrvuMn7Wuy9eWs4pE8vqg+NOMyg4B2o= github.com/miekg/dns v1.0.14 h1:9jZdLNd/P4+SfEJ0TNyxYpsK8N4GtfylBLqtbYN1sbA= github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc= -github.com/mitchellh/go-homedir v1.0.0 h1:vKb8ShqSby24Yrqr/yDYkuFz8d0WUjys40rvnGC8aR0= github.com/mitchellh/go-homedir v1.0.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y= github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= -github.com/mitchellh/go-testing-interface v0.0.0-20171004221916-a61a99592b77 h1:7GoSOOW2jpsfkntVKaS2rAr1TJqfcxotyaUcuxoZSzg= github.com/mitchellh/go-testing-interface v0.0.0-20171004221916-a61a99592b77/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI= github.com/mitchellh/go-testing-interface v1.0.0 h1:fzU/JVNcaqHQEcVFAKeR41fkiLdIPrefOvVG1VZ96U0= github.com/mitchellh/go-testing-interface v1.0.0/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI= @@ -235,25 +183,19 @@ github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+W github.com/onsi/gomega v1.4.1/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= github.com/packethost/packngo v0.1.1-0.20180711074735-b9cb5096f54c h1:vwpFWvAO8DeIZfFeqASzZfsxuWPno9ncAebBEP0N3uE= github.com/packethost/packngo v0.1.1-0.20180711074735-b9cb5096f54c/go.mod h1:otzZQXgoO96RTzDB/Hycg0qZcXZsWJGJRSXbmEIJ+4M= -github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c h1:Lgl0gzECD8GnQ5QCWA8o6BtfL6mDH5rQgM4/fX3avOs= github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= -github.com/pascaldekloe/goe v0.1.0 h1:cBOtyMzM9HTpWjXfbbunk26uA6nG3a8n06Wieeh0MwY= github.com/pascaldekloe/goe v0.1.0/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= github.com/pelletier/go-toml v1.2.0 h1:T5zMGML61Wp+FlcbWjRDT7yAxhJNAiPPLOFECq181zc= github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= github.com/peterbourgon/diskv v2.0.1+incompatible h1:UBdAOUP5p4RWqPBg048CAvpKN+vxiaj6gdUUzhl4XmI= github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU= +github.com/pkg/errors v0.8.0 h1:WdK/asTD0HN+q6hsWO3/vpuAkAr+tw6aNJNDFFf0+qw= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pkg/errors v0.8.1 h1:iURUrRGxPUNPdy5/HRSm+Yj6okJ6UtLINN0Q9M4+h3I= -github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI= github.com/renier/xmlrpc v0.0.0-20170708154548-ce4a1a486c03 h1:Wdi9nwnhFNAlseAOekn6B5G/+GMtks9UKbvRU/CMM/o= github.com/renier/xmlrpc v0.0.0-20170708154548-ce4a1a486c03/go.mod h1:gRAiPF5C5Nd0eyyRdqIu9qTiFSoZzpTq727b5B8fkkU= -github.com/robfig/cron v1.2.0 h1:ZjScXvvxeQ63Dbyxy76Fj3AT3Ut0aKsyd2/tl3DTMuQ= -github.com/robfig/cron/v3 v3.0.0 h1:kQ6Cb7aHOHTSzNVNEhmp8EcWKLb4CbiMW9h9VyIhO4E= -github.com/robfig/cron/v3 v3.0.0/go.mod h1:eQICP3HwyT7UooqI/z+Ov+PtYAWygg1TEWWzGIFLtro= github.com/robfig/cron/v3 v3.0.1-0.20191125210756-b7cc47d857a8 h1:4gRCcjnCj7IPweg+aeB7ANbN14LKQ1XxXchpatkMYwc= github.com/robfig/cron/v3 v3.0.1-0.20191125210756-b7cc47d857a8/go.mod h1:eQICP3HwyT7UooqI/z+Ov+PtYAWygg1TEWWzGIFLtro= github.com/russross/blackfriday v1.5.2 h1:HyvC0ARfnZBqnXwABFeSZHpKvJHJJfPz81GNueLj0oo= @@ -272,9 +214,6 @@ github.com/softlayer/softlayer-go v0.0.0-20180806151055-260589d94c7d h1:bVQRCxQv github.com/softlayer/softlayer-go v0.0.0-20180806151055-260589d94c7d/go.mod h1:Cw4GTlQccdRGSEf6KiMju767x0NEHE0YIVPJSaXjlsw= github.com/soheilhy/cmux v0.1.4 h1:0HKaf1o97UwFjHH9o5XsHUOF+tqmdA7KEzXLpiyaw0E= github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= -github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= -github.com/spaolacci/murmur3 v1.1.0 h1:7c1g84S4BPRrfL5Xrdp6fOJ206sU9y293DDHaoy0bLI= -github.com/spaolacci/murmur3 v1.1.0/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= github.com/spf13/afero v1.1.2 h1:m8/z1t7/fwjysjQRYbP0RD+bUIF/8tJwPdEZsI83ACI= github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= github.com/spf13/cast v1.3.0 h1:oget//CVOEoFewqQxwr0Ej5yjygnqGkvggSE/gB35Q8= @@ -283,30 +222,38 @@ github.com/spf13/cobra v0.0.5 h1:f0B+LkLX6DtmRH1isoNA9VTtNUK9K8xYd28JNNfOv/s= github.com/spf13/cobra v0.0.5/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU= github.com/spf13/jwalterweatherman v1.0.0 h1:XHEdyB+EcvlqZamSM4ZOMGlc93t6AcsBEu9Gc1vn7yk= github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= -github.com/spf13/pflag v1.0.2 h1:Fy0orTDgHdbnzHcsOgfCN4LtHf0ec3wwtiwJqwvf3Gc= github.com/spf13/pflag v1.0.2/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= github.com/spf13/pflag v1.0.3 h1:zPAT6CGy6wXeQ7NtTnaTerfKOsV6V6F8agHXFiazDkg= github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= github.com/spf13/viper v1.3.2 h1:VUFqw5KcqRf7i70GOzW7N+Q7+gxVBkSSqiXB12+JQ4M= github.com/spf13/viper v1.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/objx v0.1.1 h1:2vfRuCMp5sSVIDSqO8oNnWJq7mPa6KVP3iPIwFBuy8A= github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/testify v1.2.2 h1:bSDNvY7ZPG5RlJ8otE/7V6gMiyenm9RtJ7IUVIAoJ1w= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= -github.com/stretchr/testify v1.3.0 h1:TivCn/peBQ7UY8ooIcPgZFpTNSz0Q2U6UrFlUfqbe0Q= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= github.com/tent/http-link-go v0.0.0-20130702225549-ac974c61c2f9 h1:/Bsw4C+DEdqPjt8vAqaC9LAqpAQnaCQQqmolqq3S1T4= github.com/tent/http-link-go v0.0.0-20130702225549-ac974c61c2f9/go.mod h1:RHkNRtSLfOK7qBTHaeSX1D6BNpI3qw7NTxsmNr4RvN8= -github.com/ugorji/go v1.1.5-pre h1:jyJKFOSEbdOc2HODrf2qcCkYOdq7zzXqA9bhW5oV4fM= -github.com/ugorji/go v1.1.5-pre/go.mod h1:FwP/aQVg39TXzItUBMwnWp9T9gPQnXw4Poh4/oBQZ/0= +github.com/tidwall/btree v0.0.0-20191029221954-400434d76274 h1:G6Z6HvJuPjG6XfNGi/feOATzeJrfgTNJY+rGrHbA04E= +github.com/tidwall/btree v0.0.0-20191029221954-400434d76274/go.mod h1:huei1BkDWJ3/sLXmO+bsCNELL+Bp2Kks9OLyQFkzvA8= +github.com/tidwall/buntdb v1.1.2 h1:noCrqQXL9EKMtcdwJcmuVKSEjqu1ua99RHHgbLTEHRo= +github.com/tidwall/buntdb v1.1.2/go.mod h1:xAzi36Hir4FarpSHyfuZ6JzPJdjRZ8QlLZSntE2mqlI= +github.com/tidwall/gjson v1.3.4 h1:On5waDnyKKk3SWE4EthbjjirAWXp43xx5cKCUZY1eZw= +github.com/tidwall/gjson v1.3.4/go.mod h1:P256ACg0Mn+j1RXIDXoss50DeIABTYK1PULOJHhxOls= +github.com/tidwall/grect v0.0.0-20161006141115-ba9a043346eb h1:5NSYaAdrnblKByzd7XByQEJVT8+9v0W/tIY0Oo4OwrE= +github.com/tidwall/grect v0.0.0-20161006141115-ba9a043346eb/go.mod h1:lKYYLFIr9OIgdgrtgkZ9zgRxRdvPYsExnYBsEAd8W5M= +github.com/tidwall/match v1.0.1 h1:PnKP62LPNxHKTwvHHZZzdOAOCtsJTjo6dZLCwpKm5xc= +github.com/tidwall/match v1.0.1/go.mod h1:LujAq0jyVjBy028G1WhWfIzbpQfMO8bBZ6Tyb0+pL9E= +github.com/tidwall/pretty v1.0.0 h1:HsD+QiTn7sK6flMKIvNmpqz1qrpP3Ps6jOKIKMooyg4= +github.com/tidwall/pretty v1.0.0/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk= +github.com/tidwall/rtree v0.0.0-20180113144539-6cd427091e0e h1:+NL1GDIUOKxVfbp2KoJQD9cTQ6dyP2co9q4yzmT9FZo= +github.com/tidwall/rtree v0.0.0-20180113144539-6cd427091e0e/go.mod h1:/h+UnNGt0IhNNJLkGikcdcJqm66zGD/uJGMRxK/9+Ao= +github.com/tidwall/tinyqueue v0.0.0-20180302190814-1e39f5511563 h1:Otn9S136ELckZ3KKDyCkxapfufrqDqwmGjcHfAyXRrE= +github.com/tidwall/tinyqueue v0.0.0-20180302190814-1e39f5511563/go.mod h1:mLqSmt7Dv/CNneF2wfcChfN1rvapyQr01LGKnKex0DQ= github.com/ugorji/go v1.1.7 h1:/68gy2h+1mWMrwZFeD1kQialdSzAb432dtpeJ42ovdo= github.com/ugorji/go v1.1.7/go.mod h1:kZn38zHttfInRq0xu/PH0az30d+z6vm202qpg1oXVMw= github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0= -github.com/ugorji/go/codec v1.1.5-pre h1:5YV9PsFAN+ndcCtTM7s60no7nY7eTG3LPtxhSwuxzCs= -github.com/ugorji/go/codec v1.1.5-pre/go.mod h1:tULtS6Gy1AE1yCENaw4Vb//HLH5njI2tfCQDUqRd8fI= github.com/ugorji/go/codec v1.1.7 h1:2SvQaVZ1ouYrrKKwoSk2pzd4A9evlKJb9oTL+OaLUSs= github.com/ugorji/go/codec v1.1.7/go.mod h1:Ax+UKWsSmolVDwsd+7N3ZtXu+yMGCf907BLYF3GoBXY= github.com/vmware/govmomi v0.18.0 h1:f7QxSmP7meCtoAmiKZogvVbLInT+CZx6Px6K5rYsJZo= @@ -323,45 +270,30 @@ golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvx golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181023162649-9b4f9f5ad519/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181201002055-351d144fa1fc h1:a3CU5tJYVj92DY2LaA1kUkrsqD5/3mLDhx2NcNqyW+0= golang.org/x/net v0.0.0-20181201002055-351d144fa1fc/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181220203305-927f97764cc3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190213061140-3a22650c66bd h1:HuTn7WObtcDo9uEEU7rEqL0jYthdXAmZ6PP+meazmaU= golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190620200207-3b0461eec859 h1:R/3boaszxrf1GEUWTVDzSKVwLmSJpwZ1yqXm8j0v2QI= -golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200301022130-244492dfa37a h1:GuSPYbZzB5/dcLNCwLQLsg3obCJtX9IJhpXkvY7kzk0= golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/oauth2 v0.0.0-20170807180024-9a379c6b3e95/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be h1:vEDujvNQGv4jgYKudGeI/+DAX4Jffq6hpD55MmoEvKs= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= -golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f h1:wMNYb4v58l5UBM7MYRLPG6ZhfOqbKu7X5eyFl8ZhKvA= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20181108010431-42b317875d0f h1:Bl/8QSvNqXvPGPGXa2z5xUTmV7VDcZyvRZ+QQXkXTZQ= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4 h1:YUO/7uOKsKeq9UokNS62b8FYywz3ker1l1vDZRCRefw= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6 h1:bjcUS9ztw9kFmmIxJInhon/0Is3p+EHBKNgquIzo1OI= golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181026203630-95b1ffbd15a5 h1:x6r4Jo0KNzOOzYd8lbcRsqjuqEASK6ob3auvWYM4/8U= golang.org/x/sys v0.0.0-20181026203630-95b1ffbd15a5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181205085412-a5c9d58dba9a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190129075346-302c3dd5f1cc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a h1:1BGLXjeY4akVXGgbC9HugT3Jv3hCI0z56oJR5vAMgBU= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190626221950-04f50cda93cb h1:fgwFCsaw9buMuxNd6+DQfAuSFqbNiQZpcgJQAgJsK6k= -golang.org/x/sys v0.0.0-20190626221950-04f50cda93cb/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a h1:aYOabOQFp6Vj6W1F80affTUvO9UxmJRx8K0gsfABByQ= golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527 h1:uYVVQ9WP/Ds2ROhcaGPeIdVq0RIXVLwsHlnvJ+cT1So= golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/text v0.3.0 h1:g61tztE5qeGQ89tm6NTjjM9VPIm088od1l6aSorWRWg= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.1-0.20181227161524-e6919f6577db h1:6/JqlYfC1CCaLnGceQTI+sDGhC9UBSPAsBqI0Gun6kU= -golang.org/x/text v0.3.1-0.20181227161524-e6919f6577db/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/text v0.3.2 h1:tW2bmiBqwgJj/UpqtC8EpXEZVYOwU0yG4iWbprSVAcs= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2 h1:+DCIGbF/swA92ohVg0//6X2IVY3KZs6p9mix0ziNYJM= @@ -371,27 +303,20 @@ golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGm golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= google.golang.org/api v0.0.0-20180829000535-087779f1d2c9 h1:z1TeLUmxf9ws9KLICfmX+KGXTs+rjm+aGWzfsv7MZ9w= google.golang.org/api v0.0.0-20180829000535-087779f1d2c9/go.mod h1:4mhQ8q/RsB7i+udVvVy5NUi08OU8ZlA0gRVgrF7VFY0= -google.golang.org/appengine v1.1.0 h1:igQkv0AAhEIvTEpD5LIpAfav2eeVO9HBTjvKHVJPRSs= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= -google.golang.org/appengine v1.4.0 h1:/wp5JvzpHIxhs/dumFmF7BXTf3Z+dd4uXta4kVyO508= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= google.golang.org/genproto v0.0.0-20190404172233-64821d5d2107 h1:xtNn7qFlagY2mQNFHMSRPjT2RkOV4OXM7P5TVy9xATo= google.golang.org/genproto v0.0.0-20190404172233-64821d5d2107/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/grpc v1.14.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= -google.golang.org/grpc v1.19.0 h1:cfg4PD8YEdSFnm7qLV4++93WcmhH2nIUhMjhdCvl3j8= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.19.1 h1:TrBcJ1yqAl1G++wO39nD/qtgpsW9/1+QGrluyMGEYgM= google.golang.org/grpc v1.19.1/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= gopkg.in/airbrake/gobrake.v2 v2.0.9/go.mod h1:/h5ZAUhDkGaJfjzjKLSjv6zCL6O0LLBxU4K+aSYdM/U= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 h1:YR8cESwS4TdDjEe65xsg0ogRM/Nc3DYOhEAlW+xobZo= -gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= gopkg.in/gemnasium/logrus-airbrake-hook.v2 v2.1.2/go.mod h1:Xk6kEKp8OKb+X14hQBKWaSkCsqBpgog8nAV2xsGOxlo= -gopkg.in/go-playground/assert.v1 v1.2.1 h1:xoYuJVE7KT85PYWrN730RguIQO0ePzVRfFMXadIrXTM= gopkg.in/go-playground/assert.v1 v1.2.1/go.mod h1:9RXL0bg/zibRAgZUYszZSwO/z8Y/a8bDuhia5mkpMnE= -gopkg.in/go-playground/validator.v8 v8.18.2 h1:lFB4DoMU6B626w8ny76MV7VX6W2VHct2GVOI3xgiMrQ= gopkg.in/go-playground/validator.v8 v8.18.2/go.mod h1:RX2a/7Ha8BgOhfk7j780h4/u/RRjR0eouCJSH80/M2Y= gopkg.in/go-playground/validator.v9 v9.29.1 h1:SvGtYmN60a5CVKTOzMSyfzWDeZRxRuGvRQyEAKbw1xc= gopkg.in/go-playground/validator.v9 v9.29.1/go.mod h1:+c9/zcJMFNgbLvly1L1V+PpxWdVbfP1avr/N00E2vyQ= @@ -410,5 +335,4 @@ k8s.io/apimachinery v0.0.0-20180821005732-488889b0007f h1:V0PkbgaYp5JqCmzLyRmssD k8s.io/apimachinery v0.0.0-20180821005732-488889b0007f/go.mod h1:ccL7Eh7zubPUSh9A3USN90/OzHNSVN6zxzde07TDCL0= k8s.io/client-go v8.0.0+incompatible h1:tTI4hRmb1DRMl4fG6Vclfdi6nTM82oIrTT7HfitmxC4= k8s.io/client-go v8.0.0+incompatible/go.mod h1:7vJpHMYJwNQCWgzmNV+VYUl1zCObLyodBc8nIyt8L5s= -launchpad.net/gocheck v0.0.0-20140225173054-000000000087 h1:Izowp2XBH6Ya6rv+hqbceQyw/gSGoXfH/UPoTGduL54= launchpad.net/gocheck v0.0.0-20140225173054-000000000087/go.mod h1:hj7XX3B/0A+80Vse0e+BUHsHMTEhd0O4cpUHr/e/BUM= diff --git a/website/content/basics/getting-started.md b/website/content/basics/getting-started.md index 3ff43b178..4738830dc 100644 --- a/website/content/basics/getting-started.md +++ b/website/content/basics/getting-started.md @@ -23,7 +23,7 @@ All the execution responses will be gathered by the scheduler and stored in the ## State storage -Dkron deployment is just a single binary, it stores the state in an internal BadgerDB instance and replicate all changes between all server nodes using the Raft protocol, it doesn't need any other storage system outside itself. +Dkron deployment is just a single binary, it stores the state in an internal BuntDB instance and replicate all changes between all server nodes using the Raft protocol, it doesn't need any other storage system outside itself. ## Installation diff --git a/website/content/usage/storage.md b/website/content/usage/storage.md index 4e4ee94fc..b614ef4f8 100644 --- a/website/content/usage/storage.md +++ b/website/content/usage/storage.md @@ -2,6 +2,6 @@ title: Embedded storage --- -Dkron has an embedded distributed KV store engine based on BadgerDB. This works out of the box on each dkron server. +Dkron has an embedded distributed KV store engine based on BuntDB. This works out of the box on each dkron server. This ensures a dead easy install and setup, basically run dkron and you will have a full working node.