


 last updated a few seconds ago
Friday 22 Nov 2019
Implement missing optimizations This commit introduces some missing union optimizations during exclude rule merging. Those weren't implemented because we didn't see them in our test cases, but we had customer logs showing such operations. It's worth noting this commit adds an utility class which transforms a JSON dump from a log entry into code which can be used to create test cases.


… 5 more files in
changeset.
Implement missing optimizations This commit introduces some missing union optimizations during exclude rule merging. Those weren't implemented because we didn't see them in our test cases, but we had customer logs showing such operations. It's worth noting this commit adds an utility class which transforms a JSON dump from a log entry into code which can be used to create test cases.


… 5 more files in
changeset.
Implement missing optimizations This commit introduces some missing union optimizations during exclude rule merging. Those weren't implemented because we didn't see them in our test cases, but we had customer logs showing such operations. It's worth noting this commit adds an utility class which transforms a JSON dump from a log entry into code which can be used to create test cases.


… 5 more files in
changeset.
Thursday 20 Jun 2019
Add more missing optimizations


… 2 more files in
changeset.
Add more missing optimizations


… 2 more files in
changeset.
Wednesday 19 Jun 2019
Add test coverage for intersections of 3 elements and add more test coverage for unions


… 1 more file in
changeset.
Add test coverage for intersections of 3 elements and add more test coverage for unions


… 1 more file in
changeset.
Rework test setup for exclude merging


… 2 more files in
changeset.
Rework test setup for exclude merging


… 2 more files in
changeset.
Tuesday 18 Jun 2019
Fix incorrect reduction of intersections Simplification of intersections in the normalizing exclude factory is done by pairs. There was a bug in the reduction algorithm, that would cause the reduction result to be wrong because we used the wrong, non simplified, exclude spec for merging whenever a merge occured, to reduce on the next item in a list.


… 2 more files in
changeset.
Fix incorrect reduction of intersections Simplification of intersections in the normalizing exclude factory is done by pairs. There was a bug in the reduction algorithm, that would cause the reduction result to be wrong because we used the wrong, non simplified, exclude spec for merging whenever a merge occured, to reduce on the next item in a list.


… 2 more files in
changeset.
Fix incorrect reduction of intersections Simplification of intersections in the normalizing exclude factory is done by pairs. There was a bug in the reduction algorithm, that would cause the reduction result to be wrong because we used the wrong, non simplified, exclude spec for merging whenever a merge occured, to reduce on the next item in a list.


… 2 more files in
changeset.
Friday 14 Jun 2019
Add exclude intersection normalization This commit introduces exclude intersection normalization. This is done to avoid the "exclusion explosion" in case:  we have 2 incoming edges to the same node  those edges have different excludes  the different edge excludes cannot be merged (e.g having a `group` and `moduleId` exclude on each)


… 3 more files in
changeset.
Monday 29 Apr 2019
Optimize flattening This commit optimizes flattening by avoiding the creation of intermediate data structures. In particular using lists we were converting from and to sets unnecessarily.


… 13 more files in
changeset.
Optimize flattening This commit optimizes flattening by avoiding the creation of intermediate data structures. In particular using lists we were converting from and to sets unnecessarily.


… 13 more files in
changeset.
Optimize flattening This commit optimizes flattening by avoiding the creation of intermediate data structures. In particular using lists we were converting from and to sets unnecessarily.


… 13 more files in
changeset.
Optimize flattening This commit optimizes flattening by avoiding the creation of intermediate data structures. In particular using lists we were converting from and to sets unnecessarily.


… 13 more files in
changeset.
Sunday 28 Apr 2019
Remove indexed exclude factory It didn't prove as fast as it was intended to be. Instead, we performed the same optimization for single groups/modules as we did for module sets.


… 14 more files in
changeset.
Remove indexed exclude factory It didn't prove as fast as it was intended to be. Instead, we performed the same optimization for single groups/modules as we did for module sets.


… 14 more files in
changeset.
Remove indexed exclude factory It didn't prove as fast as it was intended to be. Instead, we performed the same optimization for single groups/modules as we did for module sets.


