Skip to content
This repository has been archived by the owner on Nov 9, 2017. It is now read-only.

Commit

Permalink
fix(ZNTA-1116): use transaction when reading config from DB
Browse files Browse the repository at this point in the history
  • Loading branch information
seanf committed May 19, 2016
1 parent 80ddb6c commit b2e6c01
Show file tree
Hide file tree
Showing 4 changed files with 13 additions and 61 deletions.
11 changes: 0 additions & 11 deletions zanata-war/src/main/java/org/zanata/ApplicationConfiguration.java
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,6 @@

import javax.enterprise.context.ApplicationScoped;
import javax.enterprise.event.Observes;
import javax.enterprise.event.TransactionPhase;
import javax.enterprise.inject.Produces;

import com.google.common.base.Optional;
Expand All @@ -55,7 +54,6 @@
import org.zanata.config.DatabaseBackedConfig;
import org.zanata.config.JaasConfig;
import org.zanata.config.JndiBackedConfig;
import org.zanata.events.ConfigurationChanged;
import org.zanata.events.LogoutEvent;
import org.zanata.events.PostAuthenticateEvent;
import org.zanata.i18n.Messages;
Expand Down Expand Up @@ -138,15 +136,6 @@ public void load() {
.get("authenticatedSessionTimeoutMinutes", 180);
}

public void resetConfigValue(
@Observes(during = TransactionPhase.AFTER_SUCCESS)
ConfigurationChanged configChange) {
String configName = configChange.getConfigKey();
// Remove the value from all stores
databaseBackedConfig.reset(configName);
jndiBackedConfig.reset(configName);
}

/**
* Loads the accepted login module (JAAS) names from the underlying
* configuration
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,13 +21,11 @@
package org.zanata.config;

import java.io.Serializable;
import java.util.Map;

import javax.annotation.PostConstruct;
import javax.annotation.Nullable;
import javax.inject.Inject;
import javax.inject.Named;

import com.google.common.collect.Maps;
import org.zanata.util.Synchronized;
import org.zanata.ServerConstants;
import org.zanata.dao.ApplicationConfigurationDAO;
Expand All @@ -47,47 +45,13 @@ public class DatabaseBackedConfig implements Serializable {

private static final long serialVersionUID = 1L;

private final Map<String, String> configurationValues = Maps.newHashMap();

@Inject
private ApplicationConfigurationDAO applicationConfigurationDAO;

/**
* Resets the store by clearing out all values. This means that values will
* need to be reloaded as they are requested.
*/
@PostConstruct
public void reset() {
configurationValues.clear();
}

/**
* Resets a single value of the configuration. This value will be reloaded
* from the configuration store the next time it's requested.
*
* @param key
* Configuration key to reset.
*/
public void reset(String key) {
configurationValues.remove(key);
}

private String getConfigValue(String key) {
if (!configurationValues.containsKey(key)) {
HApplicationConfiguration configRecord =
applicationConfigurationDAO.findByKey(key);
String storedVal = null;
if (configRecord != null) {
storedVal = configRecord.getValue();
}
configurationValues.put(key, storedVal);
}
return configurationValues.get(key);
}

private boolean containsKey(String key) {
// Preemptively load the key
return getConfigValue(key) != null;
private @Nullable String getConfigValue(String key) {
HApplicationConfiguration configRecord =
applicationConfigurationDAO.findByKey(key);
return configRecord != null ? configRecord.getValue() : null;
}

/**
Expand Down Expand Up @@ -119,11 +83,6 @@ public String getHelpUrl() {
return getConfigValue(HApplicationConfiguration.KEY_HELP_URL);
}

// invalidate key will force reload of that value from db
public void invalidateHomeContent() {
configurationValues.remove(HApplicationConfiguration.KEY_HOME_CONTENT);
}

public String getHomeContent() {
return getConfigValue(HApplicationConfiguration.KEY_HOME_CONTENT);
}
Expand Down
10 changes: 7 additions & 3 deletions zanata-war/src/main/java/org/zanata/limits/RateLimitManager.java
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,10 @@
import com.google.common.annotations.VisibleForTesting;
import lombok.AccessLevel;
import javax.annotation.PostConstruct;
import javax.inject.Inject;
import javax.inject.Named;

import org.apache.deltaspike.jpa.api.transaction.Transactional;
import org.zanata.ApplicationConfiguration;
import org.zanata.events.ConfigurationChanged;
import org.zanata.util.Introspectable;
Expand Down Expand Up @@ -47,6 +50,9 @@ public class RateLimitManager implements Introspectable {
@VisibleForTesting
private int maxActive;

@Inject
private ApplicationConfiguration appConfig;

public static RateLimitManager getInstance() {
return ServiceLocator.instance().getInstance(RateLimitManager.class);
}
Expand All @@ -57,13 +63,11 @@ public void loadConfig() {
}

private void readRateLimitState() {
ApplicationConfiguration appConfig =
ServiceLocator.instance().getInstance(
ApplicationConfiguration.class);
maxConcurrent = appConfig.getMaxConcurrentRequestsPerApiKey();
maxActive = appConfig.getMaxActiveRequestsPerApiKey();
}

@Transactional
public void configurationChanged(
@Observes(during = TransactionPhase.AFTER_SUCCESS)
ConfigurationChanged payload) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@
@Slf4j
@Beta
public class IntrospectableObjectMonitorService {
// TODO check http://code.google.com/p/reflections/ and re-implement this
// TODO use org.atteo ClassIndexProcessor.indexSubclasses() (see JaxRSClassIndexProcessor)
private static List<Introspectable> introspectables = ImmutableList
.<Introspectable> builder()
.add(RateLimitManager.getInstance())
Expand Down

0 comments on commit b2e6c01

Please sign in to comment.