Java源码示例:io.atomix.storage.StorageLevel

示例1
public MetaStore(RaftStorage storage, Serializer serializer) {
  this.serializer = checkNotNull(serializer, "serializer cannot be null");

  if (!(storage.directory().isDirectory() || storage.directory().mkdirs())) {
    throw new IllegalArgumentException(String.format("Can't create storage directory [%s].", storage.directory()));
  }

  // Note that for raft safety, irrespective of the storage level, <term, vote> metadata is always persisted on disk.
  File metaFile = new File(storage.directory(), String.format("%s.meta", storage.prefix()));
  metadataBuffer = FileBuffer.allocate(metaFile, 12);

  if (storage.storageLevel() == StorageLevel.MEMORY) {
    configurationBuffer = HeapBuffer.allocate(32);
  } else {
    File confFile = new File(storage.directory(), String.format("%s.conf", storage.prefix()));
    configurationBuffer = FileBuffer.allocate(confFile, 32);
  }
}
 
示例2
/**
 * Creates a Raft server.
 */
private RaftServer createServer(RaftMember member) {
  RaftServerProtocol protocol;
  if (USE_NETTY) {
    Address address = Address.from(++port);
    MessagingService messagingManager = new NettyMessagingService("test", address, new MessagingConfig()).start().join();
    messagingServices.add(messagingManager);
    addressMap.put(member.memberId(), address);
    protocol = new RaftServerMessagingProtocol(messagingManager, PROTOCOL_SERIALIZER, addressMap::get);
  } else {
    protocol = protocolFactory.newServerProtocol(member.memberId());
  }

  RaftServer.Builder builder = RaftServer.builder(member.memberId())
      .withProtocol(protocol)
      .withStorage(RaftStorage.builder()
          .withStorageLevel(StorageLevel.DISK)
          .withDirectory(new File(String.format("target/fuzz-logs/%s", member.memberId())))
          .withNamespace(STORAGE_NAMESPACE)
          .withMaxSegmentSize(1024 * 1024)
          .build());

  RaftServer server = builder.build();
  servers.add(server);
  return server;
}
 
示例3
public SegmentedJournal(
    String name,
    StorageLevel storageLevel,
    File directory,
    Namespace namespace,
    int maxSegmentSize,
    int maxEntrySize,
    int maxEntriesPerSegment,
    double indexDensity,
    boolean flushOnCommit) {
  this.name = checkNotNull(name, "name cannot be null");
  this.storageLevel = checkNotNull(storageLevel, "storageLevel cannot be null");
  this.directory = checkNotNull(directory, "directory cannot be null");
  this.namespace = checkNotNull(namespace, "namespace cannot be null");
  this.maxSegmentSize = maxSegmentSize;
  this.maxEntrySize = maxEntrySize;
  this.maxEntriesPerSegment = maxEntriesPerSegment;
  this.indexDensity = indexDensity;
  this.flushOnCommit = flushOnCommit;
  open();
  this.writer = openWriter();
}
 
示例4
@Override
public Namespace namespace() {
  return Namespace.builder()
      .nextId(Namespaces.BEGIN_USER_CUSTOM_ID + 100)
      .register(RaftPartitionGroupConfig.class)
      .register(RaftStorageConfig.class)
      .register(RaftCompactionConfig.class)
      .register(StorageLevel.class)
      .build();
}
 
示例5
/**
 * Returns a boolean indicating whether the node is running out of memory.
 */
private boolean isRunningOutOfMemory() {
  StorageLevel level = raft.getStorage().storageLevel();
  if (level == StorageLevel.MEMORY || level == StorageLevel.MAPPED) {
    long freeMemory = raft.getStorage().statistics().getFreeMemory();
    long totalMemory = raft.getStorage().statistics().getTotalMemory();
    if (freeMemory > 0 && totalMemory > 0) {
      return freeMemory / (double) totalMemory < raft.getStorage().freeMemoryBuffer();
    }
  }
  return false;
}
 
示例6
private RaftStorage(
    String prefix,
    StorageLevel storageLevel,
    File directory,
    Namespace namespace,
    int maxSegmentSize,
    int maxEntrySize,
    int maxEntriesPerSegment,
    boolean dynamicCompaction,
    double freeDiskBuffer,
    double freeMemoryBuffer,
    boolean flushOnCommit,
    boolean retainStaleSnapshots) {
  this.prefix = prefix;
  this.storageLevel = storageLevel;
  this.directory = directory;
  this.namespace = namespace;
  this.maxSegmentSize = maxSegmentSize;
  this.maxEntrySize = maxEntrySize;
  this.maxEntriesPerSegment = maxEntriesPerSegment;
  this.dynamicCompaction = dynamicCompaction;
  this.freeDiskBuffer = freeDiskBuffer;
  this.freeMemoryBuffer = freeMemoryBuffer;
  this.flushOnCommit = flushOnCommit;
  this.retainStaleSnapshots = retainStaleSnapshots;
  this.statistics = new StorageStatistics(directory);
  directory.mkdirs();
}
 
