Github user merrimanr commented on the issue:
https://github.com/apache/metron/pull/853
The latest commit switches the persistence for storing user settings to
HBase rather than a RDBMS as discussed on the dev list. Instead of fields
being stored in RDBMS columns, the user settings object is now serialized with
Jackson and stored in HBase as a byte[]. This required several changes
including:
- Added code to setup HBase in the MPack, following the update table
pattern in the indexing MPack scripts as an example
- Added default table/cf values to REST properties
- Added a Config class to the REST app to setup an HBase client
- Added a Service class to the REST app that manages user settings in HBase
- Added tests for all new classes and updated existing tests
- Updated the REST README
I also refactored some areas to make things clearer and easier to
understand:
- Renamed AlertProfile to UserSettings and moved the endpoints to the
UserController. The thinking is that we may not want this to be limited to
just the Alerts UI.
- Refactored the REST MPack scripts to more closely align with other
components in regards to setting up Kafka, HBase, etc.
- Removed the Optional fields from a couple model classes. This was
causing issues with Jackson and I don't believe it benefits us enough to have
to deal with that complexity.
There are a couple of design issues to consider when reviewing this. The
implementation in the REST app is specific to this use case. I considered
trying to make it more generic for future HBase use cases but decided to keep
it simple for now. Instead of trying to predict what those use cases look
like and choose a pattern that works, I decided to leave that to whoever
implements a new use case in the future. I also considered making this generic
to all of Metron but again, decided to keep it simple. Should these settings
be limited to just REST/UIs? Any thoughts on this?
This has been tested in full dev and all tests are passing. In full dev,
navigate to the UserController and use the various endpoints to save and
retrieve settings for the currently logged in user. You should also be able to
log in as the admin user and see all user settings and delete an individual
user's settings. I also tested evolving the user settings model by adding new
fields and it worked without issue. Users with existing settings just return
null for new fields.
---