dms3ns.go 1.73 KB
Newer Older
Łukasz Magiera's avatar
Łukasz Magiera committed
1 2 3 4 5 6
package node

import (
	"fmt"
	"time"

tavit ohanian's avatar
tavit ohanian committed
7 8 9 10 11 12 13 14 15 16
	util "gitlab.dms3.io/dms3/go-dms3-util"
	"gitlab.dms3.io/dms3/go-dms3ns"
	"gitlab.dms3.io/p2p/go-p2p-core/crypto"
	"gitlab.dms3.io/p2p/go-p2p-core/peerstore"
	"gitlab.dms3.io/p2p/go-p2p-core/routing"
	record "gitlab.dms3.io/p2p/go-p2p-record"

	"gitlab.dms3.io/dms3/go-dms3/namesys"
	"gitlab.dms3.io/dms3/go-dms3/namesys/republisher"
	"gitlab.dms3.io/dms3/go-dms3/repo"
Łukasz Magiera's avatar
Łukasz Magiera committed
17 18
)

tavit ohanian's avatar
tavit ohanian committed
19
const DefaultDms3NsCacheSize = 128
Łukasz Magiera's avatar
Łukasz Magiera committed
20

21
// RecordValidator provides namesys compatible routing record validator
Łukasz Magiera's avatar
Łukasz Magiera committed
22 23
func RecordValidator(ps peerstore.Peerstore) record.Validator {
	return record.NamespacedValidator{
tavit ohanian's avatar
tavit ohanian committed
24 25
		"pk":     record.PublicKeyValidator{},
		"dms3ns": dms3ns.Validator{KeyBook: ps},
Łukasz Magiera's avatar
Łukasz Magiera committed
26 27 28
	}
}

29
// Namesys creates new name system
Raúl Kripalani's avatar
Raúl Kripalani committed
30 31
func Namesys(cacheSize int) func(rt routing.Routing, repo repo.Repo) (namesys.NameSystem, error) {
	return func(rt routing.Routing, repo repo.Repo) (namesys.NameSystem, error) {
32
		return namesys.NewNameSystem(rt, repo.Datastore(), cacheSize), nil
Łukasz Magiera's avatar
Łukasz Magiera committed
33 34 35
	}
}

tavit ohanian's avatar
tavit ohanian committed
36 37
// Dms3NsRepublisher runs new DMS3NS republisher service
func Dms3NsRepublisher(repubPeriod time.Duration, recordLifetime time.Duration) func(lcProcess, namesys.NameSystem, repo.Repo, crypto.PrivKey) error {
38 39
	return func(lc lcProcess, namesys namesys.NameSystem, repo repo.Repo, privKey crypto.PrivKey) error {
		repub := republisher.NewRepublisher(namesys, repo.Datastore(), privKey, repo.Keystore())
Łukasz Magiera's avatar
Łukasz Magiera committed
40

41 42
		if repubPeriod != 0 {
			if !util.Debug && (repubPeriod < time.Minute || repubPeriod > (time.Hour*24)) {
tavit ohanian's avatar
tavit ohanian committed
43
				return fmt.Errorf("config setting DMS3NS.RepublishPeriod is not between 1min and 1day: %s", repubPeriod)
44
			}
Łukasz Magiera's avatar
Łukasz Magiera committed
45

46
			repub.Interval = repubPeriod
Łukasz Magiera's avatar
Łukasz Magiera committed
47 48
		}

49 50
		if recordLifetime != 0 {
			repub.RecordLifetime = recordLifetime
Łukasz Magiera's avatar
Łukasz Magiera committed
51 52
		}

53 54
		lc.Append(repub.Run)
		return nil
Łukasz Magiera's avatar
Łukasz Magiera committed
55 56
	}
}