3838import java .util .concurrent .atomic .AtomicLong ;
3939
4040import static org .ethereum .crypto .HashUtil .sha3 ;
41- import static org .ethereum .mine .EthashListener .DatasetStatus .DATASET_GENERATED ;
41+ import static org .ethereum .mine .EthashListener .DatasetStatus .DATASET_READY ;
42+ import static org .ethereum .mine .EthashListener .DatasetStatus .DATASET_PREPARE ;
43+ import static org .ethereum .mine .EthashListener .DatasetStatus .FULL_DATASET_GENERATED ;
4244import static org .ethereum .mine .EthashListener .DatasetStatus .FULL_DATASET_GENERATE_START ;
45+ import static org .ethereum .mine .EthashListener .DatasetStatus .FULL_DATASET_LOADED ;
46+ import static org .ethereum .mine .EthashListener .DatasetStatus .FULL_DATASET_LOAD_START ;
47+ import static org .ethereum .mine .EthashListener .DatasetStatus .LIGHT_DATASET_GENERATED ;
4348import static org .ethereum .mine .EthashListener .DatasetStatus .LIGHT_DATASET_GENERATE_START ;
49+ import static org .ethereum .mine .EthashListener .DatasetStatus .LIGHT_DATASET_LOADED ;
50+ import static org .ethereum .mine .EthashListener .DatasetStatus .LIGHT_DATASET_LOAD_START ;
4451import static org .ethereum .util .ByteUtil .longToBytes ;
4552import static org .ethereum .mine .MinerIfc .MiningResult ;
4653
@@ -106,26 +113,28 @@ public Ethash(SystemProperties config, long blockNumber) {
106113 }
107114
108115 public int [] getCacheLight () {
109- return getCacheLight (true );
116+ fireDatatasetStatusUpdate (DATASET_PREPARE );
117+ int [] res = getCacheLightImpl ();
118+ fireDatatasetStatusUpdate (DATASET_READY );
119+ return res ;
110120 }
111121
112122 /**
113123 * Checks whether light DAG is already generated and loads it
114124 * from cache, otherwise generates it
115- *
116- * @param fireFinished whether to fire {@link EthashListener.DatasetStatus#DATASET_GENERATED}
117- * after light DAG generation is finished
118125 * @return Light DAG
119126 */
120- private synchronized int [] getCacheLight ( boolean fireFinished ) {
127+ private synchronized int [] getCacheLightImpl ( ) {
121128 if (cacheLight == null ) {
122129 File file = new File (config .ethashDir (), "mine-dag-light.dat" );
123130 if (fileCacheEnabled && file .canRead ()) {
131+ fireDatatasetStatusUpdate (LIGHT_DATASET_LOAD_START );
124132 try (ObjectInputStream ois = new ObjectInputStream (new FileInputStream (file ))) {
125133 logger .info ("Loading light dataset from " + file .getAbsolutePath ());
126134 long bNum = ois .readLong ();
127135 if (bNum == blockNumber ) {
128136 cacheLight = (int []) ois .readObject ();
137+ fireDatatasetStatusUpdate (LIGHT_DATASET_LOADED );
129138 logger .info ("Dataset loaded." );
130139 } else {
131140 logger .info ("Dataset block number miss: " + bNum + " != " + blockNumber );
@@ -152,24 +161,25 @@ private synchronized int[] getCacheLight(boolean fireFinished) {
152161 throw new RuntimeException (e );
153162 }
154163 }
155- if (fireFinished ) {
156- fireDatatasetStatusUpdate (DATASET_GENERATED );
157- }
164+ fireDatatasetStatusUpdate (LIGHT_DATASET_GENERATED );
158165 }
159166 }
160167 return cacheLight ;
161168 }
162169
163170 public synchronized int [] getFullDataset () {
171+ fireDatatasetStatusUpdate (DATASET_PREPARE );
164172 if (fullData == null ) {
165173 File file = new File (config .ethashDir (), "mine-dag.dat" );
166174 if (fileCacheEnabled && file .canRead ()) {
175+ fireDatatasetStatusUpdate (FULL_DATASET_LOAD_START );
167176 try (ObjectInputStream ois = new ObjectInputStream (new FileInputStream (file ))) {
168177 logger .info ("Loading dataset from " + file .getAbsolutePath ());
169178 long bNum = ois .readLong ();
170179 if (bNum == blockNumber ) {
171180 fullData = (int []) ois .readObject ();
172181 logger .info ("Dataset loaded." );
182+ fireDatatasetStatusUpdate (FULL_DATASET_LOADED );
173183 } else {
174184 logger .info ("Dataset block number miss: " + bNum + " != " + blockNumber );
175185 }
@@ -181,8 +191,8 @@ public synchronized int[] getFullDataset() {
181191 if (fullData == null ){
182192
183193 logger .info ("Calculating full dataset..." );
184- int [] cacheLight = getCacheLight (false );
185194 fireDatatasetStatusUpdate (FULL_DATASET_GENERATE_START );
195+ int [] cacheLight = getCacheLightImpl ();
186196 fullData = getEthashAlgo ().calcDataset (getFullSize (), cacheLight );
187197 logger .info ("Full dataset calculated." );
188198
@@ -196,9 +206,10 @@ public synchronized int[] getFullDataset() {
196206 throw new RuntimeException (e );
197207 }
198208 }
199- fireDatatasetStatusUpdate (DATASET_GENERATED );
209+ fireDatatasetStatusUpdate (FULL_DATASET_GENERATED );
200210 }
201211 }
212+ fireDatatasetStatusUpdate (DATASET_READY );
202213 return fullData ;
203214 }
204215
0 commit comments