From 2167863a03d12b4aad77bbab48850f05297b6d62 Mon Sep 17 00:00:00 2001 From: extio-de Date: Fri, 20 Jun 2025 18:47:36 +0200 Subject: [PATCH] Reset repo --- bin/checkDataIntegrity/Args.class | Bin 1774 -> 0 bytes .../BufferPool$Buffer.class | Bin 465 -> 0 bytes bin/checkDataIntegrity/BufferPool.class | Bin 1118 -> 0 bytes bin/checkDataIntegrity/Main$1.class | Bin 3280 -> 0 bytes bin/checkDataIntegrity/Main.class | Bin 3911 -> 0 bytes bin/checkDataIntegrity/ProgramState.class | Bin 1859 -> 0 bytes bin/checkDataIntegrity/Task.class | Bin 6831 -> 0 bytes bin/checkDataIntegrity/Worker.class | Bin 1407 -> 0 bytes bin/checkDataIntegrity/WorkerPool.class | Bin 3055 -> 0 bytes bin/module-info.class | Bin 157 -> 0 bytes checkDataIntegrity.jar | Bin 21032 -> 0 bytes src/checkDataIntegrity/Args.java | 6 - src/checkDataIntegrity/BufferPool.java | 29 ----- src/checkDataIntegrity/Main.java | 98 --------------- src/checkDataIntegrity/ProgramState.java | 7 -- src/checkDataIntegrity/Task.java | 118 ------------------ src/checkDataIntegrity/Worker.java | 30 ----- src/checkDataIntegrity/WorkerPool.java | 62 --------- src/module-info.java | 2 - 19 files changed, 352 deletions(-) delete mode 100644 bin/checkDataIntegrity/Args.class delete mode 100644 bin/checkDataIntegrity/BufferPool$Buffer.class delete mode 100644 bin/checkDataIntegrity/BufferPool.class delete mode 100644 bin/checkDataIntegrity/Main$1.class delete mode 100644 bin/checkDataIntegrity/Main.class delete mode 100644 bin/checkDataIntegrity/ProgramState.class delete mode 100644 bin/checkDataIntegrity/Task.class delete mode 100644 bin/checkDataIntegrity/Worker.class delete mode 100644 bin/checkDataIntegrity/WorkerPool.class delete mode 100644 bin/module-info.class delete mode 100644 checkDataIntegrity.jar delete mode 100644 src/checkDataIntegrity/Args.java delete mode 100644 src/checkDataIntegrity/BufferPool.java delete mode 100644 src/checkDataIntegrity/Main.java delete mode 100644 src/checkDataIntegrity/ProgramState.java delete mode 100644 src/checkDataIntegrity/Task.java delete mode 100644 src/checkDataIntegrity/Worker.java delete mode 100644 src/checkDataIntegrity/WorkerPool.java delete mode 100644 src/module-info.java diff --git a/bin/checkDataIntegrity/Args.class b/bin/checkDataIntegrity/Args.class deleted file mode 100644 index bb6709ddd0e24859178e8705785b5ff1a19838e4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1774 zcmaJ?TTc@~6#fQ!XBDU|H@S%*?Q$u2*CNVAq)EL*2oL%+Z6|c0?AF~W35h?+2T5#9 zc<=}Kql{;E7ue9t!^}B5Gw1frcV_?oyZ8fO1G`c5FbtQgqI|r~B`=s#9NLCF%Wc?) zP81=Afg^s(b2V-r=01zEWmg!&buOzb49Vj4-k!7#^Dyskt};Yr)fT+sFt7qc$T>FZ z3~_0kh@x>~NQTIoVH$FsLC>`MXLzi61^L*t|*?0sIU3000&=CuQE8|vF%49TiNHH;QJ zU_=!Uyce=+RX%Z>p9m>zI-bg8TPtvLB`jjn^3Y1s9n5LCj|U7(nT`?Kx{6h~Q&m_f zCs_^i&>6Cywkc`$Rs zJhhHR&O5!!%}Px;vqj4~Zq)OEEPZMQR(!+#v%1(8PT4l<(z1glTQ%-D!3E#P*H$ON z==tDP`QY?N@F)hN$&A}Ic{Q)*{pQH4w#Z*KML&^{MvBG|jS(7S3|hf7h3%#!s3*4= z=B|P3fa&CR;XQii3(vPRY#GQRQ=>i>LyoGFS(LBiKH4DZlMRa zN&8Mxou1ZzqhDWWBB?Jnk+J);DRyiagqAm#-u;=-VyLv7MZSLO_LJ#UMpt1Nw3ej} zi%?yNN6`(0nsqPTh4eJRbdxE;xb1TpNJXF_A$RO6U!O3we=s3fgYZrkVWQ-qfMNlJ zih~v87)QR6 z#*{m+a5}Xf-t#XgKl6!!D(7;h(tw2~N@$?QoU`0O9c$c~SkI;#*kDX`iD$R?uI-F( FegiIHV;TSe diff --git a/bin/checkDataIntegrity/BufferPool.class b/bin/checkDataIntegrity/BufferPool.class deleted file mode 100644 index d3bb0e4ce9d4b4116e36c322efa3c3a3bce5cad1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1118 zcma)4?`so55Ph3Va>@1Dv}qe_wQ1E@?@sM~^g}|yR)o^DRwEI`FPrNoz2>}&mp#G% z${)~zg7{7FZxV6#5-n5+IoREs*?BYX&Cbu?U%ml&2v@Izm2Gia9GX2|YF$3n*} zgEcKr113r)=3y}88)>#87|JGc$TO5knmA0}bVU4|cLGvUZblvt+C27^ojMI@C{cBJ z;tv_tCkr6nT2D|CFkz-i4{?}o@VlY}!5_{sYuUcNZ z7|<=Hn!(%)LlN%=d^i-;^86@(VdhW_<$+MoHN*zJqei38u&N%DPMxd_3dqtb!XVEK zdG3-=eKTKSzC6d=XDoaqGlNCi6$}JiN^mRmPD?42i7%+AL2T!!hZWit9hKXl{~NeT z)-75EuwSU?^tuJqaC=%r$y0Q3eDt=tU6vhXiZGrLps=vcnK#gyv)$I(vvkIY`lV3 z88(S7J z6WtngrcLu@h^QJah@!Dc$1#G_7AU)&b!?vYfQ>UaOD4qmwIP)X~%4w({+nw zN2kZr6RGTI9OIa@FtK84%`AqB7i>)FaJE$DPF587xbQp?#xaeog&8V(9k*(G&&CA} zv4JLsR5}9}ZM>s{j449Ph=Ncta^SL!cX5RR2y_73%M>7DPD$ab86~+>7-+#&>N@R2 zm#6KzXqRr!#c>UD7MvPB*O=LGkz=rm8p-nsypkO=oe5gd`0SmvaGhbFsj@lHV_nKp zQSn^0HK;Pz4L2C^qpR#=LuI0STQ$V#vZoB}GBJ%tq`NTg6e}~MwMyXA4#AVNV|5Ey zO-fC-uA}KA{I*-0(pqcEXE6wsd4+0*(b?J*l^?LmC|Wryo_o6ms%HDjX4LH-r%8L$ zMghK-Zrk_(RGDiHul=7UpuX%Q8^>@^OP|;{fP*v@XM&P+dAaRldP*PF9uq}pMBaB) zNm99oYs$SMBURV5edRenSyrwdnF%*YjA$M8T`vfUa^qah2RRFO>rVsig^jQ9HE~Y= zDqy(MQ}0b__&nD3;6Odgr?Z3D&tRv0pUYv-2}4dpxMhNe>MT(MU6iQ^eKsK4)~;Vp zfL3}p%}TGPS?SHBUq>7=B2J zdW`g=Uyz}#UCTJn%WAXt?tc#}`Vi5`VCMsDe2h!&?=9nfl4E4>5Y5JMhP@QfVQ_L* zr=i=V@C@yyX@87P&Y=exa(#++&eNcrrg@q*0iH0)b*llo$X5b%D*^UUAoCD}okj<4 zV1Xo$ZrKVeZ-GZUPO-mXv)GVD7ct$9&tzk*JYQ;%=O=DN5uj-DOx^vTkgqmCep*3; z+?FDrp-}*7Q!(sKHrBA*Fre39)yn@ lA`lTiHSv6g&&~P;zN9sZJGh5$NYc|z_m}?rmOf3m^DmBHDe(XR diff --git a/bin/checkDataIntegrity/Main.class b/bin/checkDataIntegrity/Main.class deleted file mode 100644 index 5355584a9ba48d7beb4495d13c41e6828cdd6e87..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3911 zcmb_e33nS;75<(jdu(OWq|RcJki?1YAj@`?xJ%L~HBB6cI>?T}j)Q3^jOB?mv7`|* zqa=p1m(a2umI7rfBrIj831ADG1}NJ({2G2h;qcuj*_QBx<{Yq(-pst^zVCkbyZ61n z|7-a!fK&LZfhL8HOwP{CpRodKv>4b~&j}WiW0q4i5LMWE#ky)G^HwpNJU@HI&IAfA zC!L}b3@Jq7z0(TOVRz1sA%Zp&&1g~Bl6H#rc)2iZdsEhI-d1Q&yBRA#ZF!D-*E*v? z&hZs?rSGwQilz&Mp|CUlRC*o8WZ*f)Y)ZC{ja<*zrND8EzJYdyZR@kvMq*IdZej;^ zDzud>&$mx`S?+r{)MywOnV&N7CWZYWP$xV$>sf`#zzWF1ZoJvRo(9?`7yQ63nAnSb z3J+$=o@W<>DW_nMIr+RWKpM{(=u|kQ;g90>!x;ZhTNP4uB(!3c7m zZOv6V8I7R_hsDLD!chF4kqH~94@zpZcUnYn)WjejqNuJ}`FVv)|AWP_E!W+pGzI!2 zCLWb^h*{SxCm1P|f(7Y5ZsIZNZgZGyo>wjf(wj1IQhK9TT&E~#hfKT`PjGdKY7azR zWTiV4bAz+8cLz?J7{(ce){I*&1|y!Qkcju*Z}3H6XHC3K1RKfP1h^ZcCeGpQ1ZZD( zSOcPQvdV|0b7@;hehPHSwz+D$g{HaAEQMxYl1Je{7_SZ9(de}`Sur2O7SshoVKbS_ z%#T?mU3A*$$h3)zco!Wb`3gI#oH%ZBqRKP%S4g$u-3sFud@F08=-epn!;+_+Cnu~R zcVwvgJj!QHynOTLosx7g$+HLS4W?BbIY}!=M6q#~jXk5I47PALZz8X` zbITOPB@_j=`yU%sj|p9$TRht@=Q*_lgy)N%B-S2#%D86WDvt*3hcJ~qQ}!&W$HDx?+;?u%H8^PMF z@pHad`mBl1X-l&Uf$cXFDF32pM-y(e^I*L}@8)Xc(7S4Y8ksQgl{#UKp07Lp;`o}0 z7loqck|@@|HyY0;eV%T@xA2mIZ?8tANPS**@^(^GZsI%mu0oSbeWgMe3Q7MOX$@w0 zh~DCXzcHcob))-e3^(z8QRWX6o~>h27a_k?V2}d z$qWyzpWvqorkp3zG3D7TVk0%+YjcIb+PS;dC)1}L-w9kV70MKEQDRn14oeBQS*z}w z5mw1bx9nwX*@j}1%bc!RjQeTV4gA2fN@I4Ab47o5@M{CV;^DGhQJmscciv7`^QoFA zXRQpuE{MW^qwr$A2x_yd2A{NwbL6Hw?Yi^jQqAxBG^i^t4GX6hN_NQfdTFgzmW?Kc zt$cpc3GCFC7Tj({g_U%Q08VtORxHzN9j|I7x94>4?-Ha@K>| z%sD&W(fxxA4@nmwt}9SzW%;Nyk!Xk<9+=D6&x8@ z#KZg@zna3N6*uh1aDCjcn6(3&b#9~G0AwW5C0J=$Z4?T<1t6qAPpf`Q=pdW`Yz&4H}IE-VA zpaf}W6+q3WBjlr`eG>c;sIA1yyI&3OYjj%h<`|#EBHnLT5Y(`IU>P3<2%gY5^l`Gk zj8EzwB7IIGaj-h{84gKTVLLvrf6Mqn-AakuGQOyL)W^Yst|_b>zV2pxHp|Hp8F z)Ms&`&Xt@Fg=p{+zJxCmxwz5_^*SyXJfmZB^QIT8I($J}_SuRKyJ~tHrw?C^yo#?^ z@XZz6oEb>;_buUj75wnxy4W8eL%`!SK7@m?>NL`&mBB%DX*iMyU0NAUoV^D>!_T=k xieIq53BQEIaW}sg33o}izt!!EZePXkIW9-=O+MxC4|olKrc(dHcS)w3{|1|28r=W@ diff --git a/bin/checkDataIntegrity/ProgramState.class b/bin/checkDataIntegrity/ProgramState.class deleted file mode 100644 index 304fda4936f44cd5dde33f14cc13ec40cd0171d1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1859 zcmb_c+invv5It^_ZW0#Sq?FPYD3=zJ<+9vw;Z|A@Md2cf`T$SP)=HKp>*95gD)C7m zfkcJW2R?w0LX5o&EKt%upva!dtk2B&%#6Q&+x!Ax4)+}lFiZz+5v(q7%@-prS}N4* z{!=Aeig%YZ*TO-LVdNEm!~G7ATK+Q;NVUR{k2P1CfjuNWkiCfXYQvuE>9FGmG75T1 ziAeig%WfF>b5=BD)T%QSEaaY2gl?{D5i<>mMc#=)kJ8a2u3Lp?_RaGQv!%_Etj+kqZXzA17|Cm zSnCyPieoMgV}{{Ub=$Pk$XO2*qs`;Cq0eTxXk1oZ%%a9Hvjdll)CA&nk9X*XV`($l z08g5)M4;=n7slgh7aq4-Zj>f`0#PO{PK*+Ql~4-esd0oNHO?U2{) ztR_26Y~9Z5Fi}Tql-3xnaRzrWiiEOhh}gj#!|X4z`rO;WJj0>>N2xIql1NEjAe^P? z8>Du~p<>38w2B!@D`_OHq=6)9)-Jdhz;4pIgfge6ywBLdy=o!-ExH<8=Gm^YE% z!1zb{Jb($>hbRch{Uq%dNfL~H2S^&tgf-u%Y+#ejlz9y(C8L?(c^o9YoU>4e)FQ1C zEqeBFh<20FECsV+yiX{0KOe6GwqRLDW(lAQeS8bh3EJgiezXhcqcb;svjx`-+DZY sb0jN-ziJD24RzeWP29q5vX{ty2Y0bRg}+DtC#j4{UnO0Y^px$W@51Jpa{vGU diff --git a/bin/checkDataIntegrity/Task.class b/bin/checkDataIntegrity/Task.class deleted file mode 100644 index 5752781ab2309e87c72e6714558d913a4a8912e2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6831 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 diff --git a/bin/module-info.class b/bin/module-info.class deleted file mode 100644 index d68e9cd397777f607a04a877e6ab2559723e6480..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 157 zcmX^0Z`VEs1_nn4E_MbcMh5QO{FKt1RNc(Hw0uSeuHgLAqU2P!%$!t41_2}~y{yEt zL`DWSU$AOn26jdUq2!FzPLNW)q{QOX1_lO3pj8mS b#J~(>Ffp(&umWi@1~#xTBLhbRm;oUG`9dJn diff --git a/checkDataIntegrity.jar b/checkDataIntegrity.jar deleted file mode 100644 index dde1d260350a4706791bbd7ca4c0b2cff95a9994..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21032 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 jAy=TNuJdxoY9yjD8sNyk!psEWM diff --git a/src/checkDataIntegrity/Args.java b/src/checkDataIntegrity/Args.java deleted file mode 100644 index 50ef9ef..0000000 --- a/src/checkDataIntegrity/Args.java +++ /dev/null @@ -1,6 +0,0 @@ -package checkDataIntegrity; - - -record Args(String path0, String path1, int threads, int skip, int timeLimit) { - -} diff --git a/src/checkDataIntegrity/BufferPool.java b/src/checkDataIntegrity/BufferPool.java deleted file mode 100644 index 3372071..0000000 --- a/src/checkDataIntegrity/BufferPool.java +++ /dev/null @@ -1,29 +0,0 @@ -package checkDataIntegrity; - -import java.util.concurrent.LinkedBlockingQueue; - -class BufferPool { - - private static final LinkedBlockingQueue queue = new LinkedBlockingQueue<>(); - - static Buffer get() { - Buffer buf = queue.poll(); - if (buf == null) { - buf = new Buffer(); - } - return buf; - } - - static void put(final Buffer buf) { - queue.offer(buf); - } - - static class Buffer { - - byte[] buf = new byte[16384]; - - volatile int len; - - } - -} diff --git a/src/checkDataIntegrity/Main.java b/src/checkDataIntegrity/Main.java deleted file mode 100644 index dc587bc..0000000 --- a/src/checkDataIntegrity/Main.java +++ /dev/null @@ -1,98 +0,0 @@ -package checkDataIntegrity; - -import java.io.IOException; -import java.nio.file.FileVisitResult; -import java.nio.file.FileVisitor; -import java.nio.file.Files; -import java.nio.file.Path; -import java.nio.file.attribute.BasicFileAttributes; -import java.time.Duration; -import java.util.concurrent.atomic.AtomicLong; - -public class Main { - - public static void main(final String[] args) throws Exception { - final Args parsedArgs = parseArgs(args); - if (parsedArgs == null) { - return; - } - - final ProgramState state = new ProgramState(System.currentTimeMillis(), new AtomicLong(), new AtomicLong(), new AtomicLong()); - final WorkerPool workerPool = new WorkerPool(parsedArgs, state, parsedArgs.threads()); - - walk(parsedArgs, state, workerPool); - - workerPool.awaitEmpty(); - workerPool.interrupt(); - workerPool.join(); - - printStats(state); - - System.exit(state.countErr().get() > 0 ? 1 : 0); - } - - private static Args parseArgs(final String[] args) { - if (args.length < 5) { - System.err.println("Usage: checkDataIntegrity.java "); - return null; - } - - final Args result = new Args( - args[0], - args[1], - Integer.parseInt(args[2]), - Integer.parseInt(args[3]), - Integer.parseInt(args[4])); - System.out.println(result); - return result; - } - - private static void printStats(final ProgramState state) { - final Duration duration = Duration.ofMillis(System.currentTimeMillis() - state.start()); - System.out.println("Took: " + duration.toString()); - System.out.println("Files checked: " + state.count().get()); - if (duration.toSeconds() > 0) { - System.out.println("Throughput: " + (state.bytes().get() / duration.toSeconds() / 1024 / 1024) + " Mib/s"); - } - System.out.println("Errors: " + state.countErr().get()); - } - - private static void walk(final Args parsedArgs, final ProgramState state, final WorkerPool workerPool) throws IOException { - final AtomicLong walkTreeCounter = new AtomicLong(); - Files.walkFileTree(Path.of(parsedArgs.path0()), new FileVisitor<>() { - - @Override - public FileVisitResult preVisitDirectory(final Path dir, final BasicFileAttributes attrs) throws IOException { - return FileVisitResult.CONTINUE; - } - - @Override - public FileVisitResult visitFile(final Path file, final BasicFileAttributes attrs) throws IOException { - if (attrs.isRegularFile() && walkTreeCounter.incrementAndGet() > parsedArgs.skip()) { - try { - workerPool.put(file); - } - catch (final InterruptedException e) { - return FileVisitResult.TERMINATE; - } - } - - final boolean timeLimitReached = System.currentTimeMillis() - state.start() >= parsedArgs.timeLimit(); - if (timeLimitReached) { - System.out.println("Time limit reached"); - } - return timeLimitReached ? FileVisitResult.TERMINATE : FileVisitResult.CONTINUE; - } - - @Override - public FileVisitResult visitFileFailed(final Path file, final IOException exc) throws IOException { - return FileVisitResult.CONTINUE; - } - - @Override - public FileVisitResult postVisitDirectory(final Path dir, final IOException exc) throws IOException { - return FileVisitResult.CONTINUE; - } - }); - } -} diff --git a/src/checkDataIntegrity/ProgramState.java b/src/checkDataIntegrity/ProgramState.java deleted file mode 100644 index feff392..0000000 --- a/src/checkDataIntegrity/ProgramState.java +++ /dev/null @@ -1,7 +0,0 @@ -package checkDataIntegrity; - -import java.util.concurrent.atomic.AtomicLong; - -record ProgramState(long start, AtomicLong count, AtomicLong countErr, AtomicLong bytes) { - -} diff --git a/src/checkDataIntegrity/Task.java b/src/checkDataIntegrity/Task.java deleted file mode 100644 index 3290fb0..0000000 --- a/src/checkDataIntegrity/Task.java +++ /dev/null @@ -1,118 +0,0 @@ -package checkDataIntegrity; - -import java.io.FileNotFoundException; -import java.io.IOException; -import java.io.RandomAccessFile; -import java.nio.file.InvalidPathException; -import java.nio.file.NoSuchFileException; -import java.nio.file.Path; -import java.util.Arrays; -import java.util.concurrent.BlockingQueue; -import java.util.concurrent.ExecutorService; -import java.util.concurrent.Executors; -import java.util.concurrent.Future; -import java.util.concurrent.LinkedBlockingQueue; -import java.util.function.Consumer; - -import checkDataIntegrity.BufferPool.Buffer; - -class Task implements Consumer { - - private final Args args; - - private final ProgramState state; - - private final ExecutorService executorService = Executors.newVirtualThreadPerTaskExecutor(); - - Task(final Args args, final ProgramState state) { - this.args = args; - this.state = state; - } - - @Override - public void accept(final Path path) { - try { - final long cnt = this.state.count().incrementAndGet(); - if (cnt % 1000 == 0) { - System.out.println(cnt); - } - - final String rel = path.toString().substring(this.args.path0().length()); - final Path p1 = Path.of(this.args.path1() + rel); - - try (RandomAccessFile raf0 = new RandomAccessFile(path.toFile(), "r"); RandomAccessFile raf1 = new RandomAccessFile(p1.toFile(), "r")) { - final BlockingQueue queue0 = new LinkedBlockingQueue<>(1); - final BlockingQueue queue1 = new LinkedBlockingQueue<>(1); - final Future future0 = this.executorService.submit(() -> this.loader(raf0, queue0)); - final Future future1 = this.executorService.submit(() -> this.loader(raf1, queue1)); - try { - - while (true) { - final Buffer buf0 = queue0.take(); - final Buffer buf1 = queue1.take(); - try { - if (buf0.len != buf1.len) { - System.out.println(rel + ": Length mismatch"); - this.state.countErr().incrementAndGet(); - break; - } - if (buf0.len == -1) { - break; - } - this.state.bytes().addAndGet(buf0.len); - if (!Arrays.equals(buf0.buf, 0, buf0.len, buf1.buf, 0, buf1.len)) { - System.out.println(rel + ": Data mismatch"); - this.state.countErr().incrementAndGet(); - break; - } - } - finally { - BufferPool.put(buf0); - BufferPool.put(buf1); - } - } - } - finally { - future0.cancel(true); - future1.cancel(true); - } - } - } - catch (NoSuchFileException | FileNotFoundException | InvalidPathException ex) { - } - catch (final InterruptedException ex) { - Thread.currentThread().interrupt(); - } - catch (final Exception ex) { - System.out.println(path + ": Exception: " + ex.getClass().getName() + " " + ex.getMessage()); - this.state.countErr().incrementAndGet(); - } - } - - private void loader(final RandomAccessFile raf, final BlockingQueue queue) { - try { - while (!Thread.currentThread().isInterrupted()) { - final Buffer buf = BufferPool.get(); - buf.len = raf.read(buf.buf); - if (buf.len == -1) { - queue.put(buf); - return; - } - queue.put(buf); - } - } - catch (final IOException e) { - e.printStackTrace(); - final Buffer buf = BufferPool.get(); - buf.len = -1; - try { - queue.put(buf); - } - catch (final InterruptedException e1) { - } - } - catch (final InterruptedException e) { - } - } - -} diff --git a/src/checkDataIntegrity/Worker.java b/src/checkDataIntegrity/Worker.java deleted file mode 100644 index c7f885d..0000000 --- a/src/checkDataIntegrity/Worker.java +++ /dev/null @@ -1,30 +0,0 @@ -package checkDataIntegrity; - -import java.nio.file.Path; -import java.util.concurrent.BlockingQueue; - -class Worker extends Thread { - - private final Task task; - - private final BlockingQueue queue; - - public Worker(final Args args, final ProgramState state, final BlockingQueue queue) { - super(); - this.queue = queue; - this.task = new Task(args, state); - } - - @Override - public void run() { - try { - while (!Thread.interrupted()) { - final Path p = this.queue.take(); - this.task.accept(p); - } - } - catch (final InterruptedException e) { - } - } - -} diff --git a/src/checkDataIntegrity/WorkerPool.java b/src/checkDataIntegrity/WorkerPool.java deleted file mode 100644 index 036291e..0000000 --- a/src/checkDataIntegrity/WorkerPool.java +++ /dev/null @@ -1,62 +0,0 @@ -package checkDataIntegrity; - -import java.nio.file.Path; -import java.util.ArrayList; -import java.util.List; -import java.util.concurrent.BlockingQueue; -import java.util.concurrent.LinkedBlockingQueue; - -class WorkerPool { - - private final List workers; - - private final BlockingQueue queue; - - WorkerPool(final Args args, final ProgramState state, final int threads) { - System.out.println("Threads: " + threads); - - this.queue = new LinkedBlockingQueue<>(threads * 2); - - this.workers = new ArrayList<>(threads); - for (int i = 0; i < threads; i++) { - final Worker worker = new Worker(args, state, this.queue); - worker.setDaemon(true); - worker.setName("Worker #" + i); - worker.start(); - - this.workers.add(worker); - } - } - - void put(final Path path) throws InterruptedException { - this.queue.put(path); - } - - void awaitEmpty() { - while (!this.queue.isEmpty()) { - try { - Thread.sleep(10); - } - catch (final InterruptedException e) { - break; - } - } - } - - void interrupt() { - for (final Worker worker : this.workers) { - worker.interrupt(); - } - } - - void join() { - for (final Worker worker : this.workers) { - try { - worker.join(); - } - catch (final InterruptedException e) { - } - } - } - -} diff --git a/src/module-info.java b/src/module-info.java deleted file mode 100644 index 239ba62..0000000 --- a/src/module-info.java +++ /dev/null @@ -1,2 +0,0 @@ -module checkDataIntegrity { -}