Skip to content

Commit

Permalink
dynamic configuration reload
Browse files Browse the repository at this point in the history
  • Loading branch information
toby1984 committed Jun 24, 2024
1 parent 1d63573 commit 12a39f8
Show file tree
Hide file tree
Showing 10 changed files with 337 additions and 60 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
import java.io.IOException;
import java.time.ZonedDateTime;
import de.codesourcery.versiontracker.common.server.Configuration;
import de.codesourcery.versiontracker.common.server.ConfigurationProvider;

/**
* Responsible for retrieving artifact metadata and applying it to a {@link VersionInfo} instance.
Expand Down Expand Up @@ -95,7 +96,7 @@ public Statistics createCopy() {
*/
void resetStatistics();

void setConfiguration(Configuration configuration);
void setConfigurationProvider(ConfigurationProvider configuration);

/**
* Try to update version information.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -64,8 +64,7 @@ public class APIImpl implements AutoCloseable

private String repo1BaseUrl = MavenCentralVersionProvider.DEFAULT_REPO1_BASE_URL;
private String restApiBaseUrl = MavenCentralVersionProvider.DEFAULT_SONATYPE_REST_API_BASE_URL;
private de.codesourcery.versiontracker.common.server.Configuration configuration =
new de.codesourcery.versiontracker.common.server.Configuration();
private final ConfigurationProvider configurationProvider = new ConfigurationProvider();

public enum Mode
{
Expand Down Expand Up @@ -174,7 +173,7 @@ protected IVersionProvider createVersionProvider() {
}
}
final MavenCentralVersionProvider result = new MavenCentralVersionProvider( repo1BaseUrl, restApiBaseUrl );
result.setConfiguration( configuration );
result.setConfigurationProvider( configurationProvider );
return result;
}

Expand All @@ -194,7 +193,7 @@ private static Optional<Duration> getDurationFromSystemProperties(String key) {
// unit-testing hook
protected IBackgroundUpdater createBackgroundUpdater(SharedLockCache lockCache) {
final BackgroundUpdater result = new BackgroundUpdater( versionStorage, versionProvider, lockCache );
result.setConfiguration( configuration );
result.setConfigurationProvider( configurationProvider );
return result;
}

Expand All @@ -209,16 +208,8 @@ public synchronized void init(boolean debugMode,boolean verboseMode)
return;
}

// loading configuration must be the very first thing
// done here as methods further down will inject it
try
{
configuration.load();
}
catch( IOException e )
{
throw new UncheckedIOException( e );
}
// force configuration load so we know it's sane
configurationProvider.getConfiguration();

versionStorage = createVersionStorage();
versionProvider = createVersionProvider();
Expand Down Expand Up @@ -298,6 +289,13 @@ private File getArtifactFileLocation()
LOG.info("getArtifactFileLocation(): Using artifacts file location from '"+SYSTEM_PROPERTY_ARTIFACT_FILE+"' JVM property");
return new File( location );
}

final Optional<File> dataStore = configurationProvider.getConfiguration().getDataStorageFile();
if ( dataStore.isPresent() ) {
LOG.info("getArtifactFileLocation(): Using artifacts file location from configuration file: "+dataStore.get());
return dataStore.get();
}

location = System.getProperty("user.home");
if ( StringUtils.isNotBlank( location) )
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,7 @@ public class BackgroundUpdater implements IBackgroundUpdater {
// GuardedBy( statistics )
private final Statistics statistics = new Statistics();

public volatile Configuration configuration = new Configuration();
public ConfigurationProvider configurationProvider;

private final IVersionStorage storage;
private final IVersionProvider provider;
Expand Down Expand Up @@ -90,7 +90,7 @@ public void run()
doUpdate();
synchronized( SLEEP_LOCK )
{
SLEEP_LOCK.wait( configuration.getBgUpdateCheckInterval().toMillis() );
SLEEP_LOCK.wait( configurationProvider.getConfiguration().getBgUpdateCheckInterval().toMillis() );
}
}
regularShutdown = true;
Expand Down Expand Up @@ -164,8 +164,9 @@ public Thread newThread(Runnable r)

private void doUpdate() throws Exception
{
final List<VersionInfo> infos = storage.getAllStaleVersions( configuration.getMinUpdateDelayAfterSuccess(),
configuration.getMinUpdateDelayAfterFailure(), ZonedDateTime.now() );
final Configuration config = configurationProvider.getConfiguration();
final List<VersionInfo> infos = storage.getAllStaleVersions( config.getMinUpdateDelayAfterSuccess(),
config.getMinUpdateDelayAfterFailure(), ZonedDateTime.now() );
LOG.info("doUpdate(): Updating "+infos.size()+" stale artifacts");
for (VersionInfo info : infos)
{
Expand All @@ -176,6 +177,7 @@ private void doUpdate() throws Exception
private boolean requiresUpdate(VersionInfo info)
{
Validate.notNull( info, "info must not be null" );
final Configuration configuration = configurationProvider.getConfiguration();
boolean result = IVersionStorage.isStaleVersion(
info,
configuration.getMinUpdateDelayAfterSuccess(),
Expand Down Expand Up @@ -216,6 +218,7 @@ public boolean requiresUpdate(VersionInfo info, Artifact artifact) {
// would've returned true in this case and we bail out early above
final Duration timeSinceLastUpdate = Duration.between( info.lastPolledDate(), ZonedDateTime.now() );

final Configuration configuration = configurationProvider.getConfiguration();
Duration duration = configuration.getMinUpdateDelayAfterSuccess();
boolean lastPollFailed = info.lastFailureDate != null && info.lastPolledDate() == info.lastFailureDate;
if ( lastPollFailed) {
Expand All @@ -224,6 +227,7 @@ public boolean requiresUpdate(VersionInfo info, Artifact artifact) {
if ( timeSinceLastUpdate.compareTo( duration ) < 0 ) {
LOG.debug( "Not performing metadata update as last poll " + (lastPollFailed ? "failed" : "succeeded") + " at " + info.lastPolledDate() + " " +
"which happened less than " + duration + " ago" );
return false;
}
}
return updateNeeded;
Expand All @@ -245,7 +249,8 @@ public void doUpdate(VersionInfo info) {
}
try
{
provider.update(info, false );
final IVersionProvider.UpdateResult result = provider.update( info, info.versions.stream().anyMatch( x -> ! x.hasReleaseDate() ) );
LOG.trace( "doUpdate(): Updating {} yielded {}", info.artifact, result );
}
finally
{
Expand Down Expand Up @@ -309,10 +314,10 @@ public void close() throws IOException
threadPool.shutdownNow();
}

public void setConfiguration(Configuration configuration)
public void setConfigurationProvider(ConfigurationProvider provider)
{
Validate.notNull( configuration, " must not be null" );
this.configuration = configuration;
Validate.notNull( provider, "ConfigurationProvider must not be null" );
this.configurationProvider = provider;
}

@Override
Expand Down
Loading

0 comments on commit 12a39f8

Please sign in to comment.