Ver código fonte

move shard config into subclass, allows smaller jars for those who don't need sharding

tags/2.0.1
Jonathan Cobb 3 anos atrás
pai
commit
f4a94ca1f9
2 arquivos alterados com 80 adições e 55 exclusões
  1. +18
    -55
      wizard-server/src/main/java/org/cobbzilla/wizard/server/config/DatabaseConfiguration.java
  2. +62
    -0
      wizard-server/src/main/java/org/cobbzilla/wizard/server/config/DatabaseShardConfiguration.java

+ 18
- 55
wizard-server/src/main/java/org/cobbzilla/wizard/server/config/DatabaseConfiguration.java Ver arquivo

@@ -4,6 +4,7 @@ import com.fasterxml.jackson.annotation.JsonIgnore;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import org.cobbzilla.util.collection.SingletonSet;
import org.cobbzilla.wizard.model.shard.ShardMap;
import org.cobbzilla.wizard.model.shard.Shardable;

@@ -11,12 +12,10 @@ import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

import static org.cobbzilla.util.daemon.ZillaRuntime.die;
import static org.cobbzilla.util.daemon.ZillaRuntime.empty;
import static org.cobbzilla.util.reflect.ReflectionUtil.copy;

@NoArgsConstructor
@@ -24,23 +23,23 @@ public class DatabaseConfiguration {

public DatabaseConfiguration(DatabaseConfiguration other) { copy(this, other); }

@Getter @Setter private String driver;
@Getter @Setter private String url;
@Getter @Setter private String user;
@JsonIgnore @Getter @Setter private String password;
@Getter @Setter protected String driver;
@Getter @Setter protected String url;
@Getter @Setter protected String user;
@JsonIgnore @Getter @Setter protected String password;

@Getter @Setter private DatabaseConnectionPoolConfiguration pool = new DatabaseConnectionPoolConfiguration();
@Getter @Setter protected DatabaseConnectionPoolConfiguration pool = new DatabaseConnectionPoolConfiguration();

@Getter @Setter private boolean encryptionEnabled = false;
@JsonIgnore @Getter @Setter private String encryptionKey;
@Getter @Setter private int encryptorPoolSize = 5;
@Getter @Setter protected boolean encryptionEnabled = false;
@JsonIgnore @Getter @Setter protected String encryptionKey;
@Getter @Setter protected int encryptorPoolSize = 5;

@Getter @Setter private HibernateConfiguration hibernate;
@Getter @Setter protected HibernateConfiguration hibernate;

@Getter @Setter private boolean migrationEnabled = true;
@Getter @Setter private boolean migrationBaselineOnly = false;
@Getter @Setter protected boolean migrationEnabled = true;
@Getter @Setter protected boolean migrationBaselineOnly = false;

private final List<Runnable> postDataSourceSetupHandlers = new ArrayList<>();
protected final List<Runnable> postDataSourceSetupHandlers = new ArrayList<>();
public void addPostDataSourceSetupHandler (Runnable handler) { postDataSourceSetupHandlers.add(handler); }
public void runPostDataSourceSetupHandlers () {
for (Runnable r : postDataSourceSetupHandlers) r.run();
@@ -52,53 +51,17 @@ public class DatabaseConfiguration {
return DriverManager.getConnection(url, user, password);
}

@Getter @Setter private volatile ShardSetConfiguration[] shard;
public DatabaseConfiguration getShardDatabaseConfiguration(ShardMap map) { return this; }

public ShardSetConfiguration getShard (String shardSet) {
if (shard != null) {
for (ShardSetConfiguration c : shard) {
if (c.getName().equals(shardSet)) return c;
}
}
return null;
}

public DatabaseConfiguration getShardDatabaseConfiguration(ShardMap map) {
final DatabaseConfiguration config = new DatabaseConfiguration();
config.setDriver(driver);
config.setUrl(map.getUrl());
config.setUser(user);
config.setPassword(password);
config.setEncryptionEnabled(encryptionEnabled);
config.setEncryptionKey(encryptionKey);
config.setEncryptorPoolSize(encryptorPoolSize);
config.setHibernate(new HibernateConfiguration(hibernate));
config.getHibernate().setValidationMode("validate");
return config;
}
public boolean hasShards() { return false; }

@Getter(lazy=true) private final Set<String> shardSetNames = initShardSetNames();

protected Set<String> initShardSetNames() {
final Set<String> names = new HashSet<>();
if (shard != null) for (ShardSetConfiguration config : shard) names.add(config.getName());
return names;
}
public static final String DEFAULT_SHARD = "getShardSetName:default";

public boolean hasShards() { return !getShardSetNames().isEmpty(); }
protected Set<String> initShardSetNames() { return new SingletonSet<>(DEFAULT_SHARD); }

public int getLogicalShardCount(String shardSet) {
for (ShardSetConfiguration config : shard) if (config.getName().equals(shardSet)) return config.getLogicalShards();
return ShardSetConfiguration.DEFAULT_LOGICAL_SHARDS;
}

public <E extends Shardable> String getShardSetName(Class<E> entityClass) {
if (empty(shard)) return null;
for (ShardSetConfiguration config : shard) {
if (config.getEntity().equals(entityClass.getName())) return config.getName();
}
return null;
}
public <E extends Shardable> String getShardSetName(Class<E> entityClass) { return DEFAULT_SHARD; }

public void setDatabaseName(String dbName) {
final String url = getUrl();


+ 62
- 0
wizard-server/src/main/java/org/cobbzilla/wizard/server/config/DatabaseShardConfiguration.java Ver arquivo

@@ -0,0 +1,62 @@
package org.cobbzilla.wizard.server.config;

import lombok.Getter;
import lombok.Setter;
import org.cobbzilla.wizard.model.shard.ShardMap;
import org.cobbzilla.wizard.model.shard.Shardable;

import java.util.HashSet;
import java.util.Set;

import static org.cobbzilla.util.daemon.ZillaRuntime.empty;

public class DatabaseShardConfiguration extends DatabaseConfiguration {

@Getter @Setter private volatile ShardSetConfiguration[] shard;

public ShardSetConfiguration getShard (String shardSet) {
if (shard != null) {
for (ShardSetConfiguration c : shard) {
if (c.getName().equals(shardSet)) return c;
}
}
return null;
}

@Override public DatabaseConfiguration getShardDatabaseConfiguration(ShardMap map) {
final DatabaseConfiguration config = new DatabaseConfiguration();
config.setDriver(driver);
config.setUrl(map.getUrl());
config.setUser(user);
config.setPassword(password);
config.setEncryptionEnabled(encryptionEnabled);
config.setEncryptionKey(encryptionKey);
config.setEncryptorPoolSize(encryptorPoolSize);
config.setHibernate(new HibernateConfiguration(hibernate));
config.getHibernate().setValidationMode("validate");
return config;
}

@Getter(lazy=true) private final Set<String> shardSetNames = initShardSetNames();

protected Set<String> initShardSetNames() {
final Set<String> names = new HashSet<>();
if (shard != null) for (ShardSetConfiguration config : shard) names.add(config.getName());
return names;
}

@Override public boolean hasShards() { return !getShardSetNames().isEmpty(); }

public int getLogicalShardCount(String shardSet) {
for (ShardSetConfiguration config : shard) if (config.getName().equals(shardSet)) return config.getLogicalShards();
return ShardSetConfiguration.DEFAULT_LOGICAL_SHARDS;
}

@Override public <E extends Shardable> String getShardSetName(Class<E> entityClass) {
if (empty(shard)) return null;
for (ShardSetConfiguration config : shard) {
if (config.getEntity().equals(entityClass.getName())) return config.getName();
}
return null;
}
}

Carregando…
Cancelar
Salvar