This post is going to cover how to upgrade an Alfresco instance without using the data in the content store. This is a useful scenario to quickly validate an upgrade, as it is usually costly to clone the data on large repositories.
For instance, imagine you want to make a clone of a production environment to test an upgrade, and the repository (content store) has a several TB of data, it will require a lot of time (and money) to make a clone of such amount of content. However, following this method you'll speed up the upgrading process as it won't be necessary to use the content.
Needless to say this is a method to quickly do an upgrade ONLY for testing purposes. The recommended way to upgrade an Alfresco instance is fully documented here.
Having said that, when using this method and bootstrapping the new version for the first time without the data, Alfresco will be able to complete the process but content won't be accessible (metadata will). This is still useful to estimate how long it takes to upgrade the DB or to make simple functionality tests that aren't content dependant.
The instance used on this post is a vanilla version of Alfresco 4.2.8 that will be upgraded to 5.2.4.
These are the steps to follow:
The only binary files from the content store that Alfresco needs to bootstrap and/or do an upgrade are those linked to the descriptor node. Depending on the Alfresco version the descriptor node has 2 or 3 binary files associated.
The quickest way to identify the binary files associated with the descriptor node is by executing the following SQL query:
select uuid,content_url from alf_node n,alf_node_properties np,alf_content_url cu,alf_content_data cd where n.id=np.node_id and np.long_value=cd.id and cd.content_url_id=cu.id and n.uuid IN (select n.uuid from alf_node n,alf_store s where n.store_id=s.id AND s.identifier='system');
The output of the previous query in the Alfresco instance used in this post is:
uuid | content_url |
---|---|
f6274202-4b7f-442f-8032-c3755974ffea | store://2018/11/8/15/34/8b30b10b-e27a-4fe4-8b3e-c89798c6e3e0.bin |
f6274202-4b7f-442f-8032-c3755974ffea | store://2018/11/8/15/38/84f6eaf2-3cb7-44f3-8caf-2c9b7ae73a78.bin |
f6274202-4b7f-442f-8032-c3755974ffea | store://2018/11/8/15/35/ae13363d-79a9-42ac-b2cc-99366a76eaf7.bin |
Therefore the binaries required from the content store to be able to upgrade/bootstrap the Alfresco instance in this post are:
To have a better context of the nature of those binary files, you can find the descriptor node in Alfresco using the nodebrowser. In this case, the noderef will be:
system://system/f6274202-4b7f-442f-8032-c3755974ffea
The following screenshot shows how to search the descriptor node using the nodebrowser:
This screenshot shows all the properties for the descriptor node:
Notice that the descriptor node has the following properties associated with the binary files found with the SQL query:
(update 15/5/19)
The descriptor node can also be found using the Alfresco (slingshot) API as shown in the following curl command:
$ curl -u admin:admin "http://localhost:8080/alfresco/s/slingshot/node/search?q=%3Dsys%5C%3Aname%3A%27Main%20Repository%27&lang=db-afts&store=system%3A%2F%2Fsystem"
{
"numResults": 1,
"results": [
{
"nodeRef": "system://system/02b5958c-f13f-489b-ac3e-38faa5e07d54",
"qnamePath": {
"name": "\/{http:\/\/www.alfresco.org\/model\/system\/1.0}descriptor-current",
"prefixedName": "\/sys:descriptor-current"
},
"name": {
"name": "{http:\/\/www.alfresco.org\/model\/system\/1.0}descriptor-current",
"prefixedName": "sys:descriptor-current"
},
"parentNodeRef": ""
}
],
"searchElapsedTime": 5
}
The above query is using "db-afts" language (in other words, querying the DB) and the query itself is:
=sys\:name:'Main Repository'
Once the descriptor node has been identified, using again Slingshot API it's possible to get the path of all associated binary files:
curl -u admin:admin "http://localhost:8080/alfresco/s/slingshot/node/system/system/02b5958c-f13f-489b-ac3e-38faa5e07d54?"
...
"dataType": "{http:\/\/www.alfresco.org\/model\/dictionary\/1.0}content",
"value": "contentUrl=store://2019/5/15/11/35/306bd5e6-0ef7-4166-b2de-f27d180a0ee4.bin|mimetype=application/octet-stream|size=904|encoding=UTF-8|locale=en_GB_|id=145"
....
"dataType": "{http:\/\/www.alfresco.org\/model\/dictionary\/1.0}content",
"value": "contentUrl=store://2019/5/15/11/36/bc349c8b-17df-4911-9b58-d92df379debb.bin|mimetype=application/octet-stream|size=650|encoding=UTF-8|locale=en_GB_|id=245"
,
....
"dataType": "{http:\/\/www.alfresco.org\/model\/dictionary\/1.0}content",
"value": "contentUrl=store://2019/5/15/11/35/358cc878-b6f2-4370-8f7b-7dbd9529e9a4.bin|mimetype=text/plain|size=371|encoding=UTF8|locale=en_GB_|id=5"
,
.....
For this test, Alfresco will be upgraded to 5.2.4 therefore we need to have an instance of that version ready to be used for the upgrade.
This instance need the following:
Once the new instance with Alfresco 5.2.4 is ready with the requirements of step 2, we just need to bootstrap it. Alfresco will upgrade the database and will create new files on the content store. No warnings regarding missing files will be seen in the logs.
Moreover, when upgrading from Alfresco 4.2.x version to 5.2.x, new configuration files such as user dashboards will be created, therefore we will be able to log in into share with admin user with no issues.
The descriptor node will be updated with the new Alfresco version (5.2.4) and two new binaries linked to this node will be created as shown in the following screenshot:
For further updates you only need to repeat the steps in this post.
Ask for and offer help to other Alfresco Content Services Users and members of the Alfresco team.
By using this site, you are agreeing to allow us to collect and use cookies as outlined in Alfresco’s Cookie Statement and Terms of Use (and you have a legitimate interest in Alfresco and our products, authorizing us to contact you in such methods). If you are not ok with these terms, please do not use this website.