示例7
/**
 * Opens the snapshot manager.
 */
private void open() {
  // load persisted snapshots only if storage level is persistent
  if (storage.storageLevel() != StorageLevel.MEMORY) {
    for (Snapshot snapshot : loadSnapshots()) {
      completeSnapshot(snapshot);
    }
  }
}
 
示例8
/**
 * Creates a new snapshot.
 *
 * @param index     The snapshot index.
 * @param timestamp The snapshot timestamp.
 * @return The snapshot.
 */
public Snapshot newSnapshot(long index, WallClockTimestamp timestamp) {
  SnapshotDescriptor descriptor = SnapshotDescriptor.builder()
      .withIndex(index)
      .withTimestamp(timestamp.unixTimestamp())
      .build();

  if (storage.storageLevel() == StorageLevel.MEMORY) {
    return createMemorySnapshot(descriptor);
  } else {
    return createDiskSnapshot(descriptor);
  }
}
 
示例9
private RaftStorage createStorage(MemberId memberId, Function<RaftStorage.Builder, RaftStorage.Builder> configurator) {
  final RaftStorage.Builder defaults =
      RaftStorage.builder()
          .withStorageLevel(StorageLevel.DISK)
          .withDirectory(new File(String.format("target/test-logs/%s", memberId)))
          .withMaxEntriesPerSegment(10)
          .withMaxSegmentSize(1024 * 10)
          .withNamespace(NAMESPACE);
  return configurator.apply(defaults).build();
}
 
示例10
/**
 * Returns a new snapshot store.
 */
protected SnapshotStore createSnapshotStore() {
  RaftStorage storage = RaftStorage.builder()
      .withPrefix("test")
      .withStorageLevel(StorageLevel.MEMORY)
      .build();
  return new SnapshotStore(storage);
}
 
示例11
/**
 * Returns a new snapshot store.
 */
protected SnapshotStore createSnapshotStore() {
  RaftStorage storage = RaftStorage.builder()
      .withPrefix("test")
      .withDirectory(new File(String.format("target/test-logs/%s", testId)))
      .withStorageLevel(StorageLevel.DISK)
      .build();
  return new SnapshotStore(storage);
}
 
示例12
@Override
public Namespace namespace() {
  return Namespace.builder()
      .nextId(Namespaces.BEGIN_USER_CUSTOM_ID + 300)
      .register(LogPartitionGroupConfig.class)
      .register(LogStorageConfig.class)
      .register(LogCompactionConfig.class)
      .register(MemorySize.class)
      .register(StorageLevel.class)
      .build();
}
 
示例13
public JournalSegment(
    JournalSegmentFile file,
    JournalSegmentDescriptor descriptor,
    StorageLevel storageLevel,
    int maxEntrySize,
    double indexDensity,
    Namespace namespace) {
  this.file = file;
  this.descriptor = descriptor;
  this.storageLevel = storageLevel;
  this.maxEntrySize = maxEntrySize;
  this.index = new SparseJournalIndex(indexDensity);
  this.namespace = namespace;
  this.writer = new MappableJournalSegmentWriter<>(openChannel(file.file()), this, maxEntrySize, index, namespace);
}
 
示例14
/**
 * Maps the log segment into memory.
 */
private void map() {
  if (storageLevel == StorageLevel.MAPPED) {
    MappedByteBuffer buffer = writer.map();
    readers.forEach(reader -> reader.map(buffer));
  }
}
 
示例15
/**
 * Unmaps the log segment from memory.
 */
private void unmap() {
  if (storageLevel == StorageLevel.MAPPED) {
    writer.unmap();
    readers.forEach(reader -> reader.unmap());
  }
}
 
示例16
/**
 * Creates a Raft server.
 */
