Skip to content

Commit b8f7403

Browse files
Merge branch 'dev' into dev-remove-introduced-labels
2 parents 3b68f9f + 76e9ae4 commit b8f7403

File tree

11 files changed

+363
-194
lines changed

11 files changed

+363
-194
lines changed

modules/ROOT/pages/authentication-authorization/ldap-integration.adoc

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -197,7 +197,7 @@ dbms.security.ldap.authorization.system_username=cn=search-account,cn=Users,dc=e
197197
+
198198
[source, properties]
199199
----
200-
dbms.security.ldap.authorization.system_password=mypassword
200+
dbms.security.ldap.authorization.system_password=your_password
201201
----
202202

203203
.. Configure which attribute to search for by adding the following lines to the _neo4j.conf_ file (replacing `myattribute` with the actual attribute name):
@@ -490,7 +490,7 @@ ldapsearch -v -H ldap://myactivedirectory.example.com:389 -x -D cn=john,cn=Users
490490
----
491491
# ldapsearch -v -H ldap://<dbms.security.ldap.host> -x -D <dbms.security.ldap.authorization.system_username> -w <dbms.security.ldap.authorization.system_password> -b <dbms.security.ldap.authorization.user_search_base> "<dbms.security.ldap.authorization.user_search_filter>" <dbms.security.ldap.authorization.group_membership_attributes>
492492
493-
ldapsearch -v -H ldap://myactivedirectory.example.com:389 -x -D cn=search-account,cn=Users,dc=example,dc=com -w mypassword -b cn=Users,dc=example,dc=com "(&(objectClass=*)(cn=john))" memberOf
493+
ldapsearch -v -H ldap://myactivedirectory.example.com:389 -x -D cn=search-account,cn=Users,dc=example,dc=com -w your_password -b cn=Users,dc=example,dc=com "(&(objectClass=*)(cn=john))" memberOf
494494
----
495495

496496
. Verify that the value of the returned membership attribute is a group that is mapped to a role in `dbms.security.ldap.authorization.group_to_role_mapping`.

modules/ROOT/pages/clustering/databases.adoc

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -268,8 +268,8 @@ Neo4j 5.24 introduces the xref:procedures.adoc#procedure_dbms_cluster_recreateDa
268268
* To change the database store to a specified backup, while keeping all the associated privileges for the database.
269269

270270
* To make your database write-available again after it has been lost (for example, due to a disaster).
271-
// See xref:clustering/disaster-recovery.adoc[] for more information.
272-
271+
See xref:clustering/disaster-recovery.adoc[Disaster recovery] for more information.
272+
273273
[CAUTION]
274274
====
275275
The recreate procedure works only for real user databases and not for composite databases, or the `system` database.
@@ -468,7 +468,7 @@ SHOW DATABASE foo;
468468
=== Seed from URI
469469

