This Bugzilla instance is a read-only archive of historic NetBeans bug reports. To report a bug in NetBeans please follow the project's instructions for reporting issues.

Bug 26370 - Possible stale extent names from getExtentNames()
Summary: Possible stale extent names from getExtentNames()
Status: RESOLVED FIXED
Alias: None
Product: java
Classification: Unclassified
Component: Unsupported (show other bugs)
Version: 3.x
Hardware: PC Windows XP
: P3 blocker (vote)
Assignee: Tomas Zezula
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2002-08-08 07:15 UTC by Mark McKinlay
Modified: 2002-09-05 12:54 UTC (History)
0 users

See Also:
Issue Type: DEFECT
Exception Reporter:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Mark McKinlay 2002-08-08 07:15:24 UTC
I wish to remove all model extents from the MDR. I do this 
as follows:
- Use MDRepository.getExtentNames() to get an array of 
extent names from the MDR.
- For each of these extent names I try to get the extent 
using MDRepository.getExtent(String) to get a RefPackage 
object
- On each RefPackage object I execute refDelete()

This works fine on some extents, but throws an exception 
on others. It seems that not all extent names returned 
from getExtentNames() are valid i.e. some of the names are 
stale and have no representation in the underlying MDR 
storage. All extent names have been created somewhere 
earlier in processing, but there may not be any valid java 
references to these extents at the time of exception.
The extents that do delete propertly either have a 
reference within the executing class, or a static 
reference in another class. (Is this a problem with 
garbage collection of extents references?)



