From 39ab4bfb4194aef1ee6746914e5ae9ea320190d4 Mon Sep 17 00:00:00 2001 From: Chris Vest Date: Tue, 3 Mar 2015 15:17:48 +0100 Subject: [PATCH 1/5] More detailed error message when id generator capacity is exceeded --- .../kernel/impl/nioneo/store/IdGeneratorImpl.java | 3 ++- .../IdGeneratorRebuildFailureEmulationTest.java | 12 +++++++----- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/community/kernel/src/main/java/org/neo4j/kernel/impl/nioneo/store/IdGeneratorImpl.java b/community/kernel/src/main/java/org/neo4j/kernel/impl/nioneo/store/IdGeneratorImpl.java index 03713961069c5..ff0fc085da31f 100644 --- a/community/kernel/src/main/java/org/neo4j/kernel/impl/nioneo/store/IdGeneratorImpl.java +++ b/community/kernel/src/main/java/org/neo4j/kernel/impl/nioneo/store/IdGeneratorImpl.java @@ -166,7 +166,8 @@ private void assertIdWithinCapacity( long id ) { if ( id > max || id < 0 ) { - throw new UnderlyingStorageException( "Id capacity exceeded" ); + throw new UnderlyingStorageException( + "Id capacity exceeded: " + id + " is not within bounds [0; " + max + "] for " + fileName ); } } diff --git a/community/kernel/src/test/java/org/neo4j/kernel/impl/nioneo/store/IdGeneratorRebuildFailureEmulationTest.java b/community/kernel/src/test/java/org/neo4j/kernel/impl/nioneo/store/IdGeneratorRebuildFailureEmulationTest.java index efdd43a8c0513..a62eb1a8a436c 100644 --- a/community/kernel/src/test/java/org/neo4j/kernel/impl/nioneo/store/IdGeneratorRebuildFailureEmulationTest.java +++ b/community/kernel/src/test/java/org/neo4j/kernel/impl/nioneo/store/IdGeneratorRebuildFailureEmulationTest.java @@ -19,10 +19,6 @@ */ package org.neo4j.kernel.impl.nioneo.store; -import java.io.File; -import java.util.HashMap; -import java.util.Map; - import org.junit.After; import org.junit.Before; import org.junit.Test; @@ -31,6 +27,10 @@ import org.junit.runners.Suite; import org.junit.runners.Suite.SuiteClasses; +import java.io.File; +import java.util.HashMap; +import java.util.Map; + import org.neo4j.graphdb.DynamicRelationshipType; import org.neo4j.graphdb.GraphDatabaseService; import org.neo4j.graphdb.Node; @@ -55,7 +55,9 @@ import org.neo4j.test.subprocess.SubProcessTestRunner; import org.neo4j.tooling.GlobalGraphOperations; +import static org.hamcrest.Matchers.startsWith; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertThat; import static org.junit.Assert.fail; @RunWith(Suite.class) @@ -125,7 +127,7 @@ private void performTest() throws Exception } catch ( UnderlyingStorageException expected ) { - assertEquals( "Id capacity exceeded", expected.getMessage() ); + assertThat( expected.getMessage(), startsWith( "Id capacity exceeded" ) ); } finally { From de7fc9bb0e197c19e42329265e0ce06f707a84c4 Mon Sep 17 00:00:00 2001 From: Zhen Date: Mon, 2 Mar 2015 17:44:07 +0100 Subject: [PATCH 2/5] Fixed invalid epoch exception in ClusterTopologyChangesIT Previously the test slaveShouldServeTxsAfterMasterLostQuorumWentToPendingAndThenQuorumWasRestored might throw InvalidEpochException at node creation after epoch fix. The error arises because we do not ensure that the node creation definitely happens after epoch fix. This pr adds a listener to ensure that node creation should always happen after epoch fix. Also we refined logging info in HighAvailabilityMemberStateMachine --- .../HighAvailabilityMemberStateMachine.java | 19 ++++++++- .../kernel/ha/ClusterTopologyChangesIT.java | 42 ++++++++++++++++--- 2 files changed, 54 insertions(+), 7 deletions(-) diff --git a/enterprise/ha/src/main/java/org/neo4j/kernel/ha/cluster/HighAvailabilityMemberStateMachine.java b/enterprise/ha/src/main/java/org/neo4j/kernel/ha/cluster/HighAvailabilityMemberStateMachine.java index b2807762abf7f..545a4b05d1a12 100644 --- a/enterprise/ha/src/main/java/org/neo4j/kernel/ha/cluster/HighAvailabilityMemberStateMachine.java +++ b/enterprise/ha/src/main/java/org/neo4j/kernel/ha/cluster/HighAvailabilityMemberStateMachine.java @@ -99,11 +99,13 @@ public void notify( HighAvailabilityMemberListener listener ) context.setAvailableHaMasterId( null ); } + @Override public void addHighAvailabilityMemberListener( HighAvailabilityMemberListener toAdd ) { memberListeners = Listeners.addListener( toAdd, memberListeners ); } + @Override public void removeHighAvailabilityMemberListener( HighAvailabilityMemberListener toRemove ) { memberListeners = Listeners.removeListener( toRemove, memberListeners ); @@ -156,8 +158,8 @@ public void notify( HighAvailabilityMemberListener listener ) availabilityGuard.deny(HighAvailabilityMemberStateMachine.this); } - logger.debug( "Got masterIsElected(" + coordinatorId + "), changed " + oldState + " -> " + - state + ". Previous elected master is " + previousElected ); + logger.debug( "Got masterIsElected(" + coordinatorId + "), moved to " + state + " from " + oldState + + ". Previous elected master is " + previousElected ); } } catch ( Throwable t ) @@ -237,7 +239,13 @@ public void memberIsUnavailable( String role, InstanceId unavailableId ) HighAvailabilityModeSwitcher.SLAVE.equals( role ) && state == HighAvailabilityMemberState.SLAVE ) { + HighAvailabilityMemberState oldState = state; changeStateToPending(); + logger.debug( "Got memberIsUnavailable(" + unavailableId + "), moved to " + state + " from " + oldState ); + } + else + { + logger.debug( "Got memberIsUnavailable(" + unavailableId + ")" ); } } @@ -246,7 +254,14 @@ public void memberIsFailed( InstanceId instanceId ) { if ( !isQuorum( getAliveCount(), getTotalCount() ) ) { + HighAvailabilityMemberState oldState = state; changeStateToPending(); + logger.debug( "Got memberIsFailed(" + instanceId + ") and cluster lost quorum to continue, moved to " + + state + " from " + oldState ); + } + else + { + logger.debug( "Got memberIsFailed(" + instanceId + ")" ); } } diff --git a/enterprise/ha/src/test/java/org/neo4j/kernel/ha/ClusterTopologyChangesIT.java b/enterprise/ha/src/test/java/org/neo4j/kernel/ha/ClusterTopologyChangesIT.java index 6edb0b197571e..c1f94abda9a2c 100644 --- a/enterprise/ha/src/test/java/org/neo4j/kernel/ha/ClusterTopologyChangesIT.java +++ b/enterprise/ha/src/test/java/org/neo4j/kernel/ha/ClusterTopologyChangesIT.java @@ -20,24 +20,32 @@ package org.neo4j.kernel.ha; import org.junit.Before; +import org.junit.Rule; import org.junit.Test; +import java.util.Date; import java.util.concurrent.CountDownLatch; +import java.util.concurrent.TimeUnit; import org.neo4j.cluster.InstanceId; import org.neo4j.cluster.client.ClusterClient; import org.neo4j.cluster.com.NetworkReceiver; +import org.neo4j.cluster.member.ClusterMemberEvents; +import org.neo4j.cluster.member.ClusterMemberListener; import org.neo4j.cluster.protocol.heartbeat.HeartbeatListener; import org.neo4j.graphdb.Node; import org.neo4j.graphdb.Transaction; import org.neo4j.graphdb.factory.GraphDatabaseBuilder; +import org.neo4j.kernel.GraphDatabaseAPI; import org.neo4j.kernel.ha.cluster.HighAvailabilityMemberState; import org.neo4j.kernel.ha.com.master.InvalidEpochException; import org.neo4j.kernel.lifecycle.Lifecycle; import org.neo4j.test.AbstractClusterTest; +import org.neo4j.test.RepeatRule; +import org.neo4j.test.RepeatRule.Repeat; + +import static org.junit.Assert.*; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; import static org.neo4j.helpers.Predicates.not; import static org.neo4j.test.ReflectionUtil.getPrivateField; import static org.neo4j.test.ha.ClusterManager.RepairKit; @@ -116,14 +124,38 @@ else if ( instanceIdOf( slave2 ).equals( server ) ) slave1RepairKit.repair(); slave2RepairKit.repair(); - // whole cluster looks fine, but slaves have stale value of the epoch + // whole cluster looks fine, but slaves have stale value of the epoch if they rejoin the cluster in SLAVE state cluster.await( allSeesAllAsAvailable() ); HighlyAvailableGraphDatabase newMaster = cluster.getMaster(); - HighlyAvailableGraphDatabase newSlave1 = cluster.getAnySlave(); - HighlyAvailableGraphDatabase newSlave2 = cluster.getAnySlave( newSlave1 ); + + final HighlyAvailableGraphDatabase newSlave1 = cluster.getAnySlave(); + final HighlyAvailableGraphDatabase newSlave2 = cluster.getAnySlave( newSlave1 ); + + // now adding another failing listener and wait for the failure due to stale epoch + final CountDownLatch slave1Unavailable = new CountDownLatch( 1 ); + final CountDownLatch slave2Unavailable = new CountDownLatch( 1 ); + ClusterMemberEvents clusterEvents = ((GraphDatabaseAPI) newMaster).getDependencyResolver().resolveDependency( + ClusterMemberEvents.class ); + clusterEvents.addClusterMemberListener( new ClusterMemberListener.Adapter() + { + @Override + public void memberIsUnavailable( String role, InstanceId unavailableId ) + { + if ( instanceIdOf( newSlave1 ).equals( unavailableId ) ) + { + slave1Unavailable.countDown(); + } + else if ( instanceIdOf( newSlave2 ).equals( unavailableId ) ) + { + slave2Unavailable.countDown(); + } + } + } ); // attempt to perform transactions on both slaves throws, election is triggered attemptTransactions( newSlave1, newSlave2 ); + slave1Unavailable.await( 60, TimeUnit.SECONDS ); // set a timeout in case the instance does not have stale epoch + slave2Unavailable.await( 60, TimeUnit.SECONDS ); // THEN: done with election, cluster feels good and able to serve transactions cluster.await( allSeesAllAsAvailable() ); From 6c5bf59876f3948c81ce72c4d87349e3692a3c42 Mon Sep 17 00:00:00 2001 From: Zhen Date: Thu, 12 Mar 2015 17:38:29 +0100 Subject: [PATCH 3/5] Updating license header --- advanced/NOTICE.txt | 2 +- advanced/management/NOTICE.txt | 2 +- advanced/neo4j-advanced/NOTICE.txt | 2 +- advanced/server-advanced/NOTICE.txt | 2 +- advanced/server-advanced/pom.xml | 2 +- community/NOTICE.txt | 2 +- community/cypher/NOTICE.txt | 2 +- .../builders/FilterBuilder.scala | 20 ---------- .../internal/spi/QueryContextContract.java | 38 ------------------- .../gdsimpl/GDSQueryContextContractIT.java | 19 ---------- .../builders/ColumnFilterBuilderTest.scala | 20 ---------- .../builders/ExtractBuilderTest.scala | 20 ---------- .../builders/IndexQueryBuilderTest.scala | 20 ---------- .../builders/SliceBuilderTest.scala | 20 ---------- community/embedded-examples/NOTICE.txt | 2 +- community/graph-algo/NOTICE.txt | 2 +- community/graph-matching/NOTICE.txt | 2 +- community/graphviz/NOTICE.txt | 2 +- community/jmx/NOTICE.txt | 2 +- community/kernel/NOTICE.txt | 2 +- community/kernel/pom.xml | 2 +- .../org/neo4j/kernel/StandardExpander.java | 19 ---------- community/licensecheck-config/NOTICE.txt | 2 +- .../src/main/resources/notice-agpl-prefix.txt | 2 +- .../src/main/resources/notice-gpl-prefix.txt | 2 +- community/lucene-index/NOTICE.txt | 2 +- community/neo4j-community/NOTICE.txt | 2 +- community/neo4j/NOTICE.txt | 2 +- community/server-api/NOTICE.txt | 2 +- community/server-examples/NOTICE.txt | 2 +- community/server-plugin-test/NOTICE.txt | 2 +- community/server/NOTICE.txt | 2 +- community/server/pom.xml | 2 +- .../server/src/main/coffeescript/demo.coffee | 2 +- .../main/coffeescript/lib/amd/Backbone.coffee | 2 +- .../coffeescript/lib/amd/CodeMirror.coffee | 2 +- .../src/main/coffeescript/lib/amd/Deck.coffee | 2 +- .../src/main/coffeescript/lib/amd/Flot.coffee | 2 +- .../main/coffeescript/lib/amd/HotKeys.coffee | 2 +- .../coffeescript/lib/amd/Underscore.coffee | 2 +- .../main/coffeescript/lib/amd/arb-or.coffee | 2 +- .../main/coffeescript/lib/amd/arbor-ie.coffee | 2 +- .../main/coffeescript/lib/amd/impl-map.coffee | 2 +- .../main/coffeescript/lib/amd/jQuery.coffee | 2 +- .../lib/amd/jQuery.putCursorAtEnd.coffee | 2 +- .../lib/amd/jQuery.sortable.coffee | 2 +- .../main/coffeescript/lib/amd/neo4js.coffee | 2 +- .../neo4j/codemirror/cypher.coffee | 2 +- .../neo4j/webadmin/ApplicationState.coffee | 2 +- .../neo4j/webadmin/Bootstrapper.coffee | 2 +- .../neo4j/webadmin/Settings.coffee | 2 +- .../webadmin/modules/baseui/BaseUI.coffee | 2 +- .../webadmin/modules/baseui/MenuView.coffee | 2 +- .../neo4j/webadmin/modules/baseui/base.haml | 2 +- .../baseui/models/MainMenuModel.coffee | 2 +- .../ConnectionMonitor.coffee | 2 +- .../modules/console/ConsoleRouter.coffee | 2 +- .../modules/console/models/Console.coffee | 2 +- .../modules/console/models/HttpConsole.coffee | 2 +- .../models/MultiLineInputConsole.coffee | 2 +- .../modules/console/views/ConsoleView.coffee | 2 +- .../console/views/GremlinConsoleView.coffee | 2 +- .../console/views/HttpConsoleView.coffee | 2 +- .../console/views/ShellConsoleView.coffee | 2 +- .../modules/dashboard/DashboardRouter.coffee | 2 +- .../dashboard/models/CacheUsage.coffee | 2 +- .../dashboard/models/DashboardState.coffee | 2 +- .../modules/dashboard/models/DiskUsage.coffee | 2 +- .../dashboard/models/JmxBackedModel.coffee | 2 +- .../dashboard/models/KernelBean.coffee | 2 +- .../dashboard/models/ServerPrimitives.coffee | 2 +- .../dashboard/models/ServerStatistics.coffee | 2 +- .../views/DashboardChartsView.coffee | 2 +- .../dashboard/views/DashboardInfoView.coffee | 2 +- .../dashboard/views/DashboardView.coffee | 2 +- .../models/DataBrowserState.coffee | 2 +- .../databrowser/models/NodeList.coffee | 2 +- .../databrowser/models/NodeProxy.coffee | 2 +- .../databrowser/models/Property.coffee | 2 +- .../models/PropertyContainer.coffee | 2 +- .../models/RelationshipList.coffee | 2 +- .../models/RelationshipProxy.coffee | 2 +- .../databrowser/search/CypherSearcher.coffee | 2 +- .../search/NodeIndexSearcher.coffee | 2 +- .../databrowser/search/NodeSearcher.coffee | 2 +- .../modules/databrowser/search/Queue.coffee | 2 +- .../databrowser/search/QueuedSearch.coffee | 2 +- .../search/RelationshipIndexSearcher.coffee | 2 +- .../search/RelationshipSearcher.coffee | 2 +- .../RelationshipsForNodeSearcher.coffee | 2 +- .../modules/databrowser/search/Search.coffee | 2 +- .../databrowser/search/UrlSearcher.coffee | 2 +- .../databrowser/views/ConsoleView.coffee | 2 +- .../views/CreateRelationshipDialog.coffee | 2 +- .../databrowser/views/CypherResultView.coffee | 2 +- .../databrowser/views/DataBrowserView.coffee | 2 +- .../databrowser/views/NodeListView.coffee | 2 +- .../modules/databrowser/views/NodeView.coffee | 2 +- .../views/PropertyContainerView.coffee | 2 +- .../views/RelationshipListView.coffee | 2 +- .../databrowser/views/RelationshipView.coffee | 2 +- .../views/StandaloneVisualizationView.coffee | 2 +- .../databrowser/views/TabularView.coffee | 2 +- .../views/VisualizationSettingsDialog.coffee | 2 +- .../views/VisualizationSettingsView.coffee | 2 +- .../databrowser/views/VisualizedView.coffee | 2 +- .../visualization/NodeStyler.coffee | 2 +- .../visualization/RelationshipStyler.coffee | 2 +- .../databrowser/visualization/Renderer.coffee | 2 +- .../visualization/VisualDataModel.coffee | 2 +- .../visualization/VisualGraph.coffee | 2 +- .../visualization/models/Filters.coffee | 2 +- .../visualization/models/StyleRule.coffee | 2 +- .../visualization/models/StyleRules.coffee | 2 +- .../models/VisualizationProfiles.coffee | 2 +- .../models/filters/Filter.coffee | 2 +- .../models/filters/GroupSizeFilter.coffee | 2 +- .../models/filters/PropertyFilter.coffee | 2 +- .../visualization/models/style.coffee | 2 +- .../views/AbstractFilterView.coffee | 2 +- .../views/NodeFilterDialog.coffee | 2 +- .../views/ProfileListItemView.coffee | 2 +- .../visualization/views/StyleRuleView.coffee | 2 +- .../views/VisualizationProfileView.coffee | 2 +- .../views/VisualizationSettingsView.coffee | 2 +- .../webadmin/modules/guide/GuideDeck.coffee | 2 +- .../indexmanager/IndexManagerRouter.coffee | 2 +- .../indexmanager/models/IndexManager.coffee | 2 +- .../views/IndexManagerView.coffee | 2 +- .../indexmanager/views/IndexView.coffee | 2 +- .../loading/GlobalLoadingIndicator.coffee | 2 +- .../webadmin/modules/moreinfo/MoreInfo.coffee | 2 +- .../serverinfo/ServerInfoRouter.coffee | 2 +- .../serverinfo/models/ServerInfo.coffee | 2 +- .../serverinfo/views/ServerInfoView.coffee | 2 +- .../modules/splash/SplashScreen.coffee | 2 +- .../neo4j/webadmin/utils/FormHelper.coffee | 2 +- .../webadmin/utils/ItemUrlResolver.coffee | 2 +- .../neo4j/webadmin/utils/Keys.coffee | 2 +- .../ribcage/LocalCollection.coffee | 2 +- .../coffeescript/ribcage/LocalModel.coffee | 2 +- .../main/coffeescript/ribcage/Model.coffee | 2 +- .../main/coffeescript/ribcage/Router.coffee | 2 +- .../src/main/coffeescript/ribcage/View.coffee | 2 +- .../main/coffeescript/ribcage/forms.coffee | 2 +- .../ribcage/security/HtmlEscaper.coffee | 2 +- .../ribcage/storage/CookieStorage.coffee | 2 +- .../ribcage/storage/LocalModelStore.coffee | 2 +- .../ribcage/storage/LocallyStoredModel.coffee | 2 +- .../coffeescript/ribcage/time/Timer.coffee | 2 +- .../coffeescript/ribcage/ui/Dialog.coffee | 2 +- .../coffeescript/ribcage/ui/Dropdown.coffee | 2 +- .../coffeescript/ribcage/ui/FilterList.coffee | 2 +- .../ribcage/ui/ImagePicker.coffee | 2 +- .../coffeescript/ribcage/ui/LineChart.coffee | 2 +- .../ribcage/ui/LineChartTimeTicker.coffee | 2 +- .../coffeescript/ribcage/ui/Overlay.coffee | 2 +- .../coffeescript/ribcage/ui/Tooltip.coffee | 2 +- .../ribcage/ui/TestLineChartTimeTicker.coffee | 2 +- .../main/coffeescript/visualization.coffee | 2 +- .../src/main/coffeescript/webadmin.coffee | 2 +- .../webadmin/console/CypherSession.java | 20 +--------- .../resources/webadmin-html/htmlbrowse.js | 2 +- .../webadmin-html/js/visualization.js | 2 +- ...estfulGraphDatabasePagedTraversalTest.java | 21 ---------- .../console/CypherSessionDocTest.java | 19 ---------- community/shell/NOTICE.txt | 2 +- community/udc/NOTICE.txt | 2 +- cypher-plugin/NOTICE.txt | 2 +- enterprise/NOTICE.txt | 2 +- enterprise/backup/NOTICE.txt | 2 +- enterprise/cluster/NOTICE.txt | 2 +- enterprise/com/NOTICE.txt | 2 +- enterprise/consistency-check/NOTICE.txt | 2 +- .../enterprise-performance-tests/NOTICE.txt | 2 +- enterprise/ha/NOTICE.txt | 2 +- .../kernel/ha/cluster/zoo/ZooClient.java | 19 ---------- enterprise/neo4j-enterprise/NOTICE.txt | 2 +- enterprise/server-enterprise/NOTICE.txt | 2 +- manual/assemblies/contents.xml | 2 +- manual/assemblies/html.xml | 2 +- manual/assemblies/manpages-enterprise.xml | 2 +- manual/assemblies/manpages.xml | 2 +- manual/assemblies/upgrade.xml | 2 +- manual/assemblies/zip.xml | 2 +- manual/javadocs/NOTICE.txt | 2 +- packaging/NOTICE.txt | 2 +- .../installer-debian/NOTICE.txt | 2 +- .../main/resources/advanced/debian/copyright | 2 +- .../main/resources/arbiter/debian/copyright | 2 +- .../arbiter/debian/neo4j-arbiter-service | 2 +- .../src/main/resources/common/neo4j-service | 2 +- .../main/resources/community/debian/copyright | 2 +- .../resources/enterprise/debian/copyright | 2 +- .../src/main/resources/init.d/neo4j | 2 +- packaging/installer-qa/NOTICE.txt | 2 +- packaging/installer-windows/NOTICE.txt | 2 +- packaging/neo4j-desktop/NOTICE.txt | 2 +- .../neo4j-desktop/neo4j-desktop.install4j | 2 +- .../distribution/text/community/NOTICE.txt | 2 +- packaging/qa/NOTICE.txt | 2 +- .../qa/features/StartAndStopFeatureTest.java | 2 +- .../neo4j/qa/features/support/FileHelper.java | 2 +- .../qa/features/support/ProcessHelper.java | 2 +- packaging/standalone/NOTICE.txt | 2 +- .../distribution/shell-scripts/bin/Neo4j.bat | 2 +- .../shell-scripts/bin/Neo4jArbiter.bat | 2 +- .../shell-scripts/bin/Neo4jBackup.bat | 2 +- .../shell-scripts/bin/Neo4jCoordinator.bat | 2 +- .../bin/Neo4jCoordinatorShell.bat | 2 +- .../shell-scripts/bin/Neo4jShell.bat | 2 +- .../distribution/shell-scripts/bin/base.bat | 2 +- .../main/distribution/shell-scripts/bin/neo4j | 2 +- .../shell-scripts/bin/neo4j-arbiter | 2 +- .../shell-scripts/bin/neo4j-backup | 2 +- .../shell-scripts/bin/neo4j-coordinator | 2 +- .../shell-scripts/bin/neo4j-coordinator-shell | 2 +- .../shell-scripts/bin/neo4j-shell | 2 +- .../main/distribution/shell-scripts/bin/utils | 2 +- .../distribution/text/advanced/NOTICE.txt | 2 +- .../distribution/text/community/NOTICE.txt | 2 +- .../distribution/text/enterprise/NOTICE.txt | 2 +- 222 files changed, 211 insertions(+), 464 deletions(-) diff --git a/advanced/NOTICE.txt b/advanced/NOTICE.txt index 9be6762531d6d..a2e95f7267f6c 100644 --- a/advanced/NOTICE.txt +++ b/advanced/NOTICE.txt @@ -1,5 +1,5 @@ Neo4j -Copyright © 2002-2012 Network Engine for Objects in Lund AB (referred to +Copyright © 2002-2015 Network Engine for Objects in Lund AB (referred to in this notice as “Neo Technology”) [http://neotechnology.com] diff --git a/advanced/management/NOTICE.txt b/advanced/management/NOTICE.txt index edec1f4f1f78d..1c61772e5690a 100644 --- a/advanced/management/NOTICE.txt +++ b/advanced/management/NOTICE.txt @@ -1,5 +1,5 @@ Neo4j -Copyright © 2002-2014 Network Engine for Objects in Lund AB (referred to +Copyright © 2002-2015 Network Engine for Objects in Lund AB (referred to in this notice as "Neo Technology") [http://neotechnology.com] diff --git a/advanced/neo4j-advanced/NOTICE.txt b/advanced/neo4j-advanced/NOTICE.txt index 1eb64df414c70..a567485f26c70 100644 --- a/advanced/neo4j-advanced/NOTICE.txt +++ b/advanced/neo4j-advanced/NOTICE.txt @@ -1,5 +1,5 @@ Neo4j -Copyright © 2002-2014 Network Engine for Objects in Lund AB (referred to +Copyright © 2002-2015 Network Engine for Objects in Lund AB (referred to in this notice as "Neo Technology") [http://neotechnology.com] diff --git a/advanced/server-advanced/NOTICE.txt b/advanced/server-advanced/NOTICE.txt index b48625ec0ba94..a99fe04e64066 100644 --- a/advanced/server-advanced/NOTICE.txt +++ b/advanced/server-advanced/NOTICE.txt @@ -1,5 +1,5 @@ Neo4j -Copyright © 2002-2014 Network Engine for Objects in Lund AB (referred to +Copyright © 2002-2015 Network Engine for Objects in Lund AB (referred to in this notice as "Neo Technology") [http://neotechnology.com] diff --git a/advanced/server-advanced/pom.xml b/advanced/server-advanced/pom.xml index eb5e5a139a9c3..00262f80b1e02 100644 --- a/advanced/server-advanced/pom.xml +++ b/advanced/server-advanced/pom.xml @@ -1,6 +1,6 @@