@@ -130,13 +130,10 @@ private void processFlow(Task task, String mainName, String storeId, List<String
130130 try {
131131 task .setL2seq (L2seq );
132132 Resource .FLOW_INFOS .get (task .getInstance (), task .getJobType ().name ()).put (task .getInstance () + L2seq ,
133- "start count page..." );
134- getReader ().lock .lock ();
135- ConcurrentLinkedDeque <String > pageList = getReader ().getPageSplit (task ,
136- getInstanceConfig ().getPipeParams ().getReadPageSize ());
137- getReader ().lock .unlock ();
133+ "start count page..." );
134+ ConcurrentLinkedDeque <String > pageList = this .getPageLists (task );
138135 if (pageList == null )
139- throw new EFException ("read data get page split exception!" , ELEVEL .Termination );
136+ throw new EFException ("Reader page split exception!" , ELEVEL .Termination );
140137 processListsPages (task , writeTo , pageList , storeId );
141138
142139 } catch (EFException e ) {
@@ -174,8 +171,8 @@ private void processListsPages(Task task, String writeTo, ConcurrentLinkedDeque<
174171 " no data!" ));
175172 } else {
176173 log .info (Common .formatLog ("start" ,
177- getInstanceConfig ().getPipeParams ().isMultiThread () ? "MultiThread"
178- : "SingleThread" + " Start " + task .getJobType ().name (),
174+ ( getInstanceConfig ().getPipeParams ().isMultiThread () ? "MultiThread"
175+ : "SingleThread" ) + " Start " + task .getJobType ().name (),
179176 mainName , storeId , task .getL1seq (), 0 , "" ,
180177 GlobalParam .SCAN_POSITION .get (mainName ).getL2SeqPos (task .getL2seq ()), 0 , ",totalpage:" + pageNum ));
181178
@@ -188,9 +185,9 @@ private void processListsPages(Task task, String writeTo, ConcurrentLinkedDeque<
188185 long start = Common .getNow ();
189186 AtomicInteger total = new AtomicInteger (0 );
190187 if (getInstanceConfig ().getPipeParams ().isMultiThread ()) {
191- final CountDownLatch synThreads = new CountDownLatch (estimateThreads (pageNum ));
188+ CountDownLatch synThreads = new CountDownLatch (estimateThreads (pageNum ));
192189 Resource .ThreadPools
193- .submitJobPage (new Pump (synThreads , task , storeId , pageList , writeTo , computeModel , total ));
190+ .submitJobPage (new PumpThread (synThreads , task , storeId , pageList , writeTo , computeModel , total ));
194191 try {
195192 synThreads .await ();
196193 } catch (Exception e ) {
@@ -237,13 +234,8 @@ private void singleThread(Task task, String storeId, ConcurrentLinkedDeque<Strin
237234 if (Common .checkFlowStatus (task .getInstance (), task .getL1seq (), task .getJobType (), STATUS .Termination )) {
238235 break ;
239236 } else {
240- getReader ().lock .lock ();
241- DataPage pagedata = (DataPage ) CPU .RUN (
242- getID (), "Pipe" , "fetchPage" , false , Page .getInstance (keyField , scanField , startId ,
243- dataBoundary , this .readHandler , getInstanceConfig ().getWriteFields (), dataScanDSL ),
244- getReader ());
245- getReader ().freeJobPage ();
246- getReader ().lock .unlock ();
237+ DataPage pagedata = this .getPageData (Page .getInstance (keyField , scanField , startId ,
238+ dataBoundary , this .readHandler , getInstanceConfig ().getWriteFields (), dataScanDSL ));
247239 if (getInstanceConfig ().openCompute ()) {
248240 pagedata = (DataPage ) CPU .RUN (getID (), "ML" , computeModel , false , getID (), task .getJobType ().name (),
249241 writeTo , pagedata );
@@ -289,7 +281,7 @@ int estimateThreads(int numJobs) {
289281 * @date 2019-01-11 10:45
290282 * @modify 2019-01-11 10:45
291283 */
292- public class Pump implements Runnable {
284+ public class PumpThread implements Runnable {
293285 long start = Common .getNow ();
294286 final int pageSize ;
295287 final String ID = CPU .getUUID ();
@@ -306,7 +298,7 @@ public class Pump implements Runnable {
306298 ConcurrentLinkedDeque <String > pageList ;
307299 boolean isUpdate = getInstanceConfig ().getPipeParams ().getWriteType ().equals ("increment" ) ? true : false ;
308300
309- public Pump (CountDownLatch synThreads , Task task , String storeId , ConcurrentLinkedDeque <String > pageList ,
301+ public PumpThread (CountDownLatch synThreads , Task task , String storeId , ConcurrentLinkedDeque <String > pageList ,
310302 String writeTo , String computeModel , AtomicInteger total ) {
311303 this .pageList = pageList ;
312304 this .writeTo = writeTo ;
@@ -342,15 +334,10 @@ public void run() {
342334 Resource .ThreadPools .cleanWaitJob (getId ());
343335 Common .LOG .warn (task .getInstance () + " " + task .getJobType ().name () + " job has been Terminated!" );
344336 break ;
345- } else {
346- getReader ().lock .lock ();
347- DataPage pagedata = (DataPage ) CPU .RUN (getID (), "Pipe" , "fetchPage" , false ,
348- Page .getInstance (task .getScanParam ().getKeyField (), task .getScanParam ().getScanField (),
349- startId , dataBoundary , readHandler , getInstanceConfig ().getWriteFields (),
350- dataScanDSL ),
351- getReader ());
352- getReader ().freeJobPage ();
353- getReader ().lock .unlock ();
337+ } else {
338+ DataPage pagedata = getPageData (Page .getInstance (task .getScanParam ().getKeyField (), task .getScanParam ().getScanField (),
339+ startId , dataBoundary , readHandler , getInstanceConfig ().getWriteFields (),
340+ dataScanDSL ));
354341 if (getInstanceConfig ().openCompute ()) {
355342 pagedata = (DataPage ) CPU .RUN (getID (), "ML" , computeModel , false , getID (),
356343 task .getJobType ().name (), writeTo , pagedata );
@@ -407,4 +394,35 @@ protected Integer compute() {
407394 }
408395
409396 }
397+
398+ //thread safe get page list
399+ private ConcurrentLinkedDeque <String > getPageLists (Task task ) {
400+ ConcurrentLinkedDeque <String > pageList = null ;
401+ getReader ().lock .lock ();
402+ try {
403+ pageList = getReader ().getPageSplit (task ,
404+ getInstanceConfig ().getPipeParams ().getReadPageSize ());
405+ } catch (Exception e ) {
406+ log .error ("get Page lists Exception]" , e );
407+ }finally {
408+ getReader ().lock .unlock ();
409+ }
410+ return pageList ;
411+ }
412+ //thread safe get page data
413+ private DataPage getPageData (Page pager ){
414+ getReader ().lock .lock ();
415+ DataPage pagedata =null ;
416+ try {
417+ pagedata = (DataPage ) CPU .RUN (
418+ getID (), "Pipe" , "fetchPage" , false , pager ,
419+ getReader ());
420+ getReader ().freeJobPage ();
421+ } catch (Exception e ) {
422+ log .error ("get Page Data Exception]" , e );
423+ }finally {
424+ getReader ().lock .unlock ();
425+ }
426+ return pagedata ;
427+ }
410428}
0 commit comments