Test Code fragment
==================
System.out.println("MdrApmlPackageManager: 
testCleanPackages()");
String[] packageNames = repository.getExtentNames();
for (int i=0;i<packageNames.length; i++) {
  System.out.println("Package Name:" + packageNames[i]);
}
System.out.println("Number of packages to delete: " + 
packageNames.length);
for (int i=0;i<packageNames.length;i++) {
  System.out.println("Deleting package: " + packageNames
[i]);
  repository.getExtent(packageNames[i]).refDelete();
}

Exception raised
================

     [java]     [junit] MdrApmlPackageManager: 
testCleanPackages()
     [java]     [junit] Package Name:testPopulateModel
     [java]     [junit] Package Name:MyModel
     [java]     [junit] Package Name:testCreateModel
     [java]     [junit] Package Name:testModel
     [java]     [junit] Package Name:testGetModel
     [java]     [junit] Package Name:LoadedModel
     [java]     [junit] Number of packages to delete: 6
     [java]     [junit] Deleting package: testPopulateModel
     [java]     [junit] Deleting package: MyModel
     [java]     [junit] 
org.netbeans.mdr.util.DebugException: Exception: No reco
rd exists with key 5E432679-AA6E-11D6-9749-
2264B1C6AA77:0000000000005AE0
     [java]     [junit]         at 
org.netbeans.mdr.storagemodel.StorableFeature
d.read(StorableFeatured.java:217)
     [java]     [junit]         at 
org.netbeans.mdr.storagemodel.StorableObject.
read(StorableObject.java:284)
     [java]     [junit]         at 
org.netbeans.mdr.persistence.btreeimpl.btrees
torage.BtreeDatabase.getRecord(BtreeDatabase.java:969)
     [java]     [junit]         at 
org.netbeans.mdr.persistence.btreeimpl.btrees
torage.BtreeDatabase.getIfExists(BtreeDatabase.java:720)
     [java]     [junit]         at 
org.netbeans.mdr.persistence.btreeimpl.btrees
torage.BtreeDatabase.getIfExists(BtreeDatabase.java:700)
     [java]     [junit]         at 
org.netbeans.mdr.persistence.btreeimpl.btreei
ndex.MOFIDInfo.objectFromBuffer(MOFIDInfo.java:102)
     [java]     [junit]         at 
org.netbeans.mdr.persistence.btreeimpl.btreei
ndex.BtreeListByKey$BtreeListByKeyIterator.getCurrentItem
(BtreeListByKey.java:19
7)
     [java]     [junit]         at 
org.netbeans.mdr.persistence.btreeimpl.btreei
ndex.BtreeListByKey$BtreeListByKeyIterator.next
(BtreeListByKey.java:128)
     [java]     [junit]         at 
java.util.AbstractCollection.toArray(Abstract
Collection.java:170)
     [java]     [junit]         at 
org.netbeans.mdr.storagemodel.IndexImmutSet.t
oArray(IndexImmutSet.java:74)
     [java]     [junit]         at 
java.util.ArrayList.<init>(ArrayList.java:132
)
     [java]     [junit]         at 
org.netbeans.mdr.storagemodel.StorableClass.d
eleteRecursive(StorableClass.java:357)
     [java]     [junit]         at 
org.netbeans.mdr.storagemodel.StorablePackage
.deleteRecursive(StorablePackage.java:165)
     [java]     [junit]         at 
org.netbeans.mdr.storagemodel.StorablePackage
.delete(StorablePackage.java:145)
     [java]     [junit]         at 
org.netbeans.mdr.handlers.PackageProxyHandler
.refDelete(PackageProxyHandler.java:315)
     [java]     [junit]         at 
net.agentis.jmi.apml.mdr.MdrApmlPackageManage
r_Test.testCleanPackages
(MdrApmlPackageManager_Test.java:115)
     [java]     [junit]         at 
sun.reflect.NativeMethodAccessorImpl.invoke0(
Native Method)
     [java]     [junit]         at 
sun.reflect.NativeMethodAccessorImpl.invoke(N
ativeMethodAccessorImpl.java:39)
     [java]     [junit]         at 
sun.reflect.DelegatingMethodAccessorImpl.invo
ke(DelegatingMethodAccessorImpl.java:25)
     [java]     [junit]         at 
java.lang.reflect.Method.invoke(Method.java:3
24)
     [java]     [junit]         at 
junit.framework.TestCase.runTest(TestCase.jav
a:166)
     [java]     [junit]         at 
junit.framework.TestCase.runBare(TestCase.jav
a:140)
     [java]     [junit]         at 
junit.framework.TestResult$1.protect(TestResu
lt.java:106)
     [java]     [junit]         at 
junit.framework.TestResult.runProtected(TestR
esult.java:124)
     [java]     [junit]         at 
junit.framework.TestResult.run(TestResult.jav
a:109)
     [java]     [junit]         at 
junit.framework.TestCase.run(TestCase.java:13
1)
     [java]     [junit]         at 
junit.framework.TestSuite.runTest(TestSuite.j
ava:173)
     [java]     [junit]         at 
junit.framework.TestSuite.run(TestSuite.java:
168)
     [java]     [junit]         at 
org.apache.tools.ant.taskdefs.optional.junit.
JUnitTestRunner.run(JUnitTestRunner.java:231)
     [java]     [junit]         at 
org.apache.tools.ant.taskdefs.optional.junit.
JUnitTask.executeInVM(JUnitTask.java:582)
     [java]     [junit]         at 
org.apache.tools.ant.taskdefs.optional.junit.
JUnitTask.execute(JUnitTask.java:403)
     [java]     [junit]         at 
org.apache.tools.ant.taskdefs.optional.junit.
JUnitTask.execute(JUnitTask.java:380)
     [java]     [junit]         at 
org.apache.tools.ant.Task.perform(Task.java:2
17)
     [java]     [junit]         at 
org.apache.tools.ant.Target.execute(Target.ja
va:184)
     [java]     [junit]         at 
org.apache.tools.ant.Target.performTasks(Targ
et.java:202)
     [java]     [junit]         at 
org.apache.tools.ant.Project.executeTarget(Pr
oject.java:601)
     [java]     [junit]         at 
org.apache.tools.ant.Project.executeTargets(P
roject.java:560)
     [java]     [junit]         at 
org.apache.tools.ant.Main.runBuild(Main.java:
454)
     [java]     [junit]         at 
org.apache.tools.ant.Main.start(Main.java:153
)
     [java]     [junit]         at 
org.apache.tools.ant.Main.main(Main.java:176)

     [java]     [junit] rolled back!
Comment 1 Martin Matula 2002-08-08 12:49:41 UTC
Hi,
we know about this bug and it will be fixed soon by the commit that
Tomas will made at the beginning of the next week.
Comment 2 Tomas Zezula 2002-09-04 11:06:23 UTC
This seems to be problem in recursive delete. There was an improvement
of recursive delete during the MOFID change.
The improvement fixes the case when superclass is deleted before the
subclass.  This causes the same exception.

Could you test it again on the CVS build ?
Comment 3 Tomas Zezula 2002-09-05 12:54:59 UTC
Fixed during the MOFID storage improvement commit.