Hi Niels,

> Do you see a way to invalidate cache for all
> instances? What do you think are the possibilities?

Some time ago, discussing about GeoFence in a clustered environment, we were 
thinking about using a distributed cache, such as ehcache or hazelcast, in 
place of the currently used cache implementation.

If the cluster is implemented using jms  
(http://docs.geoserver.org/latest/en/user/community/jms-cluster/index.html)
the cache invalidation may be perfomed using jms as well, so that any instance 
will invalidate its own cache copy.

   Cheers,
   Emanuele


Alle 15:40:01 di Thursday 8 June 2017, Niels Charlier ha scritto:
> Hello Emanuele,
> 
> Thanks for your explanations. I see your points and I will report this
> back.
> 
> One question though: say we go for complete chance invalidation. Then we
> still have the problem that this is currently only possible per instance
> of geoserver, right? Do you see a way to invalidate cache for all
> instances? What do you think are the possibilities?
> 
> Regards
> Niels
> 
> On 06-06-17 15:41, Emanuele Tajariol wrote:
> >> Could we say that my method works as long as priority doesn't change? Or
> >> are there other concerns apart from priority?
> > 
> > As said, the Rules behaviour is quite contextual, as the Rules work as a
> > whole and not singularly; the priority example is just one way to make
> > this clear. Let me show another case: if we are updating a Rule by
> > changing the layer name field (from L1 to L2), we'll have to invalidate
> > all the entries referring to either Layer, since this change will modify
> > the rulesets for both layers. Also, user/role relationship is evaluated
> > within the rule engine, since GeoServer is only sending out the username
> > when asking for an authorization check; if a Rule is updated so that the
> > role field changes, you should find out all the users for both roles
> > (the new one and the old one) and invalidate all the entries referring
> > to them.
> > 
> > All in all, I don't exclude there is a way to identify the cache entries
> > that should be invalidated, but I guess that it can be quite hard to
> > implement, and to debug as well, should any problem arise.
> > 
> >> 3. write a CachedRuleAdminServiceImpl, that delegates to the normal
> >> RuleAdminServiceImpl but calls the above invalidate upon change of an
> >> existing rule.
> > 
> > Again on this point: please consider that the RuleAdminServiceImpl is a
> > service which is on GeoFence side
> > https://github.com/geoserver/geofence/blob/master/src/services/core/servi
> > ces-
> > impl/src/main/java/org/geoserver/geofence/services/RuleAdminServiceImpl.
> > java
> > 
> > while the rule cache is implemented inside the geoserver plugin:
> > https://github.com/geoserver/geoserver/blob/master/src/community/geofence
> > /src/main/java/org/geoserver/geofence/cache/CachedRuleReader.java
> > 
> > These two classes are inside the same VM only when geofence is installed
> > as an embedded service in geoserver. The classes inside the geoserver
> > plugin know about how to send requests to GeoFence, but, especially in a
> > clustered environment, GeoFence may not know how to call the services in
> > the geoserver instances which are using geofence as an auth engine.
> > 
> > 
> > Anyway, just out of curiosity, what's the usecase for trying to
> > invalidate cache entries selectively? Are you changing the rules in
> > geofence so very often that a complete cache invalidation is not
> > feasible at all?
> > 
> >     Cheers,
> >     Emanuele
> > 
> > Alle 14:17:26 di Tuesday 6 June 2017, Niels Charlier ha scritto:
> >> Ouch. So do you reckon there is possible method to determine whether a
> >> cache entry is affected by a specific rule?
> >> 
> >> Could we say that my method works as long as priority doesn't change? Or
> >> are there other concerns apart from priority?
> >> 
> >> And in case the priority changes, could we perhaps repeat the process by
> >> any rules affected by the priority change? For example
> >> we change a priority from x to y, we repeat the process for all rules
> >> from position x to y.
> >> 
> >> Regards
> >> Niels
> >> 
> >> On 06-06-17 14:01, Emanuele Tajariol wrote:
> >>> Hi Niels,
> >>> 
> >>>> Would a RuleFilter.match(Rule) not be able to track this down? The
> >>>> cache is indexed on rule filters... All rule filters that match the
> >>>> given rule must then be invalidated...
> >>> 
> >>> Still not sure about this :)
> >>> Let's say we change the priority of a Rule; the outcome of an
> >>> authorization request will change not only according to the Rule we
> >>> updated, but also according to the new Rules that will be selected
> >>> according to the new prioritization.
> >>> 
> >>>      Cheers,
> >>>      Emanuele
> >>> 
> >>> Alle 12:42:20 di Tuesday 6 June 2017, Niels Charlier ha scritto:
> >>>> Hello Emanuele,
> >>>> 
> >>>> Thanks for your email.
> >>>> 
> >>>> You say "a change in a single Rule may reflect in changes in many
> >>>> items in the cache, that are quite difficult to track down."
> >>>> 
> >>>> Would a RuleFilter.match(Rule) not be able to track this down? The
> >>>> cache is indexed on rule filters... All rule filters that match the
> >>>> given rule must then be invalidated...
> >>>> 
> >>>> Regards
> >>>> 
> >>>> Niels
> >>>> 
> >>>> On 06-06-17 12:37, Emanuele Tajariol wrote:
> >>>>> Hi Niels,
> >>>>> 
> >>>>> the access info that GeoServer receives from GeoFence may come from
> >>>>> more than one Rule.
> >>>>> The Rule engine looks for all matching rules: constraints contained
> >>>>> in Rules of LIMIT type will be merged so to restrict the constraints
> >>>>> found in the ALLOW rule.
> >>>>> Furthermore, if a user belongs to more than one role, the constraints
> >>>>> will be merged so that the user will be granted all the privileges he
> >>>>> should have according to each role.
> >>>>> All this means that a change in a single Rule may reflect in changes
> >>>>> in many items in the cache, that are quite difficult to track down.
> >>>>> Also, note that the cache is used in both the embedded and the
> >>>>> standalone geofence setup; any changes at that level should take
> >>>>> care of not breaking any of the two setup.
> >>>>> Another point to consider is about making sure this change will also
> >>>>> work in a clustered environment.
> >>>>> 
> >>>>>       Cheers,
> >>>>>       Emanuele
> >>>>> 
> >>>>> Alle 13:46:54 di Friday 2 June 2017, Niels Charlier ha scritto:
> >>>>>> Hello Nuno,
> >>>>>> 
> >>>>>> Another change I have been asked to make in geofence, is that rules
> >>>>>> in the cache would automatically invalidated when they are changed.
> >>>>>> I have looked at the code, and I have an idea how to do it, and was
> >>>>>> wondering if you agree with the approach:
> >>>>>> 
> >>>>>> 1. write a RuleFilter.matches(Rule rule) method (I think currently
> >>>>>> rule filters are only used to translate into queries, and there is
> >>>>>> no way to match a filter with a single rule)
> >>>>>> 
> >>>>>> 2. write a CachedRuleReader.invalidate(Rule rule) which loops
> >>>>>> through the whole cache, and invalidates all rule filters that
> >>>>>> match the rule.
> >>>>>> 
> >>>>>> 3. write a CachedRuleAdminServiceImpl, that delegates to the normal
> >>>>>> RuleAdminServiceImpl but calls the above invalidate upon change of
> >>>>>> an existing rule.
> >>>>>> 
> >>>>>> 
> >>>>>> Kind Regards
> >>>>>> 
> >>>>>> Niels
> >>>>>> 
> >>>>>> 
> >>>>>> --------------------------------------------------------------------
> >>>>>> -- -- --- --- Check out the vibrant tech community on one of the
> >>>>>> world's most engaging tech sites, Slashdot.org!
> >>>>>> http://sdm.link/slashdot
> >>>>>> _______________________________________________
> >>>>>> Geoserver-devel mailing list
> >>>>>> Geoserver-devel@lists.sourceforge.net
> >>>>>> https://lists.sourceforge.net/lists/listinfo/geoserver-devel


-- 
==
GeoServer Professional Services from the experts! 
Visit http://goo.gl/NWWaa2 for more information.
==

Ing. Emanuele Tajariol
Technical Lead

GeoSolutions S.A.S.
Via di Montramito 3/A
55054  Massarosa (LU)
Italy
phone: +39 0584 962313
fax:    +39 0584 1660272
mob:   +39  380 2116282 

http://www.geo-solutions.it
http://twitter.com/geosolutions_it

-------------------------------------------------------

------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Geoserver-devel mailing list
Geoserver-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/geoserver-devel

Reply via email to