FAILURE: Build failed with an exception.

I get this error.
 `/C:/src/flutter/packages/flutter/lib/src/painting/image_provider.dart:671:7:` Error: Expected an identifier, but got '/'. /rethrow^

  /C:/src/flutter/packages/flutter/lib/src/painting/image_provider.dart:671:8:` Error: Expected an identifier, but got 'rethrow'.

  /rethrow;
   ^^^^^^^

 /C:/src/flutter/packages/flutter/lib/src/painting/image_provider.dart:671:8: Error: The getter 'rethrow' isn't defined for the class 'AssetBundleImageProvider'.

'AssetBundleImageProvider' is from 'package:flutter/src/painting/image_provider.dart'
('/C:/src/flutter/packages/flutter/lib/src/painting/image_provider.dart').
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'rethrow'.
  /rethrow;
   ^^^^^^^

  FAILURE: Build failed with an exception.

  * Where:
    Script 'C:\src\flutter\packages\flutter_tools\gradle\flutter.gradle' line: 904

  * What went wrong:
    Execution failed for task ':app:compileFlutterBuildDebug'.
    Process 'command 'C:\src\flutter\bin\flutter.bat'' finished with non-zero exit value 1

  * Try:
      Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with -
      scan to get full insights.

  * Get more help at https://help.gradle.org

     BU�LD FAILED in 14s
     Exception: Gradle task assembleDebug failed with exit code 1`.

run flutter doctor -v
 ` PS D:\FlutterProjeleri\GezegenlerApp\gezegenlerapp> flutter doctor -v
   [√] Flutter (Channel stable, 1.22.0, on Microsoft Windows [Version 10.0.18363.1082], locale tr-TR)
   • Flutter version 1.22.0 at C:\src\flutter
   • Framework revision d408d302e2 (6 days ago), 2020-09-29 11:49:17 -0700
   • Engine revision 5babba6c4d
   • Dart version 2.10.0

  [√] Android toolchain - develop for Android devices (Android SDK version 29.0.3)
   • Android SDK at C:\Users\Ummuhan Oksuz\AppData\Local\Android\Sdk
  • Platform android-29, build-tools 29.0.3
  • ANDROID_HOME = C:\Users\Ummuhan Oksuz\AppData\Local\Android\Sdk
  • Java binary at: C:\Program Files\Android\Android Studio\jre\bin\java
  • Java version OpenJDK Runtime Environment (build 1.8.0_242-release-1644-b01)
  • All Android licenses accepted.

  [√] Android Studio (version 4.0)
  • Android Studio at C:\Program Files\Android\Android Studio
  • Flutter plugin version 48.1.2
  • Dart plugin version 193.7361
  • Java version OpenJDK Runtime Environment (build 1.8.0_242-release-1644-b01)

 [√] VS Code (version 1.49.3)
   • VS Code at C:\Users\Ummuhan Oksuz\AppData\Local\Programs\Microsoft VS Code
   • Flutter extension version 3.15.0

 [√] Connected device (1 available)
   • Android SDK built for x86 (mobile) • emulator-5554 • android-x86 • Android 10 (API 29) (emulator)

   • No issues found! `

how can i solve this error?

@ummuhan
Error: Expected an identifier, but got '/'. /rethrow^ probably indicates there's a typo somewhere in your code.
Did you upgrade recently ? Can you try running flutter clean and then flutter run to see if it works ?
If problem persists, please provide a minimal code sample along with pubspec.yaml that shows the issue you are facing.
Thanks.

@ummuhan
Error: Expected an identifier, but got '/'. /rethrow^ probably indicates there's a typo somewhere in your code.
Did you upgrade recently ? Can you try running flutter clean and then flutter run to see if it works ?
If problem persists, please provide a minimal code sample along with pubspec.yaml that shows the issue you are facing.
Thanks.

i open new project only add assets and a few widget. I got same errors two days ago.
these commands had worked. But not working now
flutter channel stable
flutter upgrade --force
flutter pub cache repair
cd
flutter clean
flutter doctor -v and flutter run --verbose

@ummuhan
Does it generate any error log ? Can you provide a full stack trace, run flutter run --verbose and provide a complete log.
Thanks.

Hi @ummuhan
seems like you have changed the image_provider.dart file by mistake
/C:/src/flutter/packages/flutter/lib/src/painting/image_provider.dart:671 line should look like this
  try {
      data = await key.bundle.load(key.name);
    } on FlutterError {
      PaintingBinding.instance!.imageCache!.evict(key);
      rethrow;
    }

make sure you have the same code as above in your image_provider.dart file also in the flutter directory.

try {
data = await key.bundle.load(key.name);
} on FlutterError {
PaintingBinding.instance!.imageCache!.evict(key);
rethrow;
}

Hi @Abhishek01039
I looked at that page but same.

@ummuhan
Does it generate any error log ? Can you provide a full stack trace, run flutter run --verbose and provide a complete log.
Thanks.

