1. 18 Apr, 2019 2 commits
    • Steven Allen's avatar
      ktds: idiomatic use of interfaces · d28fbf64
      Steven Allen authored
      Motivation: I want to be able to use the concrete type from a different package
      but I can't.
      
      This:
      
      1. Exports the concrete datastore type and avoids returning private types from
         public functions.
      2. Removes the mostly useless ktds interface. Unfortunately, it collides with
         the idiomatic name for the datastore itself.
      
      This could break something referencing the `ktds.Datastore` type but nothing is
      doing that.
      d28fbf64
    • Steven Allen's avatar
      Merge pull request #129 from ipfs/fix/sync-query · b19d692f
      Steven Allen authored
      sync: apply entire query while locked
      b19d692f
  2. 17 Apr, 2019 3 commits
  3. 13 Apr, 2019 4 commits
  4. 09 Apr, 2019 4 commits
  5. 06 Apr, 2019 1 commit
  6. 23 Mar, 2019 1 commit
  7. 22 Mar, 2019 10 commits
  8. 21 Mar, 2019 2 commits
  9. 20 Mar, 2019 5 commits
  10. 16 Mar, 2019 1 commit
  11. 15 Mar, 2019 1 commit
    • Steven Allen's avatar
      remove ThreadSafeDatastore · 9f529bc3
      Steven Allen authored
      It's a lie! We:
      
      1. Assume that our datastores are thread-safe all over the place, not bothering
         to check for this interface.
      2. Implement this interface for, e.g., the mount datastore that _may not_ be
         thread-safe (depending on the sub-datastores).
      
      Basically, there's no sane way to to do something like this in go. What we
      _want_ is:
      
      ```rust
      pub trait ThreadSafe {}
      
      struct MyWrapper<D: Datastore> { ... }
      
      impl<D: Datastore> ThreadSafe for MyWrapper<D> where D: ThreadSafe {}
      ```
      
      Actually, we don't even need this because rust has already done all the hard
      work with the `Sync` trait.
      
      ....
      
      But we're using go which barely has types.
      
      ---
      
      For completeness, it's actually possible to do this in go:
      
      ```go
      type threadSafeMixin struct{}
      func (threadSafeMixin) ThreadSafe() {}
      
      func NewWrapper(d Datastore) Datastore {
        if _, ok := d.(ThreadSafe) {
          return &struct{myWrapper, threadSafeMixin}{myWrapper{d}, threadSafeMixin{}}
        }
        return &myWrapper{d}
      }
      ```
      
      Let's not.
      9f529bc3
  12. 28 Feb, 2019 1 commit
  13. 07 Feb, 2019 1 commit
  14. 06 Feb, 2019 4 commits