Skip to content

Commit 8fc87b3

Browse files
committed
wip: optional put + local db
1 parent c39499a commit 8fc87b3

6 files changed

+343
-71
lines changed

go.mod

+6-1
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,9 @@ require (
77
github.com/felixge/httpsnoop v1.0.4
88
github.com/ipfs/boxo v0.18.1-0.20240319120907-07fc4754a2d2
99
github.com/ipfs/go-cid v0.4.1
10+
github.com/ipfs/go-datastore v0.6.0
11+
github.com/ipfs/go-ds-flatfs v0.5.1
12+
github.com/ipfs/go-ds-leveldb v0.5.0
1013
github.com/ipfs/go-log/v2 v2.5.1
1114
github.com/libp2p/go-libp2p v0.33.0
1215
github.com/libp2p/go-libp2p-kad-dht v0.25.2
@@ -22,6 +25,7 @@ require (
2225

2326
require (
2427
github.com/Jorropo/jsync v1.0.1 // indirect
28+
github.com/alexbrainman/goissue34681 v0.0.0-20191006012335-3fc7a47baff5 // indirect
2529
github.com/andybalholm/brotli v1.1.0 // indirect
2630
github.com/benbjohnson/clock v1.3.5 // indirect
2731
github.com/beorn7/perks v1.0.1 // indirect
@@ -41,6 +45,7 @@ require (
4145
github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 // indirect
4246
github.com/godbus/dbus/v5 v5.1.0 // indirect
4347
github.com/gogo/protobuf v1.3.2 // indirect
48+
github.com/golang/snappy v0.0.4 // indirect
4449
github.com/google/gopacket v1.1.19 // indirect
4550
github.com/google/pprof v0.0.0-20240227163752-401108e1b7e7 // indirect
4651
github.com/google/uuid v1.6.0 // indirect
@@ -50,7 +55,6 @@ require (
5055
github.com/hashicorp/go-multierror v1.1.1 // indirect
5156
github.com/hashicorp/golang-lru v1.0.2 // indirect
5257
github.com/huin/goupnp v1.3.0 // indirect
53-
github.com/ipfs/go-datastore v0.6.0 // indirect
5458
github.com/ipfs/go-log v1.0.5 // indirect
5559
github.com/ipld/go-ipld-prime v0.21.0 // indirect
5660
github.com/jackpal/go-nat-pmp v1.0.2 // indirect
@@ -104,6 +108,7 @@ require (
104108
github.com/samber/lo v1.39.0 // indirect
105109
github.com/spaolacci/murmur3 v1.1.0 // indirect
106110
github.com/stretchr/objx v0.5.2 // indirect
111+
github.com/syndtr/goleveldb v1.0.0 // indirect
107112
github.com/whyrusleeping/go-keyspace v0.0.0-20160322163242-5b898ac5add1 // indirect
108113
github.com/xrash/smetrics v0.0.0-20231213231151-1d8dd44e695e // indirect
109114
go.opencensus.io v0.24.0 // indirect

go.sum

+22
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@ github.com/CAFxX/httpcompression v0.0.9/go.mod h1:XX8oPZA+4IDcfZ0A71Hz0mZsv/YJOg
1414
github.com/Jorropo/jsync v1.0.1 h1:6HgRolFZnsdfzRUj+ImB9og1JYOxQoReSywkHOGSaUU=
1515
github.com/Jorropo/jsync v1.0.1/go.mod h1:jCOZj3vrBCri3bSU3ErUYvevKlnbssrXeCivybS5ABQ=
1616
github.com/aead/siphash v1.0.1/go.mod h1:Nywa3cDsYNNK3gaciGTWPwHt0wlpNV15vwmswBAUSII=
17+
github.com/alexbrainman/goissue34681 v0.0.0-20191006012335-3fc7a47baff5 h1:iW0a5ljuFxkLGPNem5Ui+KBjFJzKg4Fv2fnxe4dvzpM=
18+
github.com/alexbrainman/goissue34681 v0.0.0-20191006012335-3fc7a47baff5/go.mod h1:Y2QMoi1vgtOIfc+6DhrMOGkLoGzqSV2rKp4Sm+opsyA=
1719
github.com/andybalholm/brotli v1.0.5/go.mod h1:fO7iG3H7G2nSZ7m0zPUDn85XEX2GTukHGRSepvi9Eig=
1820
github.com/andybalholm/brotli v1.1.0 h1:eLKJA0d02Lf0mVpIDgYnqXcUn0GqVmEFny3VuID1U3M=
1921
github.com/andybalholm/brotli v1.1.0/go.mod h1:sms7XGricyQI9K10gOSf56VKKWS4oLer58Q+mhRPtnY=
@@ -135,6 +137,8 @@ github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw
135137
github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg=
136138
github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
137139
github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
140+
github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM=
141+
github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
138142
github.com/google/brotli/go/cbrotli v0.0.0-20230829110029-ed738e842d2f h1:jopqB+UTSdJGEJT8tEqYyE29zN91fi2827oLET8tl7k=
139143
github.com/google/brotli/go/cbrotli v0.0.0-20230829110029-ed738e842d2f/go.mod h1:nOPhAkwVliJdNTkj3gXpljmWhjc4wCaVqbMJcPKWP4s=
140144
github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
@@ -182,6 +186,7 @@ github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ
182186
github.com/hashicorp/golang-lru v1.0.2 h1:dV3g9Z/unq5DpblPpw+Oqcv4dU/1omnb4Ok8iPY6p1c=
183187
github.com/hashicorp/golang-lru v1.0.2/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4=
184188
github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ=
189+
github.com/hpcloud/tail v1.0.0 h1:nfCOvKYfkgYP8hkirhJocXT2+zOD8yUNjXaWfTlyFKI=
185190
github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
186191
github.com/huin/goupnp v1.3.0 h1:UvLUlWDNpoUdYzb2TCn+MuTWtcjXKSza2n6CBdQ0xXc=
187192
github.com/huin/goupnp v1.3.0/go.mod h1:gnGPsThkYa7bFi/KWmEysQRf48l2dvR5bxr2OFckNX8=
@@ -193,19 +198,26 @@ github.com/ipfs/go-cid v0.4.1 h1:A/T3qGvxi4kpKWWcPC/PgbvDA2bjVLO7n4UeVwnbs/s=
193198
github.com/ipfs/go-cid v0.4.1/go.mod h1:uQHwDeX4c6CtyrFwdqyhpNcxVewur1M7l7fNU7LKwZk=
194199
github.com/ipfs/go-datastore v0.1.0/go.mod h1:d4KVXhMt913cLBEI/PXAy6ko+W7e9AhyAKBGh803qeE=
195200
github.com/ipfs/go-datastore v0.1.1/go.mod h1:w38XXW9kVFNp57Zj5knbKWM2T+KOZCGDRVNdgPHtbHw=
201+
github.com/ipfs/go-datastore v0.5.0/go.mod h1:9zhEApYMTl17C8YDp7JmU7sQZi2/wqiYh73hakZ90Bk=
196202
github.com/ipfs/go-datastore v0.6.0 h1:JKyz+Gvz1QEZw0LsX1IBn+JFCJQH4SJVFtM4uWU0Myk=
197203
github.com/ipfs/go-datastore v0.6.0/go.mod h1:rt5M3nNbSO/8q1t4LNkLyUwRs8HupMeN/8O4Vn9YAT8=
198204
github.com/ipfs/go-detect-race v0.0.1 h1:qX/xay2W3E4Q1U7d9lNs1sU9nvguX0a7319XbyQ6cOk=
199205
github.com/ipfs/go-detect-race v0.0.1/go.mod h1:8BNT7shDZPo99Q74BpGMK+4D8Mn4j46UU0LZ723meps=
200206
github.com/ipfs/go-ds-badger v0.0.7/go.mod h1:qt0/fWzZDoPW6jpQeqUjR5kBfhDNB65jd9YlmAvpQBk=
207+
github.com/ipfs/go-ds-flatfs v0.5.1 h1:ZCIO/kQOS/PSh3vcF1H6a8fkRGS7pOfwfPdx4n/KJH4=
208+
github.com/ipfs/go-ds-flatfs v0.5.1/go.mod h1:RWTV7oZD/yZYBKdbVIFXTX2fdY2Tbvl94NsWqmoyAX4=
201209
github.com/ipfs/go-ds-leveldb v0.1.0/go.mod h1:hqAW8y4bwX5LWcCtku2rFNX3vjDZCy5LZCg+cSZvYb8=
210+
github.com/ipfs/go-ds-leveldb v0.5.0 h1:s++MEBbD3ZKc9/8/njrn4flZLnCuY9I79v94gBUNumo=
211+
github.com/ipfs/go-ds-leveldb v0.5.0/go.mod h1:d3XG9RUDzQ6V4SHi8+Xgj9j1XuEk1z82lquxrVbml/Q=
202212
github.com/ipfs/go-ipfs-delay v0.0.0-20181109222059-70721b86a9a8/go.mod h1:8SP1YXK1M1kXuc4KJZINY3TQQ03J2rwBG9QfXmbRPrw=
203213
github.com/ipfs/go-ipfs-util v0.0.1/go.mod h1:spsl5z8KUnrve+73pOhSVZND1SIxPW5RyBCNzQxlJBc=
204214
github.com/ipfs/go-ipfs-util v0.0.3 h1:2RFdGez6bu2ZlZdI+rWfIdbQb1KudQp3VGwPtdNCmE0=
205215
github.com/ipfs/go-ipfs-util v0.0.3/go.mod h1:LHzG1a0Ig4G+iZ26UUOMjHd+lfM84LZCrn17xAKWBvs=
206216
github.com/ipfs/go-log v0.0.1/go.mod h1:kL1d2/hzSpI0thNYjiKfjanbVNU+IIGA/WnNESY9leM=
217+
github.com/ipfs/go-log v1.0.3/go.mod h1:OsLySYkwIbiSUR/yBTdv1qPtcE4FW3WPWk/ewz9Ru+A=
207218
github.com/ipfs/go-log v1.0.5 h1:2dOuUCB1Z7uoczMWgAyDck5JLb72zHzrMnGnCNNbvY8=
208219
github.com/ipfs/go-log v1.0.5/go.mod h1:j0b8ZoR+7+R99LD9jZ6+AJsrzkPbSXbZfGakb5JPtIo=
220+
github.com/ipfs/go-log/v2 v2.0.3/go.mod h1:O7P1lJt27vWHhOwQmcFEvlmo49ry2VY2+JfBWFaa9+0=
209221
github.com/ipfs/go-log/v2 v2.1.3/go.mod h1:/8d0SH3Su5Ooc31QlL1WysJhvyOTDCjcCZ9Axpmri6g=
210222
github.com/ipfs/go-log/v2 v2.5.1 h1:1XdUzF7048prq4aBjDQQ4SL5RxftpRGdXhNRwKSAlcY=
211223
github.com/ipfs/go-log/v2 v2.5.1/go.mod h1:prSpmC1Gpllc9UYWxDiZDreBYw7zp4Iqp1kOLU9U5UI=
@@ -244,6 +256,7 @@ github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxv
244256
github.com/koron/go-ssdp v0.0.4 h1:1IDwrghSKYM7yLf7XCzbByg2sJ/JcNOZRXS2jczTwz0=
245257
github.com/koron/go-ssdp v0.0.4/go.mod h1:oDXq+E5IL5q0U8uSBcoAXzTzInwy5lEgC91HoKtbmZk=
246258
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
259+
github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI=
247260
github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI=
248261
github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
249262
github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
@@ -370,6 +383,7 @@ github.com/multiformats/go-varint v0.0.7/go.mod h1:r8PUYw/fD/SjBCiKOoDlGF6QawOEL
370383
github.com/neelance/astrewrite v0.0.0-20160511093645-99348263ae86/go.mod h1:kHJEU3ofeGjhHklVoIGuVj85JJwZ6kWPaJwCIxgnFmo=
371384
github.com/neelance/sourcemap v0.0.0-20151028013722-8c68805598ab/go.mod h1:Qr6/a/Q4r9LP1IltGz7tA7iOK1WonHEYhu1HRBA7ZiM=
372385
github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
386+
github.com/onsi/ginkgo v1.7.0 h1:WSHQ+IS43OoUrWtD1/bbclrwK8TTH5hzp+umCiuxHgs=
373387
github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
374388
github.com/onsi/ginkgo/v2 v2.15.0 h1:79HwNRBAZHOEwrczrgSOPy+eFTTlIGELKy5as+ClttY=
375389
github.com/onsi/ginkgo/v2 v2.15.0/go.mod h1:HlxMHtYF57y6Dpf+mc5529KKmSq9h2FpCF+/ZkwUxKM=
@@ -380,6 +394,7 @@ github.com/opencontainers/runtime-spec v1.0.2/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/
380394
github.com/opencontainers/runtime-spec v1.2.0 h1:z97+pHb3uELt/yiAWD691HNHQIF07bE7dzrbT927iTk=
381395
github.com/opencontainers/runtime-spec v1.2.0/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0=
382396
github.com/opentracing/opentracing-go v1.0.2/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o=
397+
github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o=
383398
github.com/opentracing/opentracing-go v1.2.0 h1:uEJPy/1a5RIPAJ0Ov+OIO8OxWu77jEv+1B0VhjKrZUs=
384399
github.com/opentracing/opentracing-go v1.2.0/go.mod h1:GxEUsuufX4nBwe+T+Wl9TAgYrxe9dPLANfrWvHYVTgc=
385400
github.com/openzipkin/zipkin-go v0.1.1/go.mod h1:NtoC/o8u3JlF1lSlyPNswIbeQH9bJTmOf0Erfk+hxe8=
@@ -489,6 +504,7 @@ github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o
489504
github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
490505
github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg=
491506
github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
507+
github.com/syndtr/goleveldb v1.0.0 h1:fBdIW9lB4Iz0n9khmH8w27SJ3QEJ7+IgjPEwGSZiFdE=
492508
github.com/syndtr/goleveldb v1.0.0/go.mod h1:ZVVdQEZoIme9iO1Ch2Jdy24qqXrMMOU6lpPAyBWyWuQ=
493509
github.com/tarm/serial v0.0.0-20180830185346-98f6abe2eb07/go.mod h1:kDXzergiv9cbyO7IOYJZWg1U88JhDg3PB6klq9Hg2pA=
494510
github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0=
@@ -525,6 +541,7 @@ go.opentelemetry.io/otel/metric v1.24.0 h1:6EhoGWWK28x1fbpA4tYTOWBkPefTDQnb8WSGX
525541
go.opentelemetry.io/otel/metric v1.24.0/go.mod h1:VYhLe1rFfxuTXLgj4CBiyz+9WYBA8pNGJgDcSFRKBco=
526542
go.opentelemetry.io/otel/trace v1.24.0 h1:CsKnnL4dUAr/0llH9FKuc698G04IrpWV0MQA/Y1YELI=
527543
go.opentelemetry.io/otel/trace v1.24.0/go.mod h1:HPc3Xr/cOApsBI154IU0OI0HJexz+aw5uPdbs3UCjNU=
544+
go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE=
528545
go.uber.org/atomic v1.6.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ=
529546
go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc=
530547
go.uber.org/atomic v1.11.0 h1:ZvwS0R+56ePWxUNi+Atn9dWONBPp/AUETXlHW0DxSjE=
@@ -538,11 +555,13 @@ go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto=
538555
go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE=
539556
go.uber.org/mock v0.4.0 h1:VcM4ZOtdbR4f6VXfiOpwpVJDL6lCReaZ6mw31wqh7KU=
540557
go.uber.org/mock v0.4.0/go.mod h1:a6FSlNadKUHUa9IP5Vyt1zh4fC7uAwxMutEAscFbkZc=
558+
go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0=
541559
go.uber.org/multierr v1.5.0/go.mod h1:FeouvMocqHpRaaGuG9EjoKcStLC43Zu/fmqdUMPcKYU=
542560
go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU=
543561
go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0=
544562
go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y=
545563
go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee/go.mod h1:vJERXedbb3MVM5f9Ejo0C68/HhF8uaILCdgjnY+goOA=
564+
go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q=
546565
go.uber.org/zap v1.16.0/go.mod h1:MA8QOfq0BHJwdXa996Y4dYkAqRKB8/1K1QMMZVaNZjQ=
547566
go.uber.org/zap v1.19.1/go.mod h1:j3DNczoxDZroyBnOT1L/Q79cfUMGZxlv/9dzN7SM1rI=
548567
go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8=
@@ -714,13 +733,16 @@ google.golang.org/protobuf v1.32.0 h1:pPC6BG5ex8PDFnkbrGU3EixyhKcQ2aDuBS36lqK/C7
714733
google.golang.org/protobuf v1.32.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos=
715734
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
716735
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
736+
gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
717737
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
718738
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
719739
gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI=
740+
gopkg.in/fsnotify.v1 v1.4.7 h1:xOHLXZwVvI9hhs+cLKq5+I5onOuwQLhQwiu63xxlHs4=
720741
gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys=
721742
gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw=
722743
gopkg.in/src-d/go-cli.v0 v0.0.0-20181105080154-d492247bbc0d/go.mod h1:z+K8VcOYVYcSwSjGebuDL6176A1XskgbtNl64NSg+n8=
723744
gopkg.in/src-d/go-log.v1 v1.0.1/go.mod h1:GN34hKP0g305ysm2/hctJ0Y8nWP3zxXXJ8GFabTyABE=
745+
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ=
724746
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw=
725747
gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
726748
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=

main.go

+30-1
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,24 @@ func main() {
3636
EnvVars: []string{"SOMEGUY_ACCELERATED_DHT"},
3737
Usage: "run the accelerated DHT client",
3838
},
39+
&cli.BoolFlag{
40+
Name: "put-enabled",
41+
Value: false,
42+
EnvVars: []string{"SOMEGUY_PUT_ENABLED"},
43+
Usage: "enables HTTP PUT endpoints",
44+
},
45+
&cli.StringFlag{
46+
Name: "datadir",
47+
Value: "",
48+
EnvVars: []string{"SOMEGUY_DATADIR"},
49+
Usage: "directory for persistent data",
50+
},
51+
&cli.StringFlag{
52+
Name: "datastore",
53+
Value: "flatfs",
54+
EnvVars: []string{"SOMEGUY_DATASTORE"},
55+
Usage: "type of datastore to use, such as flatfs or influxdb",
56+
},
3957
&cli.StringSliceFlag{
4058
Name: "provider-endpoints",
4159
Value: cli.NewStringSlice(cidContactEndpoint),
@@ -56,7 +74,18 @@ func main() {
5674
},
5775
},
5876
Action: func(ctx *cli.Context) error {
59-
return start(ctx.Context, ctx.String("listen-address"), ctx.Bool("accelerated-dht"), ctx.StringSlice("provider-endpoints"), ctx.StringSlice("peer-endpoints"), ctx.StringSlice("ipns-endpoints"))
77+
options := &serverOptions{
78+
listenAddress: ctx.String("listen-address"),
79+
acceleratedDHT: ctx.Bool("accelerated-dht"),
80+
putEnabled: ctx.Bool("put-enabled"),
81+
contentEndpoints: ctx.StringSlice("provider-endpoints"),
82+
peerEndpoints: ctx.StringSlice("peer-endpoints"),
83+
ipnsEndpoints: ctx.StringSlice("ipns-endpoints"),
84+
datadir: ctx.String("datadir"),
85+
datastore: ctx.String("datastore"),
86+
}
87+
88+
return startServer(ctx.Context, options)
6089
},
6190
},
6291
{

server.go

+79-43
Original file line numberDiff line numberDiff line change
@@ -32,59 +32,37 @@ func withRequestLogger(next http.Handler) http.Handler {
3232
})
3333
}
3434

35-
func start(ctx context.Context, listenAddress string, runAcceleratedDHTClient bool, contentEndpoints, peerEndpoints, ipnsEndpoints []string) error {
36-
h, err := newHost(runAcceleratedDHTClient)
37-
if err != nil {
38-
return err
39-
}
40-
41-
var dhtRouting routing.Routing
42-
if runAcceleratedDHTClient {
43-
wrappedDHT, err := newBundledDHT(ctx, h)
44-
if err != nil {
45-
return err
46-
}
47-
dhtRouting = wrappedDHT
48-
} else {
49-
standardDHT, err := dht.New(ctx, h, dht.Mode(dht.ModeClient), dht.BootstrapPeers(dht.GetDefaultBootstrapPeerAddrInfos()...))
50-
if err != nil {
51-
return err
52-
}
53-
dhtRouting = standardDHT
54-
}
55-
56-
crRouters, err := getCombinedRouting(contentEndpoints, dhtRouting)
57-
if err != nil {
58-
return err
59-
}
60-
61-
prRouters, err := getCombinedRouting(peerEndpoints, dhtRouting)
62-
if err != nil {
63-
return err
64-
}
35+
type serverOptions struct {
36+
listenAddress string
37+
acceleratedDHT bool
38+
putEnabled bool
39+
contentEndpoints []string
40+
peerEndpoints []string
41+
ipnsEndpoints []string
42+
43+
datadir string
44+
datastore string
45+
}
6546

66-
ipnsRouters, err := getCombinedRouting(ipnsEndpoints, dhtRouting)
47+
func startServer(ctx context.Context, options *serverOptions) error {
48+
router, err := newRouter(ctx, options)
6749
if err != nil {
6850
return err
6951
}
7052

71-
_, port, err := net.SplitHostPort(listenAddress)
53+
_, port, err := net.SplitHostPort(options.listenAddress)
7254
if err != nil {
7355
return err
7456
}
7557

76-
log.Printf("Listening on %s", listenAddress)
58+
log.Printf("Listening on %s", options.listenAddress)
7759
log.Printf("Delegated Routing API on http://127.0.0.1:%s/routing/v1", port)
7860

7961
mdlw := middleware.New(middleware.Config{
8062
Recorder: metrics.NewRecorder(metrics.Config{Prefix: "someguy"}),
8163
})
8264

83-
handler := server.Handler(&composableRouter{
84-
providers: crRouters,
85-
peers: prRouters,
86-
ipns: ipnsRouters,
87-
})
65+
handler := server.Handler(router)
8866

8967
// Add CORS.
9068
handler = cors.New(cors.Options{
@@ -108,8 +86,66 @@ func start(ctx context.Context, listenAddress string, runAcceleratedDHTClient bo
10886

10987
http.Handle("/debug/metrics/prometheus", promhttp.Handler())
11088
http.Handle("/", handler)
111-
server := &http.Server{Addr: listenAddress, Handler: nil}
89+
server := &http.Server{Addr: options.listenAddress, Handler: nil}
11290
return server.ListenAndServe()
91+
92+
// TODO: call .Close in database on exit
93+
}
94+
95+
func newRouter(ctx context.Context, options *serverOptions) (server.ContentRouter, error) {
96+
h, err := newHost(options.acceleratedDHT)
97+
if err != nil {
98+
return nil, err
99+
}
100+
101+
var dhtRouting routing.Routing
102+
if options.acceleratedDHT {
103+
wrappedDHT, err := newBundledDHT(ctx, h)
104+
if err != nil {
105+
return nil, err
106+
}
107+
dhtRouting = wrappedDHT
108+
} else {
109+
standardDHT, err := dht.New(ctx, h, dht.Mode(dht.ModeClient), dht.BootstrapPeers(dht.GetDefaultBootstrapPeerAddrInfos()...))
110+
if err != nil {
111+
return nil, err
112+
}
113+
dhtRouting = standardDHT
114+
}
115+
116+
crRouters, err := getCombinedRouting(options.contentEndpoints, dhtRouting, options.putEnabled)
117+
if err != nil {
118+
return nil, err
119+
}
120+
121+
prRouters, err := getCombinedRouting(options.peerEndpoints, dhtRouting, options.putEnabled)
122+
if err != nil {
123+
return nil, err
124+
}
125+
126+
ipnsRouters, err := getCombinedRouting(options.ipnsEndpoints, dhtRouting, options.putEnabled)
127+
if err != nil {
128+
return nil, err
129+
}
130+
131+
remoteRouter := &composableRouter{
132+
providers: crRouters,
133+
peers: prRouters,
134+
ipns: ipnsRouters,
135+
}
136+
137+
if options.datadir == "" {
138+
return remoteRouter, nil
139+
}
140+
141+
localRouter, err := newLocalRouter(options.datastore, options.datadir)
142+
if err != nil {
143+
return nil, err
144+
}
145+
146+
return &parallelRouter{
147+
routers: []router{localRouter, remoteRouter},
148+
}, nil
113149
}
114150

115151
func newHost(highOutboundLimits bool) (host.Host, error) {
@@ -146,9 +182,9 @@ func newHost(highOutboundLimits bool) (host.Host, error) {
146182
return h, nil
147183
}
148184

149-
func getCombinedRouting(endpoints []string, dht routing.Routing) (router, error) {
185+
func getCombinedRouting(endpoints []string, dht routing.Routing, putEnabled bool) (router, error) {
150186
if len(endpoints) == 0 {
151-
return libp2pRouter{routing: dht}, nil
187+
return libp2pRouter{routing: dht, putEnabled: putEnabled}, nil
152188
}
153189

154190
var routers []router
@@ -158,10 +194,10 @@ func getCombinedRouting(endpoints []string, dht routing.Routing) (router, error)
158194
if err != nil {
159195
return nil, err
160196
}
161-
routers = append(routers, clientRouter{Client: drclient})
197+
routers = append(routers, clientRouter{client: drclient, putEnabled: putEnabled})
162198
}
163199

164200
return parallelRouter{
165-
routers: append(routers, libp2pRouter{routing: dht}),
201+
routers: append(routers, libp2pRouter{routing: dht, putEnabled: putEnabled}),
166202
}, nil
167203
}

0 commit comments

Comments
 (0)