You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@fineract.apache.org by "galovics (via GitHub)" <gi...@apache.org> on 2023/03/12 18:14:37 UTC

[GitHub] [fineract] galovics opened a new pull request, #3041: FINERACT-1724: Making global configuration caching transaction bound

galovics opened a new pull request, #3041:
URL: https://github.com/apache/fineract/pull/3041

   ## Description
   
   Describe the changes made and why they were made.
   
   Ignore if these details are present on the associated [Apache Fineract JIRA ticket](https://github.com/apache/fineract/pull/1284).
   
   
   ## Checklist
   
   Please make sure these boxes are checked before submitting your pull request - thanks!
   
   - [ ] Write the commit message as per https://github.com/apache/fineract/#pull-requests
   
   - [ ] Acknowledge that we will not review PRs that are not passing the build _("green")_ - it is your responsibility to get a proposed PR to pass the build, not primarily the project's maintainers.
   
   - [ ] Create/update unit or integration tests for verifying the changes made.
   
   - [ ] Follow coding conventions at https://cwiki.apache.org/confluence/display/FINERACT/Coding+Conventions.
   
   - [ ] Add required Swagger annotation and update API documentation at fineract-provider/src/main/resources/static/legacy-docs/apiLive.htm with details of any API changes
   
   - [ ] Submission is not a "code dump".  (Large changes can be made "in repository" via a branch.  Ask on the developer mailing list for guidance, if required.)
   
   FYI our guidelines for code reviews are at https://cwiki.apache.org/confluence/display/FINERACT/Code+Review+Guide.
   


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: commits-unsubscribe@fineract.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


[GitHub] [fineract] vidakovic commented on a diff in pull request #3041: FINERACT-1724: Making global configuration caching transaction bound

Posted by "vidakovic (via GitHub)" <gi...@apache.org>.
vidakovic commented on code in PR #3041:
URL: https://github.com/apache/fineract/pull/3041#discussion_r1135112419


##########
fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/persistence/ExtendedJpaTransactionManager.java:
##########
@@ -29,6 +32,8 @@
 
 public class ExtendedJpaTransactionManager extends JpaTransactionManager {

Review Comment:
   Do we really need this? Can't this be accomplished with https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/transaction/event/TransactionalEventListener.html (aka transaction bound events)? From a first look at this I'd say yes... if you want to keep those custom lifecycle callbacks then you just need to write a transaction event listener and do pretty much the same you do here in the extended transaction manager.



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: commits-unsubscribe@fineract.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


[GitHub] [fineract] vidakovic commented on a diff in pull request #3041: FINERACT-1724: Making global configuration caching transaction bound

Posted by "vidakovic (via GitHub)" <gi...@apache.org>.
vidakovic commented on code in PR #3041:
URL: https://github.com/apache/fineract/pull/3041#discussion_r1135122051


##########
fineract-provider/src/main/java/org/apache/fineract/infrastructure/cache/service/RuntimeDelegatingCacheManager.java:
##########
@@ -43,92 +43,82 @@
  * database on startup and allow user to switch implementation through UI/API
  */
 @Component(value = "runtimeDelegatingCacheManager")
-public class RuntimeDelegatingCacheManager implements CacheManager {
-
-    private static final Logger LOG = LoggerFactory.getLogger(RuntimeDelegatingCacheManager.class);
-
-    private final CacheManager cacheManager;
-    private final CacheManager noOpCacheManager = new NoOpCacheManager();
+@RequiredArgsConstructor
+@Slf4j
+public class RuntimeDelegatingCacheManager implements CacheManager, InitializingBean {
+
+    @Qualifier("ehCacheManager")
+    private final CacheManager ehCacheManager;
+    @Qualifier("defaultCacheManager")
+    private final CacheManager defaultCacheManager;
     private CacheManager currentCacheManager;
 
-    @Autowired
-    public RuntimeDelegatingCacheManager(final JCacheCacheManager cacheManager) {
-        this.cacheManager = cacheManager;
-        this.currentCacheManager = this.noOpCacheManager;
+    @Override
+    public void afterPropertiesSet() throws Exception {
+        currentCacheManager = defaultCacheManager;
     }
 
     @Override
     public Cache getCache(final String name) {
-        return this.currentCacheManager.getCache(name);
+        return currentCacheManager.getCache(name);
     }
 
     @Override
     public Collection<String> getCacheNames() {
-        return this.currentCacheManager.getCacheNames();
+        return currentCacheManager.getCacheNames();
     }
 
     public Collection<CacheData> retrieveAll() {
 
-        final boolean noCacheEnabled = this.currentCacheManager instanceof NoOpCacheManager;
-        final boolean ehcacheEnabled = this.currentCacheManager instanceof JCacheCacheManager;
-
-        // final boolean distributedCacheEnabled = false;
+        final boolean noCacheEnabled = currentCacheManager == defaultCacheManager;
+        final boolean ehCacheEnabled = currentCacheManager == ehCacheManager;
 
         final EnumOptionData noCacheType = CacheEnumerations.cacheType(CacheType.NO_CACHE);
         final EnumOptionData singleNodeCacheType = CacheEnumerations.cacheType(CacheType.SINGLE_NODE);
-        // final EnumOptionData multiNodeCacheType =
-        // CacheEnumerations.cacheType(CacheType.MULTI_NODE);
 
         final CacheData noCache = CacheData.instance(noCacheType, noCacheEnabled);
-        final CacheData singleNodeCache = CacheData.instance(singleNodeCacheType, ehcacheEnabled);
-        // final CacheData distributedCache =
-        // CacheData.instance(multiNodeCacheType, distributedCacheEnabled);
+        final CacheData singleNodeCache = CacheData.instance(singleNodeCacheType, ehCacheEnabled);
 
-        final Collection<CacheData> caches = Arrays.asList(noCache, singleNodeCache);
-        return caches;
+        return Arrays.asList(noCache, singleNodeCache);
     }
 
     public Map<String, Object> switchToCache(final boolean ehcacheEnabled, final CacheType toCacheType) {

Review Comment:
   Probably I missed (a lot of) the conversation around this feature... but is there really a use case where you have to switch cache implementation during runtime? That seems to me such an important architectural decision that I would say it is done way before any instance of Fineract is running, at the least you would decide if EH Cache is enough or if you need it at all (I'd say the answer here is always yes... but not sure if you guys discussed a use case where no cache is desirable).
   BTW: multi-node cache... Redis is your friend... 1st class support in Spring Boot and works really great (read: performant).



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: commits-unsubscribe@fineract.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


[GitHub] [fineract] galovics merged pull request #3041: FINERACT-1724: Making global configuration caching transaction bound

Posted by "galovics (via GitHub)" <gi...@apache.org>.
galovics merged PR #3041:
URL: https://github.com/apache/fineract/pull/3041


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: commits-unsubscribe@fineract.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


[GitHub] [fineract] adamsaghy commented on a diff in pull request #3041: FINERACT-1724: Making global configuration caching transaction bound

Posted by "adamsaghy (via GitHub)" <gi...@apache.org>.
adamsaghy commented on code in PR #3041:
URL: https://github.com/apache/fineract/pull/3041#discussion_r1135310157


##########
fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/config/cache/SpecifiedCacheSupportingCacheManager.java:
##########
@@ -0,0 +1,82 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.fineract.infrastructure.core.config.cache;
+
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.LinkedHashSet;
+import java.util.Set;
+import lombok.RequiredArgsConstructor;
+import org.springframework.beans.factory.InitializingBean;
+import org.springframework.cache.Cache;
+import org.springframework.cache.CacheManager;
+import org.springframework.cache.jcache.JCacheCacheManager;
+import org.springframework.cache.support.NoOpCacheManager;
+import org.springframework.util.Assert;
+
+@RequiredArgsConstructor
+public class SpecifiedCacheSupportingCacheManager implements CacheManager, InitializingBean {
+
+    private JCacheCacheManager delegateCacheManager;
+    private NoOpCacheManager noOpCacheManager;
+
+    private final Set<String> supportedCacheNames = new LinkedHashSet<>(16);
+
+    @Override
+    public void afterPropertiesSet() throws Exception {
+        Assert.notNull(delegateCacheManager, "cacheManager cannot be null");
+        Assert.notNull(noOpCacheManager, "delegate cannot be null");
+        Assert.notEmpty(supportedCacheNames, "supportedCacheNames must not be empty");
+        delegateCacheManager.afterPropertiesSet();
+    }
+
+    @Override
+    public Cache getCache(String name) {
+        if (supportedCacheNames.contains(name)) {

Review Comment:
   It will work only for 'configByName' by default, even if they set the cache to to be SINGLE_NODE cache, the rest of the caches (users, usersbyusername) wont be used at all, no?



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: commits-unsubscribe@fineract.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


[GitHub] [fineract] vidakovic commented on a diff in pull request #3041: FINERACT-1724: Making global configuration caching transaction bound

Posted by "vidakovic (via GitHub)" <gi...@apache.org>.
vidakovic commented on code in PR #3041:
URL: https://github.com/apache/fineract/pull/3041#discussion_r1135117369


##########
fineract-provider/src/main/java/org/apache/fineract/infrastructure/configuration/domain/GlobalConfigurationRepositoryWrapper.java:
##########
@@ -37,6 +41,7 @@ public GlobalConfigurationRepositoryWrapper(final GlobalConfigurationRepository
         this.repository = repository;
     }
 
+    @Cacheable(value = "configByName", key = "T(org.apache.fineract.infrastructure.core.service.ThreadLocalContextUtil).getTenant().getTenantIdentifier().concat(#propertyName)")

Review Comment:
   Just in general: I would try to eliminate this service all together... as can be seen with this requirement to add caching... this thing is just getting in the way and it's not really dev-ops friendly (as you need a database in the first place to be able to do your configuration... instead of simple files)... just saying it again: I think reloadable configurations are a solved problem in Spring/Boot... my 2 cents here: this service is creating more head-aches than it provides solutions. But maybe a discussion for another day.



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: commits-unsubscribe@fineract.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


[GitHub] [fineract] adamsaghy commented on a diff in pull request #3041: FINERACT-1724: Making global configuration caching transaction bound

Posted by "adamsaghy (via GitHub)" <gi...@apache.org>.
adamsaghy commented on code in PR #3041:
URL: https://github.com/apache/fineract/pull/3041#discussion_r1135410533


##########
fineract-provider/src/main/java/org/apache/fineract/infrastructure/cache/service/RuntimeDelegatingCacheManager.java:
##########
@@ -43,92 +43,82 @@
  * database on startup and allow user to switch implementation through UI/API
  */
 @Component(value = "runtimeDelegatingCacheManager")
-public class RuntimeDelegatingCacheManager implements CacheManager {
-
-    private static final Logger LOG = LoggerFactory.getLogger(RuntimeDelegatingCacheManager.class);
-
-    private final CacheManager cacheManager;
-    private final CacheManager noOpCacheManager = new NoOpCacheManager();
+@RequiredArgsConstructor
+@Slf4j
+public class RuntimeDelegatingCacheManager implements CacheManager, InitializingBean {
+
+    @Qualifier("ehCacheManager")
+    private final CacheManager ehCacheManager;
+    @Qualifier("defaultCacheManager")
+    private final CacheManager defaultCacheManager;
     private CacheManager currentCacheManager;
 
-    @Autowired
-    public RuntimeDelegatingCacheManager(final JCacheCacheManager cacheManager) {
-        this.cacheManager = cacheManager;
-        this.currentCacheManager = this.noOpCacheManager;
+    @Override
+    public void afterPropertiesSet() throws Exception {
+        currentCacheManager = defaultCacheManager;
     }
 
     @Override
     public Cache getCache(final String name) {
-        return this.currentCacheManager.getCache(name);
+        return currentCacheManager.getCache(name);
     }
 
     @Override
     public Collection<String> getCacheNames() {
-        return this.currentCacheManager.getCacheNames();
+        return currentCacheManager.getCacheNames();
     }
 
     public Collection<CacheData> retrieveAll() {
 
-        final boolean noCacheEnabled = this.currentCacheManager instanceof NoOpCacheManager;
-        final boolean ehcacheEnabled = this.currentCacheManager instanceof JCacheCacheManager;
-
-        // final boolean distributedCacheEnabled = false;
+        final boolean noCacheEnabled = currentCacheManager == defaultCacheManager;
+        final boolean ehCacheEnabled = currentCacheManager == ehCacheManager;
 
         final EnumOptionData noCacheType = CacheEnumerations.cacheType(CacheType.NO_CACHE);
         final EnumOptionData singleNodeCacheType = CacheEnumerations.cacheType(CacheType.SINGLE_NODE);
-        // final EnumOptionData multiNodeCacheType =
-        // CacheEnumerations.cacheType(CacheType.MULTI_NODE);
 
         final CacheData noCache = CacheData.instance(noCacheType, noCacheEnabled);
-        final CacheData singleNodeCache = CacheData.instance(singleNodeCacheType, ehcacheEnabled);
-        // final CacheData distributedCache =
-        // CacheData.instance(multiNodeCacheType, distributedCacheEnabled);
+        final CacheData singleNodeCache = CacheData.instance(singleNodeCacheType, ehCacheEnabled);
 
-        final Collection<CacheData> caches = Arrays.asList(noCache, singleNodeCache);
-        return caches;
+        return Arrays.asList(noCache, singleNodeCache);
     }
 
     public Map<String, Object> switchToCache(final boolean ehcacheEnabled, final CacheType toCacheType) {

Review Comment:
   For multi node cache we should defo use Redis and we might need it in the future



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: commits-unsubscribe@fineract.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


[GitHub] [fineract] adamsaghy commented on a diff in pull request #3041: FINERACT-1724: Making global configuration caching transaction bound

Posted by "adamsaghy (via GitHub)" <gi...@apache.org>.
adamsaghy commented on code in PR #3041:
URL: https://github.com/apache/fineract/pull/3041#discussion_r1135411027


##########
fineract-provider/src/main/java/org/apache/fineract/infrastructure/cache/service/RuntimeDelegatingCacheManager.java:
##########
@@ -43,92 +43,82 @@
  * database on startup and allow user to switch implementation through UI/API
  */
 @Component(value = "runtimeDelegatingCacheManager")
-public class RuntimeDelegatingCacheManager implements CacheManager {
-
-    private static final Logger LOG = LoggerFactory.getLogger(RuntimeDelegatingCacheManager.class);
-
-    private final CacheManager cacheManager;
-    private final CacheManager noOpCacheManager = new NoOpCacheManager();
+@RequiredArgsConstructor
+@Slf4j
+public class RuntimeDelegatingCacheManager implements CacheManager, InitializingBean {
+
+    @Qualifier("ehCacheManager")
+    private final CacheManager ehCacheManager;
+    @Qualifier("defaultCacheManager")
+    private final CacheManager defaultCacheManager;
     private CacheManager currentCacheManager;
 
-    @Autowired
-    public RuntimeDelegatingCacheManager(final JCacheCacheManager cacheManager) {
-        this.cacheManager = cacheManager;
-        this.currentCacheManager = this.noOpCacheManager;
+    @Override
+    public void afterPropertiesSet() throws Exception {
+        currentCacheManager = defaultCacheManager;
     }
 
     @Override
     public Cache getCache(final String name) {
-        return this.currentCacheManager.getCache(name);
+        return currentCacheManager.getCache(name);
     }
 
     @Override
     public Collection<String> getCacheNames() {
-        return this.currentCacheManager.getCacheNames();
+        return currentCacheManager.getCacheNames();
     }
 
     public Collection<CacheData> retrieveAll() {
 
-        final boolean noCacheEnabled = this.currentCacheManager instanceof NoOpCacheManager;
-        final boolean ehcacheEnabled = this.currentCacheManager instanceof JCacheCacheManager;
-
-        // final boolean distributedCacheEnabled = false;
+        final boolean noCacheEnabled = currentCacheManager == defaultCacheManager;
+        final boolean ehCacheEnabled = currentCacheManager == ehCacheManager;
 
         final EnumOptionData noCacheType = CacheEnumerations.cacheType(CacheType.NO_CACHE);
         final EnumOptionData singleNodeCacheType = CacheEnumerations.cacheType(CacheType.SINGLE_NODE);
-        // final EnumOptionData multiNodeCacheType =
-        // CacheEnumerations.cacheType(CacheType.MULTI_NODE);
 
         final CacheData noCache = CacheData.instance(noCacheType, noCacheEnabled);
-        final CacheData singleNodeCache = CacheData.instance(singleNodeCacheType, ehcacheEnabled);
-        // final CacheData distributedCache =
-        // CacheData.instance(multiNodeCacheType, distributedCacheEnabled);
+        final CacheData singleNodeCache = CacheData.instance(singleNodeCacheType, ehCacheEnabled);
 
-        final Collection<CacheData> caches = Arrays.asList(noCache, singleNodeCache);
-        return caches;
+        return Arrays.asList(noCache, singleNodeCache);
     }
 
     public Map<String, Object> switchToCache(final boolean ehcacheEnabled, final CacheType toCacheType) {

Review Comment:
   For multi node cache for defo we should use Redis



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: commits-unsubscribe@fineract.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


[GitHub] [fineract] vidakovic commented on a diff in pull request #3041: FINERACT-1724: Making global configuration caching transaction bound

Posted by "vidakovic (via GitHub)" <gi...@apache.org>.
vidakovic commented on code in PR #3041:
URL: https://github.com/apache/fineract/pull/3041#discussion_r1135118105


##########
fineract-provider/src/main/java/org/apache/fineract/infrastructure/configuration/domain/ConfigurationDomainServiceJpa.java:
##########
@@ -19,23 +19,22 @@
 package org.apache.fineract.infrastructure.configuration.domain;
 
 import java.time.LocalDate;
-import java.util.HashMap;
-import java.util.Map;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.fineract.infrastructure.cache.domain.CacheType;
 import org.apache.fineract.infrastructure.cache.domain.PlatformCache;
 import org.apache.fineract.infrastructure.cache.domain.PlatformCacheRepository;
 import org.apache.fineract.infrastructure.configuration.data.GlobalConfigurationPropertyData;
-import org.apache.fineract.infrastructure.core.service.ThreadLocalContextUtil;
 import org.apache.fineract.useradministration.domain.Permission;
 import org.apache.fineract.useradministration.domain.PermissionRepository;
 import org.apache.fineract.useradministration.exception.PermissionNotFoundException;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.cache.annotation.Cacheable;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
+@Slf4j
 @Service
+@RequiredArgsConstructor
 public class ConfigurationDomainServiceJpa implements ConfigurationDomainService {

Review Comment:
   ... see my comment on global configuration service... pretty much the same here.



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: commits-unsubscribe@fineract.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


[GitHub] [fineract] adamsaghy commented on a diff in pull request #3041: FINERACT-1724: Making global configuration caching transaction bound

Posted by "adamsaghy (via GitHub)" <gi...@apache.org>.
adamsaghy commented on code in PR #3041:
URL: https://github.com/apache/fineract/pull/3041#discussion_r1135310157


##########
fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/config/cache/SpecifiedCacheSupportingCacheManager.java:
##########
@@ -0,0 +1,82 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.fineract.infrastructure.core.config.cache;
+
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.LinkedHashSet;
+import java.util.Set;
+import lombok.RequiredArgsConstructor;
+import org.springframework.beans.factory.InitializingBean;
+import org.springframework.cache.Cache;
+import org.springframework.cache.CacheManager;
+import org.springframework.cache.jcache.JCacheCacheManager;
+import org.springframework.cache.support.NoOpCacheManager;
+import org.springframework.util.Assert;
+
+@RequiredArgsConstructor
+public class SpecifiedCacheSupportingCacheManager implements CacheManager, InitializingBean {
+
+    private JCacheCacheManager delegateCacheManager;
+    private NoOpCacheManager noOpCacheManager;
+
+    private final Set<String> supportedCacheNames = new LinkedHashSet<>(16);
+
+    @Override
+    public void afterPropertiesSet() throws Exception {
+        Assert.notNull(delegateCacheManager, "cacheManager cannot be null");
+        Assert.notNull(noOpCacheManager, "delegate cannot be null");
+        Assert.notEmpty(supportedCacheNames, "supportedCacheNames must not be empty");
+        delegateCacheManager.afterPropertiesSet();
+    }
+
+    @Override
+    public Cache getCache(String name) {
+        if (supportedCacheNames.contains(name)) {

Review Comment:
   It will work only for 'configByName' by default, even if they set the cache to to be SINGLE_NODE cache, the rest of the caches (users, usersbyusername) wont be used at all, no?



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: commits-unsubscribe@fineract.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


[GitHub] [fineract] adamsaghy commented on pull request #3041: FINERACT-1724: Making global configuration caching transaction bound

Posted by "adamsaghy (via GitHub)" <gi...@apache.org>.
adamsaghy commented on PR #3041:
URL: https://github.com/apache/fineract/pull/3041#issuecomment-1465769746

   @galovics Kindly asking you to check the failing tests and squash the commits!


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: commits-unsubscribe@fineract.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org