[JBoss JIRA] (JGRP-1990) Headers: use 1 array rather than 2
by Bela Ban (JIRA)
[ https://issues.jboss.org/browse/JGRP-1990?page=com.atlassian.jira.plugin.... ]
Bela Ban resolved JGRP-1990.
----------------------------
Resolution: Done
> Headers: use 1 array rather than 2
> ----------------------------------
>
> Key: JGRP-1990
> URL: https://issues.jboss.org/browse/JGRP-1990
> Project: JGroups
> Issue Type: Enhancement
> Reporter: Bela Ban
> Assignee: Bela Ban
> Fix For: 3.6.7
>
>
> Currently, {{Headers}} uses 1 array for ids and 1 for the actual headers. Experiment whether joining them into one array makes sense, e.g.:
> {noformat}
> | id-1 | hdr-1 | id-2 | hdr-2 | ... | id-n | hdr-n |
> {noformat}
> This saves 4 bytes (compressed OOPs) for an array ref, plus the overhead of the array itself. Plus, resizing only has to be applied to 1 array.
--
This message was sent by Atlassian JIRA
(v6.4.11#64026)
10 years, 7 months
[JBoss JIRA] (JGRP-1990) Headers: use 1 array rather than 2
by Bela Ban (JIRA)
[ https://issues.jboss.org/browse/JGRP-1990?page=com.atlassian.jira.plugin.... ]
Bela Ban commented on JGRP-1990:
--------------------------------
The memory savings are nice:
{noformat}
org.jgroups.util.Headers object internals:
OFFSET SIZE TYPE DESCRIPTION VALUE
0 12 (object header) N/A
12 4 short[] Headers.ids N/A
16 4 Header[] Headers.hdrs N/A
20 4 (loss due to the next object alignment)
Instance size: 24 bytes (estimated, the sample instance is not available)
Space losses: 0 bytes internal + 4 bytes external = 4 bytes total
{noformat}
A message had a ref to a {{Headers}} instance, which had refs to an {{id}} (carrying the prot-ids) and a {{headers}} array (carrying the actual headers). A {{Headers}} instances takes roughly 24 bytes of memory as shown above. Half of that is the cost of the _object header_ (12 bytes)!
The new message has a ref to a {{Header[]}} array, in which all headers are stored. The {{Header}} abstract superclass now also carries a short which adds 2 bytes to each header.
The advantages of this new approach, which stores headers directly in an array of {{Message}} are:
* Less memory need: the overall cost of maintaining headers (without the cost of the actual headers) is now ~ 24 bytes - 2 bytes = *22 bytes lower* (per message) !
* If the headers array needs to be grown, we only have to grow 1 rather than 2 arrays
> Headers: use 1 array rather than 2
> ----------------------------------
>
> Key: JGRP-1990
> URL: https://issues.jboss.org/browse/JGRP-1990
> Project: JGroups
> Issue Type: Enhancement
> Reporter: Bela Ban
> Assignee: Bela Ban
> Fix For: 3.6.7
>
>
> Currently, {{Headers}} uses 1 array for ids and 1 for the actual headers. Experiment whether joining them into one array makes sense, e.g.:
> {noformat}
> | id-1 | hdr-1 | id-2 | hdr-2 | ... | id-n | hdr-n |
> {noformat}
> This saves 4 bytes (compressed OOPs) for an array ref, plus the overhead of the array itself. Plus, resizing only has to be applied to 1 array.
--
This message was sent by Atlassian JIRA
(v6.4.11#64026)
10 years, 7 months
[JBoss JIRA] (DROOLS-891) Missing alpha node removal when the only rule using it is removed
by RH Bugzilla Integration (JIRA)
[ https://issues.jboss.org/browse/DROOLS-891?page=com.atlassian.jira.plugin... ]
RH Bugzilla Integration commented on DROOLS-891:
------------------------------------------------
Ryan Zhang <rzhang(a)redhat.com> changed the Status of [bug 1273087|https://bugzilla.redhat.com/show_bug.cgi?id=1273087] from MODIFIED to ON_QA
> Missing alpha node removal when the only rule using it is removed
> -----------------------------------------------------------------
>
> Key: DROOLS-891
> URL: https://issues.jboss.org/browse/DROOLS-891
> Project: Drools
> Issue Type: Bug
> Reporter: Mario Fusco
> Assignee: Mario Fusco
> Fix For: 6.3.0.CR2
>
>
> When an alpha node has more than one sink and it is used by only one rule doesn't get removed when the rule itself is removed. The following test case demonstrates the problem.
> {code}
> @Test
> public void testRemoveHasSameConElement() {
> String packageName = "test";
> String rule1 = "package " + packageName + ";" +
> "import java.util.Map; \n" +
> "rule 'rule1' \n" +
> "when \n" +
> " Map(this['type'] == 'Goods' && this['brand'] == 'a') \n" +
> " Map(this['type'] == 'Goods' && this['category'] == 'b') \n" +
> "then \n" +
> "System.out.println('test rule 1'); \n"+
> "end";
> KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
> kbuilder.add( ResourceFactory.newByteArrayResource( rule1.getBytes() ), ResourceType.DRL );
> if ( kbuilder.hasErrors() ) {
> fail( kbuilder.getErrors().toString() );
> }
> KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
> kbase.addKnowledgePackages( kbuilder.getKnowledgePackages() );
> kbase.removeKnowledgePackage(packageName);
> StatelessKnowledgeSession session = kbase.newStatelessKnowledgeSession();
> session.execute(new HashMap());
> }
> {code}
--
This message was sent by Atlassian JIRA
(v6.4.11#64026)
10 years, 7 months
[JBoss JIRA] (DROOLS-951) Removing 2 or more rules does not retract justified objects
by RH Bugzilla Integration (JIRA)
[ https://issues.jboss.org/browse/DROOLS-951?page=com.atlassian.jira.plugin... ]
RH Bugzilla Integration commented on DROOLS-951:
------------------------------------------------
Ryan Zhang <rzhang(a)redhat.com> changed the Status of [bug 1273087|https://bugzilla.redhat.com/show_bug.cgi?id=1273087] from MODIFIED to ON_QA
> Removing 2 or more rules does not retract justified objects
> -----------------------------------------------------------
>
> Key: DROOLS-951
> URL: https://issues.jboss.org/browse/DROOLS-951
> Project: Drools
> Issue Type: Bug
> Components: core engine
> Affects Versions: 6.3.0.Final
> Reporter: Zvonimir Bošnjak
> Assignee: Mario Fusco
> Fix For: 6.4.x
>
>
> When removing rules from knowledge which have logically inserted (justified) objects, only one object (from first removed rule) will be retracted.
> In example from AddRemoveRule#184: as it removes the first rule, it re-initializes all other path memories and, in particular, marks them as unlinked (AbstractTerminalNode#204)
> Later, when it tries to flush the deletions (AddRemoveRule#280), the unlinked status prevents the propagation from taking place.
>
--
This message was sent by Atlassian JIRA
(v6.4.11#64026)
10 years, 7 months
[JBoss JIRA] (DROOLS-930) ClassCastException after segment split during incremental compilation
by RH Bugzilla Integration (JIRA)
[ https://issues.jboss.org/browse/DROOLS-930?page=com.atlassian.jira.plugin... ]
RH Bugzilla Integration commented on DROOLS-930:
------------------------------------------------
Ryan Zhang <rzhang(a)redhat.com> changed the Status of [bug 1273087|https://bugzilla.redhat.com/show_bug.cgi?id=1273087] from MODIFIED to ON_QA
> ClassCastException after segment split during incremental compilation
> ---------------------------------------------------------------------
>
> Key: DROOLS-930
> URL: https://issues.jboss.org/browse/DROOLS-930
> Project: Drools
> Issue Type: Bug
> Reporter: Mario Fusco
> Assignee: Mario Fusco
> Fix For: 6.4.x
>
>
> A segment split during an incremental compilation as in the following test case
> {code}
> @Test
> public void testSegmentSplitOnIncrementalCompilation() throws Exception {
> String drl =
> "import " + Person.class.getCanonicalName() + "\n" +
> "rule R1 when\n" +
> " $s : String()" +
> " Person( name == $s ) \n" +
> "then\n" +
> " System.out.println(\"Triggered: R1\");\n" +
> "end\n" +
> "rule R2 when\n" +
> " $s : String()" +
> " Person( name == $s ) \n" +
> "then\n" +
> " System.out.println(\"Triggered: R2\");\n" +
> "end\n" +
> "rule R3 when\n" +
> " $s : String()" +
> " Person( name != $s ) \n" +
> "then\n" +
> " System.out.println(\"Triggered: R3\");\n" +
> "end\n";
> KieServices ks = KieServices.Factory.get();
> ReleaseId releaseId1 = ks.newReleaseId("org.kie", "test-upgrade", "1.1.1");
> KieModule km = createAndDeployJar(ks, releaseId1);
> KieContainer kc = ks.newKieContainer(km.getReleaseId());
> KieSession ksession = kc.newKieSession();
> kc.updateToVersion(releaseId1);
> ksession.insert(new Person("John", 26));
> ksession.insert( "John" );
> ksession.fireAllRules();
> ReleaseId releaseId2 = ks.newReleaseId("org.kie", "test-upgrade", "1.1.2");
> km = createAndDeployJar(ks, releaseId2, drl);
> kc.updateToVersion(releaseId2);
> ksession.fireAllRules();
> }
> {code}
> may cause the following ClassCastException during the subsequent network evaluation
> {code}
> java.lang.ClassCastException: org.drools.core.reteoo.RuleTerminalNode cannot be cast to org.drools.core.reteoo.LeftInputAdapterNode
> at org.drools.core.phreak.RuleNetworkEvaluator.evaluateNetwork(RuleNetworkEvaluator.java:99)
> at org.drools.core.phreak.RuleExecutor.reEvaluateNetwork(RuleExecutor.java:194)
> at org.drools.core.phreak.RuleExecutor.evaluateNetworkAndFire(RuleExecutor.java:73)
> at org.drools.core.common.DefaultAgenda.fireNextItem(DefaultAgenda.java:978)
> at org.drools.core.common.DefaultAgenda.fireAllRules(DefaultAgenda.java:1292)
> at org.drools.core.impl.StatefulKnowledgeSessionImpl.internalFireAllRules(StatefulKnowledgeSessionImpl.java:1294)
> at org.drools.core.impl.StatefulKnowledgeSessionImpl.fireAllRules(StatefulKnowledgeSessionImpl.java:1281)
> at org.drools.core.impl.StatefulKnowledgeSessionImpl.fireAllRules(StatefulKnowledgeSessionImpl.java:1260)
> at org.drools.compiler.integrationtests.IncrementalCompilationTest.testSegmentSplit(IncrementalCompilationTest.java:2001)
> {code}
--
This message was sent by Atlassian JIRA
(v6.4.11#64026)
10 years, 7 months