gpt4 book ai didi

io.atomix.utils.time.WallClockTimestamp类的使用及代码示例

转载 作者:知者 更新时间:2024-03-22 09:09:05 27 4
gpt4 key购买 nike

本文整理了Java中io.atomix.utils.time.WallClockTimestamp类的一些代码示例,展示了WallClockTimestamp类的具体用法。这些代码示例主要来源于Github/Stackoverflow/Maven等平台,是从一些精选项目中提取出来的代码,具有较强的参考意义,能在一定程度帮忙到你。WallClockTimestamp类的具体详情如下:
包路径:io.atomix.utils.time.WallClockTimestamp
类名称:WallClockTimestamp

WallClockTimestamp介绍

[英]A Timestamp that derives its value from the prevailing wallclock time on the controller where it is generated.
[中]一种时间戳,该时间戳的值来自于生成该时间的控制器上的主要挂钟时间。

代码示例

代码示例来源:origin: atomix/atomix

@Override
 public Timestamp get(Object entry) {
  return new WallClockTimestamp();
 }
}

代码示例来源:origin: atomix/atomix

@Override
public void tick(WallClockTimestamp timestamp) {
 long unixTimestamp = timestamp.unixTimestamp();
 this.operationType = OperationType.COMMAND;
 if (!scheduledTasks.isEmpty()) {
  // Iterate through scheduled tasks until we reach a task that has not met its scheduled time.
  // The tasks list is sorted by time on insertion.
  Iterator<ScheduledTask> iterator = scheduledTasks.iterator();
  while (iterator.hasNext()) {
   ScheduledTask task = iterator.next();
   if (task.isRunnable(unixTimestamp)) {
    this.timestamp = task.time;
    this.operationType = OperationType.COMMAND;
    log.trace("Executing scheduled task {}", task);
    task.execute();
    complete.add(task);
    iterator.remove();
   } else {
    break;
   }
  }
  // Iterate through tasks that were completed and reschedule them.
  for (ScheduledTask task : complete) {
   task.reschedule(this.timestamp);
  }
  complete.clear();
 }
}

代码示例来源:origin: atomix/atomix

@Override
 public WallClockTimestamp getTime() {
  return WallClockTimestamp.from(currentTimestamp);
 }
};

代码示例来源:origin: atomix/atomix

protected void addRegistration(Registration registration) {
 if (registrations.stream().noneMatch(r -> Arrays.equals(registration.id(), r.id()))) {
  List<Registration> updatedRegistrations = new LinkedList<>(registrations);
  updatedRegistrations.add(registration);
  boolean newLeader = leader == null;
  this.registrations = updatedRegistrations;
  if (newLeader) {
   this.leader = registration;
   this.term = termCounter.incrementAndGet();
   this.termStartTime = getWallClock().getTime().unixTimestamp();
  }
 }
}

代码示例来源:origin: atomix/atomix

/**
 * Returns a new wall clock timestamp for the given unix timestamp.
 *
 * @param unixTimestamp the unix timestamp for which to create a new wall clock timestamp
 * @return the wall clock timestamp
 */
public static WallClockTimestamp from(long unixTimestamp) {
 return new WallClockTimestamp(unixTimestamp);
}

代码示例来源:origin: atomix/atomix

@Override
public WallClockTimestamp wallClockTime() {
 return WallClockTimestamp.from(timestamp);
}

代码示例来源:origin: atomix/atomix

/**
  * Purges tombstones from the topic.
  *
  * @param minTombstoneTime the time before which tombstones can be removed
  */
 synchronized void purgeTombstones(long minTombstoneTime) {
  int startSize = subscriptions.size();
  subscriptions.removeIf(subscription -> {
   return subscription.isTombstone() && subscription.timestamp().unixTimestamp() < minTombstoneTime;
  });
  if (subscriptions.size() != startSize) {
   iterator = new TopicIterator(subscriptions);
  }
 }
}

代码示例来源:origin: atomix/atomix

@Override
 public WallClockTimestamp getTime() {
  return new WallClockTimestamp(currentTimestamp);
 }
};

代码示例来源:origin: atomix/atomix

/**
 * Sets the current timestamp.
 *
 * @param timestamp the updated timestamp
 * @return the current timestamp
 */
public long setTimestamp(long timestamp) {
 this.currentTimestamp = timestamp;
 service.tick(WallClockTimestamp.from(timestamp));
 return currentTimestamp;
}

代码示例来源:origin: atomix/atomix

protected void cleanup(byte[] id) {
 Optional<Registration> registration =
   registrations.stream().filter(r -> Arrays.equals(r.id(), id)).findFirst();
 if (registration.isPresent()) {
  List<Registration> updatedRegistrations =
    registrations.stream()
      .filter(r -> !Arrays.equals(r.id(), id))
      .collect(Collectors.toList());
  if (Arrays.equals(leader.id(), id)) {
   if (!updatedRegistrations.isEmpty()) {
    this.registrations = updatedRegistrations;
    this.leader = updatedRegistrations.get(0);
    this.term = termCounter.incrementAndGet();
    this.termStartTime = getWallClock().getTime().unixTimestamp();
   } else {
    this.registrations = updatedRegistrations;
    this.leader = null;
   }
  } else {
   this.registrations = updatedRegistrations;
  }
 }
}

代码示例来源:origin: atomix/atomix

@Override
public WallClockTimestamp getTime() {
 return new WallClockTimestamp();
}

