/** * Resync the item. * This method launch resync process, call to network to know what consensus is or hasn't consensus for the item. * * @param id item to resync */ public void resync(HashId id) { resync(id, null); }
private void sanitateRecord(StateRecord r) { try { if(isShuttingDown) return; resync(r.getId()); } catch (Exception e) { e.printStackTrace(); } }
public void startResyncSubTree() { resyncingSubTreeItems.forEach((k, v) -> resync(k, ri->onResyncSubTreeItemFinish(ri))); }
public final void startResync() { if(processingState.canContinue()) { if (!processingState.isProcessedToConsensus()) { processingState = ItemProcessingState.RESYNCING; resyncingItems.forEach((k, v)-> { resync(k, (re)->onResyncItemFinished(re)); }); } } }
private Binder resyncItem(Binder params, Session session) throws CommandFailedException { checkNode(session, true); KeyAddress tmpAddress = null; try { tmpAddress = new KeyAddress("JKEgDs9CoCCymD9TgmjG8UBLxuJwT5GZ3PaZyG6o2DQVGRQPjXHCG8JouC8eZw5Nd1w9krCS"); } catch (KeyAddress.IllegalAddressException e) { e.printStackTrace(); } if (config.limitFreeRegistrations()) if(!( tmpAddress.isMatchingKey(session.getPublicKey()) || config.getNetworkAdminKeyAddress().isMatchingKey(session.getPublicKey()) || config.getKeysWhiteList().contains(session.getPublicKey()) || config.getAddressesWhiteList().stream().anyMatch(addr -> addr.isMatchingKey(session.getPublicKey())) )) { System.out.println("approve ERROR: command needs client key from whitelist"); return Binder.of( "itemResult", itemResultOfError(Errors.BAD_CLIENT_KEY,"resyncItem", "command needs client key from whitelist")); } try { Binder result = Binder.of("itemResult", node.checkItem((HashId) params.get("itemId"))); node.resync((HashId) params.get("itemId")); return result; } catch (Exception e) { System.out.println("getState ERROR: " + e.getMessage()); return Binder.of( "itemResult", itemResultOfError(Errors.COMMAND_FAILED,"resyncItem", e.getMessage())); } }
assertEquals(ItemState.UNDEFINED, node.waitItem(c.getId(), 3000).state); node.resync(c.getId());
node.resync(c.getId()); assertEquals(ItemState.PENDING, node.checkItem(c.getId()).state);
node.resync(c.getId());
node.resync(c.getId());
node.resync(c.getId());
node.resync(c.getId());
node.resync(c.getId()); assertEquals(ItemState.PENDING, node.checkItem(c.getId()).state);
node.resync(c.getId()); assertEquals(ItemState.PENDING, node.checkItem(c.getId()).state);
assertEquals(ItemState.UNDEFINED, node.checkItem(contract.getId()).state); node.resync(contract.getId()); assertEquals(ItemState.PENDING, node.checkItem(contract.getId()).state);
private Binder getBody(Binder params, Session session) throws IOException { checkNode(session, true); Binder res = new Binder(); if (!node.getConfig().isPermanetMode()) return res; HashId itemId = (HashId) params.get("itemId"); byte[] body = node.getLedger().getKeepingItem(itemId); if (body != null) { res.put("packedContract", body); return res; } node.resync(itemId); ItemResult itemResult = node.checkItem(itemId); if (itemResult == ItemResult.UNDEFINED) return res; Approvable item = node.getKeepingItemFromNetwork(itemId); if (item == null) return res; if ((item instanceof Contract) && (item.getId().equals(itemId)) && (HashId.of(((Contract) item).getLastSealedBinary()).equals(itemId))) { StateRecord record = node.getLedger().getRecord(itemId); node.getLedger().putKeepingItem(record, item); body = ((Contract) item).getPackedTransaction(); res.put("packedContract", body); } return res; }
@Test(timeout = 15000) public void resyncDeclined() throws Exception { Contract c = new Contract(TestKeys.privateKey(0)); c.seal(); addToAllLedgers(c, ItemState.DECLINED); node.getLedger().getRecord(c.getId()).destroy(); assertEquals(ItemState.UNDEFINED, node.checkItem(c.getId()).state); node.resync(c.getId()); assertEquals(ItemState.DECLINED, node.waitItem(c.getId(), 12000).state); }
@Test(timeout = 15000) public void resyncApproved() throws Exception { Contract c = new Contract(TestKeys.privateKey(0)); c.seal(); addToAllLedgers(c, ItemState.APPROVED); node.getLedger().getRecord(c.getId()).destroy(); assertEquals(ItemState.UNDEFINED, node.checkItem(c.getId()).state); node.resync(c.getId()); assertEquals(ItemState.APPROVED, node.waitItem(c.getId(), 15000).state); }
@Test(timeout = 15000) public void resyncWithTimeout() throws Exception { Contract c = new Contract(TestKeys.privateKey(0)); c.seal(); addToAllLedgers(c, ItemState.APPROVED); Duration wasDuration = config.getMaxResyncTime(); config.setMaxResyncTime(Duration.ofMillis(2000)); for (int i = 0; i < NODES/2; i++) { ((TestEmulatedNetwork)network).switchOffNodeTestMode(nodes.get(NODES-i-1)); } node.getLedger().getRecord(c.getId()).destroy(); assertEquals(ItemState.UNDEFINED, node.checkItem(c.getId()).state); node.resync(c.getId()); assertEquals(ItemState.PENDING, node.checkItem(c.getId()).state); assertEquals(ItemState.UNDEFINED, node.waitItem(c.getId(), 15000).state); config.setMaxResyncTime(wasDuration); ((TestEmulatedNetwork)network).switchOnAllNodesTestMode(); }
@Test(timeout = 15000) public void resyncRevoked() throws Exception { Contract c = new Contract(TestKeys.privateKey(0)); c.seal(); addToAllLedgers(c, ItemState.REVOKED); node.getLedger().getRecord(c.getId()).destroy(); assertEquals(ItemState.UNDEFINED, node.checkItem(c.getId()).state); node.resync(c.getId()); assertEquals(ItemState.REVOKED, node.waitItem(c.getId(), 13000).state); }
@Test(timeout = 15000) public void resyncOther() throws Exception { Contract c = new Contract(TestKeys.privateKey(0)); c.seal(); addToAllLedgers(c, ItemState.PENDING_POSITIVE); node.getLedger().getRecord(c.getId()).destroy(); assertEquals(ItemState.UNDEFINED, node.checkItem(c.getId()).state); node.resync(c.getId()); assertEquals(ItemState.PENDING, node.checkItem(c.getId()).state); assertEquals(ItemState.UNDEFINED, node.waitItem(c.getId(), 12000).state); }