[ 
https://issues.apache.org/jira/browse/OAK-9134?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17152813#comment-17152813
 ] 

Marcel Reutegger commented on OAK-9134:
---------------------------------------

[~corderob], we usually don't use environment variables to control behaviour, 
but rather system properties.

The change in {{VersionableState}} looks good. I was wondering if the node type 
check could be cached. Instead of checking the node type whenever a frozen node 
is created for a version, just do it once and then remember it in the 
{{VersionableState}}.

For the change in {{InitialContent}}, we should probably clarify what the exact 
behaviour should be. The way I see it, new repositories should get 
nt:frozenNode as defined in JCR 2.0. Existing repositories initialized before 
this change should continue using a nt:frozenNode definition that extends from 
mix:referenceable. This should be automatic and not need any intervention with 
a system property. Still, it would be good to have a system property that 
allows a user to keep the current definition on a fresh repository if really 
needed.

This would mean {{InitialContent.registerBuiltIn()}} needs some additional 
logic that checks whether the repository is initialized for the first time. 
This could be done by checking for a node at path 
{{/jcr:system/jcr:nodeTypes/nt:frozenNode}}. If it doesn't exist, then this 
indicates the built in node types have not been registered yet. As for the two 
CND variants that are needed depending on the case, {{builtin_nodetypes.cnd}} 
could be the new version with nt:frozenNode *not* extending from 
mix:referenceable. When {{registerBuiltIn()}} checks for 
{{/jcr:system/jcr:nodeTypes/nt:frozenNode}}, it could also read the supertypes 
and then decide to patch the {{builtin_nodetypes.cnd}} accordingly before it is 
passed to {{NodeTypeRegistry.register()}}.

> Remove mix:referenceable from nt:frozenNode definition
> ------------------------------------------------------
>
>                 Key: OAK-9134
>                 URL: https://issues.apache.org/jira/browse/OAK-9134
>             Project: Jackrabbit Oak
>          Issue Type: Improvement
>          Components: core, jcr
>            Reporter: José Andrés Cordero Benítez
>            Priority: Minor
>              Labels: patch
>         Attachments: OAK-9134-remove-referenceable-from-test.patch, 
> OAK-9134-remove-referenceable-frozenNode.patch
>
>
> One of the changes between JCR 1.0 and JCR 2.0 is the definition of 
> nt:frozenNode. In JCR 1.0 the node type extends from mix:referenceable, while 
> in JCR 2.0 it does [not 
> anymore|https://docs.adobe.com/docs/en/spec/jcr/2.0/3_Repository_Model.html#3.13.4.1%20nt:frozenNode].
> Oak currently uses a nt:frozenNode definition that extends from 
> mix:referenceable. This adds quite a bit of overhead because each node 
> written under a JCR version gets a jcr:uuid, which is indexed by default.
> The proposal is to remove the supertype "mix:referenceable" from 
> nt:frozenNode.
> Removing this supertype, the frozenNodes wouldn't have a "jcr:uuid" field, 
> which at the end is not used, and allows to reduce the size of the index.



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to