… 14 more files in
changeset.
Saturday 27 Apr 2019
Rework exclude rule merging As a followup to #9197, this commit properly fixes the exclude rule merging algorithm, by completely rewriting it. The new merging algorithm works by implementing the minimal set of algebra operations that make sense to minimize computation durations. In order to do this, this commit introduces a number of exclude specs (found in their own package) and factories to create actual implementation of those specs. Specs represent the different kind of excludes we can find:  excluding a group  excluding a module (no group defined)  excluding a group+module  excluding an artifact of a group+module  patternmatching excludes  unions of excludes  intersections of excludes With all those minimal bricks, factories are responsible of generating consistent specs. The dumbest factory will just generate new instances for everything. This is the default factory. Minimally, this factory has to be backed by an optimizing factory, which will take care of handling special cases:  union or intersection of a single spec  union or intersection of 2 specs  when one of them is null  when both are equal Then we have a factory which performs the minimal algebra to minimize specs:  unions of unions  intersections of intersections  union of a union and individual specs  insection of an intersection and individual spec  ... This factory can be as smart as it can, but one must be careful that it's worth it: some previously implemented optimizations (like (A+B).A = A turned out to be costly to detect, and didn't make it the final cut. Yet another factory is there to reduce the memory footprint and, as a side effect, make things faster by interning the specs: equivalent specs are interned and indexed, which allows us to optimize unions and intersections of specs. Last but not least, a caching factory is there to avoid recomputing the same intersections and unions of specs when we have already done the job. This is efficient if the underlying (delegate) specs are easily compared, which is the case thanks to the interning factory. All in all, the delegation chain allows us to make the algorithm fast and hopefully reliable, while making it easier to debug.


… 90 more files in
changeset.
Rework exclude rule merging As a followup to #9197, this commit properly fixes the exclude rule merging algorithm, by completely rewriting it. The new merging algorithm works by implementing the minimal set of algebra operations that make sense to minimize computation durations. In order to do this, this commit introduces a number of exclude specs (found in their own package) and factories to create actual implementation of those specs. Specs represent the different kind of excludes we can find:  excluding a group  excluding a module (no group defined)  excluding a group+module  excluding an artifact of a group+module  patternmatching excludes  unions of excludes  intersections of excludes With all those minimal bricks, factories are responsible of generating consistent specs. The dumbest factory will just generate new instances for everything. This is the default factory. Minimally, this factory has to be backed by an optimizing factory, which will take care of handling special cases:  union or intersection of a single spec  union or intersection of 2 specs  when one of them is null  when both are equal Then we have a factory which performs the minimal algebra to minimize specs:  unions of unions  intersections of intersections  union of a union and individual specs  insection of an intersection and individual spec  ... This factory can be as smart as it can, but one must be careful that it's worth it: some previously implemented optimizations (like (A+B).A = A turned out to be costly to detect, and didn't make it the final cut. Last but not least, a caching factory is there to avoid recomputing the same intersections and unions of specs when we have already done the job. This is efficient if the underlying (delegate) specs are easily compared, which is the case thanks to the interning factory. All in all, the delegation chain allows us to make the algorithm fast and hopefully reliable, while making it easier to debug.


