public void setUp() throws Exception {
MockitoAnnotations.initMocks(this);
- rootShard = InMemoryDOMDataTreeShard.create(ROOT_ID, executor, 1, 1);
+ rootShard = InMemoryDOMDataTreeShard.create(ROOT_ID, executor, 1);
rootShard.onGlobalContextUpdated(schemaContext);
final ShardedDOMDataTree dataTree = new ShardedDOMDataTree();
dataTreeService.createProducer(Collections.singletonList(TEST_ID));
}
+ @Test
+ public void testShardRegistrationClose() throws Exception {
+ rootShardReg.close();
+
+ final InMemoryDOMDataTreeShard newRootShard = InMemoryDOMDataTreeShard.create(ROOT_ID, executor, 1);
+ newRootShard.onGlobalContextUpdated(schemaContext);
+ final DOMDataTreeProducer shardRegProducer = dataTreeService.createProducer(Collections.singletonList(ROOT_ID));
+
+ final ListenerRegistration<InMemoryDOMDataTreeShard> newRootShardReg =
+ dataTreeService.registerDataTreeShard(ROOT_ID, rootShard, shardRegProducer);
+ shardRegProducer.close();
+
+ final InMemoryDOMDataTreeShard innerShard = InMemoryDOMDataTreeShard.create(INNER_CONTAINER_ID, executor, 1);
+ innerShard.onGlobalContextUpdated(schemaContext);
+ final DOMDataTreeProducer shardRegProducer2 =
+ dataTreeService.createProducer(Collections.singletonList(INNER_CONTAINER_ID));
+ ListenerRegistration<InMemoryDOMDataTreeShard> innerShardReg =
+ dataTreeService.registerDataTreeShard(INNER_CONTAINER_ID, innerShard, shardRegProducer2);
+
+ innerShardReg.close();
+ // try to register the shard again
+ innerShardReg = dataTreeService.registerDataTreeShard(INNER_CONTAINER_ID, innerShard, shardRegProducer2);
+ final DOMDataTreeCursorAwareTransaction tx = shardRegProducer2.createTransaction(false);
+ final DOMDataTreeWriteCursor cursor = tx.createCursor(INNER_CONTAINER_ID);
+ assertNotNull(cursor);
+
+ cursor.close();
+ tx.cancel();
+ shardRegProducer2.close();
+
+ innerShardReg.close();
+ newRootShardReg.close();
+ }
+
@Test
public void testSingleShardWrite() throws Exception {
final DOMDataTreeListener mockedDataTreeListener = Mockito.mock(DOMDataTreeListener.class);
doNothing().when(mockedDataTreeListener).onDataTreeChanged(anyCollection(), anyMap());
- dataTreeService.registerListener(mockedDataTreeListener, Collections.singletonList(INNER_CONTAINER_ID), true, Collections.emptyList());
+ dataTreeService.registerListener(mockedDataTreeListener, Collections.singletonList(INNER_CONTAINER_ID),
+ true, Collections.emptyList());
final DOMDataTreeProducer producer = dataTreeService.createProducer(Collections.singletonList(ROOT_ID));
DOMDataTreeCursorAwareTransaction tx = producer.createTransaction(false);
cursor.close();
tx.submit().checkedGet();
- verify(mockedDataTreeListener, timeout(1000).times(3)).onDataTreeChanged(captorForChanges.capture(), captorForSubtrees.capture());
+ verify(mockedDataTreeListener, timeout(1000).times(3)).onDataTreeChanged(captorForChanges.capture(),
+ captorForSubtrees.capture());
final List<Collection<DataTreeCandidate>> capturedValue = captorForChanges.getAllValues();
assertTrue(capturedValue.size() == 3);
- final ContainerNode capturedChange = (ContainerNode) capturedValue.get(1).iterator().next().getRootNode().getDataAfter().get();
- final ContainerNode innerContainerVerify = (ContainerNode) crossShardContainer.getChild(TestModel.INNER_CONTAINER_PATH.getLastPathArgument()).get();
+ final ContainerNode capturedChange =
+ (ContainerNode) capturedValue.get(1).iterator().next().getRootNode().getDataAfter().get();
+ final ContainerNode innerContainerVerify = (ContainerNode) crossShardContainer.getChild(
+ TestModel.INNER_CONTAINER_PATH.getLastPathArgument()).get();
assertEquals(innerContainerVerify, capturedChange);
verifyNoMoreInteractions(mockedDataTreeListener);
assertTrue(rootTx.cancel());
- final DOMDataTreeProducer innerContainerProducer = rootProducer.createProducer(Collections.singletonList(INNER_CONTAINER_ID));
+ final DOMDataTreeProducer innerContainerProducer = rootProducer.createProducer(
+ Collections.singletonList(INNER_CONTAINER_ID));
rootTx = rootProducer.createTransaction(false);
try {
private ContainerNode createCrossShardContainer() {
final LeafNode<String> shardedValue1 =
- ImmutableLeafNodeBuilder.<String>create().withNodeIdentifier(new NodeIdentifier(TestModel.SHARDED_VALUE_1)).withValue("sharded value 1").build();
+ ImmutableLeafNodeBuilder.<String>create().withNodeIdentifier(new NodeIdentifier(
+ TestModel.SHARDED_VALUE_1)).withValue("sharded value 1").build();
final LeafNode<String> shardedValue2 =
- ImmutableLeafNodeBuilder.<String>create().withNodeIdentifier(new NodeIdentifier(TestModel.SHARDED_VALUE_2)).withValue("sharded value 2").build();
+ ImmutableLeafNodeBuilder.<String>create().withNodeIdentifier(new NodeIdentifier(
+ TestModel.SHARDED_VALUE_2)).withValue("sharded value 2").build();
final ContainerNode lowerShardContainer = ImmutableContainerNodeBuilder.create()