@cryptotaxi247 / kubo / commits / f3e141b3c

feat(routingd) add support for redis

Brian Tiger Chow committed Feb 6, 2015 at 17:21 UTC f3e141b3cf6547c1ec675cb33aa7a98c0caf1233
1 file changed +40 -12
cmd/ipfs_routingd/main.go
+40 -12
@@ -1,35 +1,40 @@
1 package main
2
3 import (
4 + "errors"
5 "flag"
6 "log"
7 "os"
8 "os/signal"
9 + "time"
10
11 context "github.com/jbenet/go-ipfs/Godeps/_workspace/src/code.google.com/p/go.net/context"
12 aws "github.com/jbenet/go-ipfs/Godeps/_workspace/src/github.com/crowdmob/goamz/aws"
13 s3 "github.com/jbenet/go-ipfs/Godeps/_workspace/src/github.com/crowdmob/goamz/s3"
14 + "github.com/jbenet/go-ipfs/Godeps/_workspace/src/github.com/fzzy/radix/redis"
15 "github.com/jbenet/go-ipfs/Godeps/_workspace/src/github.com/jbenet/go-datastore"
16 syncds "github.com/jbenet/go-ipfs/Godeps/_workspace/src/github.com/jbenet/go-datastore/sync"
17 core "github.com/jbenet/go-ipfs/core"
18 corerouting "github.com/jbenet/go-ipfs/core/corerouting"
19 config "github.com/jbenet/go-ipfs/repo/config"
20 fsrepo "github.com/jbenet/go-ipfs/repo/fsrepo"
21 + redisds "github.com/jbenet/go-ipfs/thirdparty/redis-datastore"
22 s3datastore "github.com/jbenet/go-ipfs/thirdparty/s3-datastore"
23 ds2 "github.com/jbenet/go-ipfs/util/datastore2"
24 )
25
26 var (
23 - s3bucket = flag.String("aws-bucket", "", "S3 bucket for routing datastore")
27 + ttl = flag.Duration("ttl", 12*time.Hour, "routing datastore (also available: aws)")
28 + redisHost = flag.String("redis-host", "localhost:6379", "redis tcp host address:port")
29 + redisPassword = flag.String("redis-pass", "", "redis password if required")
30 + datastoreOption = flag.String("datastore", "redis", "routing datastore (also available: aws)")
31 + s3bucket = flag.String("aws-bucket", "", "S3 bucket for aws routing datastore")
32 s3region = flag.String("aws-region", aws.USWest2.Name, "S3 region")
33 nBitsForKeypair = flag.Int("b", 1024, "number of bits for keypair (if repo is uninitialized)")
34 )
35
36 func main() {
37 flag.Parse()
30 - if *s3bucket == "" {
31 - log.Fatal("bucket is required")
32 - }
38 if err := run(); err != nil {
39 log.Println(err)
40 }
@@ -56,18 +61,41 @@ func run() error {
61 if err := repo.Open(); err != nil { // owned by node
62 return err
63 }
59 - s3, err := makeS3Datastore()
60 - if err != nil {
61 - return err
62 - }
63 - enhanced, err := enhanceDatastore(s3)
64 - if err != nil {
65 - return err
64 +
65 + var ds datastore.ThreadSafeDatastore
66 + switch *datastoreOption {
67 + case "redis":
68 + redisClient, err := redis.Dial("tcp", *redisHost)
69 + if err != nil {
70 + return err
71 + }
72 + if *redisPassword != "" {
73 + if err := redisClient.Cmd("AUTH", *redisPassword).Err; err != nil {
74 + return err
75 + }
76 + }
77 + redisds, err := redisds.NewExpiringDatastore(redisClient, *ttl)
78 + if err != nil {
79 + return err
80 + }
81 + ds = redisds
82 + case "aws":
83 + s3raw, err := makeS3Datastore()
84 + if err != nil {
85 + return err
86 + }
87 + s3, err := enhanceDatastore(s3raw)
88 + if err != nil {
89 + return err
90 + }
91 + ds = s3
92 + default:
93 + return errors.New("unsupported datastore type")
94 }
95 node, err := core.NewIPFSNode(ctx,
96 core.OnlineWithOptions(
97 repo,
70 - corerouting.SupernodeServer(enhanced),
98 + corerouting.SupernodeServer(ds),
99 core.DefaultHostOption),
100 )
101 if err != nil {