Navigation Menu

Skip to content

Commit

Permalink
performance improvement on restricted class check.
Browse files Browse the repository at this point in the history
  • Loading branch information
tglman committed Feb 16, 2015
1 parent 8bbaaca commit d3f9d0e
Show file tree
Hide file tree
Showing 4 changed files with 20 additions and 9 deletions.
Expand Up @@ -17,6 +17,7 @@
import com.orientechnologies.orient.core.index.OIndex; import com.orientechnologies.orient.core.index.OIndex;
import com.orientechnologies.orient.core.index.OIndexManager; import com.orientechnologies.orient.core.index.OIndexManager;
import com.orientechnologies.orient.core.metadata.schema.clusterselection.OClusterSelectionStrategy; import com.orientechnologies.orient.core.metadata.schema.clusterselection.OClusterSelectionStrategy;
import com.orientechnologies.orient.core.metadata.security.OSecurityShared;
import com.orientechnologies.orient.core.record.impl.ODocument; import com.orientechnologies.orient.core.record.impl.ODocument;


/** /**
Expand Down Expand Up @@ -49,6 +50,7 @@ public class OImmutableClass implements OClass {
private OImmutableClass superClass; private OImmutableClass superClass;
// do not do it volatile it is already SAFE TO USE IT in MT mode. // do not do it volatile it is already SAFE TO USE IT in MT mode.
private Collection<OImmutableClass> baseClasses; private Collection<OImmutableClass> baseClasses;
private boolean restricted;


public OImmutableClass(OClass oClass, OImmutableSchema schema) { public OImmutableClass(OClass oClass, OImmutableSchema schema) {
isAbstract = oClass.isAbstract(); isAbstract = oClass.isAbstract();
Expand Down Expand Up @@ -119,6 +121,7 @@ public void init() {


} while (currentMapClass != null); } while (currentMapClass != null);
allPropertiesMap = Collections.unmodifiableMap(allPropsMap); allPropertiesMap = Collections.unmodifiableMap(allPropsMap);
this.restricted = isSubClassOf(OSecurityShared.RESTRICTED_CLASSNAME);


} }


Expand Down Expand Up @@ -667,4 +670,9 @@ private void initBaseClasses() {
baseClasses = result; baseClasses = result;
} }
} }

public boolean isRestricted() {
return restricted;
}

} }
Expand Up @@ -28,6 +28,7 @@
import com.orientechnologies.orient.core.exception.OSecurityException; import com.orientechnologies.orient.core.exception.OSecurityException;
import com.orientechnologies.orient.core.hook.ODocumentHookAbstract; import com.orientechnologies.orient.core.hook.ODocumentHookAbstract;
import com.orientechnologies.orient.core.metadata.schema.OClass; import com.orientechnologies.orient.core.metadata.schema.OClass;
import com.orientechnologies.orient.core.metadata.schema.OImmutableClass;
import com.orientechnologies.orient.core.record.impl.ODocument; import com.orientechnologies.orient.core.record.impl.ODocument;
import com.orientechnologies.orient.core.record.impl.ODocumentInternal; import com.orientechnologies.orient.core.record.impl.ODocumentInternal;


Expand All @@ -47,8 +48,8 @@ public DISTRIBUTED_EXECUTION_MODE getDistributedExecutionMode() {


@Override @Override
public RESULT onRecordBeforeCreate(final ODocument iDocument) { public RESULT onRecordBeforeCreate(final ODocument iDocument) {
final OClass cls = ODocumentInternal.getImmutableSchemaClass(iDocument); final OImmutableClass cls = ODocumentInternal.getImmutableSchemaClass(iDocument);
if (cls != null && cls.isSubClassOf(OSecurityShared.RESTRICTED_CLASSNAME)) { if (cls != null && cls.isRestricted()) {
String fieldNames = cls.getCustom(OSecurityShared.ONCREATE_FIELD); String fieldNames = cls.getCustom(OSecurityShared.ONCREATE_FIELD);
if (fieldNames == null) if (fieldNames == null)
fieldNames = OSecurityShared.ALLOW_ALL_FIELD; fieldNames = OSecurityShared.ALLOW_ALL_FIELD;
Expand Down Expand Up @@ -102,8 +103,8 @@ public RESULT onRecordBeforeDelete(final ODocument iDocument) {


@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
protected boolean isAllowed(final ODocument iDocument, final String iAllowOperation, final boolean iReadOriginal) { protected boolean isAllowed(final ODocument iDocument, final String iAllowOperation, final boolean iReadOriginal) {
final OClass cls = ODocumentInternal.getImmutableSchemaClass(iDocument); final OImmutableClass cls = ODocumentInternal.getImmutableSchemaClass(iDocument);
if (cls != null && cls.isSubClassOf(OSecurityShared.RESTRICTED_CLASSNAME)) { if (cls != null && cls.isRestricted()) {


final ODatabaseDocument db = ODatabaseRecordThreadLocal.INSTANCE.get(); final ODatabaseDocument db = ODatabaseRecordThreadLocal.INSTANCE.get();


Expand Down
Expand Up @@ -40,6 +40,7 @@
import com.orientechnologies.orient.core.metadata.OMetadataInternal; import com.orientechnologies.orient.core.metadata.OMetadataInternal;
import com.orientechnologies.orient.core.metadata.schema.OClass; import com.orientechnologies.orient.core.metadata.schema.OClass;
import com.orientechnologies.orient.core.metadata.schema.OGlobalProperty; import com.orientechnologies.orient.core.metadata.schema.OGlobalProperty;
import com.orientechnologies.orient.core.metadata.schema.OImmutableClass;
import com.orientechnologies.orient.core.metadata.schema.OImmutableSchema; import com.orientechnologies.orient.core.metadata.schema.OImmutableSchema;
import com.orientechnologies.orient.core.metadata.schema.OProperty; import com.orientechnologies.orient.core.metadata.schema.OProperty;
import com.orientechnologies.orient.core.metadata.schema.OSchema; import com.orientechnologies.orient.core.metadata.schema.OSchema;
Expand Down Expand Up @@ -87,7 +88,7 @@ public class ODocument extends ORecordAbstract implements Iterable<Entry<String,
protected transient List<WeakReference<ORecordElement>> _owners = null; protected transient List<WeakReference<ORecordElement>> _owners = null;
protected OImmutableSchema _schema; protected OImmutableSchema _schema;
private String _className; private String _className;
private OClass _immutableClazz; private OImmutableClass _immutableClazz;
private int _immutableSchemaVersion = 1; private int _immutableSchemaVersion = 1;


/** /**
Expand Down Expand Up @@ -2039,7 +2040,7 @@ protected void fillClassIfNeed(final String iClassName) {
setClassNameIfExists(iClassName); setClassNameIfExists(iClassName);
} }


protected OClass getImmutableSchemaClass() { protected OImmutableClass getImmutableSchemaClass() {
if (_className == null) if (_className == null)
fetchClassName(); fetchClassName();


Expand All @@ -2052,11 +2053,11 @@ protected OClass getImmutableSchemaClass() {


if (_immutableClazz == null) { if (_immutableClazz == null) {
_immutableSchemaVersion = immutableSchema.getVersion(); _immutableSchemaVersion = immutableSchema.getVersion();
_immutableClazz = immutableSchema.getClass(_className); _immutableClazz = (OImmutableClass) immutableSchema.getClass(_className);
} else { } else {
if (_immutableSchemaVersion < immutableSchema.getVersion()) { if (_immutableSchemaVersion < immutableSchema.getVersion()) {
_immutableSchemaVersion = immutableSchema.getVersion(); _immutableSchemaVersion = immutableSchema.getVersion();
_immutableClazz = immutableSchema.getClass(_className); _immutableClazz = (OImmutableClass) immutableSchema.getClass(_className);
} }
} }
} }
Expand Down
Expand Up @@ -27,6 +27,7 @@
import com.orientechnologies.orient.core.db.record.ORecordElement; import com.orientechnologies.orient.core.db.record.ORecordElement;
import com.orientechnologies.orient.core.metadata.schema.OClass; import com.orientechnologies.orient.core.metadata.schema.OClass;
import com.orientechnologies.orient.core.metadata.schema.OGlobalProperty; import com.orientechnologies.orient.core.metadata.schema.OGlobalProperty;
import com.orientechnologies.orient.core.metadata.schema.OImmutableClass;
import com.orientechnologies.orient.core.metadata.schema.OType; import com.orientechnologies.orient.core.metadata.schema.OType;


public class ODocumentInternal { public class ODocumentInternal {
Expand All @@ -51,7 +52,7 @@ public static boolean rawContainsField(final ODocument oDocument, final String i
return oDocument.rawContainsField(iFiledName); return oDocument.rawContainsField(iFiledName);
} }


public static OClass getImmutableSchemaClass(final ODocument oDocument) { public static OImmutableClass getImmutableSchemaClass(final ODocument oDocument) {
return oDocument.getImmutableSchemaClass(); return oDocument.getImmutableSchemaClass();
} }


Expand Down

0 comments on commit d3f9d0e

Please sign in to comment.