summaryrefslogtreecommitdiffstats
path: root/Dozentenmodulserver
diff options
context:
space:
mode:
authorTobias Spitzer2014-05-23 07:45:15 +0200
committerTobias Spitzer2014-05-23 07:45:15 +0200
commit6719008d289cd08a0effbf931842b7213cbdffe1 (patch)
tree13298b7ec6dcc76a9b379070e8f79b18c7d2307e /Dozentenmodulserver
parentd (diff)
parentAusgabe Serverseitgi wieviele Threads laufen sollen (diff)
downloadtutor-module-6719008d289cd08a0effbf931842b7213cbdffe1.tar.gz
tutor-module-6719008d289cd08a0effbf931842b7213cbdffe1.tar.xz
tutor-module-6719008d289cd08a0effbf931842b7213cbdffe1.zip
Merge branch 'master' of git.openslx.org:openslx-ng/tutor-module
Diffstat (limited to 'Dozentenmodulserver')
-rw-r--r--Dozentenmodulserver/bin/server/BinaryListener.classbin2464 -> 3344 bytes
-rw-r--r--Dozentenmodulserver/bin/server/ServerHandler.classbin12705 -> 12659 bytes
-rw-r--r--Dozentenmodulserver/bin/server/startServer.classbin2884 -> 2742 bytes
-rw-r--r--Dozentenmodulserver/bin/util/XMLCreator.classbin7557 -> 7558 bytes
-rw-r--r--Dozentenmodulserver/src/server/BinaryListener.java43
-rw-r--r--Dozentenmodulserver/src/server/Image.java2
-rw-r--r--Dozentenmodulserver/src/server/ServerHandler.java102
-rw-r--r--Dozentenmodulserver/src/server/TBinaryProtocolSafe.java123
-rw-r--r--Dozentenmodulserver/src/server/startServer.java35
9 files changed, 232 insertions, 73 deletions
diff --git a/Dozentenmodulserver/bin/server/BinaryListener.class b/Dozentenmodulserver/bin/server/BinaryListener.class
index 4a135f2d..3518f758 100644
--- a/Dozentenmodulserver/bin/server/BinaryListener.class
+++ b/Dozentenmodulserver/bin/server/BinaryListener.class
Binary files differ
diff --git a/Dozentenmodulserver/bin/server/ServerHandler.class b/Dozentenmodulserver/bin/server/ServerHandler.class
index 0f7cee59..d0b004ab 100644
--- a/Dozentenmodulserver/bin/server/ServerHandler.class
+++ b/Dozentenmodulserver/bin/server/ServerHandler.class
Binary files differ
diff --git a/Dozentenmodulserver/bin/server/startServer.class b/Dozentenmodulserver/bin/server/startServer.class
index baa1a480..3cea3ec6 100644
--- a/Dozentenmodulserver/bin/server/startServer.class
+++ b/Dozentenmodulserver/bin/server/startServer.class
Binary files differ
diff --git a/Dozentenmodulserver/bin/util/XMLCreator.class b/Dozentenmodulserver/bin/util/XMLCreator.class
index cfdf6004..0c9c6d45 100644
--- a/Dozentenmodulserver/bin/util/XMLCreator.class
+++ b/Dozentenmodulserver/bin/util/XMLCreator.class
Binary files differ
diff --git a/Dozentenmodulserver/src/server/BinaryListener.java b/Dozentenmodulserver/src/server/BinaryListener.java
index a48b381e..ffeb9bd5 100644
--- a/Dozentenmodulserver/src/server/BinaryListener.java
+++ b/Dozentenmodulserver/src/server/BinaryListener.java
@@ -3,33 +3,46 @@ package server;
import java.util.Date;
import org.apache.log4j.Logger;
+import org.apache.thrift.protocol.TProtocolFactory;
import org.apache.thrift.server.TServer;
-import org.apache.thrift.server.TServer.Args;
-import org.apache.thrift.server.TSimpleServer;
+import org.apache.thrift.server.TThreadPoolServer.Args;
+import org.apache.thrift.server.TThreadPoolServer;
import org.apache.thrift.transport.TServerSocket;
import org.apache.thrift.transport.TServerTransport;
import org.apache.thrift.transport.TTransportException;
-public class BinaryListener implements Runnable
-{
- private static Logger log = Logger.getLogger( BinaryListener.class );
+public class BinaryListener implements Runnable {
+ private static Logger log = Logger.getLogger(BinaryListener.class);
+
+ private final int MINWORKERTHREADS = 20; // keine ahnung ob das passt...
+ private final int MAXWORKERTHREADS = 80; // ebenso
@Override
- public void run()
- {
+ public void run() {
final ServerHandler handler = new ServerHandler();
- final Server.Processor<ServerHandler> processor = new Server.Processor<ServerHandler>( handler );
+ final Server.Processor<ServerHandler> processor = new Server.Processor<ServerHandler>(
+ handler);
final TServerTransport transport;
+ final TProtocolFactory protFactory = new TBinaryProtocolSafe.Factory(
+ true, true);
try {
- transport = new TServerSocket( 9090 );
- log.info(new Date()+" - Connected to Port 9090");
- } catch ( TTransportException e ) {
- log.fatal( new Date() +" - Could not listen on port 9090" );
+ transport = new TServerSocket(9090);
+ log.info(new Date() + " - Connected to Port 9090");
+
+ } catch (TTransportException e) {
+ log.fatal(new Date() + " - Could not listen on port 9090");
return;
}
- TServer server = new TSimpleServer( new Args( transport ).processor( processor ) );
- log.info(new Date() +" - Started running BinaryListener");
+ TServer server = new TThreadPoolServer(new Args(transport)
+ .protocolFactory(protFactory).processor(processor)
+ .minWorkerThreads(MINWORKERTHREADS)
+ .maxWorkerThreads(MAXWORKERTHREADS));
+
+ log.info(new Date() + " - Started running BinaryListener");
+ log.info(new Date() + " - MINWORKERTHREADS=" + MINWORKERTHREADS
+ + " and MAXWORKERTHREADS=" + MAXWORKERTHREADS + "\n");
server.serve();
+
}
-
+
}
diff --git a/Dozentenmodulserver/src/server/Image.java b/Dozentenmodulserver/src/server/Image.java
index 34c2b45c..e82aca0f 100644
--- a/Dozentenmodulserver/src/server/Image.java
+++ b/Dozentenmodulserver/src/server/Image.java
@@ -43,7 +43,7 @@ public class Image implements org.apache.thrift.TBase<Image, Image._Fields>, jav
private static final org.apache.thrift.protocol.TField LECTURE_NAME_FIELD_DESC = new org.apache.thrift.protocol.TField("lectureName", org.apache.thrift.protocol.TType.STRING, (short)-6);
private static final org.apache.thrift.protocol.TField UPDATE_TIME_FIELD_DESC = new org.apache.thrift.protocol.TField("updateTime", org.apache.thrift.protocol.TType.STRING, (short)-7);
private static final org.apache.thrift.protocol.TField USER_DATA_FIELD_DESC = new org.apache.thrift.protocol.TField("userData", org.apache.thrift.protocol.TType.STRING, (short)-8);
-
+
private static final Map<Class<? extends IScheme>, SchemeFactory> schemes = new HashMap<Class<? extends IScheme>, SchemeFactory>();
static {
schemes.put(StandardScheme.class, new ImageStandardSchemeFactory());
diff --git a/Dozentenmodulserver/src/server/ServerHandler.java b/Dozentenmodulserver/src/server/ServerHandler.java
index 0cafd182..dad9b1a8 100644
--- a/Dozentenmodulserver/src/server/ServerHandler.java
+++ b/Dozentenmodulserver/src/server/ServerHandler.java
@@ -8,10 +8,7 @@ import java.nio.file.Path;
import java.nio.file.Paths;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
-import java.sql.Connection;
-import java.sql.ResultSet;
import java.sql.SQLException;
-import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
@@ -26,9 +23,11 @@ import org.apache.thrift.TException;
import sql.SQL;
import util.XMLCreator;
+
+
public class ServerHandler implements Server.Iface {
static SQL sql = new SQL();
-
+
private static Logger log = Logger.getLogger(ServerHandler.class);
@Override
@@ -38,15 +37,12 @@ public class ServerHandler implements Server.Iface {
user.setUserName(UUID.randomUUID().toString().substring(0, 8));
user.setPassword(getEncodedSha1Sum(UUID.randomUUID().toString()
.substring(0, 8)));
- if(Configuration.config.getAbsolute_path().endsWith("/"))
- {
+ if (Configuration.config.getAbsolute_path().endsWith("/")) {
user.setPath(Configuration.config.getAbsolute_path());
+ } else {
+ user.setPath(Configuration.config.getAbsolute_path() + "/");
}
- else{
- user.setPath(Configuration.config.getAbsolute_path()+"/");
- }
-
-
+
// check if folder temp exists
if (folderTempExists() == true) {
sql.writeFTPUser(user.getUserName(), user.getPassword());
@@ -59,15 +55,11 @@ public class ServerHandler implements Server.Iface {
public boolean folderTempExists() {
// check if folder temp exists, otherwise create it
- Path path=null;
- if(Configuration.config.getAbsolute_path().endsWith("/"))
- {
- path = Paths
- .get(Configuration.config.getAbsolute_path() + "temp");
- }
- else{
- path = Paths
- .get(Configuration.config.getAbsolute_path() + "/temp");
+ Path path = null;
+ if (Configuration.config.getAbsolute_path().endsWith("/")) {
+ path = Paths.get(Configuration.config.getAbsolute_path() + "temp");
+ } else {
+ path = Paths.get(Configuration.config.getAbsolute_path() + "/temp");
}
if (Files.exists(path) == true) {
@@ -83,9 +75,9 @@ public class ServerHandler implements Server.Iface {
+ "'");
return false;
} else {
- //set permissions
+ // set permissions
try {
- Runtime.getRuntime().exec("chmod 777 "+path);
+ Runtime.getRuntime().exec("chmod 777 " + path);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
@@ -117,7 +109,7 @@ public class ServerHandler implements Server.Iface {
@Override
public String getPathOfImage(String image_id, String version)
- throws TException {
+ throws TException {
log.info(new Date() + " - successfully returned PathOfImage: "
+ sql.getPathOfImage(image_id, version));
return sql.getPathOfImage(image_id, version);
@@ -136,8 +128,8 @@ public class ServerHandler implements Server.Iface {
String pk_person = sql.setPerson(login, lastname, firstname, Mail,
new Date(), pk_institution);
- sql.setImageData(pk_person, license, internet, cpu, ram,
- imagename, imagePath, isTemplate, filesize);
+ sql.setImageData(pk_person, license, internet, cpu, ram, imagename,
+ imagePath, isTemplate, filesize);
log.info(new Date() + " - written VLdata");
// TODO Auto-generated method stub
@@ -146,7 +138,7 @@ public class ServerHandler implements Server.Iface {
@Override
public List<Image> getImageList() throws TException {
- return sql.getImageList();
+ return sql.getImageList();
}
@@ -178,11 +170,11 @@ public class ServerHandler implements Server.Iface {
map = sql.getImageIDandVersion(imagename);
- pk_image=map.get("GUID");
- imageversion=Integer.parseInt(map.get("version"));
+ pk_image = map.get("GUID");
+ imageversion = Integer.parseInt(map.get("version"));
sql.setLectureData(pk_person, pk_image, imageversion, name, desc,
shortdesc, startDate, endDate, isActive);
- XMLCreator xml = new XMLCreator(sql.getConnection(),name);
+ XMLCreator xml = new XMLCreator(sql.getConnection(), name);
try {
xml.create(name);
log.info(new Date() + " - XML created.");
@@ -201,6 +193,7 @@ public class ServerHandler implements Server.Iface {
@Override
public boolean startFileCopy(String filename) throws TException {
+ //copy file from folder temp to folder prod
String file = Configuration.config.getAbsolute_path() + "temp/"
+ filename;
File tmpFile = new File(file);
@@ -209,17 +202,13 @@ public class ServerHandler implements Server.Iface {
+ " - Trying to move file to '/srv/openslx/nfs/prod/"
+ tmpFile.getName() + "'");
try {
-
- // der übergebene Filename ist falsch - hier muss der generierte
- // name geholt werden, nicht der ursprüngliche name. wo wird dieser
- // eingelesen?
-
FileUtils.moveFile(tmpFile,
new File(Configuration.config.getAbsolute_path() + "prod/"
+ filename));
- int ret = sql.UpdateImagePath(filename);
- log.info(new Date() + " - update " + ret);
- log.info(new Date() + " - file moved");
+ // int ret = sql.UpdateImagePath(filename);
+ if (sql.UpdateImagePath(filename) == 0) {
+ log.info(new Date() + " - file moved and database updated.");
+ }
} catch (IOException e) {
// TODO Auto-generated catch block
@@ -232,8 +221,8 @@ public class ServerHandler implements Server.Iface {
@Override
public Map<String, String> getImageData(String imageid, String imageversion)
throws TException {
- log.info(new Date() + " - returning ImageData: " + sql.getImageData(imageid, imageversion).size()
- + "items.");
+ log.info(new Date() + " - returning ImageData: "
+ + sql.getImageData(imageid, imageversion).size() + "items.");
return sql.getImageData(imageid, imageversion);
}
@@ -242,8 +231,8 @@ public class ServerHandler implements Server.Iface {
String image_path, boolean license, boolean internet, long ram,
long cpu, String id, String version, boolean isTemplate,
long filesize) throws TException {
- sql.UpdateImageData(name, newName, image_path, license, internet,
- cpu, ram, id, version, isTemplate, filesize);
+ sql.UpdateImageData(name, newName, image_path, license, internet, cpu,
+ ram, id, version, isTemplate, filesize);
return false;
}
@@ -257,9 +246,12 @@ public class ServerHandler implements Server.Iface {
@Override
public List<Lecture> getLectureList() throws TException {
- log.info(new Date() + " - returning LectureList: " + getLectureList().size()
- + " items.");
+
+ log.info(new Date().toString() + " - returning LectureList: "
+ + sql.getLectureList().size() + " items.");
return sql.getLectureList();
+
+
}
@Override
@@ -272,12 +264,12 @@ public class ServerHandler implements Server.Iface {
int imageversion = 0;
Map<String, String> image = sql.getImageIDandVersion(imagename);
- pk_image=image.get("GUID");
- imageversion=Integer.parseInt(image.get("version"));
- sql.updateLectureData(pk_image, imageversion, lastname, newName,
- desc, shortdesc, startDate, endDate, isActive, id);
-
- XMLCreator xml = new XMLCreator(sql.getConnection(),newName);
+ pk_image = image.get("GUID");
+ imageversion = Integer.parseInt(image.get("version"));
+ sql.updateLectureData(pk_image, imageversion, lastname, newName, desc,
+ shortdesc, startDate, endDate, isActive, id);
+
+ XMLCreator xml = new XMLCreator(sql.getConnection(), newName);
try {
xml.create(newName);
} catch (SQLException | ParserConfigurationException
@@ -302,7 +294,7 @@ public class ServerHandler implements Server.Iface {
+ stringFile);
try {
- // File wird von Server gelöscht
+ // File wird von Server gel�scht
FileUtils.forceDelete(tmpFile);
return true;
@@ -332,10 +324,12 @@ public class ServerHandler implements Server.Iface {
Map<String, String> map = new HashMap<String, String>();
map = sql.getDeleteXMLData(id);
try {
-
- String path = Configuration.config.getAbsolute_path() + "temp/"
- + map.get("date").substring(0, map.get("date").length() - 2) + "_" + hs + "_"
- + user + "_" + map.get("name") + ".xml";
+
+ String path = Configuration.config.getAbsolute_path()
+ + "temp/"
+ + map.get("date")
+ .substring(0, map.get("date").length() - 2) + "_"
+ + hs + "_" + user + "_" + map.get("name") + ".xml";
File xmlFile = new File(path);
FileUtils.forceDelete(xmlFile);
} catch (IOException e) {
diff --git a/Dozentenmodulserver/src/server/TBinaryProtocolSafe.java b/Dozentenmodulserver/src/server/TBinaryProtocolSafe.java
new file mode 100644
index 00000000..843b58b1
--- /dev/null
+++ b/Dozentenmodulserver/src/server/TBinaryProtocolSafe.java
@@ -0,0 +1,123 @@
+package server;
+
+import java.io.UnsupportedEncodingException;
+import java.nio.ByteBuffer;
+
+import org.apache.thrift.TException;
+import org.apache.thrift.protocol.TBinaryProtocol;
+import org.apache.thrift.protocol.TMessage;
+import org.apache.thrift.protocol.TProtocol;
+import org.apache.thrift.protocol.TProtocolException;
+import org.apache.thrift.protocol.TProtocolFactory;
+import org.apache.thrift.transport.TTransport;
+
+/**
+ * Binary protocol implementation for thrift.
+ * Will not read messages bigger than 12MiB.
+ *
+ */
+public class TBinaryProtocolSafe extends TBinaryProtocol
+{
+ /**
+ * Factory
+ */
+ @SuppressWarnings( "serial" )
+ public static class Factory implements TProtocolFactory
+ {
+
+ protected boolean strictRead_ = false;
+ protected boolean strictWrite_ = true;
+
+ public Factory()
+ {
+ this( false, true );
+ }
+
+ public Factory(boolean strictRead, boolean strictWrite)
+ {
+ strictRead_ = strictRead;
+ strictWrite_ = strictWrite;
+ }
+
+ public TProtocol getProtocol( TTransport trans )
+ {
+ return new TBinaryProtocolSafe( trans, strictRead_, strictWrite_ );
+ }
+ }
+
+ private static final int maxLen = 12 * 1024 * 1024; // 12 MiB
+
+ /**
+ * Constructor
+ */
+ public TBinaryProtocolSafe(TTransport trans)
+ {
+ this( trans, false, true );
+ }
+
+ public TBinaryProtocolSafe(TTransport trans, boolean strictRead, boolean strictWrite)
+ {
+ super( trans );
+ strictRead_ = strictRead;
+ strictWrite_ = strictWrite;
+ }
+
+ /**
+ * Reading methods.
+ */
+
+ public TMessage readMessageBegin() throws TException
+ {
+ int size = readI32();
+ if ( size > maxLen )
+ throw new TProtocolException( TProtocolException.SIZE_LIMIT, "Payload too big." );
+ if ( size < 0 ) {
+ int version = size & VERSION_MASK;
+ if ( version != VERSION_1 ) {
+ throw new TProtocolException( TProtocolException.BAD_VERSION, "Bad version in readMessageBegin" );
+ }
+ return new TMessage( readString(), (byte) ( size & 0x000000ff ), readI32() );
+ } else {
+ if ( strictRead_ ) {
+ throw new TProtocolException( TProtocolException.BAD_VERSION, "Missing version in readMessageBegin, old client?" );
+ }
+ return new TMessage( readStringBody( size ), readByte(), readI32() );
+ }
+ }
+
+ public String readString() throws TException
+ {
+ int size = readI32();
+ if ( size > maxLen )
+ throw new TProtocolException( TProtocolException.SIZE_LIMIT, "Payload too big." );
+ if ( trans_.getBytesRemainingInBuffer() >= size ) {
+ try {
+ String s = new String( trans_.getBuffer(), trans_.getBufferPosition(), size, "UTF-8" );
+ trans_.consumeBuffer( size );
+ return s;
+ } catch ( UnsupportedEncodingException e ) {
+ throw new TException( "JVM DOES NOT SUPPORT UTF-8" );
+ }
+ }
+
+ return readStringBody( size );
+ }
+
+ public ByteBuffer readBinary() throws TException
+ {
+ int size = readI32();
+ if ( size > maxLen )
+ throw new TProtocolException( TProtocolException.SIZE_LIMIT, "Payload too big." );
+ if ( trans_.getBytesRemainingInBuffer() >= size ) {
+ ByteBuffer bb = ByteBuffer.wrap( trans_.getBuffer(), trans_.getBufferPosition(), size );
+ trans_.consumeBuffer( size );
+ return bb;
+ }
+
+ byte[] buf = new byte[ size ];
+ trans_.readAll( buf, 0, size );
+ return ByteBuffer.wrap( buf );
+ }
+
+}
+
diff --git a/Dozentenmodulserver/src/server/startServer.java b/Dozentenmodulserver/src/server/startServer.java
index 949b3538..a5509d04 100644
--- a/Dozentenmodulserver/src/server/startServer.java
+++ b/Dozentenmodulserver/src/server/startServer.java
@@ -16,6 +16,13 @@ import org.ini4j.Wini;
import server.BinaryListener;
+import org.apache.thrift.protocol.TProtocolFactory;
+import org.apache.thrift.server.TServer;
+import org.apache.thrift.server.TThreadPoolServer;
+import org.apache.thrift.transport.TServerSocket;
+import org.apache.thrift.transport.TServerTransport;
+import org.apache.thrift.transport.TTransportException;
+import org.apache.thrift.server.TThreadPoolServer.Args;
public class startServer {
/**
@@ -28,6 +35,27 @@ public class startServer {
public static void main(String[] args) {
+
+
+
+ //final ImageServerHandler handler = new ImageServerHandler();
+ //final ImageServer.Processor<ImageServerHandler> processor = new ImageServer.Processor<ImageServerHandler>(handler);
+
+ /*
+ try{
+ TServerTransport serverTransport = new TServerSocket(9090);
+ //TServer server = new TSimpleServer(new Args(serverTransport).processor(processor));
+ TServer server = new TThreadPoolServer(new TThreadPoolServer.Args(serverTransport).processor(processor));
+ server.serve();
+ } catch (Exception e){
+ e.printStackTrace();
+ }
+ */
+
+ //deprecated
+
+
+
//get Configuration
try {
Wini ini=new Wini(new File("Server_Config.ini"));
@@ -43,14 +71,15 @@ public class startServer {
e1.printStackTrace();
}
//Start Server
+
BasicConfigurator.configure();
- log.info( new Date() + " - starting Application\n" );
+ log.info("***** "+ new Date() + " - starting Application *****" );
Thread t;
t = new Thread(new BinaryListener());
servers.add(t);
t.start();
//information
- log.info( new Date()+" - new thread created. Now "+servers.size()+" thread(s).\n" );
+ //log.info( new Date()+" - new thread created. Now "+servers.size()+" thread(s).\n" );
// Run more servers
// ...
// Wait for all servers to die
@@ -66,7 +95,7 @@ public class startServer {
}
}
log.info( new Date()+" - all Servers shut down, exiting...\n" );
-
+
}
}