S D:\FlutterProjeleri\GezegenlerApp\gezegenlerapp> flutter run --verbose
[ +137 ms] executing: [C:\src\flutter/] git -c log.showSignature=false log -n 1 --pretty=format:%H
[  +84 ms] Exit code 0 from: git -c log.showSignature=false log -n 1 --pretty=format:%H
[   +1 ms] d408d302e22179d598f467e11da5dd968dbdc9ec
[   +1 ms] executing: [C:\src\flutter/] git tag --points-at HEAD
[  +81 ms] Exit code 0 from: git tag --points-at HEAD
[        ] 1.22.0
1.22.0-12.3.pre
[  +16 ms] executing: [C:\src\flutter/] git rev-parse --abbrev-ref --symbolic @{u}
[  +48 ms] Exit code 0 from: git rev-parse --abbrev-ref --symbolic @{u}
[  +19 ms] origin/stable
[   +1 ms] executing: [C:\src\flutter/] git ls-remote --get-url origin
[  +52 ms] Exit code 0 from: git ls-remote --get-url origin
[        ] https://github.com/flutter/flutter.git
[  +95 ms] executing: [C:\src\flutter/] git rev-parse --abbrev-ref HEAD
[  +59 ms] Exit code 0 from: git rev-parse --abbrev-ref HEAD
[   +5 ms] stable
[ +120 ms] Artifact Instance of 'AndroidMavenArtifacts' is not required, skipping update.
[        ] Artifact Instance of 'AndroidGenSnapshotArtifacts' is not required, skipping update.
[        ] Artifact Instance of 'AndroidInternalBuildArtifacts' is not required, skipping update.
[   +2 ms] Artifact Instance of 'IOSEngineArtifacts' is not required, skipping update.
[        ] Artifact Instance of 'FlutterWebSdk' is not required, skipping update.
[  +11 ms] Artifact Instance of 'WindowsEngineArtifacts' is not required, skipping update.
[        ] Artifact Instance of 'MacOSEngineArtifacts' is not required, skipping update.
[        ] Artifact Instance of 'LinuxEngineArtifacts' is not required, skipping update.
[  +44 ms] Artifact Instance of 'LinuxFuchsiaSDKArtifacts' is not required, skipping update.
[        ] Artifact Instance of 'MacOSFuchsiaSDKArtifacts' is not required, skipping update.
[        ] Artifact Instance of 'FlutterRunnerSDKArtifacts' is not required, skipping update.
[        ] Artifact Instance of 'FlutterRunnerDebugSymbols' is not required, skipping update.
[ +114 ms] executing: C:\Users\Ummuhan Oksuz\AppData\Local\Android\Sdk\platform-tools\adb.exe devices -l
[  +52 ms] List of devices attached
emulator-5554          device product:sdk_gphone_x86 model:Android_SDK_built_for_x86 device:generic_x86 transport_id:1
[  +10 ms] C:\Users\Ummuhan Oksuz\AppData\Local\Android\Sdk\platform-tools\adb.exe -s emulator-5554 shell getprop
[  +59 ms] Artifact Instance of 'AndroidMavenArtifacts' is not required, skipping update.
[   +8 ms] Artifact Instance of 'AndroidInternalBuildArtifacts' is not required, skipping update.
[        ] Artifact Instance of 'IOSEngineArtifacts' is not required, skipping update.
[        ] Artifact Instance of 'FlutterWebSdk' is not required, skipping update.
[   +2 ms] Artifact Instance of 'WindowsEngineArtifacts' is not required, skipping update.
[        ] Artifact Instance of 'MacOSEngineArtifacts' is not required, skipping update.
[        ] Artifact Instance of 'LinuxEngineArtifacts' is not required, skipping update.
[        ] Artifact Instance of 'LinuxFuchsiaSDKArtifacts' is not required, skipping update.
[        ] Artifact Instance of 'MacOSFuchsiaSDKArtifacts' is not required, skipping update.
[        ] Artifact Instance of 'FlutterRunnerSDKArtifacts' is not required, skipping update.
[        ] Artifact Instance of 'FlutterRunnerDebugSymbols' is not required, skipping update.
[ +462 ms] Generating D:\FlutterProjeleri\GezegenlerApp\gezegenlerapp\android\app\src\main\java\io\flutter\plugins\GeneratedPluginRegistrant.java
[ +140 ms] ro.hardware = ranchu
[  +29 ms] Using hardware rendering with device Android SDK built for x86. If you notice graphics artifacts, consider enabling software rendering with "--enable-software-rendering".
[  +37 ms] Starting incremental build...
[  +62 ms] Initializing file store
[  +22 ms] Skipping target: gen_localizations
[  +14 ms] complete
[   +5 ms] Launching lib\main.dart on Android SDK built for x86 in debug mode...
[   +7 ms] C:\src\flutter\bin\cache\dart-sdk\bin\dart.exe --disable-dart-dev C:\src\flutter\bin\cache\artifacts\engine\windows-x64\frontend_server.dart.snapshot --sdk-root C:\src\flutter\bin\cache\artifacts\engine\common\flutter_patched_sdk/ --incremental
--target=flutter --debugger-module-names --experimental-emit-debug-metadata -Ddart.developer.causal_async_stacks=true --output-dill C:\Users\UMMUHA~1\AppData\Local\Temp\flutter_tools.d53c40cb\flutter_tool.254bc659\app.dill --packages .packages
-Ddart.vm.profile=false -Ddart.vm.product=false --bytecode-options=source-positions,local-var-info,debugger-stops,instance-field-initializers,keep-unreachable-code,avoid-closure-call-instructions --enable-asserts --track-widget-creation --filesystem-scheme
org-dartlang-root --initialize-from-dill build\cache.dill.track.dill
[  +59 ms] executing: C:\Users\Ummuhan Oksuz\AppData\Local\Android\Sdk\platform-tools\adb.exe -s emulator-5554 shell -x logcat -v time -t 1
[  +57 ms] Exit code 0 from: C:\Users\Ummuhan Oksuz\AppData\Local\Android\Sdk\platform-tools\adb.exe -s emulator-5554 shell -x logcat -v time -t 1
[        ] --------- beginning of main
10-06 19:37:16.363 E/GnssHAL_GnssInterface( 1794): gnssSvStatusCb: b: input svInfo.flags is 8
[   +1 ms] executing: C:\Users\Ummuhan Oksuz\AppData\Local\Android\Sdk\platform-tools\adb.exe -s emulator-5554 shell -x logcat -v time -t 1
[  +83 ms] Exit code 0 from: C:\Users\Ummuhan Oksuz\AppData\Local\Android\Sdk\platform-tools\adb.exe -s emulator-5554 shell -x logcat -v time -t 1
[  +12 ms] --------- beginning of main
10-06 19:37:16.363 E/GnssHAL_GnssInterface( 1794): gnssSvStatusCb: b: input svInfo.flags is 8
[  +19 ms] <- compile package:gezegenlerapp/main.dart
[  +99 ms] executing: C:\Users\Ummuhan Oksuz\AppData\Local\Android\Sdk\platform-tools\adb.exe version
[ +110 ms] Android Debug Bridge version 1.0.41
Version 30.0.4-6686687
Installed as C:\Users\Ummuhan Oksuz\AppData\Local\Android\Sdk\platform-tools\adb.exe
[   +3 ms] executing: C:\Users\Ummuhan Oksuz\AppData\Local\Android\Sdk\platform-tools\adb.exe start-server
[  +45 ms] Building APK
[  +22 ms] Running Gradle task 'assembleDebug'...
[   +6 ms] gradle.properties already sets android.enableR8
[  +31 ms] Using gradle from D:\FlutterProjeleri\GezegenlerApp\gezegenlerapp\android\gradlew.bat.
[  +16 ms] D:\FlutterProjeleri\GezegenlerApp\gezegenlerapp\android\gradlew.bat mode: 33279 rwxrwxrwx.
[  +44 ms] executing: C:\Program Files\Android\Android Studio\jre\bin\java -version
[ +152 ms] Exit code 0 from: C:\Program Files\Android\Android Studio\jre\bin\java -version
[   +1 ms] openjdk version "1.8.0_242-release"
OpenJDK Runtime Environment (build 1.8.0_242-release-1644-b01)
OpenJDK 64-Bit Server VM (build 25.242-b01, mixed mode)
[  +21 ms] executing: [D:\FlutterProjeleri\GezegenlerApp\gezegenlerapp\android/] D:\FlutterProjeleri\GezegenlerApp\gezegenlerapp\android\gradlew.bat -Pverbose=true -Ptarget-platform=android-x86 -Ptarget=D:\FlutterProjeleri\GezegenlerApp\gezegenlerapp\lib\main.dart-Ptrack-widget-creation=true -Pfilesystem-scheme=org-dartlang-root assembleDebug
[+5295 ms] > Task :app:compileFlutterBuildDebug
[   +1 ms] [ +165 ms] executing: [C:\src\flutter/] git -c log.showSignature=false log -n 1 --pretty=format:%H
[        ] [  +71 ms] Exit code 0 from: git -c log.showSignature=false log -n 1 --pretty=format:%H
[        ] [        ] d408d302e22179d598f467e11da5dd968dbdc9ec
[        ] [   +3 ms] executing: [C:\src\flutter/] git tag --points-at HEAD
[        ] [  +74 ms] Exit code 0 from: git tag --points-at HEAD
[        ] [        ] 1.22.0
[        ]            1.22.0-12.3.pre
[        ] [  +14 ms] executing: [C:\src\flutter/] git rev-parse --abbrev-ref --symbolic @{u}
[        ] [  +39 ms] Exit code 0 from: git rev-parse --abbrev-ref --symbolic @{u}
[        ] [        ] origin/stable
[        ] [        ] executing: [C:\src\flutter/] git ls-remote --get-url origin
[        ] [  +67 ms] Exit code 0 from: git ls-remote --get-url origin
[        ] [        ] https://github.com/flutter/flutter.git
[        ] [  +77 ms] executing: [C:\src\flutter/] git rev-parse --abbrev-ref HEAD
[   +3 ms] [  +41 ms] Exit code 0 from: git rev-parse --abbrev-ref HEAD
[        ] [        ] stable
[   +2 ms] [  +64 ms] Artifact Instance of 'AndroidMavenArtifacts' is not required, skipping update.
[   +2 ms] [        ] Artifact Instance of 'AndroidGenSnapshotArtifacts' is not required, skipping update.
[        ] [        ] Artifact Instance of 'AndroidInternalBuildArtifacts' is not required, skipping update.
[        ] [        ] Artifact Instance of 'IOSEngineArtifacts' is not required, skipping update.
[   +6 ms] [        ] Artifact Instance of 'FlutterWebSdk' is not required, skipping update.
[   +1 ms] [   +6 ms] Artifact Instance of 'WindowsEngineArtifacts' is not required, skipping update.
[   +1 ms] [        ] Artifact Instance of 'MacOSEngineArtifacts' is not required, skipping update.
[   +1 ms] [        ] Artifact Instance of 'LinuxEngineArtifacts' is not required, skipping update.
[   +1 ms] [        ] Artifact Instance of 'LinuxFuchsiaSDKArtifacts' is not required, skipping update.
[   +2 ms] [        ] Artifact Instance of 'MacOSFuchsiaSDKArtifacts' is not required, skipping update.
[  +18 ms] [        ] Artifact Instance of 'FlutterRunnerSDKArtifacts' is not required, skipping update.
[        ] [        ] Artifact Instance of 'FlutterRunnerDebugSymbols' is not required, skipping update.
[   +1 ms] [  +54 ms] Artifact Instance of 'MaterialFonts' is not required, skipping update.
[   +9 ms] [        ] Artifact Instance of 'GradleWrapper' is not required, skipping update.
[   +3 ms] [        ] Artifact Instance of 'AndroidMavenArtifacts' is not required, skipping update.
[   +1 ms] [        ] Artifact Instance of 'AndroidGenSnapshotArtifacts' is not required, skipping update.
[   +7 ms] [        ] Artifact Instance of 'AndroidInternalBuildArtifacts' is not required, skipping update.
[   +1 ms] [        ] Artifact Instance of 'IOSEngineArtifacts' is not required, skipping update.
[        ] [        ] Artifact Instance of 'FlutterWebSdk' is not required, skipping update.
[   +1 ms] [        ] Artifact Instance of 'FlutterSdk' is not required, skipping update.
[   +1 ms] [        ] Artifact Instance of 'WindowsEngineArtifacts' is not required, skipping update.
[   +2 ms] [        ] Artifact Instance of 'MacOSEngineArtifacts' is not required, skipping update.
[   +1 ms] [        ] Artifact Instance of 'LinuxEngineArtifacts' is not required, skipping update.
[   +1 ms] [        ] Artifact Instance of 'LinuxFuchsiaSDKArtifacts' is not required, skipping update.
[   +1 ms] [        ] Artifact Instance of 'MacOSFuchsiaSDKArtifacts' is not required, skipping update.
[   +1 ms] [        ] Artifact Instance of 'FlutterRunnerSDKArtifacts' is not required, skipping update.
[   +8 ms] [        ] Artifact Instance of 'FlutterRunnerDebugSymbols' is not required, skipping update.
[   +2 ms] [        ] Artifact Instance of 'IosUsbArtifacts' is not required, skipping update.
[   +2 ms] [        ] Artifact Instance of 'IosUsbArtifacts' is not required, skipping update.
[   +2 ms] [        ] Artifact Instance of 'IosUsbArtifacts' is not required, skipping update.
[   +1 ms] [        ] Artifact Instance of 'IosUsbArtifacts' is not required, skipping update.
[   +1 ms] [        ] Artifact Instance of 'IosUsbArtifacts' is not required, skipping update.
[   +1 ms] [        ] Artifact Instance of 'FontSubsetArtifacts' is not required, skipping update.
[   +1 ms] [  +88 ms] Initializing file store
[   +2 ms] [  +17 ms] Skipping target: gen_localizations
[   +1 ms] [  +11 ms] kernel_snapshot: Starting due to {}
[   +2 ms] [  +30 ms] C:\src\flutter\bin\cache\dart-sdk\bin\dart.exe --disable-dart-dev C:\src\flutter\bin\cache\artifacts\engine\windows-x64\frontend_server.dart.snapshot --sdk-root C:\src\flutter\bin\cache\artifacts\engine\common\flutter_patched_sdk/
--target=flutter -Ddart.developer.causal_async_stacks=true -Ddart.vm.profile=false -Ddart.vm.product=false --bytecode-options=source-positions,local-var-info,debugger-stops,instance-field-initializers,keep-unreachable-code,avoid-closure-call-instructions
--enable-asserts --track-widget-creation --no-link-platform --packages D:\FlutterProjeleri\GezegenlerApp\gezegenlerapp.packages --output-dill D:\FlutterProjeleri\GezegenlerApp\gezegenlerapp.dart_tool\flutter_build\30f1f85cd463d89c61318a395e7f99e8\app.dill
--depfile D:\FlutterProjeleri\GezegenlerApp\gezegenlerapp.dart_tool\flutter_build\30f1f85cd463d89c61318a395e7f99e8\kernel_snapshot.d package:gezegenlerapp/main.dart
[+7478 ms] /C:/src/flutter/packages/flutter/lib/src/painting/image_provider.dart:671:7: Error: Expected an identifier, but got '/'.
[   +1 ms]       /rethrow;
[        ]       ^
[  +48 ms] /C:/src/flutter/packages/flutter/lib/src/painting/image_provider.dart:671:8: Error: Expected an identifier, but got 'rethrow'.
[        ]       /rethrow;
[        ]        ^^^^^^^
[   +1 ms] /C:/src/flutter/packages/flutter/lib/src/painting/image_provider.dart:671:8: Error: The getter 'rethrow' isn't defined for the class 'AssetBundleImageProvider'.
[        ]  - 'AssetBundleImageProvider' is from 'package:flutter/src/painting/image_provider.dart' ('/C:/src/flutter/packages/flutter/lib/src/painting/image_provider.dart').
[   +1 ms] Try correcting the name to the name of an existing getter, or defining a getter or field named 'rethrow'.
[        ]       /rethrow;
[   +1 ms]        ^^^^^^^
[ +129 ms] [+8100 ms] /C:/src/flutter/packages/flutter/lib/src/painting/image_provider.dart:671:7: Error: Expected an identifier, but got '/'.
[   +3 ms] [   +3 ms]       /rethrow;
[   +1 ms] [        ]       ^
[   +1 ms] [   +3 ms] /C:/src/flutter/packages/flutter/lib/src/painting/image_provider.dart:671:8: Error: Expected an identifier, but got 'rethrow'.
[   +3 ms] [        ]       /rethrow;
[  +64 ms] [        ]        ^^^^^^^
[  +60 ms] [   +9 ms] /C:/src/flutter/packages/flutter/lib/src/painting/image_provider.dart:671:8: Error: The getter 'rethrow' isn't defined for the class 'AssetBundleImageProvider'.
[   +3 ms] [        ]  - 'AssetBundleImageProvider' is from 'package:flutter/src/painting/image_provider.dart' ('/C:/src/flutter/packages/flutter/lib/src/painting/image_provider.dart').
[   +2 ms] [        ] Try correcting the name to the name of an existing getter, or defining a getter or field named 'rethrow'.
[   +2 ms] [        ]       /rethrow;
[   +1 ms] [        ]        ^^^^^^^
[+4455 ms] [+4556 ms] Persisting file store
[  +99 ms] [ +104 ms] Done persisting file store
[   +2 ms] [  +38 ms] Target kernel_snapshot failed: Exception
[   +1 ms]            #0      KernelSnapshot.build (package:flutter_tools/src/build_system/targets/common.dart:267:7)
[  +47 ms]
[   +3 ms]            #1      _BuildInstance._invokeInternal (package:flutter_tools/src/build_system/build_system.dart:801:27)
[  +46 ms]            #2      _rootRunUnary (dart:async/zone.dart:1198:47)
[   +1 ms]            #3      _CustomZone.runUnary (dart:async/zone.dart:1100:19)
[   +1 ms]            #4      _FutureListener.handleValue (dart:async/future_impl.dart:143:18)
[        ]            #5      Future._propagateToListeners.handleValueCallback (dart:async/future_impl.dart:696:45)
[   +1 ms]            #6      Future._propagateToListeners (dart:async/future_impl.dart:725:32)
[  +78 ms]            #7      Future._completeWithValue (dart:async/future_impl.dart:529:5)
[        ]            #8      Future._asyncCompleteWithValue. (dart:async/future_impl.dart:567:7)
[   +1 ms]            #9      _rootRun (dart:async/zone.dart:1190:13)
[  +44 ms]            #10     _CustomZone.run (dart:async/zone.dart:1093:19)
[   +3 ms]            #11     _CustomZone.runGuarded (dart:async/zone.dart:997:7)
[   +2 ms]            #12     _CustomZone.bindCallbackGuarded. (dart:async/zone.dart:1037:23)
[        ]            #13     _microtaskLoop (dart:async/schedule_microtask.dart:41:21)
[        ]            #14     _startMicrotaskLoop (dart:async/schedule_microtask.dart:50:5)
[ +124 ms]            #15     _runPendingImmediateCallback (dart:isolate-patch/isolate_patch.dart:118:13)
[  +66 ms]            #16     _RawReceivePortImpl._handleMessage (dart:isolate-patch/isolate_patch.dart:169:5)
[   +6 ms] [   +9 ms]
[   +1 ms]            #0      throwToolExit (package:flutter_tools/src/base/common.dart:14:3)
[        ]            #1      AssembleCommand.runCommand (package:flutter_tools/src/commands/assemble.dart:238:7)
[  +71 ms]            #2      _rootRunUnary (dart:async/zone.dart:1198:47)
[   +2 ms]            #3      _CustomZone.runUnary (dart:async/zone.dart:1100:19)
[        ]            #4      _FutureListener.handleValue (dart:async/future_impl.dart:143:18)
[        ]            #5      Future._propagateToListeners.handleValueCallback (dart:async/future_impl.dart:696:45)
[        ] [  +14 ms] "flutter assemble" took 13.072ms.
[   +1 ms]            #6      Future._propagateToListeners (dart:async/future_impl.dart:725:32)
[        ]            #7      Future._completeWithValue (dart:async/future_impl.dart:529:5)
[   +1 ms]            #8      _AsyncAwaitCompleter.complete (dart:async-patch/async_patch.dart:40:15)
[        ]            #9      _completeOnAsyncReturn (dart:async-patch/async_patch.dart:311:13)
[        ]            #10     FlutterBuildSystem.build (package:flutter_tools/src/build_system/build_system.dart)
[        ]            #11     _rootRunUnary (dart:async/zone.dart:1198:47)
[        ]            #12     _CustomZone.runUnary (dart:async/zone.dart:1100:19)
[        ]            #13     _FutureListener.handleValue (dart:async/future_impl.dart:143:18)
[        ]            #14     Future._propagateToListeners.handleValueCallback (dart:async/future_impl.dart:696:45)
[  +25 ms]            #15     Future._propagateToListeners (dart:async/future_impl.dart:725:32)
[   +1 ms]            #16     Future._completeWithValue (dart:async/future_impl.dart:529:5)
[        ]            #17     _AsyncAwaitCompleter.complete (dart:async-patch/async_patch.dart:40:15)
[   +1 ms]            #18     _completeOnAsyncReturn (dart:async-patch/async_patch.dart:311:13)
[   +1 ms]            #19     _BuildInstance.invokeTarget (package:flutter_tools/src/build_system/build_system.dart)
[        ]            #20     _rootRunUnary (dart:async/zone.dart:1198:47)
[        ]            #21     _CustomZone.runUnary (dart:async/zone.dart:1100:19)
[        ]            #22     _FutureListener.handleValue (dart:async/future_impl.dart:143:18)
[        ]            #23     Future._propagateToListeners.handleValueCallback (dart:async/future_impl.dart:696:45)
[        ]            #24     Future._propagateToListeners (dart:async/future_impl.dart:725:32)
[  +28 ms]            #25     Future._completeWithValue (dart:async/future_impl.dart:529:5)
[   +1 ms]            #26     Future.wait. (dart:async/future.dart:414:23)
[   +1 ms]            #27     _rootRunUnary (dart:async/zone.dart:1198:47)
[        ]            #28     _CustomZone.runUnary (dart:async/zone.dart:1100:19)
[        ]            #29     _FutureListener.handleValue (dart:async/future_impl.dart:143:18)
[  +25 ms]            #30     Future._propagateToListeners.handleValueCallback (dart:async/future_impl.dart:696:45)
[   +1 ms]            #31     Future._propagateToListeners (dart:async/future_impl.dart:725:32)
[   +2 ms]            #32     Future._completeWithValue (dart:async/future_impl.dart:529:5)
[   +1 ms]            #33     _AsyncAwaitCompleter.complete (dart:async-patch/async_patch.dart:40:15)
[        ]            #34     _completeOnAsyncReturn (dart:async-patch/async_patch.dart:311:13)
[        ]            #35     _BuildInstance._invokeInternal (package:flutter_tools/src/build_system/build_system.dart)
[  +32 ms]            #36     _asyncErrorWrapperHelper.errorCallback (dart:async-patch/async_patch.dart:91:64)
[   +1 ms]            #37     _rootRunBinary (dart:async/zone.dart:1214:47)
[  +30 ms]            #38     _CustomZone.runBinary (dart:async/zone.dart:1107:19)
[   +1 ms]            #39     _FutureListener.handleError (dart:async/future_impl.dart:157:20)
[   +1 ms]            #40     Future._propagateToListeners.handleError (dart:async/future_impl.dart:708:47)
[  +26 ms]            #41     Future._propagateToListeners (dart:async/future_impl.dart:729:24)
[   +1 ms]            #42     Future._completeError (dart:async/future_impl.dart:537:5)
[   +1 ms]            #43     _AsyncAwaitCompleter.completeError (dart:async-patch/async_patch.dart:47:15)
[        ]            #44     KernelSnapshot.build (package:flutter_tools/src/build_system/targets/common.dart)
[        ]            #45     _rootRunUnary (dart:async/zone.dart:1198:47)
[        ]            #46     _CustomZone.runUnary (dart:async/zone.dart:1100:19)
[        ]            #47     _FutureListener.handleValue (dart:async/future_impl.dart:143:18)
[        ]            #48     Future._propagateToListeners.handleValueCallback (dart:async/future_impl.dart:696:45)
[   +2 ms]            #49     Future._propagateToListeners (dart:async/future_impl.dart:725:32)
[  +27 ms]            #50     Future._completeWithValue (dart:async/future_impl.dart:529:5)
[   +1 ms]            #51     _AsyncAwaitCompleter.complete (dart:async-patch/async_patch.dart:40:15)
[   +1 ms]            #52     _completeOnAsyncReturn (dart:async-patch/async_patch.dart:311:13)
[        ]            #53     KernelCompiler.compile (package:flutter_tools/src/compile.dart)
[   +1 ms]            #54     _rootRunUnary (dart:async/zone.dart:1198:47)
[  +27 ms]            #55     _CustomZone.runUnary (dart:async/zone.dart:1100:19)
[   +2 ms]            #56     _FutureListener.handleValue (dart:async/future_impl.dart:143:18)
[   +1 ms]            #57     Future._propagateToListeners.handleValueCallback (dart:async/future_impl.dart:696:45)
[   +1 ms]            #58     Future._propagateToListeners (dart:async/future_impl.dart:725:32)
[  +33 ms]            #59     Future._completeWithValue (dart:async/future_impl.dart:529:5)
[  +38 ms]            #60     Future._asyncCompleteWithValue. (dart:async/future_impl.dart:567:7)
[   +1 ms]            #61     _rootRun (dart:async/zone.dart:1190:13)
[   +1 ms]            #62     _CustomZone.run (dart:async/zone.dart:1093:19)
[   +1 ms]            #63     _CustomZone.runGuarded (dart:async/zone.dart:997:7)
[   +1 ms]            #64     _CustomZone.bindCallbackGuarded. (dart:async/zone.dart:1037:23)
[   +1 ms]            #65     _microtaskLoop (dart:async/schedule_microtask.dart:41:21)
[   +1 ms]            #66     _startMicrotaskLoop (dart:async/schedule_microtask.dart:50:5)
[   +1 ms]            #67     _runPendingImmediateCallback (dart:isolate-patch/isolate_patch.dart:118:13)
[  +33 ms]            #68     _RawReceivePortImpl._handleMessage (dart:isolate-patch/isolate_patch.dart:169:5)
[   +5 ms] FAILURE: Build failed with an exception.
[  +43 ms] * Where:
[   +1 ms] Script 'C:\src\flutter\packages\flutter_tools\gradle\flutter.gradle' line: 904
[   +1 ms] * What went wrong:
[  +34 ms] Execution failed for task ':app:compileFlutterBuildDebug'.
[  +65 ms] > Process 'command 'C:\src\flutter\bin\flutter.bat'' finished with non-zero exit value 1
[  +40 ms] * Try:
[  +25 ms] Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.
[  +34 ms] * Get more help at https://help.gradle.org
[  +13 ms] BU�LD FAILED in 17s
[  +28 ms] [   +4 ms] ensureAnalyticsSent: 1ms
[   +4 ms] [   +2 ms] Running shutdown hooks
[   +1 ms] [   +2 ms] Shutdown hooks complete
[  +70 ms] [   +4 ms] exiting with code 1
[   +1 ms] > Task :app:compileFlutterBuildDebug FAILED
[   +1 ms] 1 actionable task: 1 executed
[  +25 ms] Running Gradle task 'assembleDebug'... (completed in 19,4s)
[  +30 ms] Exception: Gradle task assembleDebug failed with exit code 1
[   +1 ms] "flutter run" took 21.075ms.
[   +6 ms]
#0      throwToolExit (package:flutter_tools/src/base/common.dart:14:3)
#1      RunCommand.runCommand (package:flutter_tools/src/commands/run.dart:607:7)

