Skip to content

tus/tusd-etcd3-locker

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

7 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

tusd-etcd3-locker

This repository contains an etcd3-backed locker for tusd for handling concurrent uploads.

To initialize a locker, a pre-existing connected etcd3 client must be present.

  client, err := clientv3.New(clientv3.Config{
      Endpoints:   []string{harness.Endpoint},
      DialTimeout: 5 * time.Second,
  })

Import the package:

import "github.com/tusd/tusd-etcd3-locker/pkg/etcd3locker"

For the most basic locker (e.g. non-shared etcd3 cluster / use default TTLs), a locker can be instantiated like the following:

  locker, err := etcd3locker.New(client)
  if err != nil {
      return nil, fmt.Errorf("Failed to create etcd locker: %v", err.Error())
  }

The locker will need to be included in composer that is used by tusd:

  composer := handler.NewStoreComposer()
  locker.UseIn(composer)

For a shared etcd3 cluster, you may want to modify the prefix that etcd3locker uses to ensure proper namespacing:

  locker, err := etcd3locker.NewWithPrefix(client, "my-prefix")
  if err != nil {
      return nil, fmt.Errorf("Failed to create etcd locker: %v", err.Error())
  }

For full control over all options, an etcd3.LockerOptions may be passed into etcd3.NewWithLockerOptions like the following example:

  ttl := 15 // seconds
  options := etcd3locker.NewLockerOptions(ttl, "my-prefix")
  locker, err := etcd3locker.NewWithLockerOptions(client, options)
  if err != nil {
      return nil, fmt.Errorf("Failed to create etcd locker: %v", err.Error())
  }

As of this time of writing, this locker has been tested on etcd versions 3.1/3.2/3.3.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages