final void cleanUp() { // we should avoid creating an object for each check: Instant now = Instant.now(); environmetsExpiration.keySet().forEach(envId -> { if(environmetsExpiration.get(envId).isBefore(now)) { environmetsExpiration.remove(envId); environemtsByContract.remove(environemtsById.remove(envId).getContract().getId()); } }); }
private Set<HashId> saveEnvironment_getConflicts(NImmutableEnvironment environment) { HashId ownSmartContractId = environment.getContract().getId();
/** * Get environment and follower contract by environment identifier. * * @param environmentId is environment subscription * * @return {@link Binder} with environment and follower contract * */ public Binder getFullEnvironment(long environmentId) { NImmutableEnvironment ime = getEnvironment(environmentId); ime.setNameCache(nameCache); NSmartContract contract = ime.getContract(); contract.setNodeInfoProvider(nodeInfoProvider); NMutableEnvironment me = ime.getMutable(); if (me == null) return Binder.EMPTY; return Binder.of("follower", contract, "environment", me); }
private Binder queryNameContract(Binder params, Session session) throws IOException { checkNode(session, true); Binder b = new Binder(); String nameContract = params.getStringOrThrow("name"); NNameRecord nr = node.getLedger().getNameRecord(nameContract); if (nr != null) { NImmutableEnvironment env = node.getLedger().getEnvironment(nr.getEnvironmentId()); if (env != null) { byte[] packedContract = env.getContract().getPackedTransaction(); b.put("packedContract", packedContract); } } return b; }
NImmutableEnvironment ime = getEnvironment(environmentId); ime.setNameCache(nameCache); NSmartContract contract = ime.getContract(); contract.setNodeInfoProvider(nodeInfoProvider); NMutableEnvironment me = ime.getMutable();
@Override public Set<HashId> saveEnvironment(NImmutableEnvironment environment) { Set<HashId> conflicts = saveEnvironment_getConflicts(environment); if (conflicts.size() == 0) { NSmartContract nsc = environment.getContract(); removeEnvironment(nsc.getId()); long envId = saveEnvironmentToStorage(nsc.getExtendedType(), nsc.getId(), Boss.pack(environment.getMutable().getKVStore()), nsc.getPackedTransaction()); for (NameRecord nr : environment.nameRecords()) { NNameRecord nnr = (NNameRecord)nr; nnr.setEnvironmentId(envId); addNameRecord(nnr); } for (ContractSubscription css : environment.subscriptions()) saveSubscriptionInStorage(css.getHashId(), css.isChainSubscription(), css.expiresAt(), envId); for (ContractStorage cst : environment.storages()) saveContractInStorage(cst.getContract().getId(), cst.getPackedContract(), cst.expiresAt(), cst.getContract().getOrigin(), envId); FollowerService fs = environment.getFollowerService(); if (fs != null) saveFollowerEnvironment(envId, fs.expiresAt(), fs.mutedAt(), fs.getCallbacksSpent(), fs.getStartedCallbacks()); } return conflicts; }