private RaftServer createServer(Member member, List<Node> members) {
  RaftServerProtocol protocol;
  ManagedMessagingService messagingService;
  if (USE_NETTY) {
    messagingService = (ManagedMessagingService) new NettyMessagingService("test", member.address(), new MessagingConfig())
        .start()
        .join();
    messagingServices.add(messagingService);
    protocol = new RaftServerMessagingProtocol(messagingService, PROTOCOL_SERIALIZER, addressMap::get);
  } else {
    protocol = protocolFactory.newServerProtocol(member.id());
  }

  BootstrapService bootstrapService = new BootstrapService() {
    @Override
    public MessagingService getMessagingService() {
      return messagingService;
    }

    @Override
    public UnicastService getUnicastService() {
      return new UnicastServiceAdapter();
    }

    @Override
    public BroadcastService getBroadcastService() {
      return new BroadcastServiceAdapter();
    }
  };

  RaftServer.Builder builder = RaftServer.builder(member.id())
      .withProtocol(protocol)
      .withThreadModel(ThreadModel.SHARED_THREAD_POOL)
      .withMembershipService(new DefaultClusterMembershipService(
          member,
          Version.from("1.0.0"),
          new DefaultNodeDiscoveryService(bootstrapService, member, new BootstrapDiscoveryProvider(members)),
          bootstrapService,
          new HeartbeatMembershipProtocol(new HeartbeatMembershipProtocolConfig())))
      .withStorage(RaftStorage.builder()
          .withStorageLevel(StorageLevel.DISK)
          .withDirectory(new File(String.format("target/perf-logs/%s", member.id())))
          .withNamespace(STORAGE_NAMESPACE)
          .withMaxSegmentSize(1024 * 1024 * 64)
          .withDynamicCompaction()
          .withFlushOnCommit(false)
          .build());

  RaftServer server = builder.build();
  servers.add(server);
  return server;
}
 
示例17
@Override
protected StorageLevel storageLevel() {
  return StorageLevel.DISK;
}
 
示例18
@Override
protected StorageLevel storageLevel() {
  return StorageLevel.MAPPED;
}
 
示例19
@Override
protected StorageLevel storageLevel() {
  return StorageLevel.MEMORY;
}
 
示例20
/**
 * Returns the partition storage level.
 *
 * @return the partition storage level
 */
public StorageLevel getLevel() {
  return level;
}
 
示例21
/**
 * Sets the partition storage level.
 *
 * @param storageLevel the partition storage level
 * @return the Raft partition group configuration
 */
public RaftStorageConfig setLevel(StorageLevel storageLevel) {
  this.level = checkNotNull(storageLevel);
  return this;
}
 
示例22
/**
 * Sets the storage level.
 *
 * @param storageLevel the storage level
 * @return the Raft partition group builder
 */
public Builder withStorageLevel(StorageLevel storageLevel) {
  config.getStorageConfig().setLevel(storageLevel);
  return this;
}
 
示例23
/**
 * Sets the log storage level, returning the builder for method chaining.
 * <p>
 * The storage level indicates how individual entries should be persisted in the journal.
 *
 * @param storageLevel The log storage level.
 * @return The storage builder.
 */
public Builder withStorageLevel(StorageLevel storageLevel) {
  journalBuilder.withStorageLevel(storageLevel);
  return this;
}
 
示例24
/**
 * Returns the storage level.
 * <p>
 * The storage level dictates how entries within individual log {@link RaftLog}s should be stored.
 *
 * @return The storage level.
 */
public StorageLevel storageLevel() {
  return storageLevel;
}
 
示例25
/**
 * Sets the log storage level, returning the builder for method chaining.
 * <p>
 * The storage level indicates how individual {@link RaftLogEntry entries}
 * should be persisted in the log.
 *
 * @param storageLevel The log storage level.
 * @return The storage builder.
 */
public Builder withStorageLevel(StorageLevel storageLevel) {
  this.storageLevel = checkNotNull(storageLevel, "storageLevel");
  return this;
}
 
示例26
/**
 * Sets the log storage level, returning the builder for method chaining.
 * <p>
 * The storage level indicates how individual entries should be persisted in the journal.
 *
 * @param storageLevel The log storage level.
 * @return The storage builder.
 */
public Builder withStorageLevel(StorageLevel storageLevel) {
  this.storageLevel = checkNotNull(storageLevel, "storageLevel cannot be null");
  return this;
}
 
示例27
/**
 * Sets the storage level.
 *
 * @param storageLevel the storage level
 * @return the Raft partition group builder
 */
public Builder withStorageLevel(StorageLevel storageLevel) {
  config.getStorageConfig().setLevel(storageLevel);
  return this;
}
 
示例28
/**
 * Returns the partition storage level.
 *
 * @return the partition storage level
 */
public StorageLevel getLevel() {
  return level;
}
 
示例29
/**
 * Sets the partition storage level.
 *
 * @param storageLevel the partition storage level
 * @return the log partition group configuration
 */
public LogStorageConfig setLevel(StorageLevel storageLevel) {
  this.level = checkNotNull(storageLevel);
  return this;
}
 
示例30
/**
 * Returns the storage level.
 * <p>
 * The storage level dictates how entries within individual journal segments should be stored.
 *
 * @return The storage level.
 */
public StorageLevel storageLevel() {
  return storageLevel;
}