Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Helidon DB Client #581

Closed
8 tasks done
tomas-langer opened this issue Apr 16, 2019 · 6 comments
Closed
8 tasks done

Helidon DB Client #581

tomas-langer opened this issue Apr 16, 2019 · 6 comments

Comments

@tomas-langer
Copy link
Member

@tomas-langer tomas-langer commented Apr 16, 2019

This is a tracking issue for Helidon DB API and implementation.

Overall the implementation should follow the Development guidelines and:

  • The implementation is full reactive and nonblocking
  • There should be no dependency of the API or core on Tracing (not even Opentracing API)
  • There should be no dependency of the API or core on Metrics
  • There should be no dependency of the API or core on Healthchecks
  • Rest will be defined in One pager

Tasks:

  • One Pager
  • API design
  • Core implementation
  • Implementation over JDBC
  • Metrics support (library + example)
  • Tracing support (library + example)
  • Health check support (library + example)
  • Implementation over Mongo reactive driver

Documentation moved to documentation epic: #1515
Native image moved to native image SE epic: #1656

@tomas-langer tomas-langer self-assigned this Apr 16, 2019
@tomas-langer tomas-langer added this to Needs triage in Backlog via automation Apr 16, 2019
@tomas-langer
Copy link
Member Author

@tomas-langer tomas-langer commented Apr 18, 2019

Depends on #596

@tomas-langer
Copy link
Member Author

@tomas-langer tomas-langer commented Apr 18, 2019

Depends on #473

@m0mus m0mus moved this from Needs triage to Normal priority in Backlog Apr 18, 2019
@tomas-langer tomas-langer moved this from Normal priority to In Progress in Backlog Apr 25, 2019
@tomas-langer
Copy link
Member Author

@tomas-langer tomas-langer commented May 5, 2019

TODOs:

All

  • Unit tests...
  •  The code is now an advanced POC - must revisit most of the code to make sure it is production quality
  •  Statement parsing (when using named params in JDBC and any params in Mongo) - the usage of a state machine is very complicated. Could we maybe live with a regular expression and limitations on what can be in the statement (such as "no comments allowed in statements")? If not, The implementation must be done again and according to our code guidelines (and also a lot lot more readable)
    • Note (Tomas): State machine was rewritten to satisfy coding standards. Regular expression is equivalent to state machine and theoretically shall work for the same set of regular languages, but in this case it may not give us better solution.
  • Add all new modules to bom pom.xml

Core and Common

  • Find a good way to stream results to web server (see DbResultSupport in both examples)
  • Make sure all error states are correctly propagated to interceptors and to user
    • Note (Tomas): I did some checks of the code, but I'm still not 100 sure, especially about the interceptors in JDBC Client. Mongo seems to be OK, it does not swallow any exceptions.

JDBC

  • Use a connection pool (see ConnectionPool interface, line 90) - and add appropriate documentation of configurable options
  • Implement support for mapping of DbRowResult (see mongoDB impl)
  • Document configuration properties of the JdbcDbProviderBuilder
  • Make sure the Flow API is correctly implemented

Mongo

  • In MongoDbStatementDml - see TODO
  • Make sure the backpressure is correctly implemented in MongoDbStatementQuery

@tomas-langer
Copy link
Member Author

@tomas-langer tomas-langer commented May 10, 2019

DB was not chosen wisely - it looks like a Database implementation.
We are creating a "Reactive DB Client" so we should rename the modules, packages and classes to reflect that

@spericas
Copy link
Member

@spericas spericas commented May 10, 2019

@tomas-langer Yes. I'd say "Reactive DB API" or "Reactive DB Client API". To me the Client is what you write for each DB itself.

@edbratt edbratt changed the title Helidon DB Helidon DB Client Aug 23, 2019
@m0mus m0mus added this to To do in Helidon 2.0 via automation Dec 12, 2019
@m0mus m0mus moved this from To do to In progress in Helidon 2.0 Dec 12, 2019
@m0mus m0mus added this to the 2.0.0 milestone Dec 12, 2019
@tomas-langer tomas-langer moved this from In Progress to Legendary in Backlog Dec 12, 2019
@Tomas-Kraus
Copy link
Member

@Tomas-Kraus Tomas-Kraus commented Dec 18, 2019

Rebased branch to master to have JDK 11 build.
Most of the tasks are already done. Adding few more things that came to my mind:

  • Start JDBC client with offline database
    MongoDB client already supports this and there are real-life use-cases for such a feature.
    Better health check support when DB is offline.
    Note: JDBC connection setup accepts HikariCP properties. initializationFailTimeout: -1 does the trick.

  • Connection Pool in Metrics
    User needs access to CP settings and also current CP state attributes.
    See https://github.com/brettwooldridge/HikariCP/wiki/Dropwizard-Metrics for implementation details

  • Update samples to cover typical use-cases
    Note: Currently there is just simple Pokemon entity with name and type String attributes.
    I would like to use more complex schema from integration tests with M:N relation between Pokemon and Type entities. Imagine this relational model:

    • Pokemon (int id, String name)
    • Type (int id, String name) readonly list of pokemon types
    • PokeType(int pokemonId, int typeId)
      and operations:
    • DML: CUD on Pokemon
      • update: name/types of pokemon(s) with specific id or name
      • delete pokemon(s) with specific id or name
    • Query/Get by int id, String name and/or Type

@m0mus m0mus added the 2.0-M1 label Jan 10, 2020
Backlog automation moved this from Legendary to Closed Apr 16, 2020
Helidon 2.0 automation moved this from In progress to Done Apr 16, 2020
@ljamen ljamen added this to Done in Helidon Doc Oct 8, 2020
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
Backlog
  
Closed
Helidon Doc
  
Done
Helidon 2.0
  
Done
Linked pull requests

Successfully merging a pull request may close this issue.

None yet
4 participants