Nexio restart javítása
authorVásáry Dániel <daniel.vasary@userrendszerhaz.hu>
Mon, 26 Nov 2018 15:33:28 +0000 (15:33 +0000)
committerVásáry Dániel <daniel.vasary@userrendszerhaz.hu>
Mon, 26 Nov 2018 15:33:28 +0000 (15:33 +0000)
git-tfs-id: [http://tfs.userrendszerhaz.hu:8080/tfs/DefaultCollection]$/MediaCube;C31349

server/user.jobengine.osgi.commons/src/user/commons/nexio/NexioAPI.java
server/user.jobengine.osgi.commons/src/user/commons/nexio/NexioDataMiner.java
server/user.jobengine.osgi.commons/src/user/commons/nexio/NexioDispatcher.java

index ba4306d0fd3b27b037ec37b5b73ae7ed2717fc1d..fd2d114e7c934d0df777585668c23cef38d8d5e9 100644 (file)
@@ -33,7 +33,7 @@ public class NexioAPI implements INexioAPI {
                DB db;\r
                try {\r
                        db = NoSQLUtils.getNoSQLDB();\r
-                       DBCollection collection = db.getCollection(NexioDataMiner.CLIP_COLLECTION_NAME);\r
+                       DBCollection collection = db.getCollection(NexioDispatcher.CLIP_COLLECTION_NAME);\r
                        DBCursor find = collection.find().sort(new BasicDBObject(MODIFIEDTIMESTAMP, new BasicDBList(-1, "$date")));\r
                        if (find.hasNext())\r
                                result = find.toArray();\r
index 004627762ea72da88c792ac16adbc5f12838d53b..cd17ff8e3fa87e734244c8ae5375ac749241e677 100644 (file)
@@ -43,7 +43,6 @@ public class NexioDataMiner implements Runnable, INexioChangeListener {
        private static final String RECORDDATE = "recorddate";\r
        private static final String LONGNAMEID = "longnameid";\r
        private static final String ID = "id";\r
-       public static final String CLIP_COLLECTION_NAME = "nexioclips";\r
        private static final String VIDEOBITRATE = "videobitrate";\r
        private static final String VIDEOFORMAT = "videoformat";\r
        private static final String KILLDATE = "killdate";\r
@@ -80,7 +79,7 @@ public class NexioDataMiner implements Runnable, INexioChangeListener {
        }\r
 \r
        private void ensureIndexes() {\r
-               DBCollection collection = db.getCollection(CLIP_COLLECTION_NAME);\r
+               DBCollection collection = db.getCollection(NexioDispatcher.CLIP_COLLECTION_NAME);\r
                if (collection.count() == 0)\r
                        collection.ensureIndex(LONGNAMEID);\r
        }\r
@@ -163,7 +162,7 @@ public class NexioDataMiner implements Runnable, INexioChangeListener {
 \r
        private Map<String, BasicDBObject> readClips() {\r
                Map<String, BasicDBObject> result = new HashMap<>();\r
-               DBCollection collection = db.getCollection(NexioDataMiner.CLIP_COLLECTION_NAME);\r
+               DBCollection collection = db.getCollection(NexioDispatcher.CLIP_COLLECTION_NAME);\r
                DBCursor find = collection.find();\r
                if (find.hasNext()) {\r
                        List<BasicDBObject> clips = ListUtils.cast(find.toArray());\r
@@ -181,7 +180,7 @@ public class NexioDataMiner implements Runnable, INexioChangeListener {
                if (localNames.isEmpty())\r
                        logger.debug("Nothing to remove");\r
 \r
-               DBCollection collection = db.getCollection(NexioDataMiner.CLIP_COLLECTION_NAME);\r
+               DBCollection collection = db.getCollection(NexioDispatcher.CLIP_COLLECTION_NAME);\r
                for (String name : localNames) {\r
                        logger.debug("Removing {}", name);\r
 \r
@@ -196,7 +195,7 @@ public class NexioDataMiner implements Runnable, INexioChangeListener {
        }\r
 \r
        public void reset() {\r
-               db.getCollection(CLIP_COLLECTION_NAME).drop();\r
+               db.getCollection(NexioDispatcher.CLIP_COLLECTION_NAME).drop();\r
        }\r
 \r
        @Override\r
@@ -236,7 +235,7 @@ public class NexioDataMiner implements Runnable, INexioChangeListener {
 \r
        private void storeClip(BasicDBObject clip, Map<String, BasicDBObject> localClips) {\r
                logger.trace("Enter");\r
-               DBCollection collection = db.getCollection(CLIP_COLLECTION_NAME);\r
+               DBCollection collection = db.getCollection(NexioDispatcher.CLIP_COLLECTION_NAME);\r
                String name = clip.getString(LONGNAMEID);\r
                BasicDBObject localClip = localClips.get(name);\r
                if (localClip == null) {\r
@@ -271,7 +270,7 @@ public class NexioDataMiner implements Runnable, INexioChangeListener {
 \r
        public void transferClips() {\r
                try (Connection con = getSQLConnection()) {\r
-                       DBCollection collection = db.getCollection(CLIP_COLLECTION_NAME);\r
+                       DBCollection collection = db.getCollection(NexioDispatcher.CLIP_COLLECTION_NAME);\r
                        collection.drop();\r
                        transferClips(con, collection);\r
                } catch (Exception e) {\r
index 51097f8b96ebe00ea5e7537b46295a27c3345f52..165c585bd6e9af9cbe1e28f496bb7ce05260ef6b 100644 (file)
@@ -1,8 +1,6 @@
 package user.commons.nexio;\r
 \r
 import java.util.Iterator;\r
-import java.util.concurrent.ExecutorService;\r
-import java.util.concurrent.Executors;\r
 \r
 import org.apache.logging.log4j.LogManager;\r
 import org.apache.logging.log4j.Logger;\r
@@ -39,17 +37,15 @@ public class NexioDispatcher implements ClipEventListener {
        private static final String ID = "id";\r
        private static final String VIDEO_FORMAT = "videoformat";\r
        private static final String VIDEO_BITRATE = "videobitrate";\r
-       private static final String FILESIZE = "filesize";\r
        private static final String KILLDATE = "killdate";\r
        private static final String DURATION = "duration";\r
        private static final String MODIFIEDTIMESTAMP = "modifiedtimestamp";\r
        private static final String EXTAGENCY = "extagency";\r
        private static final String RECORDDATE = "recorddate";\r
        private static final String LONGNAMEID = "longnameid";\r
-       public static final String CLIP_COLLECTION_NAME = "nexioclips";\r
+       public static final String CLIP_COLLECTION_NAME = System.getProperty("jobengine.nexio.name");\r
        static private final byte[] GET_SPECIAL_ID_ATTRIBUTES_REQ = { (byte) 0xC8, (byte) 0x84 };\r
        static private final char[] hexArray = "0123456789ABCDEF".toCharArray();\r
-       private static final ExecutorService executor = Executors.newFixedThreadPool(1);\r
 \r
        public static String bytesToBin(byte[] bytes) {\r
                StringBuilder result = new StringBuilder();\r
@@ -84,6 +80,8 @@ public class NexioDispatcher implements ClipEventListener {
                return str;\r
        }\r
 \r
+       private boolean restartInProgress;\r
+\r
        private INexioChangeListener nexioChangeListener;\r
        private DB db;\r
 \r
@@ -217,7 +215,8 @@ public class NexioDispatcher implements ClipEventListener {
                                        logger.debug("Found NEXIO clip: {} XID IS MISSING!!", clip.getId());\r
                                }\r
                        } catch (Exception e) {\r
-                               logger.catching(e);\r
+                               logger.error(e.getMessage());\r
+                               //logger.catching(e);\r
                        }\r
                }\r
                logger.info("NEXIO metadata import completed.");\r
@@ -249,7 +248,9 @@ public class NexioDispatcher implements ClipEventListener {
                                logger.info("Initial clip import completed");\r
                                Mediabase mediabase = NexioDispatcher.this.controller.getMediabase();\r
                                mediaListener = mediabase.createMediaListener(disabled, NexioDispatcher.this);\r
+                               setRestartInProgress(false);\r
                                mediaListener.startListener();\r
+\r
                        } catch (Exception e) {\r
                                logger.catching(e);\r
                        }\r
@@ -257,6 +258,10 @@ public class NexioDispatcher implements ClipEventListener {
                worker.start();\r
        }\r
 \r
+       synchronized public boolean isRestartInProgress() {\r
+               return restartInProgress;\r
+       }\r
+\r
        /*\r
                Nem foglalkozunk a clippel ha:\r
                C8 84   Get Special ID Attributes\r
@@ -291,14 +296,14 @@ public class NexioDispatcher implements ClipEventListener {
                }\r
 \r
                /*\r
-               \r
+\r
                                int c = connection.read(buffer, 0, 2);\r
                                //2 bytes hosszan az idokozben hozzaadott id-k szamossaga\r
                                if (c < 2) {\r
                                        throw new ProtocolException("c, 2, 2");\r
                                }\r
                                //MSB, LSB\r
-               \r
+\r
                                return nofIds;\r
                        */\r
                return ret;\r
@@ -331,8 +336,8 @@ public class NexioDispatcher implements ClipEventListener {
 \r
        @Override\r
        public void restart() {\r
+               logger.info("Restart (already in progress {})", restartInProgress);\r
                shutdown();\r
-               startup();\r
        }\r
 \r
        private void saveClipIntoMongo(BasicDBObject clip) {\r
@@ -369,38 +374,49 @@ public class NexioDispatcher implements ClipEventListener {
                this.nexioChangeListener = nexioChangeListener;\r
        }\r
 \r
+       synchronized public void setRestartInProgress(boolean restartInProgress) {\r
+               this.restartInProgress = restartInProgress;\r
+               logger.info("Restart in progress {}", isRestartInProgress());\r
+       }\r
+\r
        public void shutdown() {\r
-               if (!disabled) {\r
-                       if (mediaListener != null) {\r
-                               mediaListener.disconnect();\r
-                               mediaListener = null;\r
-                       }\r
-                       if (controller != null) {\r
-                               controller.disconnect();\r
-                               controller = null;\r
-                       }\r
-                       try {\r
-                               worker.join();\r
-                       } catch (InterruptedException e) {\r
-                               logger.catching(e);\r
-                       }\r
+               if (disabled)\r
+                       return;\r
+               if (isRestartInProgress()) {\r
+                       return;\r
+               }\r
+\r
+               logger.info("Shutting down Nexio service");\r
+               setRestartInProgress(true);\r
+               if (mediaListener != null) {\r
+                       mediaListener.disconnect();\r
+                       mediaListener = null;\r
+               }\r
+               if (controller != null) {\r
+                       controller.disconnect();\r
+                       controller = null;\r
                }\r
        }\r
 \r
        public void startup() {\r
-               if (!disabled) {\r
-                       this.controller = new Controller(NEXIO_HOST);\r
-                       try {\r
-                               this.controller.connect();\r
-                       } catch (Exception e) {\r
-                               logger.catching(e);\r
-                               return;\r
-                       }\r
-                       dropAllClipsFromMongo();\r
-                       ensureIndexes();\r
-                       innerStartup();\r
-               } else\r
+               if (disabled) {\r
                        logger.info("Nexio service is disabled");\r
+                       return;\r
+               }\r
+\r
+               logger.info("Starting up Nexio service");\r
+               setRestartInProgress(true);\r
+               this.controller = new Controller(NEXIO_HOST);\r
+               try {\r
+                       this.controller.connect();\r
+               } catch (Exception e) {\r
+                       logger.catching(e);\r
+                       return;\r
+               }\r
+               dropAllClipsFromMongo();\r
+               ensureIndexes();\r
+               innerStartup();\r
+\r
        }\r
 \r
 }\r