… 75 more files in
changeset.
Rework exclude rule merging As a followup to #9197, this commit properly fixes the exclude rule merging algorithm, by completely rewriting it. The new merging algorithm works by implementing the minimal set of algebra operations that make sense to minimize computation durations. In order to do this, this commit introduces a number of exclude specs (found in their own package) and factories to create actual implementation of those specs. Specs represent the different kind of excludes we can find:  excluding a group  excluding a module (no group defined)  excluding a group+module  excluding an artifact of a group+module  patternmatching excludes  unions of excludes  intersections of excludes With all those minimal bricks, factories are responsible of generating consistent specs. The dumbest factory will just generate new instances for everything. This is the default factory. Minimally, this factory has to be backed by an optimizing factory, which will take care of handling special cases:  union or intersection of a single spec  union or intersection of 2 specs  when one of them is null  when both are equal Then we have a factory which performs the minimal algebra to minimize specs:  unions of unions  intersections of intersections  union of a union and individual specs  insection of an intersection and individual spec  ... This factory can be as smart as it can, but one must be careful that it's worth it: some previously implemented optimizations (like (A+B).A = A turned out to be costly to detect, and didn't make it the final cut. Yet another factory is there to reduce the memory footprint and, as a side effect, make things faster by interning the specs: equivalent specs are interned and indexed, which allows us to optimize unions and intersections of specs. Last but not least, a caching factory is there to avoid recomputing the same intersections and unions of specs when we have already done the job. This is efficient if the underlying (delegate) specs are easily compared, which is the case thanks to the interning factory. All in all, the delegation chain allows us to make the algorithm fast and hopefully reliable, while making it easier to debug.


… 91 more files in
changeset.
Rework exclude rule merging As a followup to #9197, this commit properly fixes the exclude rule merging algorithm, by completely rewriting it. The new merging algorithm works by implementing the minimal set of algebra operations that make sense to minimize computation durations. In order to do this, this commit introduces a number of exclude specs (found in their own package) and factories to create actual implementation of those specs. Specs represent the different kind of excludes we can find:  excluding a group  excluding a module (no group defined)  excluding a group+module  excluding an artifact of a group+module  patternmatching excludes  unions of excludes  intersections of excludes With all those minimal bricks, factories are responsible of generating consistent specs. The dumbest factory will just generate new instances for everything. This is the default factory. Minimally, this factory has to be backed by an optimizing factory, which will take care of handling special cases:  union or intersection of a single spec  union or intersection of 2 specs  when one of them is null  when both are equal Then we have a factory which performs the minimal algebra to minimize specs:  unions of unions  intersections of intersections  union of a union and individual specs  insection of an intersection and individual spec  ... This factory can be as smart as it can, but one must be careful that it's worth it: some previously implemented optimizations (like (A+B).A = A turned out to be costly to detect, and didn't make it the final cut. Yet another factory is there to reduce the memory footprint and, as a side effect, make things faster by interning the specs: equivalent specs are interned and indexed, which allows us to optimize unions and intersections of specs. Last but not least, a caching factory is there to avoid recomputing the same intersections and unions of specs when we have already done the job. This is efficient if the underlying (delegate) specs are easily compared, which is the case thanks to the interning factory. All in all, the delegation chain allows us to make the algorithm fast and hopefully reliable, while making it easier to debug.


… 90 more files in
changeset.
Rework exclude rule merging As a followup to #9197, this commit properly fixes the exclude rule merging algorithm, by completely rewriting it. The new merging algorithm works by implementing the minimal set of algebra operations that make sense to minimize computation durations. In order to do this, this commit introduces a number of exclude specs (found in their own package) and factories to create actual implementation of those specs. Specs represent the different kind of excludes we can find:  excluding a group  excluding a module (no group defined)  excluding a group+module  excluding an artifact of a group+module  patternmatching excludes  unions of excludes  intersections of excludes With all those minimal bricks, factories are responsible of generating consistent specs. The dumbest factory will just generate new instances for everything. This is the default factory. Minimally, this factory has to be backed by an optimizing factory, which will take care of handling special cases:  union or intersection of a single spec  union or intersection of 2 specs  when one of them is null  when both are equal Then we have a factory which performs the minimal algebra to minimize specs:  unions of unions  intersections of intersections  union of a union and individual specs  insection of an intersection and individual spec  ... This factory can be as smart as it can, but one must be careful that it's worth it: some previously implemented optimizations (like (A+B).A = A turned out to be costly to detect, and didn't make it the final cut. Last but not least, a caching factory is there to avoid recomputing the same intersections and unions of specs when we have already done the job. This is efficient if the underlying (delegate) specs are easily compared, which is the case thanks to the interning factory. All in all, the delegation chain allows us to make the algorithm fast and hopefully reliable, while making it easier to debug.


