put pubkey and ipns entry to dht in parallel
License: MIT Signed-off-by: Jeromy <jeromyj@gmail.com>
Jeromy committed
Feb 10, 2016 at 17:03 UTC
e8f48f1a1e6e125750aa24c4eb238c251b91698b
1 file changed
+25
-2
namesys/publisher.go
+25
-2
@@ -146,12 +146,22 @@ func PutRecordToRouting(ctx context.Context, k ci.PrivKey, value path.Path, seqn
146
entry.Ttl = proto.Uint64(uint64(ttl.Nanoseconds()))
147
}
148
149
- err = PublishEntry(ctx, r, ipnskey, entry)
149
+ errs := make(chan error)
150
+
151
+ go func() {
152
+ errs <- PublishEntry(ctx, r, ipnskey, entry)
153
+ }()
154
+
155
+ go func() {
156
+ errs <- PublishPublicKey(ctx, r, namekey, k.GetPublic())
157
+ }()
158
+
159
+ err = waitOnErrChan(ctx, errs)
160
if err != nil {
161
return err
162
}
163
154
- err = PublishPublicKey(ctx, r, namekey, k.GetPublic())
164
+ err = waitOnErrChan(ctx, errs)
165
if err != nil {
166
return err
167
}
@@ -159,6 +169,19 @@ func PutRecordToRouting(ctx context.Context, k ci.PrivKey, value path.Path, seqn
169
return nil
170
}
171
172
+func waitOnErrChan(ctx context.Context, errs chan error) error {
173
+ select {
174
+ case err := <-errs:
175
+ if err != nil {
176
+ return err
177
+ }
178
+ case <-ctx.Done():
179
+ return ctx.Err()
180
+ }
181
+
182
+ return nil
183
+}
184
+
185
func PublishPublicKey(ctx context.Context, r routing.IpfsRouting, k key.Key, pubk ci.PubKey) error {
186
log.Debugf("Storing pubkey at: %s", k)
187
pkbytes, err := pubk.Bytes()