Skip to content

Commit

Permalink
Configure EclipseStore to persist transient fields
Browse files Browse the repository at this point in the history
  • Loading branch information
emerkle826 committed Mar 25, 2024
1 parent 57a03f1 commit 19bdc29
Show file tree
Hide file tree
Showing 5 changed files with 29 additions and 27 deletions.
2 changes: 1 addition & 1 deletion src/server/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@
<docker.directory>src/main/docker</docker.directory>
<timestamp>${maven.build.timestamp}</timestamp>
<maven.build.timestamp.format>yyyy-MM-dd HH:mm:ss</maven.build.timestamp.format>
<eclipsestore.version>1.2.0</eclipsestore.version>
<eclipsestore.version>1.3.1</eclipsestore.version>

<!-- Cucumber Scenario Outline Examples listing released versions to test db migration against -->
<!-- anything added here must first be added as a artifact in build/plugins/plugins@maven-dependency-plugin -->
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,6 @@
import java.util.Objects;
import java.util.Optional;
import java.util.Set;
import java.util.stream.Collectors;

import com.google.common.base.Preconditions;

Expand Down Expand Up @@ -168,7 +167,7 @@ public Builder withPartitioner(String partitioner) {

public Builder withSeedHosts(Set<String> seedHosts) {
Preconditions.checkArgument(!seedHosts.isEmpty());
this.seedHosts = seedHosts.stream().collect(Collectors.toSet());
this.seedHosts = seedHosts;
return this;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@
import io.cassandrareaper.storage.snapshot.MemorySnapshotDao;

import java.nio.file.Paths;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.LinkedHashMap;
Expand All @@ -50,6 +51,7 @@
import java.util.Optional;
import java.util.UUID;

import org.eclipse.serializer.persistence.types.PersistenceFieldEvaluator;
import org.eclipse.store.storage.embedded.types.EmbeddedStorage;
import org.eclipse.store.storage.embedded.types.EmbeddedStorageManager;
import org.slf4j.Logger;
Expand All @@ -62,6 +64,12 @@
public final class MemoryStorageFacade implements IStorageDao {

private static final Logger LOG = LoggerFactory.getLogger(MemoryStorageFacade.class);

/** Field evaluator to find transient attributes. This is needed to deal with persisting Guava collections objects
* that sometimes use the transient keyword for some of their implementation's backing stores**/
private static final PersistenceFieldEvaluator TRANSIENT_FIELD_EVALUATOR =
(clazz, field) -> !field.getName().startsWith("_");

private final EmbeddedStorageManager embeddedStorage;
private final MemoryStorageRoot memoryStorageRoot;
private final MemoryRepairSegmentDao memRepairSegment = new MemoryRepairSegmentDao(this);
Expand All @@ -82,7 +90,13 @@ public final class MemoryStorageFacade implements IStorageDao {

public MemoryStorageFacade(String persistenceStoragePath) {
LOG.info("Using memory storage backend. Persistence storage path: {}", persistenceStoragePath);
this.embeddedStorage = EmbeddedStorage.start(Paths.get(persistenceStoragePath));
this.embeddedStorage = EmbeddedStorage.Foundation(Paths.get(persistenceStoragePath))
.onConnectionFoundation(
c -> {
c.setFieldEvaluatorPersistable(TRANSIENT_FIELD_EVALUATOR);
}
).createEmbeddedStorageManager();
this.embeddedStorage.start();
if (this.embeddedStorage.root() == null) {
LOG.info("Creating new data storage");
this.memoryStorageRoot = new MemoryStorageRoot();
Expand All @@ -96,7 +110,10 @@ public MemoryStorageFacade(String persistenceStoragePath) {
Cluster cluster = entry.getValue();
LOG.info("Loaded cluster: {} / seeds: {}", cluster.getName(), cluster.getSeedHosts());
});
LOG.info("MemoryStorageRoot: {}", this.memoryStorageRoot);
this.memoryStorageRoot.getRepairSegments().entrySet().stream().forEach(entry -> {
LOG.info("RepairSegment Token Ranges: {}",
Arrays.toString(entry.getValue().getTokenRange().getTokenRanges().toArray()));
});
}
}

Expand Down Expand Up @@ -218,6 +235,7 @@ public Collection<RepairRun> getRepairRuns() {
}

public RepairRun addRepairRun(RepairRun run) {
LOG.info("Adding RepairRun ID: {}", run.getId());
RepairRun newRun = this.memoryStorageRoot.addRepairRun(run);
this.persist(this.memoryStorageRoot.getRepairRuns());
return newRun;
Expand Down Expand Up @@ -260,13 +278,15 @@ public RepairUnit getRepairUnitByKey(RepairUnit.Builder key) {

// RepairSegment operations
public RepairSegment addRepairSegment(RepairSegment segment) {
LOG.info("Adding RepairSegment Token Ranges: {}",
Arrays.toString(segment.getTokenRange().getTokenRanges().toArray()));
final RepairSegment newSegment = this.memoryStorageRoot.addRepairSegment(segment);
// also add the segment by RunId
UUID repairSegmentRunId = segment.getRunId();
LinkedHashMap<UUID, RepairSegment> segmentsByRunId =
this.memoryStorageRoot.getRepairSegmentsByRunId().get(repairSegmentRunId);
if (segmentsByRunId == null) {
segmentsByRunId = new LinkedHashMap<UUID, RepairSegment>();
segmentsByRunId = new LinkedHashMap<>();
this.memoryStorageRoot.getRepairSegmentsByRunId().put(repairSegmentRunId, segmentsByRunId);
}
segmentsByRunId.put(segment.getId(), segment);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,6 @@
import io.cassandrareaper.core.RepairSegment;
import io.cassandrareaper.core.RepairUnit;

import java.util.Arrays;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.UUID;
Expand Down Expand Up @@ -152,26 +151,10 @@ public Map<UUID, DiagEventSubscription> getSubscriptionsById() {
return this.subscriptionsById;
}

@Override
public String toString() {
public static String toString(RepairSegment segment) {
StringBuilder buf = new StringBuilder();
buf.append("Clusters: [");
clusters.entrySet().stream().forEach(entry -> {
Cluster cluster = entry.getValue();
buf.append(cluster.getName()).append("(").append(Arrays.toString(cluster.getSeedHosts().toArray())).append("),");
});
buf.append("], Repair Schedules: [");
repairSchedules.entrySet().stream().forEach(entry -> {
RepairSchedule schedule = entry.getValue();
buf.append(schedule.toPrintableString()).append(",");
});
buf.append("], Repair Runs: [");
repairRuns.entrySet().stream().forEach(entry -> {
RepairRun run = entry.getValue();
buf.append(run).append("(State: ").append(run.getRunState()).append(", Tables: ")
.append(Arrays.toString(run.getTables().toArray())).append("),");
});
buf.append("]");
buf.append("RepairSegment ID: ").append(segment.getId())
.append(", Token range: ").append(segment.getTokenRange());
return buf.toString();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,7 @@ public boolean updateRepairSegmentUnsafe(RepairSegment newRepairSegment) {

@Override
public Optional<RepairSegment> getRepairSegment(UUID runId, UUID segmentId) {
return Optional.ofNullable(memoryStorageFacade.getRepairSegmentById(runId));
return Optional.ofNullable(memoryStorageFacade.getRepairSegmentById(segmentId));
}

@Override
Expand Down

0 comments on commit 19bdc29

Please sign in to comment.