… 75 more files in
changeset.
Rework exclude rule merging As a followup to #9197, this commit properly fixes the exclude rule merging algorithm, by completely rewriting it. The new merging algorithm works by implementing the minimal set of algebra operations that make sense to minimize computation durations. In order to do this, this commit introduces a number of exclude specs (found in their own package) and factories to create actual implementation of those specs. Specs represent the different kind of excludes we can find:  excluding a group  excluding a module (no group defined)  excluding a group+module  excluding an artifact of a group+module  patternmatching excludes  unions of excludes  intersections of excludes With all those minimal bricks, factories are responsible of generating consistent specs. The dumbest factory will just generate new instances for everything. This is the default factory. Minimally, this factory has to be backed by an optimizing factory, which will take care of handling special cases:  union or intersection of a single spec  union or intersection of 2 specs  when one of them is null  when both are equal Then we have a factory which performs the minimal algebra to minimize specs:  unions of unions  intersections of intersections  union of a union and individual specs  insection of an intersection and individual spec  ... This factory can be as smart as it can, but one must be careful that it's worth it: some previously implemented optimizations (like (A+B).A = A turned out to be costly to detect, and didn't make it the final cut. Last but not least, a caching factory is there to avoid recomputing the same intersections and unions of specs when we have already done the job. This is efficient if the underlying (delegate) specs are easily compared, which is the case thanks to the interning factory. All in all, the delegation chain allows us to make the algorithm fast and hopefully reliable, while making it easier to debug.


… 75 more files in
changeset.
Rework exclude rule merging As a followup to #9197, this commit properly fixes the exclude rule merging algorithm, by completely rewriting it. The new merging algorithm works by implementing the minimal set of algebra operations that make sense to minimize computation durations. In order to do this, this commit introduces a number of exclude specs (found in their own package) and factories to create actual implementation of those specs. Specs represent the different kind of excludes we can find:  excluding a group  excluding a module (no group defined)  excluding a group+module  excluding an artifact of a group+module  patternmatching excludes  unions of excludes  intersections of excludes With all those minimal bricks, factories are responsible of generating consistent specs. The dumbest factory will just generate new instances for everything. This is the default factory. Minimally, this factory has to be backed by an optimizing factory, which will take care of handling special cases:  union or intersection of a single spec  union or intersection of 2 specs  when one of them is null  when both are equal Then we have a factory which performs the minimal algebra to minimize specs:  unions of unions  intersections of intersections  union of a union and individual specs  insection of an intersection and individual spec  ... This factory can be as smart as it can, but one must be careful that it's worth it: some previously implemented optimizations (like (A+B).A = A turned out to be costly to detect, and didn't make it the final cut. Yet another factory is there to reduce the memory footprint and, as a side effect, make things faster by interning the specs: equivalent specs are interned and indexed, which allows us to optimize unions and intersections of specs. Last but not least, a caching factory is there to avoid recomputing the same intersections and unions of specs when we have already done the job. This is efficient if the underlying (delegate) specs are easily compared, which is the case thanks to the interning factory. All in all, the delegation chain allows us to make the algorithm fast and hopefully reliable, while making it easier to debug.


… 90 more files in
changeset.
Rework exclude rule merging As a followup to #9197, this commit properly fixes the exclude rule merging algorithm, by completely rewriting it. The new merging algorithm works by implementing the minimal set of algebra operations that make sense to minimize computation durations. In order to do this, this commit introduces a number of exclude specs (found in their own package) and factories to create actual implementation of those specs. Specs represent the different kind of excludes we can find:  excluding a group  excluding a module (no group defined)  excluding a group+module  excluding an artifact of a group+module  patternmatching excludes  unions of excludes  intersections of excludes With all those minimal bricks, factories are responsible of generating consistent specs. The dumbest factory will just generate new instances for everything. This is the default factory. Minimally, this factory has to be backed by an optimizing factory, which will take care of handling special cases:  union or intersection of a single spec  union or intersection of 2 specs  when one of them is null  when both are equal Then we have a factory which performs the minimal algebra to minimize specs:  unions of unions  intersections of intersections  union of a union and individual specs  insection of an intersection and individual spec  ... This factory can be as smart as it can, but one must be careful that it's worth it: some previously implemented optimizations (like (A+B).A = A turned out to be costly to detect, and didn't make it the final cut. Yet another factory is there to reduce the memory footprint and, as a side effect, make things faster by interning the specs: equivalent specs are interned and indexed, which allows us to optimize unions and intersections of specs. Last but not least, a caching factory is there to avoid recomputing the same intersections and unions of specs when we have already done the job. This is efficient if the underlying (delegate) specs are easily compared, which is the case thanks to the interning factory. All in all, the delegation chain allows us to make the algorithm fast and hopefully reliable, while making it easier to debug.


