Skip to content

Commit 48e1a4a

Browse files
authored
add zero commit process (#40)
* add zero commit process * revert format * revert format * fix feedback * remove redundant * feedback
1 parent e284ad2 commit 48e1a4a

File tree

5 files changed

+53
-8
lines changed

5 files changed

+53
-8
lines changed

src/main/java/dev/vality/liminator/converter/CurrentLimitValuesToLimitResponsesConverter.java

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package dev.vality.liminator.converter;
22

3-
import dev.vality.liminator.model.CurrentLimitValue;
43
import dev.vality.liminator.LimitResponse;
4+
import dev.vality.liminator.model.CurrentLimitValue;
55
import lombok.RequiredArgsConstructor;
66
import lombok.extern.slf4j.Slf4j;
77
import org.springframework.core.convert.converter.Converter;
@@ -34,6 +34,17 @@ private LimitResponse toLimitResponse(CurrentLimitValue value) {
3434
.setLimitId(value.getLimitId())
3535
.setLimitName(value.getLimitName())
3636
.setCommitValue(value.getCommitValue())
37-
.setTotalValue(value.getHoldValue() + value.getCommitValue());
37+
.setTotalValue(calculateTotal(value));
38+
}
39+
40+
private long calculateTotal(CurrentLimitValue value) {
41+
if (isZeroCommit(value)) {
42+
return 0;
43+
}
44+
return value.getHoldValue() + value.getCommitValue();
45+
}
46+
47+
private boolean isZeroCommit(CurrentLimitValue value) {
48+
return value.getCommitCount() > 0 && value.getCommitValue() == 0;
3849
}
3950
}

src/main/java/dev/vality/liminator/dao/impl/OperationStateHistoryDaoImpl.java

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616

1717
import static dev.vality.liminator.domain.Tables.LIMIT_DATA;
1818
import static dev.vality.liminator.domain.Tables.OPERATION_STATE_HISTORY;
19-
import static org.jooq.impl.DSL.select;
19+
import static org.jooq.impl.DSL.*;
2020

2121
@Component
2222
@RequiredArgsConstructor
@@ -112,7 +112,8 @@ public List<CurrentLimitValue> getCurrentValues(List<String> limitNames, String
112112
.or(DSL.coalesce(rollbackOps.OPERATION_VALUE, 0).notEqual(0)), zero)
113113
.otherwise(DSL.coalesce(holdOps.OPERATION_VALUE, 0).cast(Long.class))
114114
).cast(Long.class),
115-
DSL.sum(DSL.coalesce(commitOps.OPERATION_VALUE, 0).cast(Long.class))
115+
DSL.sum(DSL.coalesce(commitOps.OPERATION_VALUE, 0).cast(Long.class)),
116+
field(DSL.count(commitOps.ID))
116117
)
117118
.from(
118119
LIMIT_DATA
@@ -153,7 +154,8 @@ public List<CurrentLimitValue> getCurrentValues(List<String> limitNames, String
153154
record.value1(),
154155
record.value2(),
155156
record.value3().longValue(),
156-
record.value4().longValue()
157+
record.value4().longValue(),
158+
record.value5().intValue()
157159
)
158160
)
159161
.toList();

src/main/java/dev/vality/liminator/model/CurrentLimitValue.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,4 +11,5 @@ public class CurrentLimitValue {
1111
private String limitName;
1212
private Long holdValue;
1313
private Long commitValue;
14+
private Integer commitCount;
1415
}

src/main/java/dev/vality/liminator/service/LimitOperationsHistoryService.java

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -77,8 +77,12 @@ private List<LimitValue> checkExistedHoldOperations(LimitRequest request,
7777
operationStateHistoryDao.getHoldLimitValues(limitNames, request.getOperationId());
7878
if (limitNames.size() != existedHoldOperations.size()) {
7979
log.error("[{}] Count of existed hold operations for limits is not equal to expected (existed size: {}, " +
80-
"expected size: {}, existedHoldOperations: {}, request: {})", state.getLiteral(),
81-
existedHoldOperations.size(), existedHoldOperations, limitNames.size(), request);
80+
"expected size: {}, existedHoldOperations: {}, request: {})",
81+
state.getLiteral(),
82+
existedHoldOperations.size(),
83+
limitNames.size(),
84+
existedHoldOperations,
85+
request);
8286
throw new OperationNotFound();
8387
}
8488
return existedHoldOperations;
@@ -96,7 +100,7 @@ private void checkCommitValueCorrectness(LimitRequest request,
96100
.findAny();
97101
if (incorrectCommitValue.isPresent()) {
98102
log.error("[{}] Received incorrect commit value - hold is less than commit (existed size: {}, " +
99-
"expected size: {}, request: {})", state.getLiteral(), existedHoldOperations,
103+
"expected size: {}, request: {})", state.getLiteral(), existedHoldOperations.size(),
100104
limitNamesMap.keySet().size(), request);
101105
throw new OperationNotFound();
102106
}

src/test/java/dev/vality/liminator/service/LiminatorServiceTest.java

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -181,6 +181,33 @@ void commitLessThanHoldPart3Test() throws TException {
181181
assertEquals(-1000L, response.getTotalValue());
182182
}
183183

184+
@Test
185+
void commitWithZeroValueTest() throws TException {
186+
String limitName = "TestZeroLimitCommit";
187+
String operationId = "Op-123";
188+
LimitRequest holdRequest = new LimitRequest()
189+
.setOperationId(operationId)
190+
.setLimitChanges(List.of(new LimitChange(limitName, 500L)));
191+
liminatorService.hold(holdRequest);
192+
193+
List<LimitResponse> limitsBeforeCommit = liminatorService.getLastLimitsValues(List.of(limitName));
194+
assertNotNull(limitsBeforeCommit);
195+
LimitResponse responseBeforeCommit = limitsBeforeCommit.stream().findFirst().get();
196+
assertEquals(500L, responseBeforeCommit.getTotalValue());
197+
assertEquals(0, responseBeforeCommit.getCommitValue());
198+
199+
LimitRequest commitRequest = new LimitRequest()
200+
.setOperationId(operationId)
201+
.setLimitChanges(List.of(new LimitChange(limitName, 0L)));
202+
liminatorService.commit(commitRequest);
203+
204+
List<LimitResponse> limitsAfterCommit = liminatorService.getLastLimitsValues(List.of(limitName));
205+
assertNotNull(limitsAfterCommit);
206+
LimitResponse response = limitsAfterCommit.stream().findFirst().get();
207+
assertEquals(0L, response.getCommitValue());
208+
assertEquals(0L, response.getTotalValue());
209+
}
210+
184211
@Test
185212
void commitGrossThanHoldTest() throws TException {
186213
String limitName = "TestLimitCommit";

0 commit comments

Comments
 (0)