代码示例来源:origin: atomix/atomix

/**
 * Returns the snapshot timestamp.
 * <p>
 * The timestamp is the wall clock time at the {@link #index()} at which the snapshot was taken.
 *
 * @return The snapshot timestamp.
 */
public WallClockTimestamp timestamp() {
 return WallClockTimestamp.from(descriptor.timestamp());
}

代码示例来源:origin: atomix/atomix

/**
 * Sends an update to the given node.
 *
 * @param member the node to which to send the update
 */
private CompletableFuture<Void> updateNode(Member member) {
 long updateTime = System.currentTimeMillis();
 long lastUpdateTime = updateTimes.getOrDefault(member.id(), 0L);
 Collection<InternalSubscriptionInfo> subscriptions = topics.values()
   .stream()
   .flatMap(t -> t.remoteSubscriptions().stream().filter(subscriber -> subscriber.timestamp().unixTimestamp() >= lastUpdateTime))
   .collect(Collectors.toList());
 CompletableFuture<Void> future = new CompletableFuture<>();
 messagingService.sendAndReceive(member.address(), GOSSIP_MESSAGE_SUBJECT, SERIALIZER.encode(subscriptions))
   .whenComplete((result, error) -> {
    if (error == null) {
     updateTimes.put(member.id(), updateTime);
    }
    future.complete(null);
   });
 return future;
}

代码示例来源:origin: atomix/atomix

/**
 * Resets the current index to the given index and timestamp.
 *
 * @param index     the index to which to reset the current index
 * @param timestamp the timestamp to which to reset the current timestamp
 */
public void resetIndex(long index, long timestamp) {
 currentOperation = OperationType.COMMAND;
 operationIndex = index;
 currentIndex = index;
 currentTimestamp = timestamp;
 setCommitIndex(index);
 service.tick(new WallClockTimestamp(currentTimestamp));
}

代码示例来源:origin: atomix/atomix

/**
 * Executes scheduled callbacks based on the provided time.
 */
private void tick(long index, long timestamp) {
 this.currentIndex = index;
 // If the entry timestamp is less than the current state machine timestamp
 // and the delta is not yet set, set the delta and do not change the current timestamp.
 // If the entry timestamp is less than the current state machine timestamp
 // and the delta is set, update the current timestamp to the entry timestamp plus the delta.
 // If the entry timestamp is greater than or equal to the current timestamp, update the current
 // timestamp and reset the delta.
 if (timestamp < currentTimestamp) {
  if (timestampDelta == 0) {
   timestampDelta = currentTimestamp - timestamp;
  } else {
   currentTimestamp = timestamp + timestampDelta;
  }
 } else {
  currentTimestamp = timestamp;
  timestampDelta = 0;
 }
 // Set the current operation type to COMMAND to allow events to be sent.
 setOperation(OperationType.COMMAND);
 service.tick(WallClockTimestamp.from(timestamp));
}

代码示例来源:origin: atomix/atomix

@Override
public boolean anoint(byte[] id) {
 try {
  Leadership<byte[]> oldLeadership = leadership();
  Registration newLeader = registrations.stream()
    .filter(r -> Arrays.equals(r.id(), id))
    .findFirst()
    .orElse(null);
  if (newLeader != null) {
   this.leader = newLeader;
   this.term = termCounter.incrementAndGet();
   this.termStartTime = getWallClock().getTime().unixTimestamp();
  }
  Leadership<byte[]> newLeadership = leadership();
  if (!Objects.equal(oldLeadership, newLeadership)) {
   notifyLeadershipChange(oldLeadership, newLeadership);
  }
  return leader != null && Arrays.equals(id, leader.id());
 } catch (Exception e) {
  getLogger().error("State machine operation failed", e);
  throw Throwables.propagate(e);
 }
}

代码示例来源:origin: atomix/atomix

/**
 * Takes snapshots for the given index.
 */
Snapshot snapshot() {
 Snapshot snapshot = raft.getSnapshotStore().newTemporarySnapshot(raft.getLastApplied(), new WallClockTimestamp());
 try (SnapshotWriter writer = snapshot.openWriter()) {
  for (RaftServiceContext service : raft.getServices()) {
   writer.buffer().mark();
   SnapshotWriter serviceWriter = new SnapshotWriter(writer.buffer().writeInt(0).slice(), writer.snapshot());
   snapshotService(serviceWriter, service);
   int length = serviceWriter.buffer().position();
   writer.buffer().reset().writeInt(length).skip(length);
  }
 } catch (Exception e) {
  snapshot.close();
  logger.error("Failed to snapshot services", e);
  throw e;
 }
 return snapshot;
}

代码示例来源:origin: atomix/atomix

WallClockTimestamp.from(request.snapshotTimestamp()));
pendingSnapshot = new PendingSnapshot(snapshot);

代码示例来源:origin: atomix/atomix

this.leader = updatedRegistrations.get(0);
 this.term = termCounter.incrementAndGet();
 this.termStartTime = getWallClock().getTime().unixTimestamp();
} else {
 this.registrations = updatedRegistrations;

代码示例来源:origin: io.atomix/atomix-utils

/**
 * Returns a new wall clock timestamp for the given unix timestamp.
 *
 * @param unixTimestamp the unix timestamp for which to create a new wall clock timestamp
 * @return the wall clock timestamp
 */
public static WallClockTimestamp from(long unixTimestamp) {
 return new WallClockTimestamp(unixTimestamp);
}

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com