diff options
author | Tobias Spitzer | 2014-05-23 07:45:15 +0200 |
---|---|---|
committer | Tobias Spitzer | 2014-05-23 07:45:15 +0200 |
commit | 6719008d289cd08a0effbf931842b7213cbdffe1 (patch) | |
tree | 13298b7ec6dcc76a9b379070e8f79b18c7d2307e /Dozentenmodulserver | |
parent | d (diff) | |
parent | Ausgabe Serverseitgi wieviele Threads laufen sollen (diff) | |
download | tutor-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.class | bin | 2464 -> 3344 bytes | |||
-rw-r--r-- | Dozentenmodulserver/bin/server/ServerHandler.class | bin | 12705 -> 12659 bytes | |||
-rw-r--r-- | Dozentenmodulserver/bin/server/startServer.class | bin | 2884 -> 2742 bytes | |||
-rw-r--r-- | Dozentenmodulserver/bin/util/XMLCreator.class | bin | 7557 -> 7558 bytes | |||
-rw-r--r-- | Dozentenmodulserver/src/server/BinaryListener.java | 43 | ||||
-rw-r--r-- | Dozentenmodulserver/src/server/Image.java | 2 | ||||
-rw-r--r-- | Dozentenmodulserver/src/server/ServerHandler.java | 102 | ||||
-rw-r--r-- | Dozentenmodulserver/src/server/TBinaryProtocolSafe.java | 123 | ||||
-rw-r--r-- | Dozentenmodulserver/src/server/startServer.java | 35 |
9 files changed, 232 insertions, 73 deletions
diff --git a/Dozentenmodulserver/bin/server/BinaryListener.class b/Dozentenmodulserver/bin/server/BinaryListener.class Binary files differindex 4a135f2d..3518f758 100644 --- a/Dozentenmodulserver/bin/server/BinaryListener.class +++ b/Dozentenmodulserver/bin/server/BinaryListener.class diff --git a/Dozentenmodulserver/bin/server/ServerHandler.class b/Dozentenmodulserver/bin/server/ServerHandler.class Binary files differindex 0f7cee59..d0b004ab 100644 --- a/Dozentenmodulserver/bin/server/ServerHandler.class +++ b/Dozentenmodulserver/bin/server/ServerHandler.class diff --git a/Dozentenmodulserver/bin/server/startServer.class b/Dozentenmodulserver/bin/server/startServer.class Binary files differindex baa1a480..3cea3ec6 100644 --- a/Dozentenmodulserver/bin/server/startServer.class +++ b/Dozentenmodulserver/bin/server/startServer.class diff --git a/Dozentenmodulserver/bin/util/XMLCreator.class b/Dozentenmodulserver/bin/util/XMLCreator.class Binary files differindex cfdf6004..0c9c6d45 100644 --- a/Dozentenmodulserver/bin/util/XMLCreator.class +++ b/Dozentenmodulserver/bin/util/XMLCreator.class 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" ); - + } } |