HHH-10181: CacheableFileXmlSource.doBind uses obsolete .bin file
This commit is contained in:
parent
eb2f33328d
commit
6ace838d61
|
@ -32,6 +32,7 @@ public class CacheableFileXmlSource extends XmlSource {
|
|||
private final File xmlFile;
|
||||
private final File serFile;
|
||||
private final boolean strict;
|
||||
private final boolean serFileObsolete;
|
||||
|
||||
public CacheableFileXmlSource(Origin origin, File xmlFile, boolean strict) {
|
||||
super( origin );
|
||||
|
@ -40,6 +41,8 @@ public class CacheableFileXmlSource extends XmlSource {
|
|||
|
||||
this.serFile = determineCachedFile( xmlFile );
|
||||
|
||||
this.serFileObsolete = xmlFile.exists() && serFile.exists() && xmlFile.lastModified() > serFile.lastModified();
|
||||
|
||||
if ( strict ) {
|
||||
if ( !serFile.exists() ) {
|
||||
throw new MappingException(
|
||||
|
@ -47,7 +50,7 @@ public class CacheableFileXmlSource extends XmlSource {
|
|||
origin
|
||||
);
|
||||
}
|
||||
if ( xmlFile.exists() && xmlFile.lastModified() > serFile.lastModified() ) {
|
||||
if ( serFileObsolete ) {
|
||||
throw new MappingException(
|
||||
String.format( "Cached file [%s] could not be used as the mapping file is newer", origin.getName() ),
|
||||
origin
|
||||
|
@ -83,6 +86,7 @@ public class CacheableFileXmlSource extends XmlSource {
|
|||
}
|
||||
}
|
||||
else {
|
||||
if ( !serFileObsolete ) {
|
||||
try {
|
||||
return readSerFile();
|
||||
}
|
||||
|
@ -92,6 +96,10 @@ public class CacheableFileXmlSource extends XmlSource {
|
|||
catch ( FileNotFoundException e ) {
|
||||
log.cachedFileNotFound( serFile.getName(), e );
|
||||
}
|
||||
}
|
||||
else {
|
||||
log.cachedFileObsolete( serFile );
|
||||
}
|
||||
|
||||
log.readingMappingsFromFile( xmlFile.getPath() );
|
||||
final Binding binding = FileXmlSource.doBind( binder, xmlFile, getOrigin() );
|
||||
|
|
|
@ -1747,4 +1747,8 @@ public interface CoreMessageLogger extends BasicLogger {
|
|||
@Message(value = "Hikari properties were encountered, but the Hikari ConnectionProvider was not found on the classpath; these properties are going to be ignored.",
|
||||
id = 472)
|
||||
void hikariProviderClassNotFound();
|
||||
|
||||
@LogMessage(level = INFO)
|
||||
@Message(value = "Omitting cached file [%s] as the mapping file is newer", id = 473)
|
||||
void cachedFileObsolete(File cachedFile);
|
||||
}
|
||||
|
|
|
@ -59,5 +59,12 @@ public class CacheableFileTest extends BaseUnitTestCase {
|
|||
assertTrue( mappingBinFile.exists() );
|
||||
|
||||
new Configuration().addCacheableFileStrictly( mappingFile );
|
||||
|
||||
// make mappingBinFile obsolete by declaring it a minute older than mappingFile
|
||||
mappingBinFile.setLastModified( mappingFile.lastModified() - 60000L );
|
||||
|
||||
new Configuration().addCacheableFile( mappingFile );
|
||||
assertTrue( mappingBinFile.exists() );
|
||||
assertTrue( "mappingFile should have been recreated.", mappingBinFile.lastModified() >= mappingFile.lastModified());
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue