Skip to content

Commit 9326858

Browse files
backup - will be squashed later
1 parent 3f3d0a7 commit 9326858

18 files changed

Lines changed: 209 additions & 123 deletions

File tree

artemis-commons/src/main/java/org/apache/activemq/artemis/core/server/ActiveMQScheduledComponent.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -44,9 +44,9 @@ public abstract class ActiveMQScheduledComponent implements ActiveMQComponent, R
4444
/**
4545
* initialDelay < 0 would mean no initial delay, use the period instead
4646
*/
47-
private long initialDelay;
48-
private long period;
49-
private TimeUnit timeUnit;
47+
protected long initialDelay;
48+
protected long period;
49+
protected TimeUnit timeUnit;
5050
protected final Executor executor;
5151
private volatile boolean isStarted;
5252
private ScheduledFuture future;

artemis-commons/src/main/java/org/apache/activemq/artemis/utils/critical/CriticalAnalyzer.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
*/
1717
package org.apache.activemq.artemis.utils.critical;
1818

19+
import java.util.concurrent.ScheduledFuture;
1920
import java.util.concurrent.TimeUnit;
2021

2122
import org.apache.activemq.artemis.core.server.ActiveMQComponent;
@@ -48,4 +49,10 @@ default int getNumberOfComponents() {
4849
CriticalAnalyzer addAction(CriticalAction action);
4950

5051
void check();
52+
53+
/** This will kick one verification at the configured timeout. If it does not finish before then
54+
* the actions will be fired. */
55+
default ScheduledFuture<?> kickIt(CriticalComponent criticalComponent) {
56+
return null;
57+
}
5158
}

artemis-commons/src/main/java/org/apache/activemq/artemis/utils/critical/CriticalAnalyzerImpl.java

Lines changed: 48 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,9 @@
2121
import java.util.ConcurrentModificationException;
2222
import java.util.List;
2323
import java.util.concurrent.CopyOnWriteArrayList;
24+
import java.util.concurrent.Executor;
25+
import java.util.concurrent.ScheduledExecutorService;
26+
import java.util.concurrent.ScheduledFuture;
2427
import java.util.concurrent.TimeUnit;
2528

