Skip to content

Commit 1c44934

Browse files
authored
Disable store auto disable and reenablement (#2078)
1 parent 138baac commit 1c44934

6 files changed

Lines changed: 31 additions & 8 deletions

File tree

addons/schedule/common/src/test/java/org/commonjava/indy/schedule/ScheduleTest.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -83,11 +83,11 @@ public void testScheduleExpired() throws Exception
8383
final String jobName = "org/jboss";
8484
final String payload = "json_string";
8585

86-
Long timeout = Long.valueOf( 10 );
86+
Long timeout = Long.valueOf( 5 );
8787

8888
scheduleDB.createSchedule( storeKey, JobType.CONTENT.getJobType(), jobName, payload, timeout );
8989

90-
Thread.sleep( 15 * 1000 );
90+
Thread.sleep( 10 * 1000 );
9191

9292
DtxSchedule schedule = scheduleDB.querySchedule( storeKey, jobName );
9393

api/src/main/java/org/commonjava/indy/conf/InternalFeatureConfig.java

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,13 @@ public class InternalFeatureConfig implements IndyConfigInfo {
3939

4040
private boolean mavenMetadataCacheEnabled = TRUE;
4141

42+
/**
43+
* Indy disables a remote store when transfer error happens, and try to re-enable it
44+
* after a timeout specified either by global 'storeDisableTimeoutSeconds' or store specific timeout.
45+
* Auto disable-and-re-enabling a store may not be very useful. Thus, false by default.
46+
*/
47+
private boolean storeAutoDisableAndReEnable;
48+
4249
private final Logger logger = LoggerFactory.getLogger( getClass() );
4350

4451
public InternalFeatureConfig() {
@@ -85,4 +92,13 @@ public boolean isMavenMetadataCacheEnabled() {
8592
public void setMavenMetadataCacheEnabled(boolean mavenMetadataCacheEnabled) {
8693
this.mavenMetadataCacheEnabled = mavenMetadataCacheEnabled;
8794
}
95+
96+
public boolean isStoreAutoDisableAndReEnable() {
97+
return storeAutoDisableAndReEnable;
98+
}
99+
100+
@ConfigName("store.auto.disable.reenable")
101+
public void setStoreAutoDisableAndReEnable(boolean storeAutoDisableAndReEnable) {
102+
this.storeAutoDisableAndReEnable = storeAutoDisableAndReEnable;
103+
}
88104
}

core/src/main/java/org/commonjava/indy/core/change/StoreEnablementManager.java

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
import org.commonjava.indy.change.event.ArtifactStorePostUpdateEvent;
2222
import org.commonjava.indy.change.event.IndyStoreErrorEvent;
2323
import org.commonjava.indy.conf.IndyConfiguration;
24+
import org.commonjava.indy.conf.InternalFeatureConfig;
2425
import org.commonjava.indy.core.expire.IndySchedulerException;
2526
import org.commonjava.indy.core.expire.ScheduleManager;
2627
import org.commonjava.indy.core.expire.SchedulerEvent;
@@ -63,6 +64,9 @@ public class StoreEnablementManager
6364
@Inject
6465
private IndyConfiguration config;
6566

67+
@Inject
68+
private InternalFeatureConfig internalFeatureConfig;
69+
6670
@Measure
6771
public void onStoreEnablementChange( @Observes ArtifactStoreEnablementEvent event )
6872
{
@@ -78,6 +82,13 @@ public void onStoreError( @Observes IndyStoreErrorEvent evt )
7882
Logger logger = LoggerFactory.getLogger( getClass() );
7983
StoreKey key = evt.getStoreKey();
8084
Throwable error = evt.getError();
85+
86+
if ( !internalFeatureConfig.isStoreAutoDisableAndReEnable() )
87+
{
88+
logger.info( "Store auto-disable-reenable is not enabled. Skipping {}", evt );
89+
return;
90+
}
91+
8192
try
8293
{
8394
ArtifactStore store = storeDataManager.getArtifactStore( key );
@@ -87,16 +98,14 @@ public void onStoreError( @Observes IndyStoreErrorEvent evt )
8798
return;
8899
}
89100

90-
store = store.copyOf();
91-
92101
int disableTimeout = store.getDisableTimeout();
93102
if ( disableTimeout <= TIMEOUT_NEVER_DISABLE )
94103
{
95104
logger.debug( "Disable-timeout set to {}, will never disable the repo", disableTimeout );
96-
store.setDisabled( false );
97105
}
98106
else
99107
{
108+
store = store.copyOf();
100109
store.setDisabled( true );
101110
final ChangeSummary changeSummary = new ChangeSummary( ChangeSummary.SYSTEM_USER, String.format(
102111
"Disabling %s due to error: %s\n\nStack Trace:\n %s", key, error,

ftests/common/src/main/java/org/commonjava/indy/ftest/core/AbstractIndyFunctionalTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -311,7 +311,7 @@ protected void initBaseTestConfig( CoreServerFixture fixture )
311311
{
312312
writeConfigFile( "conf.d/scheduledb.conf", readTestResource( "default-test-scheduledb.conf" ) );
313313
writeConfigFile( "conf.d/threadpools.conf", "[threadpools]\nenabled=false" );
314-
writeConfigFile( "conf.d/internal-features.conf", "[_internal]\nstore.validation.enabled=false" );
314+
writeConfigFile( "conf.d/internal-features.conf", "[_internal]\nstore.validation.enabled=false\nstore.auto.disable.reenable=true\n" );
315315
writeConfigFile( "conf.d/durable-state.conf", readTestResource( "default-durable-state.conf" ) );
316316
}
317317
else

ftests/core/src/main/java/org/commonjava/indy/ftest/core/content/RemoteRepoTimeoutDisablesStoreAndShowsInDisabledTimeoutsMapTest.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,6 @@ protected void initTestConfig( CoreServerFixture fixture )
6767
throws IOException
6868
{
6969
writeConfigFile( "conf.d/indexer.conf", "[indexer]\nenabled=false" );
70-
writeConfigFile( "conf.d/internal-features.conf", "[_internal]\nstore.validation.enabled=false" );
7170
}
7271

7372
@Override

ftests/core/src/main/java/org/commonjava/indy/ftest/core/content/RemoteRepoTimeoutDisablesThenReEnabledTest.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,6 @@ protected void initTestConfig( CoreServerFixture fixture )
4747
{
4848
writeConfigFile( "main.conf", "store.disable.timeout=2\n\nInclude conf.d/*.conf\n" );
4949
writeConfigFile( "conf.d/scheduler.conf", readTestResource( "default-scheduler.conf" ) );
50-
writeConfigFile( "conf.d/internal-features.conf", "[_internal]\nstore.validation.enabled=false" );
5150
}
5251

5352
@Test

0 commit comments

Comments
 (0)