Duplikátumok kezelésének módosítása
authorVásáry Dániel <daniel.vasary@userrendszerhaz.hu>
Wed, 24 Oct 2018 09:33:13 +0000 (09:33 +0000)
committerVásáry Dániel <daniel.vasary@userrendszerhaz.hu>
Wed, 24 Oct 2018 09:33:13 +0000 (09:33 +0000)
git-tfs-id: [http://tfs.userrendszerhaz.hu:8080/tfs/DefaultCollection]$/MediaCube;C31332

server/user.jobengine.executors/jobtemplates/archive-limited.xml
server/user.jobengine.executors/jobtemplates/archive-ondemand.xml
server/user.jobengine.executors/src/user/jobengine/server/steps/ArchiveListBuilderStep.java
server/user.jobengine.executors/src/user/jobengine/server/steps/ArchiveMaterialSubmitStep.java
server/user.jobengine.executors/src/user/jobengine/server/steps/ItemManagerExtensions.java
server/user.jobengine.executors/src/user/jobengine/server/steps/TSMBackupStep.java
server/user.jobengine.osgi.server/test/user/jobengine/server/IT/Support.java
server/user.jobengine.osgi.server/test/user/jobengine/server/IT/SupportRemoveDuplicates.java [new file with mode: 0644]

index c9a671a243324458bdfe820c468486e0641b40ca..3b8654aae68ed671bdfc7bb4b563c50c19acfd5f 100644 (file)
@@ -10,7 +10,7 @@
                        <parameter name="limit" type="java.lang.Integer" />\r
                </parameters>\r
                <variables>\r
-                       <variable name="archiveList" type="java.util.ArrayList" />\r
+                       <variable name="archiveList" type="java.util.LinkedList" />\r
                </variables>\r
        </declarations>\r
        <commands>\r
index c9a671a243324458bdfe820c468486e0641b40ca..3b8654aae68ed671bdfc7bb4b563c50c19acfd5f 100644 (file)
@@ -10,7 +10,7 @@
                        <parameter name="limit" type="java.lang.Integer" />\r
                </parameters>\r
                <variables>\r
-                       <variable name="archiveList" type="java.util.ArrayList" />\r
+                       <variable name="archiveList" type="java.util.LinkedList" />\r
                </variables>\r
        </declarations>\r
        <commands>\r
index 56367a85aa9c264054d515ccb0eb8791271aabf3..7cbfffa6715a620d143ff891d90826d16b57929b 100644 (file)
@@ -6,7 +6,7 @@ import java.nio.file.DirectoryStream;
 import java.nio.file.Files;\r
 import java.nio.file.Path;\r
 import java.nio.file.Paths;\r
-import java.util.ArrayList;\r
+import java.util.LinkedList;\r
 import java.util.List;\r
 \r
 import org.apache.commons.lang.StringUtils;\r
@@ -88,7 +88,7 @@ public class ArchiveListBuilderStep extends JobStep {
        @StepEntry\r
        public Object[] execute(String sourcePath, int limit, IJobEngine jobEngine, IJobRuntime jobRuntime) {\r
                marker = jobRuntime.getMarker();\r
-               List<ArchiveItem> archiveList = new ArrayList<ArchiveItem>();\r
+               List<ArchiveItem> archiveList = new LinkedList<ArchiveItem>();\r
                DirectoryStream<Path> directoryStream = null;\r
                int counter = 0;\r
                try {\r
@@ -178,7 +178,12 @@ public class ArchiveListBuilderStep extends JobStep {
                        logger.warn("{} has no Media Title specified in metadata.", mediaFile.getName());\r
                        return false;\r
                }\r
-               archiveList.add(archiveItem);\r
+\r
+               //A tenyleges archivalast vesszuk elore\r
+               if (mediaFile.length() == 0)\r
+                       archiveList.add(archiveItem);\r
+               else\r
+                       archiveList.add(0, archiveItem);\r
                createCatchedFile(catchedFilePath);\r
                return true;\r
        }\r
index 95e846a2448da94f9a1a050dee2f4af71917b2b2..b1232e53acc7d1f18a0530f313559de502846e3e 100644 (file)
@@ -1,7 +1,7 @@
 package user.jobengine.server.steps;\r
 \r
 import java.io.File;\r
-import java.util.ArrayList;\r
+import java.util.List;\r
 \r
 import org.apache.logging.log4j.LogManager;\r
 import org.apache.logging.log4j.Logger;\r
@@ -23,7 +23,7 @@ public class ArchiveMaterialSubmitStep extends JobStep {
        private Marker marker;\r
 \r
        @StepEntry\r
-       public Object[] execute(String globalSourcePath, ArrayList<ArchiveItem> archiveList, String transcoderTargetPath, String webPath, int killDateDays,\r
+       public Object[] execute(String globalSourcePath, List<ArchiveItem> archiveList, String transcoderTargetPath, String webPath, int killDateDays,\r
                        IJobEngine jobEngine, IJobRuntime jobRuntime) throws Exception {\r
                marker = jobRuntime.getMarker();\r
                if (archiveList == null || archiveList.size() == 0)\r
index 2e6852d2430e513412183dc510a6878220a90222..b77be5de5721d9b9355afc53c1bd1b14c2694717 100644 (file)
@@ -4,6 +4,7 @@ import com.ibm.nosql.json.api.BasicDBObject;
 \r
 import user.jobengine.db.IItemManager;\r
 import user.jobengine.db.IResultSetConsumer;\r
+import user.jobengine.server.steps.MetadataTypeDetector.MetadataType;\r
 \r
 public class ItemManagerExtensions {\r
 \r
@@ -28,21 +29,26 @@ public class ItemManagerExtensions {
 \r
        public static long getExistingRundownMedia(IItemManager manager, String houseid) {\r
                final long[] result = { 0 };\r
-               StringBuilder query = new StringBuilder();\r
-               query.append("select mediaid, mediafilehouseid, filename");\r
-               query.append(" ");\r
-               query.append(String.format("from vw_rundown_items where mediafilehouseid like '%s%%'", houseid));\r
-               query.append(" ");\r
-               query.append("order by filename, mediaid");\r
-               IResultSetConsumer consumer = rs -> {\r
-                       String fileName = rs.getString("filename");\r
-                       if (houseid.equals(fileName)) {\r
-                               result[0] = rs.getLong("mediaid");\r
-                               return false;\r
-                       } else\r
-                               return true;\r
-               };\r
-               manager.executeQuery(query.toString(), consumer, null);\r
+               final String idToCheck = houseid.substring(0, houseid.lastIndexOf("-"));\r
+               MetadataType metadataType = MetadataTypeDetector.GuessMetadataType(idToCheck);\r
+               if (metadataType == MetadataType.OctopusPlaceholder) {\r
+                       StringBuilder query = new StringBuilder();\r
+                       query.append("select mediaid, mediafilehouseid, filename");\r
+                       query.append(" ");\r
+                       query.append(String.format("from vw_rundown_items where mediafilehouseid like '%s%%'", idToCheck));\r
+                       query.append(" ");\r
+                       query.append("order by filename, mediaid");\r
+                       IResultSetConsumer consumer = rs -> {\r
+                               String fileName = rs.getString("filename");\r
+                               if (idToCheck.equals(fileName)) {\r
+                                       result[0] = rs.getLong("mediaid");\r
+                                       return false;\r
+                               } else\r
+                                       return true;\r
+                       };\r
+                       manager.executeQuery(query.toString(), consumer, null);\r
+               }\r
+\r
                return result[0];\r
        }\r
 \r
index f15743c3338389771142ee075cd34e39554a6f97..a891452bf2063b108c4e4d3cd94706f3a200ad71 100644 (file)
@@ -79,7 +79,9 @@ public class TSMBackupStep extends JobStep {
                                        }\r
                                });\r
                                RemoteFile remoteFile = sourceUri.transferFrom(targetUri, sourceFileName, sourceFileName);\r
-                       } else\r
+                       }\r
+\r
+                       if (existingMediaId > 0)\r
                                logger.info(marker, "Az '{}' TSM mentése nem szükséges, mert már megtalálható az archívumban.", sourceFileName);\r
 \r
                        //Fel kell szabadítani, hogy a kovetkezo archivalaskor is nekifusson\r
index e6419c40162219f1f165f804b0df3bc48f5c9af2..b71d720ecccf8de2fe68e67cbce6511e17488c49 100644 (file)
@@ -645,4 +645,11 @@ public class Support {
                mediaInfo.process();\r
                System.out.println("Bitrate: " + mediaInfo.getBitRate());\r
        }\r
+\r
+       @Test\r
+       public void test4() throws Exception {\r
+               String houseid = "133519696_1-001-132654584";\r
+               String idToCheck = houseid.substring(0, houseid.lastIndexOf("-"));\r
+               System.out.println(idToCheck);\r
+       }\r
 }\r
diff --git a/server/user.jobengine.osgi.server/test/user/jobengine/server/IT/SupportRemoveDuplicates.java b/server/user.jobengine.osgi.server/test/user/jobengine/server/IT/SupportRemoveDuplicates.java
new file mode 100644 (file)
index 0000000..bb5f8c8
--- /dev/null
@@ -0,0 +1,116 @@
+package user.jobengine.server.IT;\r
+\r
+import java.io.File;\r
+import java.nio.file.Paths;\r
+import java.util.Date;\r
+\r
+import org.junit.AfterClass;\r
+import org.junit.BeforeClass;\r
+import org.junit.Test;\r
+\r
+import user.commons.logging.LogUtils;\r
+import user.jobengine.db.IItemManager;\r
+import user.jobengine.db.IResultSetConsumer;\r
+import user.jobengine.db.IStatementDecorator;\r
+import user.jobengine.db.ItemManager;\r
+import user.jobengine.db.MediaFile;\r
+\r
+public class SupportRemoveDuplicates {\r
+       public class BD {\r
+               Date fBD;\r
+               Date nBD;\r
+       }\r
+\r
+       protected static IItemManager manager = null;\r
+\r
+       private static final String LOWRES_ROOT = "//10.10.1.27/mclowres/www/video";\r
+\r
+       private static final long[] duplicateLength = { 0 };\r
+\r
+       @BeforeClass\r
+       static public void setUpConnection() {\r
+               //              System.setProperty("jobengine.octopus.rundowns.name", "test_rundowns");\r
+               //              System.setProperty("jobengine.octopus.stories.name", "test_stories");\r
+               //              System.setProperty("jobengine.octopus.storyfolders.name", "test_storyfolders");\r
+               System.setProperty("jobengine.octopus.rundowns.name", "rundowns180620");\r
+               System.setProperty("jobengine.octopus.stories.name", "stories180620");\r
+               System.setProperty("jobengine.octopus.storyfolders.name", "storyfolders180620");\r
+\r
+               System.setProperty("jobengine.nosql.db.url", "jdbc:db2://10.10.1.27:50000/mc:retrieveMessagesFromServerOnGetMessage=true;");\r
+               System.setProperty("jobengine.nosql.db.user", "db2admin");\r
+               System.setProperty("jobengine.nosql.db.password", "password");\r
+               System.setProperty(ItemManager.DBURL, "jdbc:db2://10.10.1.27:50000/mc:retrieveMessagesFromServerOnGetMessage=true;");\r
+               System.setProperty(ItemManager.DBUSERNAME, "db2admin");\r
+               System.setProperty(ItemManager.DBPASSWORD, "password");\r
+               System.setProperty(LogUtils.LOGLEVEL, "INFO");\r
+               // System.setProperty(ItemManager.DBURL,\r
+\r
+               manager = new ItemManager();\r
+               manager.connect();\r
+       }\r
+\r
+       @AfterClass\r
+       static public void tearDownConnection() {\r
+               manager.disconnect();\r
+       }\r
+\r
+       private void processLowresDuplicateGroup(String fileName) {\r
+               //System.out.println("*** Processing: " + fileName);\r
+               String query = "select mediafileid, mediafilehouseid, relativepath from vw_items_rd_lh where filename = ?";\r
+               IStatementDecorator decorator = st -> {\r
+                       st.setString(1, fileName);\r
+               };\r
+\r
+               MediaFile[] masterMediaFile = { null };\r
+\r
+               IResultSetConsumer consumer = rs -> {\r
+                       long mediaFileId = rs.getLong("mediafileid");\r
+                       MediaFile mediaFile = (MediaFile) manager.get(MediaFile.class, mediaFileId);\r
+                       if (masterMediaFile[0] == null) {\r
+                               masterMediaFile[0] = mediaFile;\r
+                               return true;\r
+                       }\r
+\r
+                       String path = rs.getString("relativepath");\r
+                       File file = Paths.get(LOWRES_ROOT, path).toFile();\r
+                       duplicateLength[0] += file.length();\r
+\r
+                       if (file.delete()) {\r
+                               System.out.println(String.format("%d %s %s", mediaFile.getMediaId(), mediaFile.getRelativePath(), masterMediaFile[0].getRelativePath()));\r
+                               mediaFile.setRelativePath(masterMediaFile[0].getRelativePath());\r
+                               manager.modify(mediaFile);\r
+                       }\r
+                       return true;\r
+               };\r
+               manager.executeQuery(query, consumer, decorator);\r
+       }\r
+\r
+       @Test\r
+       public void processLowresDuplicates() {\r
+               long count[] = { 0, 0 };\r
+               manager.executeQuery("select count(filecount) from vw_items_rd_dup", rs -> {\r
+                       count[0] = rs.getLong(1);\r
+                       return false;\r
+               }, null);\r
+\r
+               int limit[] = { 1, 0 };\r
+               int progress[] = { 0, 0 };\r
+               manager.executeQuery("select filename from vw_items_rd_dup order by filecount desc", rs -> {\r
+                       String fileName = rs.getString("filename");\r
+                       processLowresDuplicateGroup(fileName);\r
+                       count[1]++;\r
+                       progress[1] = (int) ((double) count[1] * 100 / count[0]);\r
+                       if (progress[1] > progress[0]) {\r
+                               progress[0] = progress[1];\r
+                       }\r
+                       System.out.println("Completed " + progress[0] + " " + count[1] + "/" + count[0] + " available " + duplicateLength[0]);\r
+                       limit[1]++;\r
+\r
+                       if (limit[0] == limit[1])\r
+                               return false;\r
+                       else\r
+                               return true;\r
+               }, null);\r
+       }\r
+\r
+}\r