@@ -54,27 +54,26 @@ public class SourceDocumentCreation extends Thread {
5454 private ProcessDisplayHelper ph1 = new ProcessDisplayHelper (VariantConfigHelper .getDisplayInterval ());
5555 private ProcessDisplayHelper ph2 = new ProcessDisplayHelper (VariantConfigHelper .getDisplayInterval ());
5656 private ProcessDisplayHelper ph3 = new ProcessDisplayHelper (VariantConfigHelper .getDisplayInterval ());
57- private ProcessDisplayHelper ph4 = new ProcessDisplayHelper (VariantConfigHelper .getDisplayInterval ());
5857
5958 private VariantSummaryConverter variantSummaryConverter ;
6059 private SequenceSummaryConverter sequenceSummaryConverter ;
6160 private VariantSearchResultConverter variantSearchResultConverter ;
6261
6362 private String messageHeader = "" ;
6463
65- public SourceDocumentCreation (String downloadPath , DownloadSource source , GeneDocumentCache geneCache , HashSet <String > variantsCache , Map <String , Integer > severityRanking ) {
64+ public SourceDocumentCreation (String downloadPath , DownloadSource source , GeneDocumentCache geneCache , HashSet <String > variantsCache , Map <String , Integer > severityRanking , LinkedBlockingDeque < List < byte []>> jsonQueue ) {
6665 this .downloadPath = downloadPath ;
6766 this .source = source ;
6867 this .geneCache = geneCache ;
6968 this .variantsCache = variantsCache ;
7069 this .severityRanking = severityRanking ;
70+ this .jsonQueue = jsonQueue ;
7171 speciesType = SpeciesType .getTypeByID (source .getTaxonId ());
7272 messageHeader = speciesType .getModName () + " " ;
7373 int vcQueueSize = source .getVcQueueSize () != null ? source .getVcQueueSize () : VariantConfigHelper .getSourceDocumentCreatorVCQueueSize ();
7474 int objectQueueSize = source .getObjectQueueSize () != null ? source .getObjectQueueSize () : VariantConfigHelper .getSourceDocumentCreatorObjectQueueSize ();
7575 vcQueue = new LinkedBlockingDeque <>(vcQueueSize );
7676 objectQueue = new LinkedBlockingDeque <>(objectQueueSize );
77- jsonQueue = new LinkedBlockingDeque <>(250 );
7877 }
7978
8079 @ Override
@@ -113,16 +112,6 @@ public void run() {
113112 producers .add (producer );
114113 }
115114
116- int shardCount = VariantConfigHelper .getIndexerShards ();
117-
118- ph4 .startProcess (messageHeader + "RoutedBulkIndexers" );
119- ArrayList <RoutedBulkIndexer > indexers = new ArrayList <>();
120- for (int i = 0 ; i < shardCount * 4 ; i ++) {
121- RoutedBulkIndexer indexer = new RoutedBulkIndexer (jsonQueue , indexName , messageHeader + "BP(" + (i + 1 ) + ")" , ph4 );
122- indexer .start ();
123- indexers .add (indexer );
124- }
125-
126115 try {
127116
128117 log .info (messageHeader + "Waiting for VCFReader's to finish" );
@@ -161,25 +150,10 @@ public void run() {
161150 log .info (messageHeader + "JSONProducers shutdown" );
162151 ph3 .finishProcess ();
163152
164- log .info (messageHeader + "Waiting for jsonQueues to empty" );
165- while (!jsonQueue .isEmpty ()) {
166- Thread .sleep (1000 );
167- }
168-
169- log .info (messageHeader + "Shutting down bulk indexers" );
170- for (RoutedBulkIndexer indexer : indexers ) {
171- indexer .interrupt ();
172- indexer .join ();
173- }
174- ph4 .finishProcess ();
175- log .info (messageHeader + "Bulk Indexers shutdown" );
176-
177153 } catch (Exception e ) {
178154 ExceptionCatcher .report (e );
179155 e .printStackTrace ();
180156 }
181-
182- log .info (messageHeader + "Bulk Processors finished" );
183157 }
184158
185159 private class VCFReader extends Thread {
@@ -303,6 +277,8 @@ public void run() {
303277
304278 private class JSONProducer extends Thread {
305279
280+ private final long workBucketMaxBytes = VariantConfigHelper .getSourceDocumentCreatorJsonQueueBucketSize ();
281+
306282 private ObjectMapper mapper = RestConfig .createSmileObjectMapper ();
307283 private ObjectWriter cachedWriter ;
308284 private ObjectWriter sequenceWriter ;
@@ -314,67 +290,58 @@ public void run() {
314290 searchWriter = mapper .writerWithView (CurationView .VariantSearchResultDocument .class );
315291 cachedWriter = mapper .writerWithView (CurationView .VariantSummaryDocument .class );
316292 sequenceWriter = mapper .writerWithView (CurationView .SequenceSummaryDocument .class );
293+
294+ List <byte []> workBucket = new ArrayList <>();
295+ long workBucketBytes = 0 ;
296+
317297 while (!(Thread .currentThread ().isInterrupted ())) {
318298 try {
319299 List <ESDocument > docList = objectQueue .take ();
320300
321- List <byte []> workBucket = new ArrayList <>();
322-
323301 if (!docList .isEmpty ()) {
324302 for (ESDocument doc : docList ) {
325303 try {
326304 byte [] smileDoc = null ;
327305 if (doc instanceof SequenceSummaryDocument ssd ) {
328- //jsonDoc = sequenceWriter.writeValueAsString(ssd);
329306 smileDoc = sequenceWriter .writeValueAsBytes (ssd );
330307 } else if (doc instanceof VariantSummaryDocument vsd ) {
331- //jsonDoc = cachedWriter.writeValueAsString(vsd);
332308 smileDoc = cachedWriter .writeValueAsBytes (vsd );
333309 } else if (doc instanceof VariantSearchResultDocument vsrd ) {
334- //jsonDoc = searchWriter.writeValueAsString(vsrd);
335310 smileDoc = searchWriter .writeValueAsBytes (vsrd );
336311 } else {
337312 log .error ("Unexpected ESDocument type: " + doc .getClass ().getName ());
338313 continue ;
339314 }
340315
341316 workBucket .add (smileDoc );
317+ workBucketBytes += smileDoc .length ;
318+
319+ if (workBucketBytes >= workBucketMaxBytes ) {
320+ jsonQueue .put (workBucket );
321+ workBucket = new ArrayList <>();
322+ workBucketBytes = 0 ;
323+ }
342324
343- // Left here for debugging purposes
344- // ph5.progressProcess("M: " + (int) mean + " SD: " + (int) sd + " SK: " + skew
345- // //+ " lw: " + lowerWidth + " uw: " + upperWidth + " t1: " + t1 + " t2: " + t2 + " t3: " + t3 + " t4: " + t4 + " t5: " + t5 + " t6: " + t6 + " t7: " + t7
346- // + " jsonQueue1(" + jqs[0][0] + "," + jqs[0][1] + "," + jqs[0][2] + "): " + jsonQueue1.size()
347- // + " jsonQueue2(" + jqs[1][0] + "," + jqs[1][1] + "," + jqs[1][2] + "): " + jsonQueue2.size()
348- // + " jsonQueue3(" + jqs[2][0] + "," + jqs[2][1] + "," + jqs[2][2] + "): " + jsonQueue3.size()
349- // + " jsonQueue4(" + jqs[3][0] + "," + jqs[3][1] + "," + jqs[3][2] + "): " + jsonQueue4.size()
350- // + " jsonQueue5(" + jqs[4][0] + "," + jqs[4][1] + "," + jqs[4][2] + "): " + jsonQueue5.size()
351- // + " jsonQueue6(" + jqs[5][0] + "," + jqs[5][1] + "," + jqs[5][2] + "): " + jsonQueue6.size()
352- // + " jsonQueue7(" + jqs[6][0] + "," + jqs[6][1] + "," + jqs[6][2] + "): " + jsonQueue7.size()
353- // + " jsonQueue8(" + jqs[7][0] + "," + jqs[7][1] + "," + jqs[7][2] + "): " + jsonQueue8.size()
354- // );
355-
356325 ph3 .progressProcess ();
357326
358327 } catch (Exception e ) {
359328 ExceptionCatcher .report (e );
360329 e .printStackTrace ();
361330 }
362331 }
363-
364- try {
365- if (workBucket .size () > 0 ) {
366- jsonQueue .put (workBucket );
367- }
368-
369- } catch (InterruptedException e ) {
370- ExceptionCatcher .report (e );
371- e .printStackTrace ();
372- }
373332 }
374333 } catch (InterruptedException e ) {
375334 Thread .currentThread ().interrupt ();
376335 }
336+ }
377337
338+ // Flush remaining docs
339+ try {
340+ if (!workBucket .isEmpty ()) {
341+ jsonQueue .put (workBucket );
342+ }
343+ } catch (InterruptedException e ) {
344+ Thread .currentThread ().interrupt ();
378345 }
379346 }
380347 }
0 commit comments