@Override
    protected void doRun() {
      File file;

      while ((file = filesToSave.poll()) != null || saveCount.get() < FILES_COUNT) {
        if (file != null) {
          byte data[] = file.generateData();
          dataStore.storeData(file.getSessionId(), file.getId(), data);

          if (saveCount.get() % READ_MODULO == 0) {
            filesToRead1.add(file);
          }
          saveCount.incrementAndGet();
          bytesWritten.addAndGet(data.length);
        }

        try {
          Thread.sleep(random.nextInt(SLEEP_MAX));
        } catch (InterruptedException e) {
          log.error(e.getMessage(), e);
        }
      }

      saveDone.set(true);
    }
    @Override
    protected void doRun() {
      File file;
      while ((file = filesToRead2.poll()) != null || !read1Done.get()) {
        if (file != null) {
          byte bytes[] = dataStore.getData(file.getSessionId(), file.getId());
          if (file.checkData(bytes) == false) {
            failures.incrementAndGet();
            log.error("Detected error number: " + failures.get());
          }
          read2Count.incrementAndGet();
          bytesRead.addAndGet(bytes.length);
        }

        try {
          Thread.sleep(random.nextInt(SLEEP_MAX));
        } catch (InterruptedException e) {
          log.error(e.getMessage(), e);
        }
      }

      read2Done.set(true);
    }