0

嗯,这是一个奇怪的。第一次保存尝试通常有效(最多再尝试一次)。
但是在重负载(连续保存很多次)中,保存的文件消失了
如果取消注释“Thread.sleep”,则捕获错误,否则验证成功通过

public void save(Object key, T objToSave) throws FileNotFoundException, IOException {
    IOException ex = null;
    for (int i = 0; i < NUM_OF_RETRIES; i++) {
        try {
            /* saving */
            String filePath = getFilePath(key);
            OutputStream outStream = getOutStream(filePath);
            ObjectOutputStream os = new ObjectOutputStream(outStream);          
            os.writeObject(objToSave);
            os.close(); 

            /* validations warnings etc. */
            if (i>0){
                logger.warn(objToSave + "  saved on attamped " + i);
                /* sleep more on each fail */
                Thread.sleep(100+i*8);
            }

            //Thread.sleep(50);
            File doneFile = new File(filePath); 
            if (! (doneFile.exists())){
                logger.error("got here but file was not witten to disk ! id was" + key);
                throw new IOException();
            }
            logger.info("6. start persist " + key + " path=" + new File(filePath).getAbsolutePath() + " exists="+doneFile.exists());

            return;
        } catch (IOException e) {
            logger.error(objToSave + " failed on attamped " + i);
            ex = e;
        } catch (InterruptedException e) {          
            e.printStackTrace();
        }
    }
    throw ex;
}
4

1 回答 1

0

这不是 Java 作家的问题。我没有明确使用线程,但在我的测试中,我删除了我保存使用的文件夹: Runtime.getRuntime("rm -rf saver_directory"); 我发现它是异步的,确切的删除和创建时间以毫秒为单位变化。所以解决方案是在删除后添加“睡眠”。正确的答案是使用 java 进行删除而不是创建快捷方式;)

谢谢你们。

于 2012-07-20T12:28:59.760 回答