#2      FlutterCommand.verifyThenRunCommand (package:flutter_tools/src/runner/flutter_command.dart:972:18)
#3      _rootRunUnary (dart:async/zone.dart:1198:47)
#4      _CustomZone.runUnary (dart:async/zone.dart:1100:19)
#5      _FutureListener.handleValue (dart:async/future_impl.dart:143:18)
#6      Future._propagateToListeners.handleValueCallback (dart:async/future_impl.dart:696:45)
#7      Future._propagateToListeners (dart:async/future_impl.dart:725:32)
#8      Future._completeWithValue (dart:async/future_impl.dart:529:5)
#9      _AsyncAwaitCompleter.complete (dart:async-patch/async_patch.dart:40:15)
#10     _completeOnAsyncReturn (dart:async-patch/async_patch.dart:311:13)
#11     RunCommand.usageValues (package:flutter_tools/src/commands/run.dart)
#12     _rootRunUnary (dart:async/zone.dart:1198:47)
#13     _CustomZone.runUnary (dart:async/zone.dart:1100:19)
#14     _FutureListener.handleValue (dart:async/future_impl.dart:143:18)
#15     Future._propagateToListeners.handleValueCallback (dart:async/future_impl.dart:696:45)
#16     Future._propagateToListeners (dart:async/future_impl.dart:725:32)
#17     Future._completeWithValue (dart:async/future_impl.dart:529:5)
#18     _AsyncAwaitCompleter.complete (dart:async-patch/async_patch.dart:40:15)
#19     _completeOnAsyncReturn (dart:async-patch/async_patch.dart:311:13)
#20     AndroidDevice.isLocalEmulator (package:flutter_tools/src/android/android_device.dart)
#21     _rootRunUnary (dart:async/zone.dart:1198:47)
#22     _CustomZone.runUnary (dart:async/zone.dart:1100:19)
#23     _FutureListener.handleValue (dart:async/future_impl.dart:143:18)
#24     Future._propagateToListeners.handleValueCallback (dart:async/future_impl.dart:696:45)
#25     Future._propagateToListeners (dart:async/future_impl.dart:725:32)
#26     Future._completeWithValue (dart:async/future_impl.dart:529:5)
#27     Future._asyncCompleteWithValue. (dart:async/future_impl.dart:567:7)
#28     _rootRun (dart:async/zone.dart:1190:13)
#29     _CustomZone.run (dart:async/zone.dart:1093:19)
#30     _CustomZone.runGuarded (dart:async/zone.dart:997:7)
#31     _CustomZone.bindCallbackGuarded. (dart:async/zone.dart:1037:23)
#32     _microtaskLoop (dart:async/schedule_microtask.dart:41:21)
#33     _startMicrotaskLoop (dart:async/schedule_microtask.dart:50:5)
#34     _runPendingImmediateCallback (dart:isolate-patch/isolate_patch.dart:118:13)
#35     _RawReceivePortImpl._handleMessage (dart:isolate-patch/isolate_patch.dart:169:5)

[ +317 ms] ensureAnalyticsSent: 254ms
[   +5 ms] Running shutdown hooks
[  +38 ms] Shutdown hook priority 4
[  +11 ms] Shutdown hooks complete
[  +34 ms] exiting with code 1
if i work flutter run --verbose ,I'm getting this screen

@ummuhan
C:\Users\Ummuhan Oksuz\AppData\Local\Android\Sdk
you seem to have space in the folder. Please remove the space and try again to see if it works.
Thanks.

@ummuhan
C:\Users\Ummuhan Oksuz\AppData\Local\Android\Sdk
you seem to have space in the folder. Please remove the space and try again to see if it works.
Thanks.

but I have done many projects like this before. Why would you make such a mistake now?

