@Override public Collection<PrimitiveInfo> getPrimitives() { return primitives.sync().entrySet().stream() .map(entry -> new PrimitiveInfo(entry.getKey(), primitiveTypeRegistry.getPrimitiveType(entry.getValue().value()))) .collect(Collectors.toList()); }
primitiveTypes = new ClasspathScanningPrimitiveTypeRegistry(Thread.currentThread().getContextClassLoader()); if (primitiveTypes.getPrimitiveTypes().isEmpty()) { throw new IllegalStateException("No primitive services registered");
@Override public PrimitiveInfo getPrimitive(String name) { try { return primitives.get(name) .thenApply(value -> value == null ? null : value.map(type -> new PrimitiveInfo(name, primitiveTypeRegistry.getPrimitiveType(type))).value()) .get(DistributedPrimitive.DEFAULT_OPERATION_TIMEOUT_MILLIS, TimeUnit.MILLISECONDS); } catch (InterruptedException e) { Thread.currentThread().interrupt(); throw new PrimitiveException.Interrupted(); } catch (TimeoutException e) { throw new PrimitiveException.Timeout(); } catch (ExecutionException e) { throw new PrimitiveException(e.getCause()); } }
/** * Restores the service associated with the given snapshot. * * @param reader the snapshot reader */ private void installService(SnapshotReader reader) { PrimitiveId primitiveId = PrimitiveId.from(reader.readLong()); try { PrimitiveType primitiveType = raft.getPrimitiveTypes().getPrimitiveType(reader.readString()); String serviceName = reader.readString(); byte[] serviceConfig = reader.readBytes(reader.readInt()); // Get or create the service associated with the snapshot. logger.debug("Installing service {} {}", primitiveId, serviceName); RaftServiceContext service = initializeService(primitiveId, primitiveType, serviceName, serviceConfig); if (service != null) { try { service.installSnapshot(reader); } catch (Exception e) { logger.error("Failed to install snapshot for service {}", serviceName, e); } } } catch (ConfigurationException e) { logger.error(e.getMessage(), e); } }
/** * Returns the service context for the given request. */ private CompletableFuture<PrimaryBackupServiceContext> getService(PrimitiveRequest request) { return services.computeIfAbsent(request.primitive().name(), n -> { PrimitiveType primitiveType = primitiveTypes.getPrimitiveType(request.primitive().type()); PrimaryBackupServiceContext service = new PrimaryBackupServiceContext( serverName, PrimitiveId.from(request.primitive().name()), primitiveType, request.primitive(), threadContextFactory.createContext(), clusterMembershipService, memberGroupService, protocol, primaryElection); OrderedFuture<PrimaryBackupServiceContext> newOrderFuture = new OrderedFuture<>(); service.open().whenComplete((v, e) -> { if (e != null) { newOrderFuture.completeExceptionally(e); } else { newOrderFuture.complete(service); } }); return newOrderFuture; }); }
Function<Transactional<?>, CompletableFuture<Void>> completionFunction) { PrimitiveType primitiveType = managementService.getPrimitiveTypeRegistry().getPrimitiveType(participantInfo.type()); if (primitiveType == null) { return Futures.exceptionalFuture(new TransactionException("Failed to locate primitive type " + participantInfo.type() + " for participant " + participantInfo.name()));
primitiveType = raft.getPrimitiveTypes().getPrimitiveType(reader.readString()); } catch (ConfigurationException e) { log.error(e.getMessage(), e);
/** * Applies an open session entry to the state machine. */ private long applyOpenSession(Indexed<OpenSessionEntry> entry) { PrimitiveType primitiveType = raft.getPrimitiveTypes().getPrimitiveType(entry.entry().serviceType()); // Get the state machine executor or create one if it doesn't already exist. RaftServiceContext service = getOrInitializeService( PrimitiveId.from(entry.index()), primitiveType, entry.entry().serviceName(), entry.entry().serviceConfig()); if (service == null) { throw new RaftException.UnknownService("Unknown service type " + entry.entry().serviceType()); } SessionId sessionId = SessionId.from(entry.index()); RaftSession session = raft.getSessions().addSession(new RaftSession( sessionId, MemberId.from(entry.entry().memberId()), entry.entry().serviceName(), primitiveType, entry.entry().readConsistency(), entry.entry().minTimeout(), entry.entry().maxTimeout(), entry.entry().timestamp(), service.serializer(), service, raft, threadContextFactory)); return service.openSession(entry.index(), entry.entry().timestamp(), session); }
@Override public Collection<PrimitiveInfo> getPrimitives() { return primitives.sync().entrySet().stream() .map(entry -> new PrimitiveInfo(entry.getKey(), primitiveTypeRegistry.getPrimitiveType(entry.getValue().value()))) .collect(Collectors.toList()); }
@Override public PrimitiveInfo getPrimitive(String name) { try { return primitives.get(name) .thenApply(value -> value == null ? null : value.map(type -> new PrimitiveInfo(name, primitiveTypeRegistry.getPrimitiveType(type))).value()) .get(DistributedPrimitive.DEFAULT_OPERATION_TIMEOUT_MILLIS, TimeUnit.MILLISECONDS); } catch (InterruptedException e) { Thread.currentThread().interrupt(); throw new PrimitiveException.Interrupted(); } catch (TimeoutException e) { throw new PrimitiveException.Timeout(); } catch (ExecutionException e) { throw new PrimitiveException(e.getCause()); } }
Function<Transactional<?>, CompletableFuture<Void>> completionFunction) { PrimitiveType primitiveType = managementService.getPrimitiveTypeRegistry().getPrimitiveType(participantInfo.type()); if (primitiveType == null) { return Futures.exceptionalFuture(new TransactionException("Failed to locate primitive type " + participantInfo.type() + " for participant " + participantInfo.name()));