dlock

package module
v1.2.0 Latest Latest
Warning

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

Go to latest
Published: Dec 26, 2019 License: Apache-2.0 Imports: 11 Imported by: 0

README

Distributed Lock

Preface

After considered many of implementations of distributed lock with Golang, I prefered like to write it by myself.

This is an ETCD-based implementation and used v3 protocol for performance enhancement. Simple & Easy, enjoy it!

How to use it?

1. Start an ETCD instance using Docker container
docker run -d --name etcd-server \
--publish 2379:2379 \
--publish 2380:2380 \
--env ALLOW_NONE_AUTHENTICATION=yes \
--env ETCD_ADVERTISE_CLIENT_URLS=http://etcd-server:2379 \
bitnami/etcd:latest
2. Code Sample
dl, err := dlock.NewDistributedLock(DistributedLockOptions{
    Key:         "/KEY-SPEC-100",
    ETCDAddress: "http://127.0.0.1:2379", //accessible ETCD instance.
    TTL:         5,
    //hook function to receive an event while acquiring the lock.
    HoldingLockFunc: func() {
        fmt.Println("You are master now...!")

    },
    //hook function to receive an event while losing the lock.
    LosingLockFunc: func() {
        fmt.Println("You've lost master role, waiting...")
    },
})
if err != nil {
    panic(err)
}

dl.TryGetLock()

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type DistributedLockOptions

type DistributedLockOptions struct {
	Key         string
	ETCDAddress string
	TTL         int
	//It'll be trigger when get lock.
	HoldingLockFunc func()
	//It'll be trigger when lost lock.
	LosingLockFunc func()
	// contains filtered or unexported fields
}

type DistributedLockStub

type DistributedLockStub struct {
	Owner string
	// contains filtered or unexported fields
}

This is a simple object which holds by the real lock. Add more contextual information if needed.

type DistributedLocker

type DistributedLocker interface {
	TryGetLock() error
	Close()
}

func NewDistributedLock

func NewDistributedLock(option DistributedLockOptions) (DistributedLocker, error)

Immediately create a new distributed lock instance when there is no any instance with the same Key being created before.

Jump to

Keyboard shortcuts

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