2629
import org.apache.activemq.artemis.core.server.ActiveMQScheduledComponent;
@@ -39,7 +42,7 @@ public class CriticalAnalyzerImpl implements CriticalAnalyzer {
3942
// one minute by default.. the server will change it for sure
4043
private volatile long checkTimeNanoSeconds = TimeUnit.SECONDS.toNanos(60);
4144

42-
private final ActiveMQScheduledComponent scheduledComponent;
45+
private final CriticalAnalyzerScheduledComponent scheduledComponent;
4346

4447
public CriticalAnalyzerImpl() {
4548
// this will make the scheduled component to start its own pool
@@ -49,28 +52,53 @@ public CriticalAnalyzerImpl() {
4952
* otherwise in case of a deadlock, or a starvation of the server the analyzer won't pick up any
5053
* issues and won't be able to shutdown the server or halt the VM
5154
*/
52-
this.scheduledComponent = new ActiveMQScheduledComponent(null, null, checkTimeNanoSeconds, TimeUnit.NANOSECONDS, false) {
55+
this.scheduledComponent = new CriticalAnalyzerScheduledComponent(this, null, null, checkTimeNanoSeconds, checkTimeNanoSeconds, TimeUnit.NANOSECONDS, false);
5356

54-
@Override
55-
public void run() {
56-
logger.trace("Checking critical analyzer");
57-
check();
58-
}
57+
}
5958

60-
@Override
61-
protected ActiveMQThreadFactory getThreadFactory() {
62-
return new ActiveMQThreadFactory("critical-analyzer", true, getThisClassLoader());
63-
}
59+
private static class CriticalAnalyzerScheduledComponent extends ActiveMQScheduledComponent {
6460

65-
private ClassLoader getThisClassLoader() {
66-
return AccessController.doPrivileged((PrivilegedAction<ClassLoader>) () -> CriticalAnalyzerImpl.this.getClass().getClassLoader());
61+
private final CriticalAnalyzerImpl criticalAnalyzer;
6762

68-
}
63+
public CriticalAnalyzerScheduledComponent(CriticalAnalyzerImpl criticalAnalyzer,
64+
ScheduledExecutorService scheduledExecutorService,
65+
Executor executor,
66+
long initialDelay,
67+
long checkPeriod,
68+
TimeUnit timeUnit,
69+
boolean onDemand) {
70+
super(scheduledExecutorService, executor, initialDelay, checkPeriod, timeUnit, onDemand);
71+
this.criticalAnalyzer = criticalAnalyzer;
72+
}
73+
74+
75+
@Override
76+
public void run() {
77+
logger.trace("Checking critical analyzer");
78+
criticalAnalyzer.check();
79+
}
80+
81+
@Override
82+
protected ActiveMQThreadFactory getThreadFactory() {
83+
return new ActiveMQThreadFactory("critical-analyzer", true, getThisClassLoader());
84+
}
85+
86+
private ClassLoader getThisClassLoader() {
87+
return AccessController.doPrivileged((PrivilegedAction<ClassLoader>) () -> criticalAnalyzer.getClass().getClassLoader());
88+
}
89+
90+
/** Schedule an action to kick in the critical analyzer.
91+
* If this future is not cancelled in time, the critical analyzer will kick in. */
92+
public ScheduledFuture<?> kickIt(CriticalComponent component) {
93+
return scheduledExecutorService.schedule(() -> {
94+
criticalAnalyzer.fireActions(component);
95+
}, period, timeUnit);
96+
}
6997

70-
};
7198

7299
}
73100

101+
74102
@Override
75103
public void clear() {
76104
actions.clear();
@@ -188,4 +216,9 @@ public void stop() {
188216
public boolean isStarted() {
189217
return scheduledComponent.isStarted();
190218
}
219+
220+
@Override
221+
public ScheduledFuture<?> kickIt(CriticalComponent criticalComponent) {
222+
return scheduledComponent.kickIt(criticalComponent);
223+
}
191224
}

artemis-commons/src/main/java/org/apache/activemq/artemis/utils/critical/CriticalMeasure.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ public void close() {
5757
}
5858
};
5959

60-
protected static final CriticalCloseable dummyCloseable = new CriticalCloseable() {
60+
public static final CriticalCloseable dummyCloseable = new CriticalCloseable() {
6161
@Override
6262
public void beforeClose(ArtemisCloseable runnable) {
6363
throw new IllegalStateException("The dummy closeable does not support beforeClose. Check before CriticalMeasure.isDummy(closeable) before you call beforeClose(runnable)");

artemis-core-client/src/main/java/org/apache/activemq/artemis/api/config/ActiveMQDefaultConfiguration.java

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -724,8 +724,6 @@ public static String getDefaultHapolicyBackupStrategy() {
724724

725725
private static final int DEFAULT_CLUSTER_TOPOLOGY_SCANNER_ATTEMPTS = 30;
726726

727-
private static final int DEFAULT_CLOSE_TIMEOUT = 30_000;
728-
729727
/**
730728
* If {@code true} then the ActiveMQ Artemis Server will make use of any Protocol Managers that are in available on
731729
* the classpath. If false then only the core protocol will be available, unless in Embedded mode where users can
@@ -2036,8 +2034,4 @@ public static int getInitialQueueBufferSize() {
20362034
public static int getClusterTopologyScannerAttempts() {
20372035
return DEFAULT_CLUSTER_TOPOLOGY_SCANNER_ATTEMPTS;
20382036
}
2039-
2040-
public static int getCloseTimeout() {
2041-
return DEFAULT_CLOSE_TIMEOUT;
2042-
}
20432037
}

artemis-journal/src/main/java/org/apache/activemq/artemis/core/journal/impl/JournalImpl.java

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -919,7 +919,6 @@ public void appendAddRecord(final long id,
919919
final boolean sync,
920920
final IOCompletion callback) throws Exception {
921921
checkJournalIsLoaded();
922-
lineUpContext(callback);
923922

924923
if (logger.isTraceEnabled()) {
925924
logger.trace("scheduling appendAddRecord::id={}, userRecordType={}, record = {}", id, recordType, record);
@@ -930,6 +929,8 @@ public void appendAddRecord(final long id,
930929

931930
checkRecordSize(addRecordEncodeSize, record);
932931

932+
lineUpContext(callback);
933+
933934
final SimpleFuture<Boolean> result = newSyncAndCallbackResult(sync, callback);
934935
appendExecutor.execute(() -> {
935936
journalLock.readLock().lock();
@@ -966,7 +967,6 @@ public void appendAddEvent(final long id,
966967
final boolean sync,
967968
final IOCompletion callback) throws Exception {
968969
checkJournalIsLoaded();
969-
lineUpContext(callback);
970970

971971
if (logger.isTraceEnabled()) {
972972
logger.trace("scheduling appendAddEvent::id={}, userRecordType={}, record = {}", id, recordType, record);
@@ -976,6 +976,8 @@ public void appendAddEvent(final long id,
976976

977977
checkRecordSize(addRecord.getEncodeSize(), record);
978978

979+
lineUpContext(callback);
980+
979981
final SimpleFuture<Boolean> result = newSyncAndCallbackResult(sync, callback);
980982
appendExecutor.execute(() -> {
981983
journalLock.readLock().lock();
@@ -1022,7 +1024,6 @@ public void appendUpdateRecord(final long id,
10221024
final boolean sync,
10231025
final IOCompletion callback) throws Exception {
10241026
checkJournalIsLoaded();
1025-
lineUpContext(callback);
10261027

10271028
if (logger.isTraceEnabled()) {
10281029
logger.trace("scheduling appendUpdateRecord::id={}, userRecordType={}", id, recordType);
@@ -1036,6 +1037,8 @@ public void appendUpdateRecord(final long id,
10361037
onFoundAddInfo = new SimpleFutureImpl<>();
10371038
}
10381039

1040+
lineUpContext(callback);
1041+
10391042
if (onFoundAddInfo == null) {
10401043
internalAppendUpdateRecord(id, recordType, persister, record, false, false, null, callback);
10411044
} else {
@@ -1142,7 +1145,6 @@ public void appendDeleteRecord(final long id, final boolean sync, final IOComple
11421145
}
11431146

11441147
checkJournalIsLoaded();
1145-
lineUpContext(callback);
11461148

11471149
final SimpleFuture<Boolean> onFoundAddInfo;
11481150

@@ -1152,6 +1154,8 @@ public void appendDeleteRecord(final long id, final boolean sync, final IOComple
11521154
onFoundAddInfo = new SimpleFutureImpl<>();
11531155
}
11541156

1157+
lineUpContext(callback);
1158+
11551159
if (onFoundAddInfo == null) {
11561160
internalAppendDeleteRecord(id, false, null, callback);
11571161
} else {
@@ -1448,13 +1452,13 @@ public void lineUpContext(IOCompletion callback) {
14481452
}
14491453
}
14501454

1451-
private void setErrorCondition(IOCallback otherCallback, JournalTransaction jt, Throwable t) {
1455+
private void setErrorCondition(IOCallback ioCallback, JournalTransaction jt, Throwable t) {
14521456
if (jt != null) {
14531457
jt.onError(ActiveMQExceptionType.IO_ERROR.getCode(), t.getMessage());
14541458
}
14551459

1456-
if (otherCallback != null) {
1457-
otherCallback.onError(ActiveMQExceptionType.IO_ERROR.getCode(), t.getMessage());
1460+
if (ioCallback != null) {
1461+
ioCallback.onError(ActiveMQExceptionType.IO_ERROR.getCode(), t.getMessage());
14581462
}
14591463
}
14601464

artemis-server/src/main/java/org/apache/activemq/artemis/core/config/Configuration.java

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1538,9 +1538,4 @@ default String resolvePropertiesSources(String propertiesFileUrl) {
15381538
default boolean isUsingDatabasePersistence() {
15391539
return getStoreConfiguration() != null && getStoreConfiguration().getStoreType() == StoreConfiguration.StoreType.DATABASE;
15401540
}
1541-
1542-
/** Timeout applied when closing sessions or connections. */
1543-
Configuration setCloseTimeout(int timeout);
1544-
1545-
int getCloseTimeout();
15461541
}

artemis-server/src/main/java/org/apache/activemq/artemis/core/config/impl/ConfigurationImpl.java

Lines changed: 0 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -474,8 +474,6 @@ public class ConfigurationImpl implements Configuration, Serializable {
474474

475475
private boolean purgePageFolders = ActiveMQDefaultConfiguration.getPurgePageFolders();
476476

477-
private int closeTimeout = ActiveMQDefaultConfiguration.getCloseTimeout();
478-
479477
/**
480478
* Parent folder for all data folders.
481479
*/
@@ -3460,17 +3458,6 @@ public Configuration setMirrorPageTransaction(boolean ignorePageTransactions) {
34603458
return this;
34613459
}
34623460

3463-
@Override
3464-
public int getCloseTimeout() {
3465-
return closeTimeout;
3466-
}
3467-
3468-
@Override
3469-
public ConfigurationImpl setCloseTimeout(int closeTimeout) {
3470-
this.closeTimeout = closeTimeout;
3471-
return this;
3472-
}
3473-
34743461
// extend property utils with ability to auto-fill and locate from collections
34753462
// collection entries are identified by the name() property
34763463
private static class CollectionAutoFillPropertiesUtil extends PropertyUtilsBean {

artemis-server/src/main/java/org/apache/activemq/artemis/core/persistence/StorageManager.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -117,8 +117,6 @@ default SequentialFileFactory getJournalSequentialFileFactory() {
117117
*/
118118
OperationContext getContext();
119119

120-
void lineUpContext();
121-
122120
/**
123121
* It just creates an OperationContext without associating it
124122
*/

artemis-server/src/main/java/org/apache/activemq/artemis/core/persistence/impl/journal/AbstractJournalStorageManager.java

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1763,16 +1763,6 @@ private void insertPersistedKeyValuePair(final PersistedKeyValuePair keyValuePai
17631763
persistedKeyValuePairs.put(keyValuePair.getKey(), keyValuePair);
17641764
}
17651765

1766-
@Override
1767-
public void lineUpContext() {
1768-
try (ArtemisCloseable lock = closeableReadLock()) {
1769-
messageJournal.lineUpContext(getContext());
1770-
}
1771-
}
1772-
1773-
// ActiveMQComponent implementation
1774-
// ------------------------------------------------------
1775-
17761766
protected abstract void beforeStart() throws Exception;
17771767

17781768
@Override

0 commit comments

Comments
 (0)