470470
This method seeds all servers with an identical seed from an external source, specified by the URI.
471-
The seed can either be a full backup, a differential backup (xref:clustering/databases.adoc#cloud-seed-provider[`CloudSeedProvider`] or a dump from an existing database.
471+
The seed can either be a full backup, a differential backup (xref:clustering/databases.adoc#cloud-seed-provider[`CloudSeedProvider`], or a dump from an existing database.
472472
The sources of seeds are called _seed providers_.
473473

474474
The mechanism is pluggable, allowing new sources of seeds to be supported (see link:https://www.neo4j.com/docs/java-reference/current/extending-neo4j/project-setup/#extending-neo4j-plugin-seed-provider[Java Reference -> Implement custom seed providers] for more information).

modules/ROOT/pages/clustering/disaster-recovery.adoc

Lines changed: 260 additions & 110 deletions
Large diffs are not rendered by default.

modules/ROOT/pages/clustering/monitoring/status-check.adoc

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ CALL dbms.cluster.statusCheck(databases :: LIST<STRING>, timeoutMilliseconds = n
3636
| Name | Type | Description
3737
| databases | List<String> | Databases for which the status check should run.
3838
Providing an empty list runs the status check for all *clustered* databases on that server, i.e. it does not run on singles or secondaries.
39-
| timeoutMilliseconds | Integer | How long to allow for replication, before returning it was unsuccessful.
39+
| timeoutMilliseconds | Integer | Specifies the maximum wait time for replication before marking it unsuccessful.
4040
Default value is 1000 milliseconds.
4141
|===
4242

@@ -58,7 +58,7 @@ The procedure returns a row for all primary members of all the requested databas
5858
| recognisedLeaderTerm | Integer | The term of the perceived leader of each primary member.
5959
If the members report different leaders, the one with the highest term should be trusted.
6060
| requester | Boolean | Whether a server is the requester or not.
61-
| error | String | Contains the error message if one is present.
61+
| error | String | Contains any error message if present.
6262
An example of an error is that one or more of the requested databases do not exist on the requester.
6363
|===
6464

modules/ROOT/pages/database-administration/standard-databases/delete-databases.adoc

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -85,12 +85,17 @@ By appending `DUMP DATA` to the command `DROP DATABASE`, you can create a dump o
8585
DROP DATABASE movies DUMP DATA
8686
----
8787

88-
These dumps are equivalent to those produced by xref:backup-restore/offline-backup.adoc[`neo4j-admin database dump`] and can be similarly restored using the xref:backup-restore/restore-dump.adoc[`neo4j-admin database load`] command.
89-
9088
In Neo4j, dumps can be stored in the directory specified by the xref:configuration/configuration-settings.adoc#config_server.directories.dumps.root[`server.directories.dumps.root`] setting (by default, the path for storing dumps is xref:configuration/file-locations.adoc#data[`<neo4j-home>/data/dumps`]).
89+
You can use dumps to create databases through the xref:clustering/databases.adoc#cluster-seed-uri[Seed from URI approach].
9190

9291
The option `DESTROY DATA` explicitly requests the default behavior of the command.
9392

93+
[NOTE]
94+
====
95+
The dumps produced by `DUMP DATA` are equivalent to those produced by xref:backup-restore/offline-backup.adoc[`neo4j-admin database dump`].
96+
You can also restore them using the xref:backup-restore/restore-dump.adoc[`neo4j-admin database load`] command.
97+
====
98+
9499
[[delete-existing-db-with-dump]]
95100
=== Delete a database with `IF{nbsp}EXISTS` and `DUMP DATA`/`DESTROY DATA`
96101

modules/ROOT/pages/database-administration/standard-databases/errors.adoc

Lines changed: 22 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -160,74 +160,44 @@ It produces a database dump that can be further examined and potentially repaire
160160
[[quarantine]]
161161
== Quarantined databases
162162

163-
There are two ways to get a database into a `quarantined` state:
164-
165-
* By using the xref:procedures.adoc#procedure_dbms_quarantineDatabase[`dbms.quarantineDatabase`] procedure locally to isolate a specific database.
166-
The procedure must be executed on the instance whose copy of the database you want to quarantine.
167-
A reason for that can be, for example, when a database is unable to start on a given instance due to a file system permissions issue with the volume where the database is located or when a recently started database begins to log errors.
168-
The quarantine state renders the database inaccessible on that instance and prevents its state from being changed, for example, with the `START DATABASE` command.
169-
+
170-
[NOTE]
171-
====
172-
If running in a cluster, database management commands such as `START DATABASE foo` will still take effect on the instances which have *not* quarantined `foo`.
173-
====
174-
175-
* When a database encounters a severe error during its normal run, which prevents it from a further operation, Neo4j stops that database and brings it into a `quarantined` state.
163+
When a database encounters a severe error during its normal run, which prevents it from a further operation, Neo4j stops that database and brings it into a `quarantined` state.
176164
Meaning, it is not possible to restart it with a simple `START DATABASE` command.
177-
You have to execute `CALL dbms.quarantineDatabase(databaseName, false)` on the instance with the failing database in order to lift the quarantine.
165+
You have to run `CALL dbms.unquarantineDatabase(server, database, operation)` to lift the quarantine, specifying as `server` the instance with the failing database.
178166

179-
After lifting the quarantine, the instance will automatically try to bring the database to the desired state.
167+
The `dbms.unquarantineDatabase()` procedure is introduced in Neo4j 2025.01 to replace the now-deprecated xref:procedures.adoc#procedure_dbms_quarantineDatabase[`dbms.quarantineDatabase`()].
180168

181-
[NOTE]
182-
====
183-
It is recommended to run the quarantine procedure over the `bolt://` protocol rather than `neo4j://`, which may route requests to unexpected instances.
184-
====
169+
After lifting the quarantine, the instance will automatically try to bring the database to the desired state.
185170

186171
*Syntax:*
187172

188-
`CALL dbms.quarantineDatabase(databaseName,setStatus,reason)`
173+
`CALL dbms.unquarantineDatabase(server, database, operation)`
189174

190-
*Arguments:*
175+
*Input arguments:*
191176

192177
[options="header"]
193178
|===
194179
| Name | Type | Description
195-
| `databaseName` | String | The name of the database that will be put into or removed from quarantine.
196-
| `setStatus` | Boolean | `true` for placing the database into quarantine; `false` for lifting the quarantine.
197-
| `reason` | String | (Optional) The reason for placing the database in quarantine.
180+
| `server` | String | The identifier of the server where the quarantine for database will be lifted.
181+
| `database` | String | The name of the database that will be put into or removed from quarantine.
182+
| `operation` | String | Optional operation to apply while lifting the quarantine.
198183
|===
199184

200-
*Returns:*
185+
The possible values for the optional operation are:
201186

202-
[options="header"]
203-
|===
204-
| Name | Type | Description
205-
| `databaseName` | String | The name of the database.
206-
| `quarantined` | String | Actual state.
207-
| `result` | String | Result of the last operation.
208-
The result contains the user, the time, and the reason for the quarantine.
209-
|===
187+
* `keepStateKeepStore` -- do nothing; leave store and cluster state as they are.
188+
* `replaceStateKeepStore` -- join as a new member, clearing the current cluster state but keeping the store.
189+
* `replaceStateReplaceStore` -- join as a new member, clearing both the current cluster state and the store.
210190

211-
[NOTE]
212-
====
213-
The `dbms.quarantineDatabase` procedure replaces xref:procedures.adoc#procedure_dbms_cluster_quarantinedatabase[`dbms.cluster.quarantineDatabase`], which has been deprecated in Neo4j 4.3 and will be removed with the next major version.
214-
====
191+
If you choose to clear the current cluster state, the server will try to join as a new member,
192+
but this joining can succeed if and only if there is a majority of old members "letting" the new members in.
193+
Let's assume our cluster has a topology with three primaries.
194+
If there is only one server in `QUARANTINED` mode, then it is safe to choose `replaceStateKeepStore` or `replaceStateReplaceStore`.
195+
If there are two servers in `QUARANTINED` mode, then you should not use concurrently `replaceStateKeepStore` or `replaceStateReplaceStore` for both servers because there would be no majority to let them in.
215196

216-
.Quarantine a database
217-
[source, cypher]
218-
----
219-
neo4j@system> CALL dbms.quarantineDatabase("foo",true);
220-
----
221-
[queryresult]
222-
----
223-
+--------------------------------------------------------------------------------------+
224-
| databaseName | quarantined | result |
225-
+--------------------------------------------------------------------------------------+
226-
| "foo" | TRUE | "By neo4j at 2020-10-15T15:10:41.348Z: No reason given" |
227-
+--------------------------------------------------------------------------------------+
197+
*Return arguments:*
198+
199+
The procedure doesn't return any value.
228200

229-
3 row available after 100 ms, consumed after another 6 ms
230-
----
231201

232202
.Check if a database is quarantined
233203
[source, cypher]
@@ -251,7 +221,7 @@ neo4j@system> SHOW DATABASE foo;
251221
====
252222
A `quarantined` state is persisted for user databases.
253223
This means that if a database is quarantined, it will remain so even if that Neo4j instance is restarted.
254-
You can remove it only by running the xref:procedures.adoc#procedure_dbms_quarantineDatabase[`dbms.quarantineDatabase`] procedure on the instance where the quarantined database is located, passing `false` for the `setStatus` parameter.
224+
You can remove it only by running the xref:procedures.adoc#procedure_dbms_unquarantineDatabase[`dbms.unquarantineDatabase()`] procedure.
255225
256226
The one exception to this rule is for the built-in `system` database.
257227
Any quarantine for that database is removed automatically after instance restart.

modules/ROOT/pages/docker/configuration.adoc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -143,7 +143,7 @@ docker build --file /example/Dockerfile --tag neo4j:{neo4j-version-exact}-enterp
143143
144144
# Create and run a container based on the custom image:
145145
146-
docker run --interactive --tty --name custom-container-1 -p7687:7687 -p7474:7474 -p7473:7473 --env NEO4J_AUTH=neo4j/password --env NEO4J_ACCEPT_LICENSE_AGREEMENT=yes neo4j:{neo4j-version-exact}-enterprise-custom-container-1
146+
docker run --interactive --tty --name custom-container-1 -p7687:7687 -p7474:7474 -p7473:7473 --env NEO4J_AUTH=neo4j/your_password --env NEO4J_ACCEPT_LICENSE_AGREEMENT=yes neo4j:{neo4j-version-exact}-enterprise-custom-container-1
147147
----
148148

149149
The recommended best practices and methods for building efficient Docker images can be found at link:https://docs.docker.com/develop/develop-images/dockerfile_best-practices/[the Docker documentation -> Best practices for writing Dockerfiles].

modules/ROOT/pages/docker/operations.adoc

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -232,7 +232,7 @@ docker run --rm \
232232
--volume /path/to/local/examples:/examples \
233233
--publish=7474:7474 \
234234
--publish=7687:7687 \
235-
--env NEO4J_AUTH=neo4j/<password> \
235+
--env NEO4J_AUTH=neo4j/your_password \
236236
neo4j:{neo4j-version-exact}
237237
238238
# Run the Cypher Shell tool with the --file option passing the example.cypher file:
@@ -251,7 +251,7 @@ docker run --rm \
251251
--volume /path/to/local/examples:/examples \
252252
--publish=7474:7474 \
253253
--publish=7687:7687 \
254-
--env NEO4J_AUTH=neo4j/<password> \
254+
--env NEO4J_AUTH=neo4j/your_password \
255255
neo4j:{neo4j-version-exact}
256256
257257
# Use the container ID or name to get into the container, and then, run the cypher-shell command and authenticate.

modules/ROOT/pages/kubernetes/operations/image-pull-secret.adoc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ image:
5959
imageCredentials:
6060
- registry: "https://index.docker.io/v1/"
6161
username: "myusername"
62-
password: "mypassword"
62+
password: "your_password"
6363
6464
name: "mysecret"
6565
----

modules/ROOT/pages/procedures.adoc

Lines changed: 57 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -636,19 +636,19 @@ It will still run with the `Admin` privilege, but that should be considered depr
636636
| *Syntax* 3+m| dbms.cluster.statusCheck(databases, timeoutMilliseconds) :: (database, serverId, serverName, address, replicationSuccessful, memberStatus, recognisedLeader, recognisedLeaderTerm, requester, error)
637637
| *Description* 3+a| Performs a rafted status check.
638638
.3+| *Input arguments* | *Name* | *Type* | *Description*
639-
| `databases` | `LIST<STRING>` | databases :: LIST<STRING>
640-
| `timeoutMilliseconds` | `INTEGER` | timeoutMilliseconds = null :: INTEGER
639+
| `databases` | `LIST<STRING>` | Databases for which the status check should run. Providing an empty list runs the status check for all clustered databases on that server, i.e. it does not run on singles or secondaries.
640+
| `timeoutMilliseconds` | `INTEGER` | Specifies the maximum wait time for replication before marking it unsuccessful. Default value is 1000 milliseconds.
641641
.11+| *Return arguments* | *Name* | *Type* | *Description*
642-
| `database` | `STRING` | database :: STRING
643-
| `serverId` | `STRING` | serverId :: STRING
644-
| `serverName` | `STRING` | serverName :: STRING
645-
| `address` | `STRING` | address :: STRING
646-
| `replicationSuccessful` | `BOOLEAN` | replicationSuccessful :: BOOLEAN
647-
| `memberStatus` | `STRING` | memberStatus :: STRING
648-
| `recognisedLeader` | `STRING` | recognisedLeader :: STRING
649-
| `recognisedLeaderTerm` | `INTEGER` | recognisedLeaderTerm :: INTEGER
650-
| `requester` | `BOOLEAN` | requester :: BOOLEAN
651-
| `error` | `STRING` | error :: STRING
642+
| `database` | `STRING` | The database for which a status check entry was replicated.
643+
| `serverId` | `STRING` | The UUID of the server, which did or did not participate in a successful replication of the status check entry.
644+
| `serverName` | `STRING` | The friendly name of the server, or its UUID if no name is set.
645+
| `address` | `STRING` | The address of the Bolt port for the server.
646+
| `replicationSuccessful` | `BOOLEAN` | Indicates if the server (on which the procedure is run) can replicate a transaction.
647+
| `memberStatus` | `STRING` | The status of each primary member.
648+
| `recognisedLeader` | `STRING` | The server id of the perceived leader of each primary member.
649+
| `recognisedLeaderTerm` | `INTEGER` | The term of the perceived leader of each primary member. If the members report different leaders, the one with the highest term should be trusted.
650+
| `requester` | `BOOLEAN` | Whether a server is the requester or not.
651+
| `error` | `STRING` | Contains any error message if present. An example of an error is that one or more of the requested databases do not exist on the requester.
652652
| *Mode* 3+| DBMS
653653
|===
654654

@@ -1056,7 +1056,7 @@ For more information, see the link:{neo4j-docs-base-uri}/cypher-manual/{page-ver
10561056
| *Mode* 3+| WRITE
10571057
|===
10581058

1059-
[role=label--enterprise-edition label--admin-only]
1059+
[role=label--enterprise-edition label--admin-only label--deprecated-2025.01]
10601060
[[procedure_dbms_quarantineDatabase]]
10611061
=== dbms.quarantineDatabase()
10621062

@@ -1076,6 +1076,43 @@ For more information, see the link:{neo4j-docs-base-uri}/cypher-manual/{page-ver
10761076
| *Mode* 3+| DBMS
10771077
|===
10781078

1079+
[NOTE]
1080+
====
1081+
It is recommended to use <<procedure_dbms_unquarantineDatabase,`dbms.unquarantineDatabase()`>> over `dbms.quarantineDatabase()` due to its improvements and new features (see the `operation` option ).
1082+
// The deprecated `dbms.quarantineDatabase()` procedure is available in Cypher 5, but not in Cypher 25.
1083+
====
1084+
1085+
[role=label--enterprise-edition label--admin-only label--new-2025.01]
1086+
[[procedure_dbms_unquarantineDatabase]]
1087+
=== dbms.unquarantineDatabase()
1088+
1089+
1090+
.Details
1091+
|===
1092+
| *Syntax* 3+m| dbms.unquarantineDatabase(server, databaseName, operation) :: ()
1093+
| *Description* 3+a| Lift quarantine from a database on a given server.
1094+
.4+| *Input arguments* | *Name* | *Type* | *Description*
1095+
| `server` | `STRING` | The identifier of the server where the quarantine for database will be lifted.
1096+
| `database` | `STRING` | The name of the database for the quarantine will be lifted.
1097+
| `operation` | `STRING` | Optional operation to apply while lifting the quarantine.
1098+
| *Mode* 3+| DBMS
1099+
|===
1100+
1101+
[NOTE]
1102+
====
1103+
The possible values for the optional operation are:
1104+
1105+
* `keepStateKeepStore` -- do nothing; leave store and cluster state as they are.
1106+
* `replaceStateKeepStore` -- join as a new member, clearing the current cluster state but keeping the store.
1107+
* `replaceStateReplaceStore` -- join as a new member, clearing both the current cluster state and the store.
1108+
1109+
If you choose to clear the current cluster state, the server will try to join as a new member,
1110+
but this joining can succeed if and only if there is a majority of old members "letting" the new members in.
1111+
Let's assume our cluster has a topology with three primaries.
1112+
If there is only one server in `QUARANTINED` mode, then it is safe to choose `replaceStateKeepStore` or `replaceStateReplaceStore`.
1113+
If there are two servers in `QUARANTINED` mode, then you should not use concurrently `replaceStateKeepStore` or `replaceStateReplaceStore` for both servers because there would be no majority to let them in.
1114+
====
1115+
10791116
[role=label--admin-only label--deprecated-5.9]
10801117
[[procedure_dbms_upgrade]]
10811118
=== dbms.upgrade()
@@ -1925,6 +1962,13 @@ Replaced by: xref:procedures.adoc#procedure_dbms_routing_getroutingtable[`dbms.r
19251962
Before Neo4j 5.23, the procedure can be run only with the `Admin` privileges. +
19261963
Replaced by xref:clustering/server-syntax.adoc#server-management-syntax[`ENABLE SERVER`].
19271964
1965+
// New in v6
1966+
| xref:procedures.adoc#procedure_dbms_quarantineDatabase[`dbms.quarantineDatabase()`]
1967+
| label:no[]
1968+
| label:yes[]
1969+
| label:admin-only[] label:deprecated[Deprecated in 2025.01] +
1970+
Replaced by xref:procedures.adoc#procedure_dbms_unquarantineDatabase[`dbms.unquarantineDatabase()`]
1971+
19281972
| xref:procedures.adoc#procedure_dbms_setDatabaseAllocator[`dbms.setDatabaseAllocator()`]
19291973
| label:no[]
19301974
| label:yes[]

0 commit comments

Comments
 (0)