@ummuhan
Did you remove the space in folder name and tried ?
Thanks.

@ummuhan
Did you remove the space in folder name and tried ?
Thanks.

Hİ @darshankawar
I solved the error.I think the sdk file was faulty, I deleted it, I installed it again, it was fixed.
Thanks.

Closing this as resolved per above comment.


Rebalancing will bloat latency times on a pi4

Background
Raspberry Pi 4 8GB, baremetal setup with no other services than the minimum (no TH RTL mempool or whatever, bitcoind+lnd+electrum personal server only).
I had sync postgres replication active, and I disabled even that one (to no/negligible avail).
One of my services does bos probe for every peer of mine in turn, each about 13 minutes after the other cyclically, keeps 2 days logs, shows average of last (peers number) runs.
Changing nothing other than enabling or disabling my rebalancer based on rebalance-lnd, avg latency to my peers will range from 5s with no rebalancer, to above 20s with rebalancer at 5 threads.
During the 5-threads rebalance runs, system load will reach 4.5 per 5' as per htop, during single thread rebalance runs 5' avg load gets down to less than 3; no matter this, latency times whenever even just one rebalance is happening, increase over time.
With postgresql, 8gb of ram, and a 1.8GHz arm64 cpu I would expect no noticeable/minimal consequences on probe results.
Your environment

version of lnd 0.15
which operating system (uname -a on *Nix) raspios bullseye 64bit
version of btcd, bitcoind, or other backend .22
any other relevant environment details //

Steps to reproduce
Have from 1 to 5 rebalances running on a Pi4, keep track of bos probe latency times to all of your peers
Expected behaviour
latency times do increase, but in the amount of 10-15%, not 300% ...
Actual behaviour
Latency to channel peers goes from little more than 5s avg, to well over 20s avg

Hard to say what's actually going on without a profile: https://github.com/lightningnetwork/lnd/blob/a329c8061266418bccd797aa5d7d277c736ee930/docs/debugging_lnd.md#capturing-pprof-data-with-lnd. Another helpful link on obtaining a profile: https://jvns.ca/blog/2017/09/24/profiling-go-with-pprof/. What you want here is to generate a CPU profile right when you trigger a rebalance or to the pool to see the response time of peers.
It's also worth noting that the underlying database supports a single writer a time, a rebalance can generate a lot of failures which means more writes, and a remote DB can generate additional network latency in the process. A profile will show you exactly where time is being spent, which should help you debug this issue.

Do I need to use the /debug/pprof/profile endpoint for specific CPU profiling? As the docs link you provided only shows the goroutines endpoint.
Also, can I inconsequentially leave the profile= line in lnd.conf even when I don't need it anymore? From my understanding it will not generate any load on the system unless I do connect to that port and ask for a profile, right?

Wait, am I going to share sensitive data by attaching the CPU profile output in here? I see a binary file and I do not have the tools to read it installed

No, there is no sensitive data in the CPU profile. You can use go tool pprof <file.prof> and then execute web to show the contents in a web browser.

No, there is no sensitive data in the CPU profile. You can use go tool pprof <file.prof> and then execute web to show the contents in a web browser.

ok I trust you Oliver.
Self explanatory, profile is taken while just being online, profilerebalance a short while after I started my 5-thread rebalance-lnd routine
profiles.zip
.

Looking at the profile, it's spending most of the time in DB queries, or waiting for postgres to respond. Most fo the time is actually spent in GetInfo, where it needs to fetch all the channels for a given node.

Is the postgres server running on the same machine, or a remote one with possibly high latency?
One curious thing there is the call to withLock. AFAICT, that's in the stdlib package and looks to be grabbing an exclusive lock to generate the query.

Another shot showing more context w.r.t het path down:

Oh wow... well I do use lncli getinfo at least every minute in my own scripts, plus I have lndg's data fetcher set to fetch updates from lnd DB every few seconds, but that is the baseline, the rebalancer will run lncli listchannels | jq -r '.[][] | .remote_pubkey, .pending_htlcs[] ' | grep -B 1 { | grep <pubkey> before each call to rebalance-lnd to know beforehand if there's any outgoing htlcs on that channel and skip launching rebalance in that case, but really, everything that consistently happens for 99% of the time when rebalancing is active, over the baseline, is rebalance-lnd doing its job, and obviously postgresql doing its additional job. I do run DB on the same system, in a raid1 array on btrfs partitions, and those partitions are in fact encrypted with luks across two kingston a400 ssd's which are cacheless... but I doubt this is generating an overload for the processor, cpu usage by postgres as reported by atop is 35%-ish.
Is withLock an issue that could prevent DB from running smoothly? I had set up everything for replication, but due to this incident I disabled replication and also removed the replication slot from the main postgres instance, and dropped the second postgres instance running off a third ssd, nothing related to replication should be happening anymore.

So, anything specific I can do or try on my side to get at this?

Could a watchtower over tor cause the high latency I see during rebalances? If yes, since we are both hybrid, how do we provide clearnet WT service to each other? lncli tower info  only shows an onion uri to me.

Rather than poll list channels, you could use the SubscribeHtlcEvents RPC call. The pipeline for that streaming RPC call never hits disk, and would make sure you always have consistent view of the set of HTLCs. You'd first subscribe to this call, then do ListChannels to start w/ to build up your view of the HTLC. After the snapshot is obtained, you'll be notified of any other changes.

I do run DB on the same system, in a raid1 array on btrfs partitions, and those partitions are in fact encrypted with luks across two kingston a400 ssd's which are cacheless... but I doubt this is generating an overload for the processor, cpu usage by postgres as reported by atop is 35%-ish.

If possible, you might want to consider investing in even just slightly beefier hardware. It could be a decade old laptop or something, you wouldn't have to invest much to get hardware more powerful and reliable than a rasp pi.
On the postgres side, it might be fruitful to look at any instrumentation available w/ the server. So to be able to see things like which queries are taking the longest, etc. Alternatively, you might try reducing the number of active rebalance threads.
With withLock thing was just a hunch, I haven't dug deeper yet to see if it was actually an issue or not.
Zooming out, with 0.16 we plan to start migrating heavy loaded sections of the DB over to pure SQL. This issue shows that we should also migrate the core channel state as well, since things like GetInfo and other scripts might end up rapidly polling the state. Another shorter term solution here would be more client side caching, which would directly cut down on latency, but add most custom DB logic that might be error prone.
Do you know what your config options are for the max number of postgres connection slots?

you could use the SubscribeHtlcEvents RPC call. The pipeline for that streaming RPC call never hits disk, and would make sure you always have consistent view of the set of HTLCs.

My relationship with gRPC in PHP is not ideal. Rather, I don't have such relationship, at all, and learning to do gRPC from PHP is something I'd like to do, just not in the next few days. But I'd have other means to "fix" that by not issuing a lncli listchannels, I can just run lndg updater every 3 seconds.
In any case, there is just one listchannels call before each rebalance-lnd cycle, which in itself runs for a few minutes, so I wouldn't thing listchannels is a party pooper by itself.

you might want to consider investing in even just slightly beefier hardware

On my radar, just not enthusiastic about upgrading hardware (and energy costs) while Pi4 doesn't really sweat that much.
In any case, I observed that even a single rebalance thread will hit the latency times.

On the postgres side, it might be fruitful to look at any instrumentation available w/ the server. So to be able to see things like which queries are taking the longest, etc.

Duly noted

Do you know what your config options are for the max number of postgres connection slots?

By suggestion of @joostjager I have that limit set at 0 in lnd.conf

By suggestion of @joostjager I have that limit set at 0 in lnd.conf

IIUC, setting a value of zero here actually means you'll have an unbounded amount of connections. Depending on your postgres settings, this might be leading to some errors and more retried queries. Based on this material, I think setting an explicit value is more predicable from a memory/cpu consumption perspective.

I think setting an explicit value is more predicable from a memory/cpu consumption perspective.

I went to set a limit, and actually discovered I have nothing set for db.postgres.maxconnections, since postgres.conf defaults to 100 max I have set it to 21 in lnd.conf for good measure.


Auto-rollover

resolves #456
Note: I'm looking forward to the event sourcing model. Getting this working in the current state model is quite cumbersome.

Independent of merging this PR (can be changed later):
Should we stick to the name rollover? Or shall this be renamed to NewFundingRound or similar?
I think the rollover is actually the funding round, whereas the "funding" would be the interest.

I'll rebase and merge this some time this week.

Some notes after some testing:
There was a problem of cleanup being triggered too fast (with 10 seconds it is almost always triggered). Since rollover is actually a long running (yet ephemeral) message exchange, we need to set the timeout higher.
I thus introduced MAX_ROLLOVER_DURATION that is set to 4 minutes. The auto-rollover interval is then set to MAX_ROLLOVER_DURATION + 1min. I am running another test with these changes, I assume that the logic should work now.
However, auto-rollover is currently not triggered upon startup, but only after the first intertval of MAX_ROLLOVER_DURATION + 1min (i.e. 5 mins) is over.
While we could just trigger an initial auto-rollover by sending the message, this is actually not good enough, because we have to ensure we are connected to a maker first. If we don't ensure to send this after a connection was established I think it would always fail in case establishing a connection takes longer then triggering rollover...
Now, reporting the connection status to the auto-rollover actor is something that we already started discussing when cleanup was implemented internally. Probably we should actually re-design auto-rollover to be more aware of the connection status and only trigger auto-rollover upon an active connection.
This PR is not necessarily blocked on this issue, but we have to be aware that rollover is not triggerd (directly) on startup at the moment.

Rebased 😘

There was a problem of cleanup being triggered too fast (with 10 seconds it is almost always triggered). Since rollover is actually a long running (yet ephemeral) message exchange, we need to set the timeout higher.
I thus introduced MAX_ROLLOVER_DURATION that is set to 4 minutes. The auto-rollover interval is then set to MAX_ROLLOVER_DURATION + 1min.
After running some manual test again I can confirm that the logic works now. The rollover is triggered after MAX_ROLLOVER_DURATION + 1min (i.e. 5 mins) and only CFDs that were not rolled over within the last hour are rolled over (i.e. a rollover proposal is sent to the maker). If the rollover actor runs longer than 4 minutes it will send a Failed message ending the rollover.

Another solution would be to not cancel right away within cleanup but just send a message to ourselves that X amount of time has passed and then we can evaluate whether or not the protocol has progressed (did the maker answer?) or not and trigger the potential cleanup from in there. Then this timeout is independent of how long the entire rollover protocol takes.

Auto-rollover is currently not triggered upon startup, but only after the first intertval of MAX_ROLLOVER_DURATION + 1min (i.e. 5 mins) is over. While we could just trigger an initial auto-rollover by sending the message, this is actually not good enough, because we have to ensure we are connected to a maker first. If we don't ensure to send this after a connection was established I think it would always fail in case establishing a connection takes longer then triggering rollover... Now, reporting the connection status to the auto-rollover actor is something that we already started discussing when cleanup was implemented internally. Probably we should actually re-design auto-rollover to be more aware of the connection status and only trigger auto-rollover upon an active connection. The two AutoRollover triggers would then be:
1. Upon establishing a connection to a maker

2. Upon auto-rollover interval _if_ we have an active connection to a maker

This PR is not necessarily blocked on this issue, but we have to be aware that rollover is not triggerd (directly) on startup at the moment.

Is this actually a big issue? For our current userbase (people on umbrel) we can expect that this daemon is running the entire time. We trigger this every 5 minutes so if the connection to the maker is unavailable, we will try again in another 5 minutes. I am not sure adding additional triggers here is worth the complexity.

I am not sure adding additional triggers here is worth the complexity. It is not like this is super time-sensitive. We have almost 24h to trigger a rollover.

That being said, it would be pretty easy to trigger AutoRollover from other actors, like on startup or from the connection actor.

That being said, it would be pretty easy to trigger AutoRollover from other actors, like on startup or from the connection actor.

Given that we connect on startup, the only real additional trigger is probably establishing a connection to the maker. The time-based one is independent. I don't think I would bother to restrict that to only when we have a connection.

Ok with me, let's see how it proves itself once in production :)
Feel free to squash and merge

bors r+


Interactive Transition Tutorial Broken

