Skip to content
Snippets Groups Projects
Commit d6dc7420 authored by gwen-soleil's avatar gwen-soleil
Browse files

add device property for max db pool size

parent 2554f2f1
Branches
Tags
No related merge requests found
......@@ -3,6 +3,7 @@ package org.tango.server.snap.archiver;
import SnapArchiver.grouplink.UsePluginBuilder;
import fr.esrf.Tango.DevFailed;
import fr.soleil.actiongroup.collectiveaction.onattributes.UsePlugin;
import fr.soleil.archiving.common.api.exception.ArchivingException;
import fr.soleil.archiving.common.api.utils.DbConnectionInfo;
import fr.soleil.archiving.snap.api.manager.SnapManagerApi;
import fr.soleil.archiving.snap.api.persistence.SnapshotPersistenceManager;
......@@ -11,6 +12,7 @@ import fr.soleil.archiving.snap.api.tools.SnapAttributeExtract;
import fr.soleil.archiving.snap.api.tools.SnapContext;
import fr.soleil.archiving.snap.api.tools.Snapshot;
import fr.soleil.archiving.snap.api.tools.SnapshotingException;
import fr.soleil.database.connection.DataBaseParameters;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.tango.DeviceState;
......@@ -68,13 +70,12 @@ public final class SnapArchiver {
private String dbName = "";
@DeviceProperty
private String dbSchema = "";
@DeviceProperty(name = "maxDbPoolSize", description = "max database connections", defaultValue = "3")
private short maxDbPoolSize = 3;
@Status
private String status;
@State
private DeviceState state;
private SnapshotPersistenceManager manager;
public static void main(final String[] args) {
......@@ -82,13 +83,11 @@ public final class SnapArchiver {
ServerManager.getInstance().start(args, SnapArchiver.class);
}
/**
* Initialize the device.
*/
@Init
public void init() throws DevFailed {
try {
// get configuration from device class "SnapManager"
public void setMaxDbPoolSize(short maxDbPoolSize) {
this.maxDbPoolSize = maxDbPoolSize;
}
private DataBaseParameters getDataBaseParameters() throws DevFailed {
DbConnectionInfo dbConnectionInfo = new DbConnectionInfo("SnapManager");
dbConnectionInfo.initFromClassProperties();
if (dbHost.isEmpty()) {
......@@ -106,15 +105,31 @@ public final class SnapArchiver {
if (dbPassword.isEmpty()) {
dbPassword = dbConnectionInfo.getDbPassword();
}
SnapManagerApi.initSnapConnection(dbHost, dbName, dbSchema, dbUser, dbPassword, "false");
DataBaseParameters parameters = new DataBaseParameters();
parameters.setName(dbName);
parameters.setSchema(dbSchema);
parameters.setHost(dbHost);
parameters.setUser(dbUser);
parameters.setPassword(dbPassword);
parameters.setMaxPoolSize(maxDbPoolSize);
return parameters;
}
/**
* Initialize the device.
*/
@Init
public void init() throws DevFailed {
// get configuration from device class "SnapManager"
try {
SnapManagerApi.initSnapConnection(getDataBaseParameters());
} catch (ArchivingException e) {
throw e.toTangoException();
}
SnapshotPersistenceManagerFactory factory = SnapshotPersistenceManagerFactory.getInstance();
manager = factory.getManager(beansFileName, dbUser, dbPassword);
state = DeviceState.ON;
status = "device ready for snapshot";
} catch (SnapshotingException e) {
e.printStackTrace();
throw e.toTangoException();
}
}
@Delete
......@@ -141,7 +156,6 @@ public final class SnapArchiver {
logger.info("in command TriggerLaunchSnapShot for context {}", argin);
Future<Integer> snapshotResult = executorService.submit(new SnapArchiver.SnapshotTask(argin));
snapshotResults.put(argin, snapshotResult);
}
/**
......
......@@ -88,36 +88,13 @@
package org.tango.server.snapextractor;
import java.util.Arrays;
import java.util.List;
import java.util.ResourceBundle;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.tango.DeviceState;
import org.tango.server.ServerManager;
import org.tango.server.annotation.Attribute;
import org.tango.server.annotation.AttributeProperties;
import org.tango.server.annotation.Command;
import org.tango.server.annotation.Delete;
import org.tango.server.annotation.Device;
import org.tango.server.annotation.DeviceManagement;
import org.tango.server.annotation.DeviceProperty;
import org.tango.server.annotation.DynamicManagement;
import org.tango.server.annotation.Init;
import org.tango.server.annotation.State;
import org.tango.server.annotation.Status;
import org.tango.server.device.DeviceManager;
import org.tango.server.dynamic.DynamicManager;
import org.tango.utils.DevFailedUtils;
import fr.esrf.Tango.AttrWriteType;
import fr.esrf.Tango.DevFailed;
import fr.esrf.Tango.DevState;
import fr.esrf.Tango.DevVarLongStringArray;
import fr.esrf.Tango.DispLevel;
import fr.esrf.TangoDs.TangoConst;
import fr.soleil.archiving.common.api.exception.ArchivingException;
import fr.soleil.archiving.common.api.tools.DbData;
import fr.soleil.archiving.snap.api.SnapConnectionParameters;
import fr.soleil.archiving.snap.api.extractor.convert.ConverterFactory;
......@@ -134,7 +111,30 @@ import fr.soleil.archiving.snap.api.persistence.spring.dao.SnapshotDAO;
import fr.soleil.archiving.snap.api.tools.SnapAttributeExtract;
import fr.soleil.archiving.snap.api.tools.SnapshotingException;
import fr.soleil.database.DBExtractionConst;
import fr.soleil.lib.project.ObjectUtils;
import fr.soleil.database.connection.DataBaseParameters;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.tango.DeviceState;
import org.tango.server.ServerManager;
import org.tango.server.annotation.Attribute;
import org.tango.server.annotation.AttributeProperties;
import org.tango.server.annotation.Command;
import org.tango.server.annotation.Delete;
import org.tango.server.annotation.Device;
import org.tango.server.annotation.DeviceManagement;
import org.tango.server.annotation.DeviceProperty;
import org.tango.server.annotation.DynamicManagement;
import org.tango.server.annotation.Init;
import org.tango.server.annotation.State;
import org.tango.server.annotation.Status;
import org.tango.server.device.DeviceManager;
import org.tango.server.dynamic.DynamicManager;
import org.tango.utils.DevFailedUtils;
import java.util.Arrays;
import java.util.List;
import java.util.ResourceBundle;
/**
* Class Description: This device is in charge of extracting snapshots from the
......@@ -154,106 +154,100 @@ import fr.soleil.lib.project.ObjectUtils;
@Device
public class SnapExtractor implements DBExtractionConst {
@Autowired
SnapshotDAO snapshotDao;
private SnapshotPersistenceManager manager;
private static final String _ERROR = "_ERROR";
private final Logger logger = LoggerFactory.getLogger(SnapExtractor.class);
@Attribute(name = "version", displayLevel = DispLevel._EXPERT)
@AttributeProperties(description = "The version of the device", label = "version")
private final String version = ResourceBundle.getBundle("application").getString("project.version");
protected int formerState = DevState._UNKNOWN;
@Autowired
SnapshotDAO snapshotDao;
private SnapshotPersistenceManager manager;
@DynamicManagement
private DynamicManager dynMngt;
@DeviceManagement
private DeviceManager devManager;
private int id = 0;
/**
* User identifier (name) used to connect the database SNAP. <br>
* <b>Default value : </b> snap
*/
@DeviceProperty(name = "dbUser", description = "database user")
private String dbUser;
/**
* Password used to connect the database SNAP. <br>
* <b>Default value : </b> snap
*/
@DeviceProperty(name = "dbPassword", description = "database password", defaultValue = "snap")
private String dbPassword;
@DeviceProperty(name = "dbHost", description = "database host name")
private String dbHost;
@DeviceProperty(name = "dbName", description = "database name")
private String dbName;
@DeviceProperty(name = "dbSchema", description = "database schema")
private String dbSchema;
@DeviceProperty(name = "beansFileName", description = "hibernate config file")
private String beansFileName;
@DeviceProperty(name = "maxDbPoolSize", description = "max database connections", defaultValue = "3")
private short maxDbPoolSize = 3;
private ISnapReader snapReader;
/**
* The state of the device
*/
@State
private DeviceState state = DeviceState.UNKNOWN;
/**
* The status of the device
*/
@Status
private String status = "Server is starting. The device state is unknown";
public static void main(final String[] args) {
ServerManager.getInstance().start(args, SnapExtractor.class);
}
public void setMaxDbPoolSize(short maxDbPoolSize) {
this.maxDbPoolSize = maxDbPoolSize;
}
public void setDynMngt(final DynamicManager dynMngt) {
this.dynMngt = dynMngt;
}
@DeviceManagement
private DeviceManager devManager;
public void setDevManager(final DeviceManager devManager) {
this.devManager = devManager;
}
@Attribute(name = "version", displayLevel = DispLevel._EXPERT)
@AttributeProperties(description = "The version of the device", label = "version", unit = ObjectUtils.EMPTY_STRING)
private final String version = ResourceBundle.getBundle("application").getString("project.version");
public String getVersion() {
return version;
}
private int id = 0;
/**
* User identifier (name) used to connect the database SNAP. <br>
* <b>Default value : </b> snap
*/
@DeviceProperty(name = "dbUser", description = ObjectUtils.EMPTY_STRING, defaultValue = ObjectUtils.EMPTY_STRING)
private String dbUser;
public void setDbUser(final String dbUser) {
this.dbUser = dbUser;
}
/**
* Password used to connect the database SNAP. <br>
* <b>Default value : </b> snap
*/
@DeviceProperty(name = "dbPassword", description = ObjectUtils.EMPTY_STRING, defaultValue = ObjectUtils.EMPTY_STRING)
private String dbPassword;
public void setDbPassword(final String dbPassword) {
this.dbPassword = dbPassword;
}
protected int formerState = DevState._UNKNOWN;
@DeviceProperty(name = "dbHost", description = ObjectUtils.EMPTY_STRING, defaultValue = ObjectUtils.EMPTY_STRING)
private String dbHost;
public void setDbHost(final String dbHost) {
this.dbHost = dbHost;
}
@DeviceProperty(name = "dbName", description = ObjectUtils.EMPTY_STRING, defaultValue = ObjectUtils.EMPTY_STRING)
private String dbName;
public void setDbName(final String dbName) {
this.dbName = dbName;
}
@DeviceProperty(name = "dbSchema", description = ObjectUtils.EMPTY_STRING, defaultValue = ObjectUtils.EMPTY_STRING)
private String dbSchema;
public void setDbSchema(final String dbSchema) {
this.dbSchema = dbSchema;
}
@DeviceProperty(name = "isRac", description = ObjectUtils.EMPTY_STRING, defaultValue = ObjectUtils.EMPTY_STRING)
private String isRac;
public void setIsRac(final String isRac) {
this.isRac = isRac;
}
@DeviceProperty(name = "beansFileName", description = ObjectUtils.EMPTY_STRING, defaultValue = ObjectUtils.EMPTY_STRING)
private String beansFileName = ObjectUtils.EMPTY_STRING;
public void setBeansFileName(String beansFileName) {
this.beansFileName = beansFileName;
}
private ISnapReader snapReader;
/**
* The state of the device
*/
@State
private DeviceState state = DeviceState.UNKNOWN;
/**
* Execute command "State".
* description: This command gets the device state (stored in its 'state' data member) and returns it to the caller.
......@@ -274,12 +268,6 @@ public class SnapExtractor implements DBExtractionConst {
this.state = state;
}
/**
* The status of the device
*/
@Status
private String status = "Server is starting. The device state is unknown";
/**
* Execute command "Status".
* description: This command gets the device status (stored in its 'status' data member) and returns it to the
......@@ -312,7 +300,14 @@ public class SnapExtractor implements DBExtractionConst {
// Initialize variables to default values
getDeviceProperty();
// Snap Database connection
SnapManagerApi.initSnapConnection(dbHost, dbName, dbSchema, dbUser, dbPassword, isRac);
DataBaseParameters parameters = new DataBaseParameters();
parameters.setName(dbName);
parameters.setSchema(dbSchema);
parameters.setHost(dbHost);
parameters.setUser(dbUser);
parameters.setPassword(dbPassword);
parameters.setMaxPoolSize(maxDbPoolSize);
SnapManagerApi.initSnapConnection(parameters);
snapReader = SnapReaderFactory.getImpl(SnapReaderFactory.REAL);
snapReader.openConnection();
SnapshotPersistenceManagerFactory factory = SnapshotPersistenceManagerFactory.getInstance();
......@@ -321,6 +316,9 @@ public class SnapExtractor implements DBExtractionConst {
} catch (final SnapshotingException e) {
logger.error("Failed to initialize device", e);
throw e.toTangoException();
} catch (final ArchivingException e) {
logger.error("Failed to initialize device", e);
throw e.toTangoException();
}
this.state = DeviceState.ON;
this.status = "Device is ready";
......@@ -340,8 +338,7 @@ public class SnapExtractor implements DBExtractionConst {
* Execute command "RemoveDynAttr" on device. Remove the dynamic
* attribute specified by its name argin.
*
* @param argin
* The dynamic attribute's name
* @param argin The dynamic attribute's name
*/
@Command(name = "RemoveDynAttr")
public void removeDynamicAttribute(final String argin) throws DevFailed {
......@@ -353,8 +350,7 @@ public class SnapExtractor implements DBExtractionConst {
* Execute command "RemoveDynAttrs" on device. Remove the dynamic
* attributes specified by the names list.
*
* @param argin
* The dynamic attributes names
* @param argin The dynamic attributes names
*/
@Command(name = "RemoveDynAttrs")
public void removeDynamicAttributes(final String[] argin) throws DevFailed {
......@@ -368,8 +364,7 @@ public class SnapExtractor implements DBExtractionConst {
* Execute command "RemoveAllDynAttr" on device. Remove all
* existing dynamic attributes.
*
* @param argin
* The dynamic attribute's name
* @param argin The dynamic attribute's name
*/
@Command(name = "RemoveAllDynAttr")
public void remove_all_dyn_attr() throws DevFailed {
......@@ -391,7 +386,6 @@ public class SnapExtractor implements DBExtractionConst {
dbSchema = getProperty(dbSchema, SnapConnectionParameters.getSnapSchema());
dbUser = getProperty(dbUser, SnapConnectionParameters.getSnapUser());
dbPassword = getProperty(dbPassword, SnapConnectionParameters.getSnapPassword());
isRac = getProperty(isRac, SnapConnectionParameters.getSnapRac());
logger.info(SnapConnectionParameters.appendSnapConnectionInfoLog(new StringBuilder("Connection info:\n"))
.toString());
}
......@@ -412,8 +406,7 @@ public class SnapExtractor implements DBExtractionConst {
* <LI>the name of the dynamic attribute containing the attribute's write value (if it has one, otherwise blank)
* </UL>
*
* @param argin
* the snapshot's ID
* @param argin the snapshot's ID
* @return A table containing [attrRealName, dynAttrNameR,dynAttrNameW]*n
* @throws DevFailed
*/
......@@ -457,10 +450,8 @@ public class SnapExtractor implements DBExtractionConst {
* if the snapshot exists, find if the attribute exists for this snapshot if
* the attribute exists, Returns an attribute value
*
* @param snapID
* the snapshot's ID
* @param attr_name
* the attribute name
* @param snapID the snapshot's ID
* @param attr_name the attribute name
* @return the attribute value
* @throws DevFailed
*/
......@@ -497,10 +488,8 @@ public class SnapExtractor implements DBExtractionConst {
* Execute command "GetSnapID" on device. Loads the list of snapshot' id of
* a given context that respect the given criterion.
*
* @param ctxID
* the context's ID
* @param criterion
* the search criterion
* @param ctxID the context's ID
* @param criterion the search criterion
* @return the list of snapshot ids.
* @throws DevFailed
* @throws SnapshotingException
......@@ -520,7 +509,6 @@ public class SnapExtractor implements DBExtractionConst {
}
/**
*
* @param snapAttributeExtract
* @return read_value and write_value
*/
......@@ -539,8 +527,7 @@ public class SnapExtractor implements DBExtractionConst {
* ID, the String part is the concatenation of its Date and Comment fields
* values.
*
* @param argin
* The context ID
* @param argin The context ID
* @return The snapshots: [ID, Date + Comment]*n
* @throws DevFailed
*/
......@@ -560,7 +547,6 @@ public class SnapExtractor implements DBExtractionConst {
* ID, the String part is the concatenation of its Date and Comment fields
* values.
*
*
* @return The contexts: [ID, Name, author name, Date, reason, description]*n
* @throws DevFailed
*/
......@@ -584,10 +570,6 @@ public class SnapExtractor implements DBExtractionConst {
return ret;
}
public static void main(final String[] args) {
ServerManager.getInstance().start(args, SnapExtractor.class);
}
private String[] addAttributes(final SnapAttributeExtract[] sae) throws DevFailed {
final int numberOfAttributes = sae.length;
final String[] argout = new String[3 * numberOfAttributes];
......@@ -662,7 +644,7 @@ public class SnapExtractor implements DBExtractionConst {
final boolean firstIsRead = currentExtract.getWritable() != AttrWriteType._WRITE;
final String randomName1 = dynamicAttributeNamer.getName(currentExtract, id, firstIsRead);
String randomName2 = ObjectUtils.EMPTY_STRING;
String randomName2 = "";
if (hasBothReadAndWriteValues) {
randomName2 = dynamicAttributeNamer.getName(currentExtract, id, !firstIsRead);
}
......
package org.tango.server.snap.manager;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.ResourceBundle;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
import fr.esrf.Tango.DevError;
import fr.esrf.Tango.DevFailed;
import fr.esrf.Tango.DevVarLongStringArray;
import fr.esrf.TangoDs.Except;
import fr.soleil.archiving.common.api.exception.ArchivingException;
import fr.soleil.archiving.snap.api.manager.ISnapManager;
import fr.soleil.archiving.snap.api.manager.SnapManagerApi;
import fr.soleil.archiving.snap.api.manager.SnapManagerImpl;
import fr.soleil.archiving.snap.api.tools.SnapAttributeExtract;
import fr.soleil.archiving.snap.api.tools.SnapConst;
import fr.soleil.archiving.snap.api.tools.SnapContext;
import fr.soleil.archiving.snap.api.tools.Snapshot;
import fr.soleil.archiving.snap.api.tools.SnapshotingException;
import fr.soleil.database.connection.DataBaseParameters;
import fr.soleil.tango.clientapi.TangoCommand;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.tango.DeviceState;
......@@ -27,19 +29,18 @@ import org.tango.server.annotation.StateMachine;
import org.tango.server.annotation.Status;
import org.tango.utils.DevFailedUtils;
import fr.esrf.Tango.DevError;
import fr.esrf.Tango.DevFailed;
import fr.esrf.Tango.DevVarLongStringArray;
import fr.esrf.TangoDs.Except;
import fr.soleil.archiving.snap.api.manager.ISnapManager;
import fr.soleil.archiving.snap.api.manager.SnapManagerApi;
import fr.soleil.archiving.snap.api.manager.SnapManagerImpl;
import fr.soleil.archiving.snap.api.tools.SnapAttributeExtract;
import fr.soleil.archiving.snap.api.tools.SnapConst;
import fr.soleil.archiving.snap.api.tools.SnapContext;
import fr.soleil.archiving.snap.api.tools.Snapshot;
import fr.soleil.archiving.snap.api.tools.SnapshotingException;
import fr.soleil.tango.clientapi.TangoCommand;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.ResourceBundle;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
/**
* Class Description: This DServer provides the connections points and methods
......@@ -77,11 +78,12 @@ public class SnapManager {
private String dbName;
@DeviceProperty
private String dbSchema;
@DeviceProperty(name = "maxDbPoolSize", description = "max database connections", defaultValue = "3")
private short maxDbPoolSize = 3;
@State
private DeviceState state;
@Status
private String status;
private ISnapManager manager;
public static void main(final String[] args) {
......@@ -89,6 +91,10 @@ public class SnapManager {
ServerManager.getInstance().start(args, SnapManager.class);
}
public void setMaxDbPoolSize(short maxDbPoolSize) {
this.maxDbPoolSize = maxDbPoolSize;
}
public void setDbUser(String dbUser) {
this.dbUser = dbUser;
}
......@@ -137,10 +143,17 @@ public class SnapManager {
public void init() throws DevFailed {
try {
// Snap Database connection
SnapManagerApi.initSnapConnection(dbHost, dbName, dbSchema, dbUser, dbPassword, "false");
DataBaseParameters parameters = new DataBaseParameters();
parameters.setHost(dbHost);
parameters.setUser(dbUser);
parameters.setSchema(dbSchema);
parameters.setPassword(dbPassword);
parameters.setName(dbName);
parameters.setMaxPoolSize(maxDbPoolSize);
SnapManagerApi.initSnapConnection(parameters);
state = DeviceState.ON;
status = "Device is ready";
} catch (SnapshotingException e) {
} catch (ArchivingException e) {
logger.error(e.toString(), e);
throw e.toTangoException();
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment