You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@directory.apache.org by "Alex Karasulu (JIRA)" <ji...@apache.org> on 2007/08/25 04:53:30 UTC

[jira] Commented: (DIRSERVER-888) Add a verification before deleting an Object Class in the schema

    [ https://issues.apache.org/jira/browse/DIRSERVER-888?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_12522707 ] 

Alex Karasulu commented on DIRSERVER-888:
-----------------------------------------

I was just thinking about this as well as other schema issues on a drive home. I think we can implement this using a counter on the metaXXXX objects.  Basically we keep a special counter on attributeTypes and objectClasses called m-dependentEntries.  

When you add a new entry you increment the m-dependentEntries value of each schema entity that entry depends on.  When you delete an entry you decrement the counter on each dependent schema entity.  When you do modify operations it's slightly more complex since this means a potential mixture of increments and decrements.  Like if you do a modify that deletes a may list attribute from an entry then you decrement the counter on that attributeType.  If the modify also adds a new objectClass value and new attributes then you increment those schema entities etc.

This way we know if entries in the server depend on schema elements without performing an expensive search to find all entries in massive directories.  

Thoughts?



> Add a verification before deleting an Object Class in the schema
> ----------------------------------------------------------------
>
>                 Key: DIRSERVER-888
>                 URL: https://issues.apache.org/jira/browse/DIRSERVER-888
>             Project: Directory ApacheDS
>          Issue Type: Improvement
>    Affects Versions: 1.5.0
>            Reporter: Pierre-Arnaud Marcelot
>             Fix For: 1.5.3
>
>
> While I was playing a little with the new dynamic schema in ADS 1.5, I found an interesting situation.
> Here's the scenario:
> I created a new AT called 'MyAT' and a new OC called 'MyOC' which has 'MyAT' in its May list.
> After a refresh of the Connection in LDAP Studio, I was able to create a new entry using 'MyOC' as OC. This entry was 'MyAT=test, dc=example, dc=com'.
> Then I was wondering how would react the server if I delete 'MyAT' from the schema.
> I got a warning telling me that an entity was depending on it (it was 'MyOC' of course).
> Very Great! :)
> Then I tried to delete 'MyOC'... and then... no warning...
> I could delete it successfully.
> After that, I was also able to delete 'MyAT', since there was no more dependency on it.
> That left my server with a pretty strange situation : having an entry depending on OC and AT that doesn't exists anymore in the schema...
> While trying to load children of 'dc=example, dc=com', I got an error : "Error while reading entry
>   [LDAP: error code 33 - failed on search operation: OID for name 'myoc' was not found within the OID registry]"
> I think it would be a good idea, before deleting an OC in the schema, to verify if there's not one (or more) entry depending on that OC.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.