In the sample app, the controller seems to dismiss immediately, making a new project and following the sample code, I can confirm that the call to dismiss(animated: true, completion: nil) simply dismisses the controller immediately.
The tutorial and code is found at:
http://lkzhao.com/2017/02/05/hero-interactive-transition.html
Additionally, it isn't clear how to really use interactive Hero transitions with a NavigationController, or what the difference is between using Hero.shared.apply vs setting heroModifiers on a view.

You need to set isHeroEnabled to true on the viewController that you wish to dismiss interactively.


Fix incorrect mapping of DMA channel to DMAMUX channel

When trying to use the DMA2 peripheral on an STM32G474 I noticed that my buffer did not seem to get written to by the DMA. After some investigation I think I found the issue. From what I can this dma driver does not use the correct mapping from DMA channel to DMAMUX channel for DMA2.
According to RM0440 under "DMAMUX mapping":
For category 3 and category 4 devices:

DMAMUX channels 0 to 7 are connected to DMA1 channels 1 to 8
DMAMUX channels 8 to 15 are connected to DMA2 channels 1 to 8

For category 2 devices:

DMAMUX channels 0 to 5 are connected to DMA1 channels 1 to 6
DMAMUX channels 6 to 11 are connected to DMA2 channels 1 to 6

The fix in this PR is quite an ugly hack but it does try to keep the API as unchanged as possible. It only fixes the problem on cat 3 and 4 devices for now(all but G431 and G441).
I get the feeling that the driver as written today works on the (wrong) assumption that every DMA has its own DMAMUX, hence the fn mux_ptr() in Instance. However when implementing the Instance for DMA1 and DMA2 they both use the same one and only DMAMUX.
Therefore i suppose it would make sense to completely remove the fn mux_ptr() from the trait and find some better way than to use my const IS_DMA1: bool.
I am open to suggestions :)

@no111u3 would you mind having a look at this? :)

Thank you! :)


Include example app in the workspace

Currently there are two workspaces in this project; YelpAPI.xcworkspace and Example/YelpAPI.xcworkspace. And two podfiles, as well! This makes development a little tricky, because you need to jump between the two when working on the clientlib.
Now that we have a target for building YelpAPI after #19, we can actually just integrate the framework into the sample app directly through there, no need for a separate CocoaPods install.
This should make development simpler; edit the clientlib, run the tests, run the sample project, all from within the same workspace.
Things you'll see in this change:

Cleaning up pods and other now unnecessary files for the example
Setting the deployment target on the example to iOS8 so it stops complaining about frameworks being unavailable on iOS7
Adding public headers to the umbrella header in the Xcode project
A test import reorder that xctool requires for some reason but xcodebuild does not

:shipit:


e2e framework

Codecov Report

Merging #145 (c16081b) into main (dcfdf2d) will decrease coverage by 2.39%.
The diff coverage is 0.00%.

:exclamation: Current head c16081b differs from pull request most recent head 8718fdc. Consider uploading reports for the commit 8718fdc to get more accurate results

@@            Coverage Diff             @@
##             main     #145      +/-   ##
==========================================
- Coverage   57.78%   55.39%   -2.40%
==========================================
  Files          51       52       +1
  Lines        2916     3022     +106
==========================================
- Hits         1685     1674      -11
- Misses       1117     1233     +116
- Partials      114      115       +1

Flag
Coverage Δ

unittests
55.39% <0.00%> (-2.40%)
:arrow_down:

Flags with carried forward coverage won't be shown. Click here to find out more.

Impacted Files
Coverage Δ

pkg/test/e2e_utils.go
0.00% <0.00%> (ø)

pkg/pipeline/utils/exit.go
52.17% <0.00%> (-47.83%)
:arrow_down:

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update dcfdf2d...8718fdc. Read the comment docs.

@KalmanMeth your assumption that kind exist in version XXX and deployed doesn't stand for the CI/CD process we fail here export KIND=$GOBIN/kind-v0.11.1 in the script ... this need to be changed


Assertion failure custom functions

Hi there,
Integrating the library in our own engine, we added some small features to it.
So I'm proposing to report them back.
I started with assertions, and the ability to set a custom callback.
It is inspired by the already implemented allocation custom functions.
That way, any recast/detour assertion failure can be caught and rerouted for specific handling.
By default, the behavior has been left unchanged, which is the system 'assert' macro.
I made this pull request
https://github.com/recastnavigation/recastnavigation/pull/250
Could someone review it and give feedback ?

Closed in #250


WMAgent: install/run MariaDB from Dockerhub

Impact of the new feature
WMAgent
Is your feature request related to a problem? Please describe.
As part of the migration to PyPi and RPM-less deployment, we should start looking into running MariaDB as a container in the FNAL WMAgent nodes.
Describe the solution you'd like
Create a MariaDB dockerfile in CMSKubernetes, using the latest stable release that we have already commissioned in the cmsdist repository.
In addition to that, we need to provide any relevant scripts and extra configuration files to tweak the service and install/run it.
Changes to the WMAgent deployment script might be required as well, moving away from a localhost MariaDB deployment to a containerized model (through host network or similar).
Note that all of the MariaDB data needs to be in a persisted storage (resilient to container restarts/recreation).
Lastly, once the image is stable, we need to label it accordingly to avoid automated registry cleanup.
Valentin says that the policy is: tag needs to have a -stable suffix.
Describe alternatives you've considered
None
Additional context
None
Part of the following meta issue: https://github.com/dmwm/WMCore/issues/11314

@khurtado  This is resolved by this PR https://github.com/dmwm/CMSKubernetes/pull/1412

@todor-ivanov Thank you! Just to track record on this, I am installing docker in my testbed agent and deploying your PR to test.
One thing I noticed is that --mount is not available in the standard docker package, but it is in the community edition docker-ce and in the podman/docker version of e.g.: lxplus8 for example. Can we say it is safe to assume we will be using those versions and hence can depend on --mount rather than e.g.: --volume?

Hi @khurtado I just noticed your comment here.

Can we say it is safe to assume we will be using those versions and hence can depend on --mount rather than e.g.: --volume?

Yes, it is safe to assume that. Because even if we use the OS package, later once we move to Alma9, the docker engine version is supposed to be new enough such that we'd get this functionality there as well. So at the end, it won't matter.
BTW, I was considering and looking into the --volume option for sharing space between containers. And it does help a little when it comes to users' permissions, but makes things a little bit more complicate and uncomfortable to use when it comes to shared write permissions from both the OS and the container (not saying impossible, though). And I am not sure (I may be completely wrong in my next statement), but it may have impact on the performance as well. So for the time being I decided to stay with bind mounts through --mount in coherence with original plan.

this issue has been resolved with: https://github.com/dmwm/CMSKubernetes/pull/1412 and the container with the currently used mariaDB version (10.6.5) by all our agents have been uploaded at registry.cern.ch
I am closing this issue.


Consistent GiB / GB usage

Need a consistent usage of GiB or GB.
ie.) Pulling wizard-vicuna shows 6.8GB, but when running ollama list, it'll show as 7.3GB.

This got fixed w/ PR #130


[Accessibility][Keyboard support] Add access keys & arrow keys docs and add clarify guidance

Today, our Keyboard support section does not include information about access keys or arrow keys, and doesn't have much documentation about default behavior or reference documents. This change adds guidance for access keys, arrow keys, and more, and documents the expected and default behavior for many of them.
Fixes #1229
Fixes #1225
Fixes #1226
Description

Tab order

Added example of default behavior.
Clarified guidance & added documentation links.
Updated manual tab order example to differ from default behavior.

Arrow keys

Added arrow keys section, with default example and custom example using XYFocusKeyboardNavigation.
Documented common expectations for arrow keys, like Home/End, PgUp/PgDn, and PosInSet/SizeOfSet.

Accelerators

Demonstrate the default tooltip for keyboard accelerators.
Add an example with a custom tooltip.

Access keys

Added an example of access keys, plus documentation.

Landmarks & headings

Moved to Screen reader section, since it has no effect on Keyboard.
Added references for understanding headings & landmarks.
Added example with custom landmarks.
Documented "Narrator contexts", or how Narrator will read controls within named accessible groups.

Motivation and Context
This addresses documentation gaps in our keyboard examples. Hopefully it will lead folks to design more keyboard-accessible UI.
How Has This Been Tested?
Deployed locally.

[ ] Narrator correctly narrates new content.
[ ] Keyboard examples work as described.
[ ] Links work
[ ] Why aren't accelerator keys correctly setting the UIA AcceleratorKey property?

Screenshots (if appropriate):
Keyboard page

Screen reader page

Types of changes

[X] New feature (non-breaking change which adds functionality)

We should probably add examples of access keys to the menubar pages!

PR looks good to me, thank you so much for working on all of this @citelao!

@karkarl If you wanna take a look, otherwise I would merge this


Request hangs behind corporate https_proxy using new axios versions

Https request hangs behind corporate proxy when using axios, versions 0.15.3 and above, using the following test code:
var axios = require('axios');

let httpsProxyAgent = require('https-proxy-agent');
var agent = new httpsProxyAgent(process.env.https_proxy);
var testApi = 'https://www.google.com';

var config = {
  baseUrl: testApi,
  url: '/',
  httpsAgent: agent
}

axios.request(config).then((res) => console.log(res)).catch(err => console.log(err))

The corporate proxy is pulled in using the process.env.https_proxy variable.
export http_proxy=http://username:password@proxy.company.com:8099
export https_proxy=$http_proxy

Google is not blocked by the corporate proxy.

axios version: e.g.: v0.15.3
Environment: e.g.: node v6.9.5, OSX El Capitan v10.11.6

@tjausten did you ever figure this out?

Hey Eddie, thanks for your response. We found out that the issue was with the SDK we were using rather an issue with Axios itself. I will close this issue.


ROX-19177: Fix display options in Network Graph

Description
A detailed explanation of the changes in your PR.
Feel free to remove this section if it is overkill for your PR, and the title of your PR is sufficiently descriptive.
Checklist

[ ] Investigated and inspected CI test results
[ ] Unit test and regression tests added
[ ] Evaluated and added CHANGELOG entry if required
[ ] Determined and documented upgrade steps
[ ] Documented user facing changes (create PR based on openshift/openshift-docs and merge into rhacs-docs)

If any of these don't apply, please comment below.
Testing Performed
TODO(replace-me)
Use this space to explain how you tested your PR, or, if you didn't test it, why
you did not do so. Valid reasons include, for example, "CI is sufficient",
"No testable changes". Feel free to attach JSON snippets, curl commands,
screenshots.
In addition to reviewing your code, reviewers must also review your testing
instructions and make sure they are sufficient.

Current dependencies on/for this PR:

master

PR #7500   👈

This comment was auto-generated by Graphite.


