[
https://issues.apache.org/jira/browse/OAK-6912?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16242237#comment-16242237
]
Francesco Mari commented on OAK-6912:
-------------------------------------
Nevertheless, I still think that the {{SegmentCache}} should not be implemented
the way it is. Instead, something like the following should be done.
{noformat}
@Nonnull
public Segment getSegment(@Nonnull final SegmentId id, @Nonnull final
Callable<Segment> loader) throws ExecutionException {
// Load bulk segment directly without putting it in cache
try {
if (id.isBulkSegmentId()) {
return loader.call();
}
} catch (Exception e) {
throw new ExecutionException(e);
}
Segment segment = cache.get(id, newStatsUpdateLoader(loader));
id.loaded(segment);
return segment;
}
private Callable<Segment> newStatsUpdateLoader(Callable<Segment> loader) {
return () -> {
try {
long t0 = System.nanoTime();
Segment segment = loader.call();
stats.loadSuccessCount.incrementAndGet();
stats.loadTime.addAndGet(System.nanoTime() - t0);
stats.missCount.incrementAndGet();
return segment;
} catch (Exception e) {
stats.loadExceptionCount.incrementAndGet();
throw e;
}
};
}
{noformat}
> Cold standby performance regression due to segment caching
> ----------------------------------------------------------
>
> Key: OAK-6912
> URL: https://issues.apache.org/jira/browse/OAK-6912
> Project: Jackrabbit Oak
> Issue Type: Bug
> Components: segment-tar, tarmk-standby
> Affects Versions: 1.7.0
> Reporter: Andrei Dulceanu
> Assignee: Andrei Dulceanu
> Labels: cold-standby, performance, scalability
> Fix For: 1.8, 1.7.12
>
>
> The changes to the segment cache introduced in r1793527 [0] introduced a
> performance regression on the primary for the case in which a standby is
> attached to it. Below a benchmark duration comparison between primary w/o and
> w/ standby for r1793527 (after the segment cache changes) and r1793526
> (before the changes) :
> |Oak 1.6 r1793527 (20170502)|{noformat}
> # BasicWriteTest C min 10% 50% 90% max
> N
> Oak-Segment-Tar 1 19 21 22 26 160
> 2491
> Oak-Segment-Tar-DS 1 56 59 63 70 181
> 919
> Oak-Segment-Tar-Cold(Shared DS) 1 58 66 159 177 372
> 302
> {noformat}|
> |Oak 1.6 r1793526 (20170502)|{noformat}
> # BasicWriteTest C min 10% 50% 90% max
> N
> Oak-Segment-Tar 1 19 21 22 25 52
> 2584
> Oak-Segment-Tar-DS 1 56 60 63 69 158
> 925
> Oak-Segment-Tar-Cold(Shared DS) 1 57 60 64 70 122
> 915
> {noformat}|
> [0]
> https://github.com/apache/jackrabbit-oak/commit/efafa4e1710621b7f3b8e92d0b2681669185fcd4
--
This message was sent by Atlassian JIRA
(v6.4.14#64029)