… 90 more files in
changeset.
Rework exclude rule merging As a followup to #9197, this commit properly fixes the exclude rule merging algorithm, by completely rewriting it. The new merging algorithm works by implementing the minimal set of algebra operations that make sense to minimize computation durations. In order to do this, this commit introduces a number of exclude specs (found in their own package) and factories to create actual implementation of those specs. Specs represent the different kind of excludes we can find:  excluding a group  excluding a module (no group defined)  excluding a group+module  excluding an artifact of a group+module  patternmatching excludes  unions of excludes  intersections of excludes With all those minimal bricks, factories are responsible of generating consistent specs. The dumbest factory will just generate new instances for everything. This is the default factory. Minimally, this factory has to be backed by an optimizing factory, which will take care of handling special cases:  union or intersection of a single spec  union or intersection of 2 specs  when one of them is null  when both are equal Then we have a factory which performs the minimal algebra to minimize specs:  unions of unions  intersections of intersections  union of a union and individual specs  insection of an intersection and individual spec  ... This factory can be as smart as it can, but one must be careful that it's worth it: some previously implemented optimizations (like (A+B).A = A turned out to be costly to detect, and didn't make it the final cut. Yet another factory is there to reduce the memory footprint and, as a side effect, make things faster by interning the specs: equivalent specs are interned and indexed, which allows us to optimize unions and intersections of specs. Last but not least, a caching factory is there to avoid recomputing the same intersections and unions of specs when we have already done the job. This is efficient if the underlying (delegate) specs are easily compared, which is the case thanks to the interning factory. All in all, the delegation chain allows us to make the algorithm fast and hopefully reliable, while making it easier to debug.


… 90 more files in
changeset.
Rework exclude rule merging As a followup to #9197, this commit properly fixes the exclude rule merging algorithm, by completely rewriting it. The new merging algorithm works by implementing the minimal set of algebra operations that make sense to minimize computation durations. In order to do this, this commit introduces a number of exclude specs (found in their own package) and factories to create actual implementation of those specs. Specs represent the different kind of excludes we can find:  excluding a group  excluding a module (no group defined)  excluding a group+module  excluding an artifact of a group+module  patternmatching excludes  unions of excludes  intersections of excludes With all those minimal bricks, factories are responsible of generating consistent specs. The dumbest factory will just generate new instances for everything. This is the default factory. Minimally, this factory has to be backed by an optimizing factory, which will take care of handling special cases:  union or intersection of a single spec  union or intersection of 2 specs  when one of them is null  when both are equal Then we have a factory which performs the minimal algebra to minimize specs:  unions of unions  intersections of intersections  union of a union and individual specs  insection of an intersection and individual spec  ... This factory can be as smart as it can, but one must be careful that it's worth it: some previously implemented optimizations (like (A+B).A = A turned out to be costly to detect, and didn't make it the final cut. Yet another factory is there to reduce the memory footprint and, as a side effect, make things faster by interning the specs: equivalent specs are interned and indexed, which allows us to optimize unions and intersections of specs. Last but not least, a caching factory is there to avoid recomputing the same intersections and unions of specs when we have already done the job. This is efficient if the underlying (delegate) specs are easily compared, which is the case thanks to the interning factory. All in all, the delegation chain allows us to make the algorithm fast and hopefully reliable, while making it easier to debug.


… 90 more files in
changeset.