Issues with testing (tests pass when they shouldn't)

Hello! Thank you for the great tool.
I'm currently unable to get an individual test to fail with the ConjureCljRunCurrentTest command.
If I've created a new project with Leiningen, I'm able to switch into the testing file and evaluate the file with <localleader>eb and then run all tests with <localleader>ta which works fine (perhaps I'm doing this wrong, if so please let me know).
However, if I attempt to run any of the specific tests, by hovering inside of them and then pressing <localleader>tc then they always pass. This even occurs with the default test that is supplied by Leiningen, which should fail. The tests do fail if just run via the command line with lein test.

Furthermore, I'm unable to see the error output from any failing tests.
I'm on Neovim 0.6.0--I'm relatively new to Clojure, any help would be appreciated. Thank you!

Apologies--did not realize you needed to start the nRepl manually in another terminal in order to get this to work. Closing!

Hmm you shouldn't really need to, that should fail, you're right. I'm going to reopen and investigate a little.
Do you know if you were using the "autorepl", the babashka thing that connects for you on startup? If so that narrows it down pretty quickly.

I'm pretty sure it's a misconfiguration on my part of some sort—if I'm doing nothing else other than lein new test-repo && cd test-repo, I'll see "No nREPL port file found" inside the Conjure buffer, after opening up a test file and trying to run a test inside Neovim. But if I'm connecting manually (running lein repl in a terminal) and then opening up the buffer, it actually  connects fine and the test fails, as expected.

Above are the logs. This really works fine, and is a great workflow, and could only be improved if there's a way to automatically startup the Repl when opening up Neovim.


Create new scoring function and add database for scoring

I added new scoring function in analysis/metasploit/runExploits.py.
Besides, create database exploit and tables module, score to record data of modules for scoring, which adds new schema db/exploit_schema and two .csv file module.csv, score.csv for importing data.
File scripts/setup.sh was modified for users to create new database and tables while installing.

Please rebase and remove the two commits 'add moduleDB' and 'delete moduleDB', thanks!


Submitting Korean Translation (part 1)

Korean translation completed for the items below:
https://p5js.org/ and sidebar items
https://p5js.org/get-started/
https://p5js.org/community/
background()
clear()
colorMode()
fill()
noFill()
noStroke()
stroke()
arc()
ellipse()

looking good!


[Feature] /Mobilepay

/mobilepay id money.
/pay, /mobilepay, /transfer, or whatever you wanna call it. From your bank to another players bank, while you are not at the bank, (Transfer feature in bank / atms will be appreciated too)

vRP will never have commands, it's only GUI based. I keep the issue open for the distant way of payment.

Maybe a future inside the gui menu inside phone tab? 👍

Done xD

@Santagain Issues are not for chatting.


Add DH1080 keyexchange to the crypt module.

Partly based on http://wiki.znc.in/Fish.
Your private and public key are generated once per this module load upon first need (init sent or received).

I don't know much crypto. @psychon does crypto part look fine for you?

No. However, if this is some kind of "almost standard"... And it will be better than transfering a shared secret over IRC directly.
All that this code does is add a possibility for a diffie-hellman(-merkle) key exchange. That crypto primitive is good (however: unauthenticated! A man-in-the-middle can do whatever he wants). I am not sure if the hardcoded prime is a good one (if I read this correctly, it has 1080 bits? That might be a bit few these days), but whatever.
All together: The existing crypto in here is bad enough already that I am not really worried here.

In TLS-speak: This might be DHE_1080_Blowfish_CBC (I made up that acronym).
TLS wouldn't pick a 1080 bit prime (well, it could only pick a 1024 one, I think). That's quite few bits and not really recommended. TLS wouldn't pick Blowfish. AES is prefered, I think. CBC is also not recommended.

I am not sure if the hardcoded prime is a good one

Can be checked with DH_check().

I am not sure if the hardcoded prime is a good one

Can be checked with DH_check().

That's more meant towards "only 1080(?)" bits. Anyway, the general idea here is fine with me and I leave reviewing the implementation to @DarthGandalf

Do you have any idea how to add a test to it? https://github.com/znc/znc/blob/master/test/integration/main.cpp tests some modules, but crypt would require reimplementing the same logic in test or connecting a different client which already implements it

Have the test start two znc servers and have two clients connect, then have one client keyx to the other and check the secret key set for both clients? Could parse the notices sent too for validity?

Yeah, that might work, I didn't think about starting 2 ZNCs. May you add such test?

Sure, I don't see why not.
2017-02-17 0:06 GMT+00:00 Cizzle<EMAIL_ADDRESS>
@Cizzle commented on this pull request.
In modules/crypt.cpp
https://github.com/znc/znc/pull/1378#discussion_r101658809:

       int len;

       const BIGNUM* bPrivKey = nullptr;

       const BIGNUM* bPubKey = nullptr;

       BIGNUM* bPrime = nullptr;

       BIGNUM* bGen = nullptr;

       m_pDH = DH_new();

       if (!BN_hex2bn(&bPrime, prime1080) || !BN_dec2bn(&bGen, "2") || !DH_set0_pqg(m_pDH, bPrime, nullptr, bGen) || !DH_generate_key(m_pDH)) {

           /* one of them failed */

           if (bPrime)

               BN_clear_free(bPrime);

           if (bGen)

               BN_clear_free(bGen);

           if (m_pDH) {

               DH_free(m_pDH);

               m_pDH = nullptr;

Will std::unique_ptr handle this correctly? m_pDH needs to be put back to
nullptr if any of those commands failed.
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
https://github.com/znc/znc/pull/1378#pullrequestreview-22395290, or mute
the thread
https://github.com/notifications/unsubscribe-auth/AAT15NWm6IBC1YV09AN5EU5-UwuTgRMCks5rdORogaJpZM4L-Kdb
.

If someone could take a look at the test and why the module's OnPrivNotice isn't activated for the primary user upon receiving the DH1080_FINISH? Have tested it with just about any NOTICE and extra PutModule lines before any actual checking in the OnPrivNotice override.

@DarthGandalf What do you think about something like the following so people who run into this spent less time to learn that ZNC should be installed before running these tests?
diff --git a/test/integration/main.cpp b/test/integration/main.cpp
index 4a725a7..d453aaf 100644
--- a/test/integration/main.cpp
+++ b/test/integration/main.cpp
@@ -141,6 +141,9 @@ class Process : public IO<QProcess> {
         m_proc.setProcessEnvironment(env);
         setup(&m_proc);
         m_proc.start(cmd, args);
+        [this]() {
+            ASSERT_TRUE(m_proc.waitForStarted());
+        }();
     }
     ~Process() override {
         if (m_kill) m_proc.terminate();

By the way, Travis fails also due to (but I don't remember which Travis build I copied this from):
/home/travis/build/znc/znc/test/integration/main.cpp:88:58: error: non-const

      lvalue reference to type 'QByteArray' cannot bind to a value of unrelated

      type 'const char [1]'

    void ReadUntilAndGet(QByteArray pattern, QByteArray& match = "") {

                                                         ^       ~~

/home/travis/build/znc/znc/test/integration/main.cpp:88:58: note: passing

      argument to parameter 'match' here

And another @DarthGandalf
diff --git a/test/integration/main.cpp b/test/integration/main.cpp
index 1fe3a7d..0c63bdb 100644
--- a/test/integration/main.cpp
+++ b/test/integration/main.cpp
@@ -456,6 +456,8 @@ TEST_F(ZNCTest, HTTP) {
     EXPECT_THAT(reply->rawHeader("Server").toStdString(), HasSubstr("ZNC"));
 }

+// This test takes way too long...
+#if 0
 TEST_F(ZNCTest, FixCVE20149403) {
     auto znc = Run();
     Z;
@@ -492,6 +494,7 @@ TEST_F(ZNCTest, FixCVE20149403) {
                     .toStdString(),
                 HasSubstr("Channel [#znc] already exists"));
 }
+#endif

 TEST_F(ZNCTest, FixFixOfCVE20149403) {
     auto znc = Run();
@@ -819,7 +822,7 @@ TEST_F(ZNCTest, ControlpanelModule) {
     Z;

     client.Write(request + "ListCTCPs");
-    client.ReadUntil(response + "Request: VERSION");
+    client.ReadUntil(response + "| VERSION | Test  |");
     Z;

     client.Write(request + "ListMods");
@@ -831,11 +834,11 @@ TEST_F(ZNCTest, ControlpanelModule) {
     Z;

     client.Write(request + "ListNetworks");
-    client.ReadUntil(response + "Network: test");
+    client.ReadUntil(response + "| test ");
     Z;

     client.Write(request + "ListUsers");
-    client.ReadUntil(response + "Username: user");
+    client.ReadUntil(response + "| user ");
     Z;

     client.Write(request + "LoadModule");
@@ -1406,7 +1409,7 @@ TEST_F(ZNCTest, ControlpanelModule) {
     Z;

     client.Write(request + "ListCTCPs KindOne");
-    client.ReadUntil(response + "Request: VERSION");
+    client.ReadUntil(response + "| VERSION | Test");
     Z;

     client.Write(request + "ListMods KindOne");
@@ -1424,7 +1427,7 @@ TEST_F(ZNCTest, ControlpanelModule) {
     Z;

     client.Write(request + "ListMods KindOne");
-    client.ReadUntil(response + "Name: perform");
+    client.ReadUntil(response + "| perform |");
     Z;

     client.Write(request + "ListNetMods KindOne");
@@ -1432,11 +1435,11 @@ TEST_F(ZNCTest, ControlpanelModule) {
     Z;

     client.Write(request + "ListNetworks KindOne");
-    client.ReadUntil(response + "Network: freenode");
+    client.ReadUntil(response + "| freenode | No ");
     Z;

     client.Write(request + "ListUsers");
-    client.ReadUntil(response + "Username: user");
+    client.ReadUntil(response + "| user ");
     Z;

     client.Write(request + "LoadModule");

@Cizzle ZNC does not recognize the NOTICE as a private notice, because of a kind of desync: You expect ZNC to think its nick is "nick", but ZNC thinks its nick is "user". Possible patch (also "fixes" the rest of the test):
diff --git a/test/integration/main.cpp b/test/integration/main.cpp
index 99f106b..9897dbe 100644
--- a/test/integration/main.cpp
+++ b/test/integration/main.cpp
@@ -2079,6 +2079,7 @@ TEST_F(ZNCTest, ModuleCrypt) {

     QByteArray pub2("");
     ircd2.ReadUntilAndGet("NOTICE nick :DH1080_FINISH ", pub2);
+    pub2.replace(" nick ", " user ");
     ircd1.Write(":nick2!user2@user2/test " + pub2);
     Z;

@@ -2086,7 +2087,16 @@ TEST_F(ZNCTest, ModuleCrypt) {
     Z;

     client1.Write("PRIVMSG *crypt :listkeys");
-    client1.ReadUntil("Target: nick2");
+    /* FIXME: This part does not work with the "new old" table layout. This
+     * needs to parse the following correctly:
+[2017-02-28 09:58:50.026045] (user/test) ZNC -> CLI<EMAIL_ADDRESS>PRIVMSG nick :+---------------+---------------------------------------------+]
+[2017-02-28 09:58:50.026074] (user/test) ZNC -> CLI<EMAIL_ADDRESS>PRIVMSG nick :| Target        | Key                                         |]
+[2017-02-28 09:58:50.026110] (user/test) ZNC -> CLI<EMAIL_ADDRESS>PRIVMSG nick :+---------------+---------------------------------------------+]
+[2017-02-28 09:58:50.026130] (user/test) ZNC -> CLI<EMAIL_ADDRESS>PRIVMSG nick :| nick2         | Z3dFNiK8ojJr77x4y6TIcctpamhY75hHCZMVg1w7sX0 |]
+[2017-02-28 09:58:50.026150] (user/test) ZNC -> CLI<EMAIL_ADDRESS>PRIVMSG nick :| @nick-prefix@ | .                                           |]
+[2017-02-28 09:58:50.026171] (user/test) ZNC -> CLI<EMAIL_ADDRESS>PRIVMSG nick :+---------------+---------------------------------------------+]
+
+    client1.ReadUntil("| nick2 ");
     Z;
     QByteArray key1("");
     client1.ReadUntilAndGet("Key: ", key1);
@@ -2098,6 +2108,7 @@ TEST_F(ZNCTest, ModuleCrypt) {
     client2.ReadUntilAndGet("Key: ", key2);
     Z;
     ASSERT_EQ(key1, key2);
+*/
 }

 }  // namespace

@psychon I have a local patch which partially fixes the test (basically removes the controlpanel test), I've been trying to fix another test (building modules) before pushing it.
You can push both your patches. I don't know what to do with FixCVE20149403.

By the way, Travis fails also due to (but I don't remember which Travis build I copied this from):

Would be my fault, though compiling didn't throw any warnings? Use QByteArray("") then?

ZNC does not recognize the NOTICE as a private notice, because of a kind of desync

Not better to sync it then if this is possible? And how come ZNC does send a PRIVMSG to the client's nick "nick" after keyx?

ZNC -> CLI<EMAIL_ADDRESS>PRIVMSG nick :Sent my DH1080 public key to nick2, waiting for reply ...]

You can push both your patches.

I'll add it to my to do list (might take a while). Also, I prefer going through a PR instead of pushing this directly.

I don't know what to do with FixCVE20149403.

This test is slow because it waits until ZNC joins the channel after it was added. This joining is triggered by CIRCNetworkJoinTimer after 30 seconds. However, I do not see why it waits for the JOIN. That does not cause any internal state to change, does it? And if I understand/remember the original issue correctly (adding "znc" through webadmin while "#znc" already exists), the following would still trigger the original issue, wouldn't it?
diff --git a/test/integration/main.cpp b/test/integration/main.cpp
index de8e693..81a0dcd 100644
--- a/test/integration/main.cpp
+++ b/test/integration/main.cpp
@@ -481,8 +481,6 @@ TEST_F(ZNCTest, FixCVE20149403) {
                           {"name", "znc"},
                           {"enabled", "1"},
                       });
-    ircd.ReadUntil("JOIN #znc");
-    Z;
     EXPECT_THAT(HttpPost(request,
                          {
                              {"user", "user"},

Now... sorry for the noise and let's get back to this pull request.


Underline key is invisible in terminal

We have written the needed data into your clipboard because it was too large to send. Please paste.

Underline key"_" is invisible in terminal of visual studio code.

duplicate of #35901
@wedsonlopes read that post for a workaround like changing terminal.integrated.fontFamily or terminal.integrated.fontSize

/duplicate of  #35901


Handles encoded MARC21 UTF-8 strings

Fixes #744

I know you are busy right now (to put it lightly) but if there is an improvement that could be made to pymarc here please feel free to drop it as in issue into the tracker.


fix: correction in email template for link to main

Context

fixes #1584

correction in email template for link to main
Changes

@harshalkh, could you share your email ID? We'd like to send you something as a thank you for your contribution!

<EMAIL_ADDRESS>


[AVM Module Issue]: Quality of Life for DBforMySQL/flexibleServers

Check for previous/existing GitHub issues

[x] I have checked for previous/existing GitHub issues

Issue Type?
Feature Request
Module Name
avm/res/db-for-my-sql/flexible-server
(Optional) Module Version
No response
Description
I’m really looking for is a self-healing mechanism that operates behind the scenes. Specifically, I want the module to avoid errors when I choose the Burstable tier for cost reasons, even though this requires disabling storageAutoGrow. On the other hand, if I select a different tier and want to keep storageAutoGrow enabled, I want everything to function smoothly. storageAutoGrow  must be disabled if Burstable tier is used as it is not supported.
This is viable for when I am doing code testing or a PoC, because I want to keep cost down as I rip the workload up/down.
My suggestion would be something like this but would need to be verified if it works.
// Ensure highAvailability is set to 'Disabled' if tier is 'Burstable'
var effectiveHighAvailability = (tier == 'Burstable') ? 'Disabled' : highAvailability

// Ensure storageAutoGrow is disabled if tier is 'Burstable' and highAvailability is 'SameZone' or 'ZoneRedundant'
var effectiveStorageAutoGrow = (tier == 'Burstable' && (highAvailability == 'SameZone' || highAvailability == 'ZoneRedundant')) ? 'Disabled' : storageAutoGrow

var standByAvailabilityZoneTable = {
  Disabled: null
  SameZone: availabilityZone
  ZoneRedundant: highAvailabilityZone
}

var standByAvailabilityZone = standByAvailabilityZoneTable[effectiveHighAvailability]

storageProfile: {
      storageMB: 51200
      backupRetentionDays: 7
      geoRedundantBackup: 'Enabled'
      autoGrow: effectiveStorageAutoGrow
    }
highAvailability: (effectiveHighAvailability != 'Disabled') ? {
      mode: effectiveHighAvailability
      standbyAvailabilityZone: standByAvailabilityZone
    } : null

Self-Healing Mechanism
Avoiding Errors: By conditionally setting effectiveHighAvailability and effectiveStorageAutoGrow, the code ensures that unsupported configurations (like enabling storageAutoGrow with the Burstable tier) are automatically adjusted to avoid errors.
Smooth Functionality: When a different tier is selected, the code allows storageAutoGrow to be enabled and configures high availability settings appropriately, ensuring smooth operation without manual intervention.
Behind-the-Scenes Operation: The use of conditional expressions and mappings allows the module to automatically adjust settings based on the selected parameters, providing a self-healing mechanism that operates transparently to the user.
This approach ensures that the MySQL server configuration is always valid and optimized for the selected tier and high availability settings, preventing errors and maintaining smooth functionality.
(Optional) Correlation Id
No response

I am waiting for #3775 to be published before adding the fix for this.

Hey @hundredacres,
Please triage this issue when you get the chance 💪


Link some folders in the documentation

Link some folders in the documentation. PR #17 fixes this

Already merged to main branch.


✅✨ Deserialize custom vectors

Wrap input variables with type T to support deserialization of custom vectors.

Relevant tests have been added.

Format code.

@jiangzhuochi Thanks! I will release the new version including this changes.


Getting [object Object] as text input value with simple array of strings

I've followed the code through in the debugger, but cannot find a way to stop liform-react from displaying '[object Object]' as the html text input element value:
        "columns": {
                "type": "array",
                "minItems": 1,
                "items": {
                  "type": "string"
                }
              },

The text input value simply needs to be the empty string.  I have no custom code that does anything like push({}).
Any hints?

It should be fixed in v0.6.6 and master. Thanks for reporting, @nottoseethesun


namespace swagger2 examples

Changes proposed in this pull request:

namespace swagger2 examples

I've merged this one because it is just moving files (no edits).
Let me know if that's a problem - I'm happy to revert and discuss.


Send ELK Speak is delayed 10-30 seconds on EISY and PG3

Using ELK NS 3.5.7,  EISY IoX 5.5.3, M1 version 5.03.00, XEP version 1.03.1C
When I send a command to speak a word to the M1 (e.g. In a program then statement) there is a 10-30 second delay before the Elk  responds with the audible command. If I power up my old ISY994i with the Elk Module sending commands to speak are near instentaneous (~1-2 seconds). Also, if I send a dozen speak word commands programmatically (one after another) the length of the delay is much greater, but all the commands get sent at the same time to the Elk and it recites them correctly without any pauses between the words. If I send it an excessive amount of words to speak (20?) then the program hangs and the Elk never responds.
Here are two debug captures from sending a simple speak word (800mhz tone) through the Elk NS:
Example One: (Ten second delay)
2023-01-14 15:21:54,366 MQTT       udi_interface.interface DEBUG    interface:_message: QUEUING incoming message command
2023-01-14 15:21:54,366 Command    udi_interface.interface DEBUG    interface:_parseInput: DEQUEING command
2023-01-14 15:21:54,366 Command    udi_interface      INFO     Controller:cmd_speak_word: ELK Controller: 53
2023-01-14 15:21:54,366 Command    udi_interface      INFO     Controller:cmd_speak_word: ELK Controller: word=[800hz_Tone]
2023-01-14 15:21:55,085 MQTT       udi_interface.interface DEBUG    interface:_message: QUEUING incoming message shortPoll
2023-01-14 15:21:55,085 Command    udi_interface.interface DEBUG    interface:_parseInput: DEQUEING shortPoll
2023-01-14 15:21:55,085 Thread-976 udi_interface      DEBUG    Controller:handler_poll: start
2023-01-14 15:21:55,085 Thread-976 udi_interface      DEBUG    Controller:shortPoll: start
2023-01-14 15:21:55,086 Thread-976 udi_interface      DEBUG    Area:shortPoll: area_1:Club Poppy House: ready=True poll_voltages=False
2023-01-14 15:21:55,086 Thread-976 udi_interface      DEBUG    Controller:shortPoll: done
2023-01-14 15:22:04,867 ELK-2760   elkm1_lib.connection DEBUG    connection:write_msg: write_data '09sw05300B5'
2023-01-14 15:22:04,867 ELK-2760   elkm1_lib.connection DEBUG    connection:_read_stream: got_data '16XK03221571401230100076'
2023-01-14 15:22:04,867 ELK-2760   udi_interface      INFO     Controller:callback: ELK Controller: cs={'real_time_clock': '0322157140123010'}
2023-01-14 15:22:04,867 ELK-2760   udi_interface      INFO     Controller:callback: real_time_clock=0322157140123010
Example Two: (26 second delay)
2023-01-14 15:25:08,815 MQTT       udi_interface.interface DEBUG    interface:_message: QUEUING incoming message command
2023-01-14 15:25:08,815 Command    udi_interface.interface DEBUG    interface:_parseInput: DEQUEING command
2023-01-14 15:25:08,815 Command    udi_interface      INFO     Controller:cmd_speak_word: ELK Controller: 53
2023-01-14 15:25:08,815 Command    udi_interface      INFO     Controller:cmd_speak_word: ELK Controller: word=[800hz_Tone]
2023-01-14 15:25:25,124 MQTT       udi_interface.interface DEBUG    interface:_message: QUEUING incoming message shortPoll
2023-01-14 15:25:25,124 Command    udi_interface.interface DEBUG    interface:_parseInput: DEQUEING shortPoll
2023-01-14 15:25:25,124 Thread-984 udi_interface      DEBUG    Controller:handler_poll: start
2023-01-14 15:25:25,124 Thread-984 udi_interface      DEBUG    Controller:shortPoll: start
2023-01-14 15:25:25,124 Thread-984 udi_interface      DEBUG    Area:shortPoll: area_1:Club Poppy House: ready=True poll_voltages=False
2023-01-14 15:25:25,125 Thread-984 udi_interface      DEBUG    Controller:shortPoll: done
2023-01-14 15:25:34,959 ELK-2760   elkm1_lib.connection DEBUG    connection:write_msg: write_data '09sw05300B5'
2023-01-14 15:25:34,960 ELK-2760   elkm1_lib.connection DEBUG    connection:_read_stream: got_data '16XK33251571401230100070'
2023-01-14 15:25:34,960 ELK-2760   udi_interface      INFO     Controller:callback: ELK Controller: cs={'real_time_clock': '3325157140123010'}
2023-01-14 15:25:34,960 ELK-2760   udi_interface      INFO     Controller:callback: real_time_clock=3325157140123010

Yes, as I mentioned in the forum post which you posted on, I am trying to debug.  It's an issue specific to eisy, and is not just the speak commands, it's all commands like arming/disarming the system.
https://forum.universal-devices.com/topic/39690-slow-response-tofrom-elk-ns

This was fixed by downgrading elkm1_lib, #94 was created to address this issue specifically.


Add userEmail filter to GetSubscriptionsOptions

Add userEmail to filter subscriptions by user email

Thank you for your contribution. This has already been added with v2.0.0.


curses tests hose terminal if factor is ^Zed after they're run

I hit ^Z during a test-all from the command line on MacOS X (10.7.2, x86-64), and after resuming the process, the terminal was cleared with the rainbow "Hello Curses!" test string displayed in the upper left corner, and the rest of the tests ran with automatic carriage returns disabled. Stopping and resuming the process brings up the test string every time after the curses tests have been run.

Worst of all, the terminal doesn't accept input, so you can't interact with the listener once the tests finish.


Module split, added unittests, readme and Makefile

This should make the project a little bit easier to maintain.
The API itself hasn't changed and is backwards compatible.

I'm a fan of this PR.

:+1:

Eh. not a bad idea, but to be honest, I'm a little bit put off by people trying to change someone else's project's indent style.

Oh, I'm sorry, I didn't notice you had tabs as indentation spacer. My editor automatically switches everything I save to 4 spaces per tab.... You could probably just open the files in your editor and replace it for \t ...

I built on top of your PR @lunemec
https://github.com/a-tal/eveapi/tree/forked
switched from unittest to py.test + tox. implemented your caching thing for files and in memory (made memory default), couple other things here and there. py3 compat as well...

Cool @a-tal I'll take a look when I have the time :)

any progress on this/similar?


slf4j-nop needs a non-default scope

https://github.com/twitter/twitter-korean-text/issues/77

Thanks!!!

Please let me know if you need an immediate redeploy.


feat(externals): add option to disable packing of external modules

Adds an additional configuration option packExternals which will disable installing & bundling modules listed as external.
This is useful for if you want to exclude externals from esbuild but you don't need them installed & packed separately. My use-case was with serverless-offline as externals can be imported normally from node_modules, leading to a faster build. Another use-case could be if you're using lambda layers.

Hi @mattjennings, thank you for your PR.

The package specified in the exclude option is passed to esbuild as external, but it is not included in the function bundle either.

we already have the option exclude, will it cover your use case?
what can we do extra is making exclude option accept boolean values, so if it is true it excludes everything set as external. I have the reason for this: having set exclude and packExternals does not make sense together (exclude would have no effect), so it is why we can keep only one option, but I need second eyes from @olup on it.

Ah yes, I hadn't considered the exclude option. I agree, finding a way to use exclude is a better idea. A boolean might be fine, otherwise maybe allowing pattern matching or * as a value to designate excluding everything.

maybe allowing pattern matching or * as a value to designate excluding everything

also works for me 👍

@floydspace @mattjennings I've opened https://github.com/floydspace/serverless-esbuild/pull/167 for pattern matching. Could you please give it a look?


support for handling RHEL9 hv node setup

I have not tested this with RHEL8 HVs yet.
I have deployed SNOs on RHEL9 HVs using this patch.

I have tested this patch on both RHEL8 and RHEL9.
I think the only thing left to sort out is how to handle the clean_interfaces.sh differences.


Update docs for kubedb/cli@3a227105

Signed-off-by: 1gtm<EMAIL_ADDRESS>

 Thank you for your submission! We really appreciate it. Like many open source projects, we ask that you all sign our Contributor License Agreement before we can accept your contribution.1 out of 2 committers have signed the CLA.:white_check_mark: 1gtm:x: kodiak-appscode[bot]You have signed the CLA already but the status is still pending? Let us recheck it.


Feature request: Seekable audio streaming

100-200. Lots of response headers are required, exceptions for browsers, etc. Would you like me to just post the code and let you guys choose where to put it, or you can let me know where in the code base would be a good place for this static method?

I think we have to bring in @perwendel here to see what he thinks.

Gotcha, no problem.
The input/output method would look like this, let me know if that would work.
public static Response streamingAudio(Request req, File audioFile)

How do you feel about this:
audiostream("/path", (request, response, audioFile) -> {
     ...
});

That would work fine, but the closure wouldn't really need to contain any
code, since it would be handled by our internal spark function. I only know
how to return the correct response.
On Nov 23, 2015 11:46 AM, "David"<EMAIL_ADDRESS>wrote:

How do you feel about this:
audiostream("/path", (request, response, audioFile) -> {
...
});
—
Reply to this email directly or view it on GitHub
https://github.com/perwendel/spark/issues/397#issuecomment-158991954.

@tchoulihan
I like the feature and I'm trying to understand how things are supposed to work.
Can you please explain exactly how the functionality should be, from the API user's perspective?

I see 3 possible options, but there may be something better.

Basically just have a helper method, like the one I describe above. This is how I'm currently using it:

get("/get_audio_file/:encodedPath", (req, res) -> {
  // check to make sure its an audio file and that the path is the correct folder
  // Also need to decode the path for %2F to slashes(since slashes are already a delimiter), so paths are tough
  File audioFile = new File(path);
  return Spark.streamingAudio(Request req, File audioFile))
}

What @tipsy suggested, but that only accepts a File or a path to a file as its closure return result". Then it uses that helper method behind the scenes.

audiostream("/music/:audioFilePath", (req, res) -> {
  return new File(req.params(":audioFilePath");
}

The problem I have with this one: audiostream("/path", (request, response, audioFile) -> {... is that it would only serve up one file, or wouldn't be too dynamic. In my case, audio files get added after spark has been initialized, and in various embedded folders.

Ideally, it should be part of a rework of serving up static files in folders, to which I currently have to do a workaround shown here, because static files served up by spark:

Cannot currently set response headers

I don't know if spark allows access to files added after initialization, and

It needs to be able to serve up files in embedded folders(not sure if this already works).

Then spark could determine automatically if its an audio file, and do the correct response headers and file seeking, like apache I'm sure does.
So this option might look like:
audiostream("/path", (request, response, audioFolder)`; //or
staticFileLocation("/path"); //or
audioFolder("/path");

@tchoulihan Thanks for explaining further. I'll have a thourough look tomorrow and then get back to you.

There is no need to do detection for audio or anything. There shouldn't be any change in API. Spark can check for RANGE header. Then using the value of the header, spark should first seek to the byte needed, then set response headers CONTENT_RANGE and then return with 206 PARTIAL_CONTENT status code.
This will both make seeking and partitioning (used by download managers to speed things up) available.
Imho, the only thing should change from users' perspective is to enable/disable this feature totally or for some file paths.

There are a lot more headers and custom file serving required, but yes
those 2 things are required, and it would be possible to use the range
header to detect if it should be finding a seekable audio file.
On Nov 25, 2015 4:30 AM, "Seyfulislam Ozdemir"<EMAIL_ADDRESS>wrote:

There is no need to do detection for audio or anything. There shouldn't be
any change in API. Spark can check for RANGE header. Then using the value
of the header, spark should first seek to the byte needed, then set
response headers CONTENT_RANGE and then return with 206 PARTIAL_CONTENT
status code.
This will both make seeking and partitioning (used by download managers to
speed things up) available.
Imho, the only thing should change from users' perspective is to
enable/disable this feature totally or for some file paths.
—
Reply to this email directly or view it on GitHub
https://github.com/perwendel/spark/issues/397#issuecomment-159547783.

Have looked at this, but not enough. I'm a bit busy the coming days but I'll try to find time. Otherwise I'll try to take care of this on Sunday.

This shouldn't be just specifically for audio. I am using the Range header to stream video with the ability to skip to parts. I'm planning on making a tutorial on this types of things. Not much required in the Headers using I/O Stream.
Here is an example:
...
//I'm using GridFS to get the file, but this can be anything, like File etc..
String fileExtension = Utils.getFileExtension(gridFSDBFile);
            switch (fileExtension) {
                case "mp4":
                    res.type("video/mp4");
                    break;
                case "png":
                    res.type("image/png");
                    break;
                case "jpeg":
                    res.type("image/jpeg");
                    break;
                default:
                    res.type("application/octet-stream");
                    break;
            }

            //this is pretty universal ("I THINK"). Doesn't matter if it's audio/video files
            InputStream inputStream = gridFSDBFile.getInputStream();
            ServletOutputStream out = res.raw().getOutputStream();
            String range = req.headers("Range"); //Chrome will send the Range automatically when playing video

            if (range == null) {
                try {
                    IOUtils.copy(inputStream, out);
                } finally {
                    inputStream.close();
                }

            }

             //Here is the meat of the bone, like I said, I'll make a tut on this
            String[] ranges = range.split("=")[1].split("-");
            int from = Integer.parseInt(ranges[0]);
            int to = (int) gridFSDBFile.getChunkSize() + from;
            if (to > gridFSDBFile.getLength()) {
                to = (int) (gridFSDBFile.getLength() - 1);
            }
            if (ranges.length == 2) {
                to = Integer.parseInt(ranges[1]);
            }
            int len = to - from + 1;
            res.status(206);
            res.header("Accept-Ranges", "bytes");
            final String responseRange = String.format("bytes %d-%d/%d", from, to, (int) gridFSDBFile.getLength());
            res.header("Content-Range", responseRange);
            res.raw().setContentLength(len);
            inputStream.skip(from);
            byte[] buf = new byte[1024];
            try {
                while (len != 0) {
                    int read = inputStream.read(buf, 0, buf.length > len ? len : buf.length);
                    out.write(buf, 0, read);
                    len -= read;

                }
            } finally {
                inputStream.close();
            }

            return 206;
        });

Hello SpakJava peole !
What is the status arround this PR ? Is some file streaming capabilities has been (or would be finally)added to Spark framework ?

I don't know, but I'm disappointed in the spark community. They are good at ignoring "outsiders". pm me and I'll show you how it's done or skip the "tech hipster" thing and use mature tech

@franklinexpress We're not ignoring you, it's just that we don't have as much time for the project as we would like. We're two people who both have full time jobs/families, and Spark is being developed on our spare time. This is a niche feature compared to the ones we have been working on for 2.4. so we haven't been able to prioritize it yet.

I just came across the same questions and was wondering about the status of this issue.
It seems there has been some work on this as well by @dessalines :
https://github.com/dessalines/torrenttunes-client/blob/master/src/main/java/com/torrenttunes/client/webservice/Platform.java#L555

A short while later ... :laughing:
I had to implement this for Apple compatible audio streams. Just wanted to share my version:
get("/stream/:file", (request, response) ->	{
	String fileName = request.params(":file");
	File file = new File("/my/path/" + fileName);
	String mimeType = "audio/wav";
	try{
		int maxChunkSize = 204800;	//200kb (if no range is requested)
		streamFile(request, response, file, mimeType, maxChunkSize);
	}catch (Exception ex){
		response.status(500);
		return "ERROR";
	}
	return "OK";
});
private static void streamFile(Request req, Response res, File file, String mimeType, int maxChunkSize)
		throws FileNotFoundException, IOException {
	String range = req.headers("Range");
	int[] fromToLength = fromTo(file, range, maxChunkSize);
	int length = fromToLength[2];
	byte[] bytes = FilesAndStreams.readByteRange(file.getPath(), fromToLength[0], length);

	res.header("Accept-Ranges", "bytes");
	res.header("Content-Range", "bytes " + fromToLength[0] + "-" + fromToLength[1] + "/" + fromToLength[3]);
	res.header("Content-Length", String.valueOf(length));
	res.header("Cache-Control", "no-cache, private");
	res.header("Expires", "0");
	res.header("Content-Transfer-Encoding", "binary");
	res.header("Transfer-Encoding", "chunked");
	res.type(mimeType);
	res.status(206);

	try (final ServletOutputStream os = res.raw().getOutputStream()){
		os.write(bytes);
		os.close();
	}
}
private static byte[] readByteRange(String filePath, long startingOffset, int length) throws FileNotFoundException, IOException {
	try (RandomAccessFile randomAccessFile = new RandomAccessFile(filePath, "r")){
		byte[] buffer = new byte[length];
		randomAccessFile.seek(startingOffset);
		randomAccessFile.readFully(buffer);
		return buffer;
	}
}
private static int[] fromTo(File file, String range, int maxChunkSize){
	int[] data = new int[4];
	int fileLength = (int) file.length();
	int from;
	int to;
	int length;
	if (Is.nullOrEmpty(range)){
		//serve all
		from = 0;
		to = fileLength - 1;
		length = fileLength;
	}else{
		String[] ranges = range.split("=")[1].split("-");
		from = Integer.parseInt(ranges[0]);
		if (ranges.length == 2){
			to = Math.min(fileLength - 1, Integer.parseInt(ranges[1]));
		}else{
			int fallbackChunkSize = Math.max(153600, Math.min(maxChunkSize, Math.round(fileLength/10f)));
			to = Math.min(fileLength - 1, from + fallbackChunkSize);
		}
		length = to - from + 1;
	}
	data[0] = from;			//start
	data[1] = to;			//stop
	data[2] = length;		//bytes length
	data[3] = fileLength;	//full file length
	return data;
}


init.sh will fail if push is going to be first ssh connection to Heroku

If the init.sh script runs and it happens to be the first time the machine is connecting to Heroku via SSH, there's an interactive prompt about adding the new host. This will cause the init.sh script to fail until the user interactively makes that first connection to clear it.
If there's a way the bash script could check for this and error out it might save some confusion for anyone in this situation.

@jjb in #94 mentioned that Heroku's default protocol for git is http perhaps we should just switch to to that instead of SSH which would solve this edge case and seems like would be more widely supported as HTTPS is the default transport. What do you think?

I'm not sure if using HTTPS would actually alleviate this issue. Not that it requires addressing when it is very edge. But would using HTTPS require users to enter login credentials when deploying?
If I get a chance I'll research answers to my own questions there.
This is definitely an edge case that seems a pretty low priority.

same issue here

This has been fixed by #155


Replace the writer by a sorter when computing the level positions

This is an ugly hotfix, we had trouble understanding this issue and we need to fix it in a proper way.
I will let @curquiza create a tracking issue about the bug this PR fixes, IIRC, it is listed in the transplant repo.

Closed in favor of #261!


Gitter.im for wavesurfer - Please add.

I would be nice to have a gitter.im account for WaveSurfer repository

@gnetsys what needs to be done to make this happen?

You can go to: https://gitter.im/ as the repo owner you give Gitter access to your repo and a room is created. Since it's public once someone searches for wavesurfer? your created room should pop up for people to join.
I hope this is accurate 👍

@andrade1379 created a room at https://gitter.im/katspaugh/wavesurfer.js. Feel free to add a pull request with a gitter badge.