Skip to content

Commit 7c1d665

Browse files
Do not return database locks during health check
1 parent 5ab073c commit 7c1d665

File tree

5 files changed

+10
-35
lines changed

5 files changed

+10
-35
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 & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +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;
1817
import jakarta.inject.Inject;
1918
import jakarta.inject.Named;
2019
import org.cloudfoundry.multiapps.common.SLException;
@@ -26,9 +25,7 @@
2625
import org.cloudfoundry.multiapps.controller.core.application.health.model.ImmutableApplicationHealthResult;
2726
import org.cloudfoundry.multiapps.controller.core.model.CachedObject;
2827
import org.cloudfoundry.multiapps.controller.core.util.ApplicationConfiguration;
29-
import org.cloudfoundry.multiapps.controller.core.util.ApplicationInstanceNameUtil;
3028
import org.cloudfoundry.multiapps.controller.persistence.services.DatabaseHealthService;
31-
import org.cloudfoundry.multiapps.controller.persistence.services.DatabaseMonitoringService;
3229
import org.cloudfoundry.multiapps.controller.persistence.services.ObjectStoreFileStorage;
3330
import org.slf4j.Logger;
3431
import org.slf4j.LoggerFactory;
@@ -49,7 +46,6 @@ public class ApplicationHealthCalculator {
4946
private final ObjectStoreFileStorage objectStoreFileStorage;
5047
private final ApplicationConfiguration applicationConfiguration;
5148
private final DatabaseHealthService databaseHealthService;
52-
private final DatabaseMonitoringService databaseMonitoringService;
5349
private final DatabaseWaitingLocksAnalyzer databaseWaitingLocksAnalyzer;
5450

5551
private final CachedObject<Boolean> objectStoreFileStorageHealthCache = new CachedObject<>(
@@ -76,12 +72,10 @@ public class ApplicationHealthCalculator {
7672
@Inject
7773
public ApplicationHealthCalculator(@Autowired(required = false) ObjectStoreFileStorage objectStoreFileStorage,
7874
ApplicationConfiguration applicationConfiguration, DatabaseHealthService databaseHealthService,
79-
DatabaseMonitoringService databaseMonitoringService,
8075
DatabaseWaitingLocksAnalyzer databaseWaitingLocksAnalyzer) {
8176
this.objectStoreFileStorage = objectStoreFileStorage;
8277
this.applicationConfiguration = applicationConfiguration;
8378
this.databaseHealthService = databaseHealthService;
84-
this.databaseMonitoringService = databaseMonitoringService;
8579
this.databaseWaitingLocksAnalyzer = databaseWaitingLocksAnalyzer;
8680
scheduleRegularHealthUpdate();
8781
}
@@ -154,16 +148,10 @@ public ResponseEntity<ApplicationHealthResult> calculateApplicationHealth() {
154148
LOGGER.warn(
155149
MessageFormat.format(Messages.DETECTED_INCREASED_NUMBER_OF_PROCESSES_WAITING_FOR_LOCKS_FOR_INSTANCE_0_GETTING_THE_LOCKS,
156150
applicationConfiguration.getApplicationInstanceIndex()));
157-
long countOfProcessesWaitingForLocks = resilientOperationExecutor.execute(
158-
(Supplier<Long>) () -> databaseMonitoringService.getProcessesWaitingForLocks(
159-
ApplicationInstanceNameUtil.buildApplicationInstanceTemplate(applicationConfiguration)));
160-
LOGGER.warn(MessageFormat.format(Messages.DETECTED_INCREASED_NUMBER_OF_PROCESSES_WAITING_FOR_LOCKS_FOR_INSTANCE,
161-
countOfProcessesWaitingForLocks, applicationConfiguration.getApplicationInstanceIndex()));
162151
return ResponseEntity.ok(ImmutableApplicationHealthResult.builder() // TODO: Make this return 503 instead of 200 when the
163152
// detection is trustworthy
164153
.status(ApplicationHealthResult.Status.DOWN)
165154
.hasIncreasedLocks(true)
166-
.countOfProcessesWaitingForLocks(countOfProcessesWaitingForLocks)
167155
.build());
168156
}
169157
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: 3 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,11 @@
11
package org.cloudfoundry.multiapps.controller.core.application.health;
22

3-
import static org.junit.jupiter.api.Assertions.assertEquals;
4-
import static org.junit.jupiter.api.Assertions.assertFalse;
5-
import static org.junit.jupiter.api.Assertions.assertTrue;
6-
73
import org.cloudfoundry.multiapps.common.SLException;
84
import org.cloudfoundry.multiapps.controller.client.util.ResilientOperationExecutor;
95
import org.cloudfoundry.multiapps.controller.core.application.health.database.DatabaseWaitingLocksAnalyzer;
106
import org.cloudfoundry.multiapps.controller.core.application.health.model.ApplicationHealthResult;
117
import org.cloudfoundry.multiapps.controller.core.util.ApplicationConfiguration;
128
import org.cloudfoundry.multiapps.controller.persistence.services.DatabaseHealthService;
13-
import org.cloudfoundry.multiapps.controller.persistence.services.DatabaseMonitoringService;
149
import org.cloudfoundry.multiapps.controller.persistence.services.ObjectStoreFileStorage;
1510
import org.junit.jupiter.api.BeforeEach;
1611
import org.junit.jupiter.api.Test;
@@ -19,6 +14,9 @@
1914
import org.mockito.MockitoAnnotations;
2015
import org.springframework.http.HttpStatus;
2116
import org.springframework.http.ResponseEntity;
17+
import static org.junit.jupiter.api.Assertions.assertEquals;
18+
import static org.junit.jupiter.api.Assertions.assertFalse;
19+
import static org.junit.jupiter.api.Assertions.assertTrue;
2220

2321
class ApplicationHealthCalculatorTest {
2422

@@ -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(objectStoreFileStorage,
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(ObjectStoreFileStorage objectStoreFileStorage,
121115
ApplicationConfiguration applicationConfiguration,
122116
DatabaseHealthService databaseHealthService,
123-
DatabaseMonitoringService databaseMonitoringService,
124117
DatabaseWaitingLocksAnalyzer databaseWaitingLocksAnalyzer) {
125118
super(objectStoreFileStorage,
126119
applicationConfiguration,
127120
databaseHealthService,
128-
databaseMonitoringService,
129121
databaseWaitingLocksAnalyzer);
130122
}
131123

0 commit comments

Comments
 (0)