Merge remote-tracking branch 'origin/main' into arena-get-size-boolean-param
This commit is contained in:
commit
44b0e05538
|
@ -2223,6 +2223,25 @@ ACTOR Future<Void> storageCacheServer(StorageServerInterface ssi,
|
||||||
when(ReplyPromise<KeyValueStoreType> reply = waitNext(ssi.getKeyValueStoreType.getFuture())) {
|
when(ReplyPromise<KeyValueStoreType> reply = waitNext(ssi.getKeyValueStoreType.getFuture())) {
|
||||||
ASSERT(false);
|
ASSERT(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
when(GetMappedKeyValuesRequest req = waitNext(ssi.getMappedKeyValues.getFuture())) { ASSERT(false); }
|
||||||
|
when(WaitMetricsRequest req = waitNext(ssi.waitMetrics.getFuture())) { ASSERT(false); }
|
||||||
|
when(SplitMetricsRequest req = waitNext(ssi.splitMetrics.getFuture())) { ASSERT(false); }
|
||||||
|
when(GetStorageMetricsRequest req = waitNext(ssi.getStorageMetrics.getFuture())) { ASSERT(false); }
|
||||||
|
when(ReadHotSubRangeRequest req = waitNext(ssi.getReadHotRanges.getFuture())) { ASSERT(false); }
|
||||||
|
when(SplitRangeRequest req = waitNext(ssi.getRangeSplitPoints.getFuture())) { ASSERT(false); }
|
||||||
|
when(GetKeyValuesStreamRequest req = waitNext(ssi.getKeyValuesStream.getFuture())) { ASSERT(false); }
|
||||||
|
when(ChangeFeedStreamRequest req = waitNext(ssi.changeFeedStream.getFuture())) { ASSERT(false); }
|
||||||
|
when(OverlappingChangeFeedsRequest req = waitNext(ssi.overlappingChangeFeeds.getFuture())) {
|
||||||
|
// Simulate endpoint not found so that the requester will try another endpoint
|
||||||
|
// This is a workaround to the fact that storage servers do not have an easy way to enforce this
|
||||||
|
// request goes only to other storage servers, and in simulation we manage to trigger this behavior
|
||||||
|
req.reply.sendError(broken_promise());
|
||||||
|
}
|
||||||
|
when(ChangeFeedPopRequest req = waitNext(ssi.changeFeedPop.getFuture())) { ASSERT(false); }
|
||||||
|
when(ChangeFeedVersionUpdateRequest req = waitNext(ssi.changeFeedVersionUpdate.getFuture())) {
|
||||||
|
ASSERT(false);
|
||||||
|
}
|
||||||
when(wait(actors.getResult())) {}
|
when(wait(actors.getResult())) {}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -678,6 +678,7 @@ TEST_CASE("/flow/Arena/DefaultBoostHash") {
|
||||||
|
|
||||||
TEST_CASE("/flow/Arena/Size") {
|
TEST_CASE("/flow/Arena/Size") {
|
||||||
Arena a;
|
Arena a;
|
||||||
|
int fastSize, slowSize;
|
||||||
|
|
||||||
// Size estimates are accurate unless dependencies are added to an Arena via another Arena
|
// Size estimates are accurate unless dependencies are added to an Arena via another Arena
|
||||||
// handle which points to a non-root node.
|
// handle which points to a non-root node.
|
||||||
|
@ -685,10 +686,14 @@ TEST_CASE("/flow/Arena/Size") {
|
||||||
// Note that the ASSERT argument order matters, the estimate must be calculated first as
|
// Note that the ASSERT argument order matters, the estimate must be calculated first as
|
||||||
// the full accurate calculation will update the estimate
|
// the full accurate calculation will update the estimate
|
||||||
makeString(40, a);
|
makeString(40, a);
|
||||||
ASSERT_EQ(a.getSize(FastInaccurateEstimate::True), a.getSize());
|
fastSize = a.getSize(FastInaccurateEstimate::True);
|
||||||
|
slowSize = a.getSize();
|
||||||
|
ASSERT_EQ(fastSize, slowSize);
|
||||||
|
|
||||||
makeString(700, a);
|
makeString(700, a);
|
||||||
ASSERT_EQ(a.getSize(FastInaccurateEstimate::True), a.getSize());
|
fastSize = a.getSize(FastInaccurateEstimate::True);
|
||||||
|
slowSize = a.getSize();
|
||||||
|
ASSERT_EQ(fastSize, slowSize);
|
||||||
|
|
||||||
// Copy a at a point where it points to a large block with room for block references
|
// Copy a at a point where it points to a large block with room for block references
|
||||||
Arena b = a;
|
Arena b = a;
|
||||||
|
@ -699,35 +704,51 @@ TEST_CASE("/flow/Arena/Size") {
|
||||||
|
|
||||||
makeString(1000, a);
|
makeString(1000, a);
|
||||||
makeString(1000, a);
|
makeString(1000, a);
|
||||||
ASSERT_EQ(a.getSize(FastInaccurateEstimate::True), a.getSize());
|
fastSize = a.getSize(FastInaccurateEstimate::True);
|
||||||
|
slowSize = a.getSize();
|
||||||
|
ASSERT_EQ(fastSize, slowSize);
|
||||||
|
|
||||||
Standalone<StringRef> s = makeString(500);
|
Standalone<StringRef> s = makeString(500);
|
||||||
a.dependsOn(s.arena());
|
a.dependsOn(s.arena());
|
||||||
ASSERT_EQ(a.getSize(FastInaccurateEstimate::True), a.getSize());
|
fastSize = a.getSize(FastInaccurateEstimate::True);
|
||||||
|
slowSize = a.getSize();
|
||||||
|
ASSERT_EQ(fastSize, slowSize);
|
||||||
|
|
||||||
Standalone<StringRef> s2 = makeString(500);
|
Standalone<StringRef> s2 = makeString(500);
|
||||||
a.dependsOn(s2.arena());
|
a.dependsOn(s2.arena());
|
||||||
ASSERT_EQ(a.getSize(FastInaccurateEstimate::True), a.getSize());
|
fastSize = a.getSize(FastInaccurateEstimate::True);
|
||||||
|
slowSize = a.getSize();
|
||||||
|
ASSERT_EQ(fastSize, slowSize);
|
||||||
|
|
||||||
// Add a dependency to b, which will fit in b's root and update b's size estimate
|
// Add a dependency to b, which will fit in b's root and update b's size estimate
|
||||||
Standalone<StringRef> s3 = makeString(100);
|
Standalone<StringRef> s3 = makeString(100);
|
||||||
b.dependsOn(s3.arena());
|
b.dependsOn(s3.arena());
|
||||||
ASSERT_EQ(b.getSize(FastInaccurateEstimate::True), b.getSize());
|
fastSize = b.getSize(FastInaccurateEstimate::True);
|
||||||
|
slowSize = b.getSize();
|
||||||
|
ASSERT_EQ(fastSize, slowSize);
|
||||||
|
|
||||||
// But now a's size estimate is out of date because the new reference in b's root is still
|
// But now a's size estimate is out of date because the new reference in b's root is still
|
||||||
// in a's tree
|
// in a's tree
|
||||||
ASSERT_LT(a.getSize(FastInaccurateEstimate::True), a.getSize());
|
fastSize = a.getSize(FastInaccurateEstimate::True);
|
||||||
|
slowSize = a.getSize();
|
||||||
|
ASSERT_LT(fastSize, slowSize);
|
||||||
|
|
||||||
// Now that a full size calc has been done on a, the estimate is up to date.
|
// Now that a full size calc has been done on a, the estimate is up to date.
|
||||||
ASSERT_EQ(a.getSize(FastInaccurateEstimate::True), a.getSize());
|
fastSize = a.getSize(FastInaccurateEstimate::True);
|
||||||
|
slowSize = a.getSize();
|
||||||
|
ASSERT_EQ(fastSize, slowSize);
|
||||||
|
|
||||||
// Add a dependency to c, which will NOT fit in c's root, so it will be added to a new
|
// Add a dependency to c, which will NOT fit in c's root, so it will be added to a new
|
||||||
// root for c and that root will not be in a's tree so a's size and estimate remain
|
// root for c and that root will not be in a's tree so a's size and estimate remain
|
||||||
// unchanged and the same. The size and estimate of c will also match.
|
// unchanged and the same. The size and estimate of c will also match.
|
||||||
Standalone<StringRef> s4 = makeString(100);
|
Standalone<StringRef> s4 = makeString(100);
|
||||||
c.dependsOn(s4.arena());
|
c.dependsOn(s4.arena());
|
||||||
ASSERT_EQ(c.getSize(FastInaccurateEstimate::True), c.getSize());
|
fastSize = c.getSize(FastInaccurateEstimate::True);
|
||||||
ASSERT_EQ(a.getSize(FastInaccurateEstimate::True), a.getSize());
|
slowSize = c.getSize();
|
||||||
|
ASSERT_EQ(fastSize, slowSize);
|
||||||
|
fastSize = a.getSize(FastInaccurateEstimate::True);
|
||||||
|
slowSize = a.getSize();
|
||||||
|
ASSERT_EQ(fastSize, slowSize);
|
||||||
|
|
||||||
return Void();
|
return Void();
|
||||||
}
|
}
|
||||||
|
|
|
@ -12,5 +12,5 @@ testTitle = 'Cycle'
|
||||||
testName = 'Cycle'
|
testName = 'Cycle'
|
||||||
transactionsPerSecond = 2500.0
|
transactionsPerSecond = 2500.0
|
||||||
testDuration = 10.0
|
testDuration = 10.0
|
||||||
expectedRate = 0.80
|
expectedRate = 0.01
|
||||||
keyPrefix = 'foo/'
|
keyPrefix = 'foo/'
|
||||||
|
|
Loading…
Reference in New Issue