etcdv3

package module
v1.0.2 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Oct 13, 2022 License: Apache-2.0 Imports: 10 Imported by: 7

README

Valkeyrie etcd v3

GoDoc Build Status Go Report Card

valkeyrie provides a Go native library to store metadata using Distributed Key/Value stores (or common databases).

Compatibility

A storage backend in valkeyrie implements (fully or partially) the Store interface.

Calls Etcd
Put 🟢️
Get 🟢️
Delete 🟢️
Exists 🟢️
Watch 🟢️
WatchTree 🟢️
NewLock (Lock/Unlock) 🟢️
List 🟢️
DeleteTree 🟢️
AtomicPut 🟢️
AtomicDelete 🟢️

Supported Versions

Etcd version >= 3.0 with APIv3

Examples

package main

import (
	"context"
	"log"

	"github.com/kvtools/etcdv3"
	"github.com/kvtools/valkeyrie"
)

func main() {
	ctx := context.Background()

	config := &etcdv3.Config{
        Password: "example",
	}

	kv, err := valkeyrie.NewStore(ctx, etcdv3.StoreName, []string{"localhost:8500"}, config)
	if err != nil {
		log.Fatal("Cannot create store")
	}

	key := "foo"

	err = kv.Put(ctx, key, []byte("bar"), nil)
	if err != nil {
		log.Fatalf("Error trying to put value at key: %v", key)
	}

	pair, err := kv.Get(ctx, key, nil)
	if err != nil {
		log.Fatalf("Error trying accessing value at key: %v", key)
	}

	log.Printf("value: %s", string(pair.Value))

	err = kv.Delete(ctx, key)
	if err != nil {
		log.Fatalf("Error trying to delete key %v", key)
	}
}

Documentation

Overview

Package etcdv3 contains the etcd v3 store implementation.

Index

Constants

View Source
const StoreName = "etcdv3"

StoreName the name of the store.

Variables

This section is empty.

Functions

This section is empty.

Types

type Config

type Config struct {
	TLS               *tls.Config
	ConnectionTimeout time.Duration
	SyncPeriod        time.Duration
	Username          string
	Password          string
}

Config the etcd v3 configuration.

type Store

type Store struct {
	// contains filtered or unexported fields
}

Store implements the store.Store interface.

func New

func New(_ context.Context, addrs []string, options *Config) (*Store, error)

New creates a new etcd v3 client.

func (*Store) AtomicDelete

func (s *Store) AtomicDelete(ctx context.Context, key string, previous *store.KVPair) (bool, error)

AtomicDelete deletes a value at "key" if the key has not been modified in the meantime, throws an error if this is the case.

func (*Store) AtomicPut

func (s *Store) AtomicPut(ctx context.Context, key string, value []byte, previous *store.KVPair, opts *store.WriteOptions) (bool, *store.KVPair, error)

AtomicPut puts a value at "key" if the key has not been modified in the meantime, throws an error if this is the case.

func (*Store) Close

func (s *Store) Close() error

Close closes the client connection.

func (*Store) Delete

func (s *Store) Delete(ctx context.Context, key string) error

Delete a value at "key".

func (*Store) DeleteTree

func (s *Store) DeleteTree(ctx context.Context, directory string) error

DeleteTree deletes a range of keys under a given directory.

func (*Store) Exists

func (s *Store) Exists(ctx context.Context, key string, opts *store.ReadOptions) (bool, error)

Exists checks if the key exists inside the store.

func (*Store) Get

func (s *Store) Get(ctx context.Context, key string, opts *store.ReadOptions) (pair *store.KVPair, err error)

Get the value at "key". Returns the last modified index to use in conjunction to Atomic calls.

func (*Store) List

func (s *Store) List(ctx context.Context, directory string, opts *store.ReadOptions) ([]*store.KVPair, error)

List child nodes of a given directory.

func (*Store) NewLock

func (s *Store) NewLock(ctx context.Context, key string, opts *store.LockOptions) (lock store.Locker, err error)

NewLock returns a handle to a lock struct which can be used to provide mutual exclusion on a key.

func (*Store) Put

func (s *Store) Put(ctx context.Context, key string, value []byte, opts *store.WriteOptions) error

Put a value at "key".

func (*Store) Watch

func (s *Store) Watch(ctx context.Context, key string, opts *store.ReadOptions) (<-chan *store.KVPair, error)

Watch for changes on a "key". It returns a channel that will receive changes or pass on errors. Upon creation, the current value will first be sent to the channel. Providing a non-nil stopCh can be used to stop watching.

func (*Store) WatchTree

func (s *Store) WatchTree(ctx context.Context, directory string, opts *store.ReadOptions) (<-chan []*store.KVPair, error)

WatchTree watches for changes on a "directory". It returns a channel that will receive changes or pass on errors. Upon creating a watch, the current children values will be sent to the channel. Providing a non-nil stopCh can be used to stop watching.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL