You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mynewt.apache.org by an...@apache.org on 2023/06/02 18:23:25 UTC

[mynewt-newt] branch master updated (ece4b3c7 -> 5c0ea32e)

This is an automated email from the ASF dual-hosted git repository.

andk pushed a change to branch master
in repository https://gitbox.apache.org/repos/asf/mynewt-newt.git


    from ece4b3c7 builder: Print non-existent source files names in error message
     new f0663b08 Fixed issue where packages with the same sysinit value were odered in non-deterministic and no longer lexicographic order
     new 5c0ea32e Added test for sysinit order

The 2 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 .github/newt_sysinit/expected.txt                  | 17 +++++++++
 .../workflows/{test_dump.yml => test_sysinit.yml}  | 43 +++++++++++-----------
 newt/sysinit/sysinit.go                            | 39 ++++++++++++++++----
 3 files changed, 71 insertions(+), 28 deletions(-)
 create mode 100644 .github/newt_sysinit/expected.txt
 copy .github/workflows/{test_dump.yml => test_sysinit.yml} (61%)


[mynewt-newt] 02/02: Added test for sysinit order

Posted by an...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

andk pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/mynewt-newt.git

commit 5c0ea32e8f97a04a7f593a079055c893428c195c
Author: Philip Burkhardt <ph...@juul.com>
AuthorDate: Tue May 30 16:30:48 2023 -0700

    Added test for sysinit order
---
 .github/newt_sysinit/expected.txt  | 17 ++++++++++
 .github/workflows/test_sysinit.yml | 64 ++++++++++++++++++++++++++++++++++++++
 2 files changed, 81 insertions(+)

diff --git a/.github/newt_sysinit/expected.txt b/.github/newt_sysinit/expected.txt
new file mode 100644
index 00000000..7c6cdebd
--- /dev/null
+++ b/.github/newt_sysinit/expected.txt
@@ -0,0 +1,17 @@
+Brief sysinit config for targets/nordic_pca10056_btshell:
+ STAGE   | PACKAGE                                           | FUNCTION                | SETTING                     
+---------+---------------------------------------------------+-------------------------+------------------------------
+ 0       | @apache-mynewt-core/kernel/os                     | os_pkg_init             | OS_SYSINIT_STAGE            
+ 9       | @apache-mynewt-core/sys/flash_map                 | flash_map_init          | FLASH_MAP_SYSINIT_STAGE     
+ 10      | @apache-mynewt-core/sys/stats/full                | stats_module_init       | STATS_SYSINIT_STAGE         
+ 20      | @apache-mynewt-core/sys/console/full              | console_pkg_init        | CONSOLE_SYSINIT_STAGE       
+ 100     | @apache-mynewt-core/sys/log/full                  | log_init                | LOG_SYSINIT_STAGE_MAIN      
+ 100     | @apache-mynewt-core/sys/log/modlog                | modlog_init             | MODLOG_SYSINIT_STAGE        
+ 250     | @apache-mynewt-nimble/nimble/transport            | ble_transport_init      |                             
+ 251     | @apache-mynewt-nimble/nimble/transport            | ble_transport_hs_init   |                             
+ 301     | @apache-mynewt-nimble/nimble/host/services/gap    | ble_svc_gap_init        | BLE_SVC_GAP_SYSINIT_STAGE   
+ 302     | @apache-mynewt-nimble/nimble/host/services/gatt   | ble_svc_gatt_init       | BLE_SVC_GATT_SYSINIT_STAGE  
+ 303     | @apache-mynewt-nimble/nimble/host/services/ans    | ble_svc_ans_init        | BLE_SVC_ANS_SYSINIT_STAGE   
+ 500     | @apache-mynewt-nimble/nimble/host/store/config    | ble_store_config_init   | BLE_STORE_SYSINIT_STAGE     
+ 500     | @apache-mynewt-core/sys/shell                     | shell_init              | SHELL_SYSINIT_STAGE         
+         | @apache-mynewt-nimble/nimble/transport            | ble_transport_ll_init   |                             
diff --git a/.github/workflows/test_sysinit.yml b/.github/workflows/test_sysinit.yml
new file mode 100644
index 00000000..13b07870
--- /dev/null
+++ b/.github/workflows/test_sysinit.yml
@@ -0,0 +1,64 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#  http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+
+name: Test sysinit
+
+on: [push, pull_request]
+
+jobs:
+  test_sysinit:
+    name: other
+    strategy:
+      fail-fast: false
+      matrix:
+        os: [ubuntu-latest, windows-latest, macos-latest]
+    runs-on: ${{ matrix.os }}
+    steps:
+      - uses: actions/checkout@v3
+      - uses: actions/setup-go@v3
+        with:
+          go-version: 'stable'
+      - uses: carlosperate/arm-none-eabi-gcc-action@48db4484a55750df7a0ccca63347fcdea6534d78
+        with:
+          release: '12.2.Rel1'
+      - name: Install Dependencies
+        if: matrix.os == 'ubuntu-latest'
+        run: |
+             sudo apt-get update
+             sudo apt-get install -y gcc-multilib
+      - name: Build newt
+        working-directory: newt
+        shell: bash
+        run: |
+             go version
+             go build
+             echo  ${GITHUB_WORKSPACE}/newt >> $GITHUB_PATH
+      - name: Test_sysinit
+        shell: bash
+        run: |
+             newt
+             newt help
+             newt version
+             newt new project
+             cp -r .github/targets/nordic_pca10056_btshell project/targets
+             cd project/
+             newt upgrade -v --escape=false apache-mynewt-core apache-mynewt-nimble
+             newt info
+             newt target sysinit brief nordic_pca10056_btshell > tmp.txt
+             diff -w tmp.txt ../.github/newt_sysinit/expected.txt


