Skip to content

Commit ffd61de

Browse files
Do not return database locks during health check
1 parent cebe3d4 commit ffd61de

File tree

5 files changed

+7
-33
lines changed

5 files changed

+7
-33
lines changed

multiapps-controller-core/src/main/java/org/cloudfoundry/multiapps/controller/core/Messages.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,6 @@ public final class Messages {
9898
public static final String ENVIRONMENT_VARIABLE_IS_NOT_SET_USING_DEFAULT = "Environment variable \"{0}\" is not set. Using default \"{1}\"...";
9999
public static final String OPTIONAL_RESOURCE_IS_NOT_SERVICE = "Optional resource \"{0}\" it will be not created because it''s not a service";
100100
public static final String SERVICE_IS_NOT_ACTIVE = "Service \"{0}\" is inactive and will not be processed";
101-
public static final String DETECTED_INCREASED_NUMBER_OF_PROCESSES_WAITING_FOR_LOCKS_FOR_INSTANCE = "Detected increased number of processes waiting for locks: \"{0}\" for instance: \"{1}\"";
102101
public static final String DETECTED_INCREASED_NUMBER_OF_PROCESSES_WAITING_FOR_LOCKS_FOR_INSTANCE_0_GETTING_THE_LOCKS = "Detected increased number of processes waiting for locks for instance {0}. Getting the locks...";
103102

104103
public static final String INVALID_VCAP_APPLICATION = "Invalid VCAP_APPLICATION \"{0}\"";

multiapps-controller-core/src/main/java/org/cloudfoundry/multiapps/controller/core/application/health/ApplicationHealthCalculator.java

Lines changed: 0 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,6 @@
1414
import java.util.concurrent.TimeUnit;
1515
import java.util.concurrent.TimeoutException;
1616
import java.util.function.Consumer;
17-
import java.util.function.Supplier;
18-
1917
import jakarta.inject.Inject;
2018
import jakarta.inject.Named;
2119
import org.cloudfoundry.multiapps.common.SLException;
@@ -27,9 +25,7 @@
2725
import org.cloudfoundry.multiapps.controller.core.application.health.model.ImmutableApplicationHealthResult;
2826
import org.cloudfoundry.multiapps.controller.core.model.CachedObject;
2927
import org.cloudfoundry.multiapps.controller.core.util.ApplicationConfiguration;
30-
import org.cloudfoundry.multiapps.controller.core.util.ApplicationInstanceNameUtil;
3128
import org.cloudfoundry.multiapps.controller.persistence.services.DatabaseHealthService;
32-
import org.cloudfoundry.multiapps.controller.persistence.services.DatabaseMonitoringService;
3329
import org.cloudfoundry.multiapps.controller.persistence.services.FileStorage;
3430
import org.slf4j.Logger;
3531
import org.slf4j.LoggerFactory;
@@ -50,7 +46,6 @@ public class ApplicationHealthCalculator {
5046
private final FileStorage objectStoreFileStorage;
5147
private final ApplicationConfiguration applicationConfiguration;
5248
private final DatabaseHealthService databaseHealthService;
53-
private final DatabaseMonitoringService databaseMonitoringService;
5449
private final DatabaseWaitingLocksAnalyzer databaseWaitingLocksAnalyzer;
5550

5651
private final CachedObject<Boolean> objectStoreFileStorageHealthCache = new CachedObject<>(
@@ -77,12 +72,10 @@ public class ApplicationHealthCalculator {
7772
@Inject
7873
public ApplicationHealthCalculator(@Autowired(required = false) FileStorage objectStoreFileStorage,
7974
ApplicationConfiguration applicationConfiguration, DatabaseHealthService databaseHealthService,
80-
DatabaseMonitoringService databaseMonitoringService,
8175
DatabaseWaitingLocksAnalyzer databaseWaitingLocksAnalyzer) {
8276
this.objectStoreFileStorage = objectStoreFileStorage;
8377
this.applicationConfiguration = applicationConfiguration;
8478
this.databaseHealthService = databaseHealthService;
85-
this.databaseMonitoringService = databaseMonitoringService;
8679
this.databaseWaitingLocksAnalyzer = databaseWaitingLocksAnalyzer;
8780
scheduleRegularHealthUpdate();
8881
}
@@ -155,16 +148,10 @@ public ResponseEntity<ApplicationHealthResult> calculateApplicationHealth() {
155148
LOGGER.warn(
156149
MessageFormat.format(Messages.DETECTED_INCREASED_NUMBER_OF_PROCESSES_WAITING_FOR_LOCKS_FOR_INSTANCE_0_GETTING_THE_LOCKS,
157150
applicationConfiguration.getApplicationInstanceIndex()));
158-
long countOfProcessesWaitingForLocks = resilientOperationExecutor.execute(
159-
(Supplier<Long>) () -> databaseMonitoringService.getProcessesWaitingForLocks(
160-
ApplicationInstanceNameUtil.buildApplicationInstanceTemplate(applicationConfiguration)));
161-
LOGGER.warn(MessageFormat.format(Messages.DETECTED_INCREASED_NUMBER_OF_PROCESSES_WAITING_FOR_LOCKS_FOR_INSTANCE,
162-
countOfProcessesWaitingForLocks, applicationConfiguration.getApplicationInstanceIndex()));
163151
return ResponseEntity.ok(ImmutableApplicationHealthResult.builder() // TODO: Make this return 503 instead of 200 when the
164152
// detection is trustworthy
165153
.status(ApplicationHealthResult.Status.DOWN)
166154
.hasIncreasedLocks(true)
167-
.countOfProcessesWaitingForLocks(countOfProcessesWaitingForLocks)
168155
.build());
169156
}
170157
return ResponseEntity.ok(ImmutableApplicationHealthResult.builder()

multiapps-controller-core/src/main/java/org/cloudfoundry/multiapps/controller/core/application/health/database/DatabaseWaitingLocksAnalyzer.java

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,8 @@
77
import java.util.concurrent.Executors;
88
import java.util.concurrent.ScheduledExecutorService;
99
import java.util.concurrent.TimeUnit;
10-
10+
import jakarta.inject.Inject;
11+
import jakarta.inject.Named;
1112
import org.cloudfoundry.multiapps.controller.core.Messages;
1213
import org.cloudfoundry.multiapps.controller.core.model.CachedObject;
1314
import org.cloudfoundry.multiapps.controller.core.util.ApplicationConfiguration;
@@ -16,9 +17,6 @@
1617
import org.slf4j.Logger;
1718
import org.slf4j.LoggerFactory;
1819

19-
import jakarta.inject.Inject;
20-
import jakarta.inject.Named;
21-
2220
@Named
2321
public class DatabaseWaitingLocksAnalyzer {
2422

@@ -59,7 +57,8 @@ private void deleteObsoleteSamples() {
5957
}
6058

6159
private void takeLocksSample() {
62-
waitingLocksSamples.add(new CachedObject<>(databaseMonitoringService.getProcessesWaitingForLocks(ApplicationInstanceNameUtil.buildApplicationInstanceTemplate(applicationConfiguration)),
60+
waitingLocksSamples.add(new CachedObject<>(databaseMonitoringService.getProcessesWaitingForLocks(
61+
ApplicationInstanceNameUtil.buildApplicationInstanceTemplate(applicationConfiguration)),
6362
MAXIMUM_VALIDITY_OF_LOCKS_SAMPLE_IN_MINUTES));
6463
}
6564

@@ -73,10 +72,11 @@ public synchronized boolean hasIncreasedDbLocks() {
7372
double calculatedIncreasingOrEqualIndex = calculateIncreasingOrEqualIndex();
7473
boolean hasIncreasedLocks = calculatedIncreasingOrEqualIndex >= MAXIMAL_ACCEPTABLE_INCREMENTAL_LOCKS_DEVIATION_INDEX
7574
&& checkIfLastOneThirdOfSequenceHasIncreasedOrIsEqualComparedToFirstOneThird(minimumRequiredSamplesCount);
76-
if (shouldLogValues()) {
75+
if (hasIncreasedLocks || shouldLogValues()) {
7776
LOGGER.info(MessageFormat.format(Messages.VALUES_IN_INSTANCE_IN_THE_WAITING_FOR_LOCKS_SAMPLES,
7877
applicationConfiguration.getApplicationInstanceIndex(), waitingLocksSamples.stream()
79-
.map(CachedObject::get)
78+
.map(
79+
CachedObject::get)
8080
.toList()));
8181
}
8282
return hasIncreasedLocks;

multiapps-controller-core/src/main/java/org/cloudfoundry/multiapps/controller/core/application/health/model/ApplicationHealthResult.java

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22

33
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
44
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
5-
import org.cloudfoundry.multiapps.controller.client.facade.Nullable;
65
import org.immutables.value.Value;
76

87
@Value.Immutable
@@ -12,9 +11,6 @@ public interface ApplicationHealthResult {
1211

1312
Status getStatus();
1413

15-
@Nullable
16-
Long countOfProcessesWaitingForLocks();
17-
1814
Boolean hasIncreasedLocks();
1915

2016
enum Status {

multiapps-controller-core/src/test/java/org/cloudfoundry/multiapps/controller/core/application/health/ApplicationHealthCalculatorTest.java

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66
import org.cloudfoundry.multiapps.controller.core.application.health.model.ApplicationHealthResult;
77
import org.cloudfoundry.multiapps.controller.core.util.ApplicationConfiguration;
88
import org.cloudfoundry.multiapps.controller.persistence.services.DatabaseHealthService;
9-
import org.cloudfoundry.multiapps.controller.persistence.services.DatabaseMonitoringService;
109
import org.cloudfoundry.multiapps.controller.persistence.services.JCloudsObjectStoreFileStorage;
1110
import org.junit.jupiter.api.BeforeEach;
1211
import org.junit.jupiter.api.Test;
@@ -15,7 +14,6 @@
1514
import org.mockito.MockitoAnnotations;
1615
import org.springframework.http.HttpStatus;
1716
import org.springframework.http.ResponseEntity;
18-
1917
import static org.junit.jupiter.api.Assertions.assertEquals;
2018
import static org.junit.jupiter.api.Assertions.assertFalse;
2119
import static org.junit.jupiter.api.Assertions.assertTrue;
@@ -29,8 +27,6 @@ class ApplicationHealthCalculatorTest {
2927
@Mock
3028
private DatabaseHealthService databaseHealthService;
3129
@Mock
32-
private DatabaseMonitoringService databaseMonitoringService;
33-
@Mock
3430
private DatabaseWaitingLocksAnalyzer databaseWaitingLocksAnalyzer;
3531

3632
private ApplicationHealthCalculator applicationHealthCalculator;
@@ -44,7 +40,6 @@ void setUp() throws Exception {
4440
applicationHealthCalculator = new ApplicationHealthCalculatorMock(jCloudsObjectStoreFileStorage,
4541
applicationConfiguration,
4642
databaseHealthService,
47-
databaseMonitoringService,
4843
databaseWaitingLocksAnalyzer);
4944
}
5045

@@ -105,7 +100,6 @@ void testSuccessfulUpdateWithMissingObjectStore() {
105100
applicationHealthCalculator = new ApplicationHealthCalculatorMock(null,
106101
applicationConfiguration,
107102
databaseHealthService,
108-
databaseMonitoringService,
109103
databaseWaitingLocksAnalyzer);
110104
applicationHealthCalculator.updateHealthStatus();
111105
ResponseEntity<ApplicationHealthResult> applicationHealthResultResponseEntity = applicationHealthCalculator.calculateApplicationHealth();
@@ -120,12 +114,10 @@ private static class ApplicationHealthCalculatorMock extends ApplicationHealthCa
120114
public ApplicationHealthCalculatorMock(JCloudsObjectStoreFileStorage JCloudsObjectStoreFileStorage,
121115
ApplicationConfiguration applicationConfiguration,
122116
DatabaseHealthService databaseHealthService,
123-
DatabaseMonitoringService databaseMonitoringService,
124117
DatabaseWaitingLocksAnalyzer databaseWaitingLocksAnalyzer) {
125118
super(JCloudsObjectStoreFileStorage,
126119
applicationConfiguration,
127120
databaseHealthService,
128-
databaseMonitoringService,
129121
databaseWaitingLocksAnalyzer);
130122
}
131123

0 commit comments

Comments
 (0)