1. 05 Dec, 2019 1 commit
  2. 03 Dec, 2019 1 commit
  3. 22 Nov, 2019 2 commits
  4. 27 Sep, 2019 1 commit
  5. 29 Aug, 2019 1 commit
    • Steven Allen's avatar
      feat: make not-found errors discoverable · 473787bf
      Steven Allen authored
      Now we just need a common place to put:
      
      func IsNotFound(e error) bool {
        for e != nil {
          if ne, ok := e.(interface { NotFound() bool }); ok {
            return ne.NotFound()
          }
          if ue, ok := e.(interface { Unwrap() error }); ok {
            e = ue.Unwrap()
          } else {
            return false
          }
        }
        return false
      }
      473787bf
  6. 21 Aug, 2019 1 commit
  7. 22 Mar, 2019 6 commits
  8. 21 Mar, 2019 2 commits
  9. 20 Mar, 2019 2 commits
  10. 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
  11. 28 Jan, 2019 1 commit
  12. 04 Oct, 2018 1 commit
    • Steven Allen's avatar
      add a GetSize method · 1cd3a342
      Steven Allen authored
      We can also add this as an extension but it's simple enough I'd like to add it
      directly to the Datastore.
      
      Use-case: The blockstore now has a GetSize and bitswap uses it for packing
      multiple blocks into a single message. Unfortunately, this means that bitswap is
      now calling blockstore.GetSize which calls datastore.Get which tends to be more
      expensive than datastore.Has.
      1cd3a342
  13. 13 Aug, 2018 1 commit
  14. 26 Jan, 2018 1 commit
  15. 24 Jan, 2018 1 commit
  16. 23 Jan, 2018 1 commit
  17. 14 Oct, 2017 1 commit
  18. 03 Jul, 2017 1 commit
  19. 28 Jun, 2017 1 commit
  20. 27 Jun, 2017 1 commit
  21. 01 Jan, 2016 1 commit
  22. 17 Jul, 2015 1 commit
  23. 16 Jul, 2015 1 commit
  24. 02 Jul, 2015 1 commit
    • Jeromy's avatar
      add in support for batched writes · df0989a3
      Jeromy authored
      implement batch ops for different datastore types
      
      rename Transaction to Batch
      
      Revert "add in support for batched writes"
      
      add in benchmarks for put and batchput
      
      move batching into separate interface
      
      address concerns from PR
      
      regrab old code
      df0989a3
  25. 27 Jun, 2015 1 commit
  26. 26 Jun, 2015 2 commits
  27. 16 Mar, 2015 4 commits