[mynewt-newt] 01/02: Fixed issue where packages with the same sysinit value were odered in non-deterministic and no longer lexicographic order

Posted by an...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

andk pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/mynewt-newt.git

commit f0663b08e9f7c1d7aca0df0e5c065c37d4405623
Author: Philip Burkhardt <ph...@juul.com>
AuthorDate: Tue May 23 10:36:10 2023 -0700

    Fixed issue where packages with the same sysinit value were odered in non-deterministic and no longer lexicographic order
---
 newt/sysinit/sysinit.go | 39 ++++++++++++++++++++++++++++++++-------
 1 file changed, 32 insertions(+), 7 deletions(-)

diff --git a/newt/sysinit/sysinit.go b/newt/sysinit/sysinit.go
index efa226ae..ee1caf3c 100644
--- a/newt/sysinit/sysinit.go
+++ b/newt/sysinit/sysinit.go
@@ -133,12 +133,43 @@ func ResolveStageFuncsOrder(sfs []stage.StageFunc) ([]stage.StageFunc, error) {
 		if len(sfRef.Stage.Befores) == 0 && len(sfRef.Stage.Afters) == 0 {
 			stage, _ := sfRef.Stage.IntVal()
 			nodesByStage[stage] = append(nodesByStage[stage], sfRef)
-			nodes = append(nodes, sfRef)
 		} else {
 			nodesQ = append(nodesQ, sfRef)
 		}
 	}
 
+	var stages []int
+	for stage := range nodesByStage {
+		stages = append(stages, stage)
+	}
+	sort.Ints(stages)
+
+	// Lexicographically sort nodes in each stage, then build the nodes stack.
+	// This helps ensure that sysinit order is reproducable and deterministic
+	for stageIndex, _ := range stages {
+		lsfs := nodesByStage[stages[stageIndex]]
+		sort.Slice(lsfs, func(i int, j int) bool {
+			a := lsfs[i]
+			b := lsfs[j]
+
+			if strings.Compare(a.Name, b.Name) == -1 {
+				return false
+			}
+			return true
+		})
+		nodes = append(nodes, nodesByStage[stages[stageIndex]]...)
+	}
+
+	sort.Slice(nodesQ, func(i int, j int) bool {
+		a := nodesQ[i]
+		b := nodesQ[j]
+
+		if strings.Compare(a.Name, b.Name) == -1 {
+			return false
+		}
+		return true
+	})
+    
 	// Put nodes without stages first, so they are resolved and put to
 	// stack first - we do not want them to precede all nodes with stages.
 	// While technically correct, it's better not to start sysinit with
@@ -146,12 +177,6 @@ func ResolveStageFuncsOrder(sfs []stage.StageFunc) ([]stage.StageFunc, error) {
 	// before os init packages.
 	nodes = append(nodesQ, nodes...)
 
-	var stages []int
-	for stage := range nodesByStage {
-		stages = append(stages, stage)
-	}
-	sort.Ints(stages)
-
 	// Add implicit dependencies for nodes with stages. We need to add
 	// direct dependencies between each node of stage X to each node of
 	// stage Y to make sure they can be resolved properly and reordered