Subject: |
Re: [Bug 1858467] Re: dbExpand.pl outputs records in non-deterministic order |
From: |
Ben Franksen via Core-talk <[email protected]> |
To: |
[email protected] |
Date: |
Tue, 07 Jan 2020 13:16:11 -0000 |
Am 06.01.20 um 20:45 schrieb Andrew Johnson:
> The suggested solution makes the result deterministic but still changes
> the record order. Would it be preferable to keep a list of the records
> in the order in which they were parsed? That wouldn't be hard to do if
> desirable.
An option that tells dbExpand.pl to keep the records in their original
order may be useful for some applications.
However, given that the standard purpose of dbExpand.pl is to create a
"normalized" version of the input db file via the DB_OPT flag (including
re-formatting and removing comments), additionally imposing an order
seems the more useful default behavior.BTW, this is also what the
predecessor dbst did (though with a different order: first by record
type, then by name, IIRC).
There also remains the question of whether to make the other output
commands deterministic, too.
> NB: The sense of the diff above is reversed, '-' lines normally show the
> existing code and '+' lines the new.
Sorry, I mixed up the order of commits in the git diff command.
--
You received this bug notification because you are a member of EPICS
Core Developers, which is subscribed to EPICS Base.
Matching subscriptions: epics-core-list-subscription
https://bugs.launchpad.net/bugs/1858467
Title:
dbExpand.pl outputs records in non-deterministic order
Status in EPICS Base:
Triaged
Status in EPICS Base 7.0 series:
Triaged
Bug description:
This concerns only the 7.0 branch since in 3.15 there is no
dbExpand.pl.
The observed non-determinism makes it hard to compare (diff) generated
db files if DB_OPT has been set in a Makefile.
The solution is simple, at the cost of making the procedure slightly
less efficient:
diff --git a/modules/database/src/tools/DBD/Output.pm b/modules/database/src/tools/DBD/Output.pm
index 869b485..55051df 100644
--- a/modules/database/src/tools/DBD/Output.pm
+++ b/modules/database/src/tools/DBD/Output.pm
@@ -118,8 +118,7 @@ sub OutputBreaktables {
sub OutputRecords {
my ($out, $records) = @_;
- foreach my $name (sort(keys %$records)) {
- my $rec = $records->{$name};
+ while (my ($name, $rec) = each %{$records}) {
next if $name ne $rec->name; # Alias
printf $out "record(%s, \"%s\") {\n", $rec->recordtype->name, $name;
printf $out " alias(\"%s\")\n", $_
Note: other output routines inside this module are similarly non-
deterministic in their output, but they are not used by dbExpand.pl.
To manage notifications about this bug go to:
https://bugs.launchpad.net/epics-base/+bug/1858467/+subscriptions
- References:
- [Bug 1858467] [NEW] dbExpand.pl outputs records in non-deterministic order Ben Franksen via Core-talk
- Navigate by Date:
- Prev:
Re: EPICS 7, pvAccess & static build Michael Davidsaver via Core-talk
- Next:
[Bug 1740426] Re: portable printf() spec for size_t, long long, and others Martin Konrad via Core-talk
- Index:
2002
2003
2004
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
<2020>
2021
2022
2023
2024
- Navigate by Thread:
- Prev:
[Bug 1858467] [NEW] dbExpand.pl outputs records in non-deterministic order Ben Franksen via Core-talk
- Next:
[Bug 1858467] Re: dbExpand.pl outputs records in non-deterministic order mdavidsaver via Core-talk
- Index:
2002
2003
2004
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
<2020>
2021
2022
2023
2024
|