Skip to content

Release planning

John Morrice edited this page Jul 22, 2017 · 42 revisions

Godless release planning

Check the releases page to discover the current state of godless.

v0.21.0

v0.21.0 will look into expanding use cases for Godless.

It would be very nice to use godless in a short lived process (think apt-cache) rather than in a long running one (think bittorrent)

I am not at all sure how well this would work, but the following tools are not hard to write and will be revealing:

  • One shot index replicator
  • One shot namespace sync (ipfs pin)

v0.20.0

v0.20.0 will boost performance so the demo can process a lot of data without the user getting bored. This release may be delayed so that we can get the demo in the first place :)

Performance boosting ideas

These all require investigation. Should make before/after charts and see if the change is worth it. There has not been much effort to make the current design fast, so it has the advantage of being quite simple (or basic perhaps :)

  • Memory image tracks namespaces. Currently, every call to join data will write to IPFS before returning to the client. We should instead write the new namespace to the memory image, just like we do for the index now. However, some people might actually want us to write every piece of data to IPFS, because then we can return a hash pointing to their data. Through decoupling the IPFS adds from the query-response workflow, finding the hash of the data would become much harder. It might make sense to have this be configurable via an option on api.Request. Call it AddNow? Of these ideas, this is the only one where I am already certain it will have a big impact.
  • Index tracks rows. Index currently only tracks tables. We should do more complex indexing to enable faster lookup. This also requires more complex query analysis and is likely to be expensive wrt development time.
  • Improve namespace copy performance
  • Improve namespace iteration performance
  • Reduce bandwidth use for downloading index from IPFS. The obvious way is to make the index smaller somehow, but we could also try a tighter integration with IPFS.

v0.19.0

At alpha 18, making the demo will be a little painful but doable. v0.19.0 will make the Godless API more friendly to enable cleaner code in the demo.

User functions

It should be possible to add new matcher functions into godless. Functions need a clean, simple, API and an easy way to hook them into the system via the root package.

Regex/wildcard string search

Up to alpha 18 only provides exact match or not-exact match searches. We must provide wildcards and regex so that people can find packages and versions.

String difference search

Would be very nice to have a string-difference search function. So that people can search for things they don't exactly know the name of.

One shot support

Delayed until the future.

A lot of stuff in Godless is written from the perspective of a long running server. Should investigate any API improvements for the case of calling Godless directly from a transient user process.

Expose WebService handlers from root package

This will allow the demo to embed godless and provide a service interface.

Done in v0.18.0

Parametrised queries

Since we use a relatively grown up approach to parsing, this should not be too difficult. Need to add a placeholder ('?') to the grammar. The AST type for literals will be modified so it could be a placeholder. These placeholders will also contain source code line and character position, so they can be ordered. At query compile time, swap the placeholders for given parameters.

Alpha 18 (v0.18.0)

Query console

I'm beginning work on a demo app on top of Godless and the idea of reflecting on the app domain by sending godless query plumbing commands was dreadful.

Dirty tracker for memory image writes

If you've run alpha 17 you'll have noticed the periodic writes to IPFS. This pulsing should only occur under load.

Drop gorilla/mux dependency

Unit tests for packages with poor coverage

Basic functional tests for services package and root package.