[Evergreen-dev] Thoughts on experimental OpenSRF config format change

Bill Erickson berickxx at gmail.com
Fri Nov 4 13:47:38 EDT 2022


On Fri, Nov 4, 2022 at 1:23 PM Mike Rylander <mrylander at gmail.com> wrote:

> Hi Bill,
>
> First, thanks for moving this forward!
>
> (unfortunately?) Right off the bat, I'm /really/ not liking the idea
> of merging application settings (opensrf.xml) into initial connection
> settings (opensrf_core.xml).  If anything, I'd prefer to see the
> application settings move farther away from the file system, somehow,
> rather than have to spray that info all over the place -- right now
> application config only /has/ to be colocated with the
> opensrf.settings app, but it looks like this would require it
> everywhere and in potentially only-very-slightly-different files
> (differences of service assigned, or service settings, per host) that
> would be difficult to troubleshoot.
>

Not exactly.  I didn't dig into this too much in my previous message, but
the idea was to support a single file structure, without necessarily
requiring a single file.

A ~/.srfsh.yml file might look like this:

=====
message-bus:
  domains:
    - name: private.localhost
      port: 5222
  credentials:
    opensrf:
      username: opensrf
      password: password
  connections:
    srfsh:
      credentials: opensrf
      logfile: /openils/var/log/srfsh.log
      loglevel: debug
=======

Gateway, router,  standalone client configs could be similarly paired
down.  Or, if you want just one file (like me), that works too.


>
> Setting, er, application settings aside, though, I /do/ like the idea
> of restructuring configuration files to be simpler (or at least more
> modern).
>
> (Ironic historical note: the original config file format was an
> enhanced "INI" style, with named section links (even section nesting),
> file includes, and typed values -- a lot like yaml today, but without
> the whitespace as syntax part.)
>
> I need to look at your example in more detail and do some more
> noodling on the implications, but to answer your question about
> "multi-server bricks", yes, we do and will still need that.  There are
> significant (read: cost-impacting) situations where one needs to run
> more horizontally scaled instances of service X than they need for Y,
> and in those cases running extra Ys is a waste of resources. I believe
> this comes back to "should one 'domain' be able to know about more
> than one instance of a service" -- and the answer to that is yes, we
> need that.  In fact, if you have the concept of a router (even if it's
> really just a redis stream now), and you support cross-domain
> registration, it seems like it would be extra work to /disallow/
> multiple domain-local instances of a service.
>

OK, good to know.  That should be pretty straightforward to add.


>
> Thanks again for working on this! I hope to have some time to dig into
> this in the next week or two.
>

Awesome, thanks for the feedback!

-b




>
> --
> Mike Rylander
> Research and Development Manager
> Equinox Open Library Initiative
> 1-877-OPEN-ILS (673-6457)
> work: miker at equinoxOLI.org
> personal: mrylander at gmail.com
> https://equinoxOLI.org
>
> On Fri, Nov 4, 2022 at 11:40 AM Bill Erickson via Evergreen-dev
> <evergreen-dev at list.evergreen-ils.org> wrote:
> >
> > Hi Devs,
> >
> > Some background:
> >
> > Some may recall my Redis demo at the last EG conference.  In the
> session, I proposed deprecating the OpenSRF router.  The discussion
> continued, particularly with Mike R. and Galen, where we discussed
> retaining support for multi-domain routing for high availability setups.
> (Think restarting a service on one domain/brick and having requests to said
> service get routed to another domain/brick via the Router).
> >
> > Skip ahead, I've started working on code to implement multi-domain
> support in my Redis branch, but quickly found the existing opensrf_core.xml
> file to be less than ideal with respect to defining which services run on
> which domains, among other things.
> >
> > Maybe this is an opportunity to change the configuration file format?
> As an experiment I put together a sample of what made sense to me:
> >
> >
> https://github.com/berick/OpenSRF/blob/user/berick/lpxxx-redisrf-streams-v3/examples/opensrf.yml.example
> >
> > [I used YAML because I find it tidy and flexible.  I'm more concerned
> about the configuration structure than the file type, so we could continue
> using XML or something else, but for my part YAML is superior.]
> >
> > One key difference is that the message bus / connection section is
> separated into reusable chunks:
> >
> > 1. Routable domains
> > 2. Message bus credentials
> > 3. Connection types.
> >   -- These link credentials with logging configs.
> >
> > At runtime, clients/services link a domain with a connection type to
> derive the bus connection information.
> >
> > Other benefits of the modified structure:
> >
> > * Services are collected into named groups and linked to domains instead
> of routers.
> > * Support for other named configuration chunks.  E.g. create a named
> database setup that can be referenced from the cstore, storage,
> reporter-store, etc. configurations.  Less duplication.
> > * One file format for standalone OpenSRF clients, gateways, and
> services.  The file just contains less stuff for clients that don't need
> the full data set -- or not, either works.
> > * Custom connection types for ad-hoc scripts, etc. so they don't require
> their own config file.
> >
> > And last but not least, the changes work much better for my Redis
> branch, where we have to be more explicit with our bus domains and their
> behavior for multi-domain support.
> >
> > One thing not included in the sample are host-specific setups, where a
> "brick" contains multiple hosts, some running different services than
> others.  This could be added, but I wasn't sure if that was still a common
> use case.
> >
> > Thoughts?  Other config wishlist items?
> >
> > Thanks for reading!
> >
> > -b
> >
> >
> > _______________________________________________
> > Evergreen-dev mailing list
> > Evergreen-dev at list.evergreen-ils.org
> > http://list.evergreen-ils.org/cgi-bin/mailman/listinfo/evergreen-dev
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://list.evergreen-ils.org/pipermail/evergreen-dev/attachments/20221104/77e71bba/attachment.htm>


More information about the Evergreen-dev mailing list