joe icon indicating copy to clipboard operation
joe copied to clipboard

Prefix Scans for Storage Keys

Open dwmunster opened this issue 6 years ago • 3 comments

Summary

Since many uses of the Storage interface may have hierarchical keys, e.g. the permissions, it would be beneficial to have a way to iterate over keys matching a given prefix.

Basic example

for _, key := range a.store.KeysWithPrefix("joe.permissions.mymodule.") {
  ...
}

Motivation

From #28

Since we are iterating over all keys the bot knows we should expect that also non-permission keys are among them.

I suggest you update your unit test to check this is also handled correctly.

Rather than push this onto any developer who needs to interact with the permissions, we could require the Storage interface to support prefix scans. Some storage engines may have a higher performance way of doing prefix scans and we could take advantage of that. If the storage engine does not offer it, the bot could handle the naive looping over keys itself. This removes the burden from developers to implement/test this independently.

Potential Issues

  • If the prefix scan isn't optional for the Storage interface, a new release would break any third party implementations. As described above, this would not be an issue.

dwmunster avatar Oct 08 '19 16:10 dwmunster

If you're amenable, I can throw together a PR for this.

dwmunster avatar Oct 08 '19 17:10 dwmunster

Yes, I think this addition is a good new feature. You still want to submit a PR for this @dwmunster ? I have more time to work on features and review PRs in the next two weeks. Let me know if you don't have the time right now so I will give it a shot :)

fgrosse avatar Oct 20 '19 07:10 fgrosse

Sorry for taking a while to respond @fgrosse, I've gotten quite busy these past couple weeks. I should have time to put something together this weekend if you'd like. If you'd like it done before then, have at.

dwmunster avatar Oct 22 '19 12:10 dwmunster