Oliver Problem - Chapter 6 - General Question

Brief Background
Working through this excellent book with a colleague and he noticed something interesting on the Oliver's Blood problem.
Original solution, assuming 60% of local pop have type O and 1% have type AB:
like1 = 0.01
like2 = 2 * 0.6 * 0.01

likelihood_ratio = like1 / like2
post_odds = 1 * like1 / like2
prob(post_odds) # 0.454545

The interesting point mentioned by my colleague was this:

we could try the problem with a range of different values of % of local population having type AB and still get the same final probability:

import numpy as np

def prob(o):
    return o / (o+1)

o = 0.6 # we fix type o proportion in local pop

# iterate over various ab vals
for ab in np.linspace(0.02, 0.40, 20):
  like1 = ab
  like2 = 2 * o * ab

  assert round(prob(like1 / like2),4) == 0.4545

Clearly the ab cancel one another out in each likelihood calculation.
Curiosity
My interpretation of this is that the information on percent of local population with type AB does not matter for this problem. Is there additional insight or context you could add to this? My colleague & I were both a bit surprised, but the math is clear enough.
Another thought:
Perhaps we have to assume the possibility that the proportion of O would shift as AB changes, which would indeed change the final probabilities (even though there are more blood types than O and AB)

As AB becomes more likely, and O becomes less likely, then the evidence is increased that Oliver is one of the people that left blood (in this problem).

Again, no bug found - just curious about any additional commentary on the above. We are very much enjoying the book and exercises.

Interesting. Sounds like you answered your own question. Thanks for sharing it!


Create documentation

We need to document:

Public methods and classes
Parameters
Typical use-case examples
Performance and memory considerations

I suggest use https://github.com/wevm/vocs, they have a very easy support for https://vocs.dev/docs/guides/twoslash which is awesome to create documentation.
Also, we can create an "API" section, like this https://serverless-adapter.viniciusl.com.br/docs/api/Introduction, I already configured to my library so I can do in this one too.

Sounds great!


Missing description for update Agent local as mention in the release letter Azure Devops server "Locally update your agent"

Hi where can I find the description for how to Locally update your agent. On server not on the internet? We are already running Azure Devops Server RC 1

Document Details
⚠ Do not edit this section. It is required for docs.microsoft.com ➟ GitHub issue linking.

ID: 43799c5d-2f13-cc76-a1c0-a3f850e16d4e
Version Independent ID: 97a5b73f-faf7-f9c0-9269-fc79984616d6
Content: Deploy a build and release agent on Windows - Azure Pipelines
Content Source: docs/pipelines/agents/v2-windows.md
Product: devops
GitHub Login: @andyjlewis
Microsoft Alias: alewis

This doesn't give me any details about updating a client from TFS server without internet. Where I place the agent on a specific network location or on the local TFS apptier server to update all agent automaticaly.

Sorry for the confusion - we renamed the version selector (was "azdevserver-2019", now "azure-devops-2019") which broke the link above. Then it probably defaulted you to the service, which doesn't need or have this feature, so the content was missing.
Here's a corrected link, and I'll update my previous comment as well: https://docs.microsoft.com/en-us/azure/devops/pipelines/agents/v2-windows?view=azure-devops-2019#can-i-update-my-v2-agents-that-are-part-of-an-azure-devops-server-pool
On RC1, you put the agent package in %ProgramData%\Microsoft\DevOps\Agents. On RC2 and later, you put the agent package in %ProgramData%\Microsoft\Azure DevOps\Agents. Both locations are on the app tier.

Thank you for the Update is this the same for the deployment groups or are it still a manuel update when the server is not on the internet?

Should work for deployment groups as well.


[Utils] Conversion to/from half-precision floating point

This PR includes utility functions for conversion to/from 16-bit floating point number, in bit representation, from/to 32-bit floating point number in IEEE format.
Self-evaluation:

Build test: [X]Passed [ ]Failed [ ]Skipped
Run test:   [X]Passed [ ]Failed [ ]Skipped

:memo: TAOS-CI Version: 1.5.20200925. Thank you for submitting PR #2361. Please a submit 1commit/1PR (one commit per one PR) policy to get comments quickly from reviewers. Your PR must pass all verificiation processes of cibot before starting a review process from reviewers. If you are new member to join this project, please read manuals in documentation folder and wiki page. In order to monitor a progress status of your PR in more detail, visit http://ci.nnstreamer.ai/.

:octocat: cibot: @djeong20, nntrainer/utils/fp16.h does not include Doxygen tags such as @file @brief @author @bug. You must include the Doxygen tags in the source code. Please refer to a Doxygen manual at http://github.com/nnstreamer/TAOS-CI/blob/main/ci/doc/doxygen-documentation.md


🐛 [Bug Report]: Links to any uploaded images are broken

BlizzCMS Version
Links to any uploaded images are broken
Emulator
CMaNGOS
PHP Version
PHP 7.4
Operating system
Windows
Web server
Apache
Database
MySQL Server 8.0.31
Description
Any uploaded image imports fine, but when viewed in the News article, Frontpage or Avatar section is just a broken link.
Apache access logs indicate a failure to find the images as the links requested include an additional uploads/ folder.
How can I reproduce the problem?
Upload an account avatar or news article image.
Screenshots

fixed with af634c3af7908cccbd190b00af8cd79edfd908a0 and cd7b5bc5b76ef3672d09ccec16db13faddf68e93


x/sys/windows/registry: ReadSubKeyNames will only work if QUERY_VALUE is passed

What version of Go are you using (go version)?
1.9
What is wrong (for my opinion)?
package registry
func (Key) ReadSubKeyNames() requires both registry.QUERY_VALUE and  registry.ENUMERATE_SUB_KEYS permissions (key.Stat() inside RedSubKeyNames() requires  registry.QUERY_VALUE permission).
What did you expect to see?
Because windows has divided rights for QUERY_VALUE and ENUMERATE_SUB_KEYS and possibility to set up one without other, it would be impossible to enum sub keys without QUERY_VALUE permission, even if ENUMERATE_SUB_KEYS permission will be set.
What did you see instead?
Even if i had ENUMERATE_SUB_KEYS permission, but don't have QUERY_VALUE i can't enumerate subkeys of registry key with go registry package.

@FluorescentTouch I do not understand your explanation of why ReadSubKeyNames does not work properly. Sorry. Please, provide small program to demonstrate the problem. Run your program, show us its output and tell us what your program should output instead.
Thank you

package main

import (
	"fmt"
	"syscall"

	"golang.org/x/sys/windows/registry"
)

func main() {
	newKey, _, err := registry.CreateKey(registry.Key(syscall.HKEY_CURRENT_USER), "testKey", registry.ENUMERATE_SUB_KEYS)
	if err != nil {
		fmt.Println("Possible error 1")
		panic(err)
	}

	subKeyNames, err := newKey.ReadSubKeyNames(-1)
	if err != nil {
		fmt.Println("Possible error 2")
		panic(err)
	}
	fmt.Println(subKeyNames)
}

Possible error 2
panic: Access is denied.
goroutine 1 [running]:
panic(0x4a4c20, 0xc04200a300)
C:/Go/src/runtime/panic.go:500 +0x1af
main.main()
D:/data/go_test/src/registry/main.go:22 +0x20c

Even with ENUMERATE_SUB_KEYS permission i can't enumerate sub keys without more permissions added to this one. This is because first line of ReadSubKeysNames() func:
ki, err := k.Stat()
Stat() function requires QUERY_VALUE permission, and ENUMERATE_SUB_KEYS  permission is not enough. Compared to windows registry logic, where u can  enumerate subkeys even if read and query_value is not permitted for user.

@alexbrainman here the code is!

Thank you for explaining. I understand your report now, and I agree that newKey.ReadSubKeyNames could and should work with just ENUMERATE_SUB_KEYS. Would you like to try and fix this yourself? The change would needs to include new test. And also it should adjust all calls to ReadSubKeyNames to have only ENUMERATE_SUB_KEYS if needed. We also need to adjust internal/syscall/windows/registry package in standard library.
https://golang.org/doc/contribute.html explains how to contribute. Or you could send PR via Github. If not I will fix this when I have time.
Thank you.
Alex

@alexbrainman I'll try to find a fix, and report here in a week if i can do such work. If not, i would notify you. Thank you!

Sounds like a plan.
Alex

@alexbrainman https://go-review.googlesource.com/c/sys/+/95655 PR created

@alexbrainman  I dont know how to comment on googlesource.com, so i'll put it there. I'll send another PR to change $GOROOT/src/internal/syscall/windows/registry after this one would be accepted.

Reopening so we do not forget to do similar changes in $GOROOT/src/internal/syscall/windows/registry.
Alex

Alex, https://go-review.googlesource.com/c/go/+/97435 PL created for $GOROOT/src/internal/syscall/windows/registry


propogating headers from http_client response to http server input

In the documentation here https://www.benthos.dev/docs/guides/sync_responses#routing-output-responses-back, an illustration is given of Benthos acting as a reverse proxy.
Given 2 benthos processes:
input:
  http_server:
    path: /post
    sync_response:
      headers:
        Content-Type: application/json
        blob: fish
output:
  broker:
    pattern: fan_out
    outputs:
    - file:
        path: data.txt
        codec: lines
    - type: sync_response
      processors:
      - text:
          operator: to_upper

and
http:
  address: <IP_ADDRESS>:4196
input:
  http_server:
    path: /post
output:
  http_client:
    url: http://localhost:4195/post
    verb: POST
    propagate_response: true

posting to 4195 with
echo {"address": {"city":"london"} } | httpie :4195/post

I get back Content-Type: application/json
posting to 4196, Content-Type: application/octet-stream is returned, and the Blob: fish is dropped.
I tried copy_response_headers: true but Content-Type remains application/octet-stream. Is it possible to preserve the headers of the response in the proxy configuration?

Yeah not currently, it's possible to add the capability for including arbitrary headers though, if you need that we can change this issue into a feature request for that.

That makes perfect sense. Thanks for clarifying. I'll need to think on this for a while, but I believe what I am seeking is the ability to define a list of headers that, if and only if they are exist in the message, can be propogated. Propogating all headers unconditionally is probably unwise.


Locale seems to get ignored

Platform:  Arch Linux (also happens in dockered Debian)
Python version:  3.12.5
Pyzotero version: 1.5.20
Problem Description

What were you trying to do?
For our project, we refresh a json containing our zotero library every night for different locales (en-US, de-DE). The resulting files seem to be identical. However, if fetched directly from the API using request, they are different.

What API call did it involve? top items (see code example below)

What error was raised? no direct error

More Details
Our group library is public, using the following code it should be possible to reproduce the error.
Minimal code example:

import json

import requests
from pyzotero import zotero

def fetch_zotero_entries(locale: str) -> list:
    # initialize Text+ library object
    tplus_zotero_library = zotero.Zotero(library_id='4533881', library_type='group', locale=locale)
    tplus_zotero_library.add_parameters(format='json', include='bibtex,bib,csljson,data', linkwrap='1')
    tplus_entries = tplus_zotero_library.top()
    return tplus_entries

def fetch_zotero_entries_requests(offset: int = 0, locale: str = "de-DE"):
    URL = "https://api.zotero.org/groups/4533881/items/top"
    url_with_params = URL + f"?start={offset}&limit=100&format=json&include=bibtex,bib,csljson,data&linkwrap=1&locale={locale}"
    zotero_response = requests.get(url_with_params)
    items = zotero_response.json()
    return items

def write_zotero_json(data, suffix: str, locale: str):
    path = f"zotero-unprocessed-min.{suffix}.{locale}.json"
    with open(path, 'w') as output_file:
        json.dump(data, output_file, indent=2)

def refresh_json(use_lib: True, locale: str):
    if use_lib:
        zotero_items = fetch_zotero_entries(locale=locale)
    else:
        zotero_items = fetch_zotero_entries_requests(locale=locale)
    if zotero_items is not None:
        suffix = "pyzotero" if use_lib else "requests"
        print(f"Successfully fetched entries for {locale} with {suffix}")
        write_zotero_json(zotero_items, suffix=suffix, locale=locale)

refresh_json(use_lib=True, locale="de-DE")
refresh_json(use_lib=True, locale="en-US")
refresh_json(use_lib=False, locale="de-DE")
refresh_json(use_lib=False, locale="en-US")

Hashes of obtained files:
sha256sum zotero-unprocessed-min*

6df7f88aa966ad47c1cb43e33d87d60f0bdf5ac0f6ead382141cc558513a84af  zotero-unprocessed-min.pyzotero.de-DE.json
6df7f88aa966ad47c1cb43e33d87d60f0bdf5ac0f6ead382141cc558513a84af  zotero-unprocessed-min.pyzotero.en-US.json
f0ff0dc6df7906bb3bfcd32606fd6b2b0f7ebce18d1f3626109e146676ac286f  zotero-unprocessed-min.requests.de-DE.json
6df7f88aa966ad47c1cb43e33d87d60f0bdf5ac0f6ead382141cc558513a84af  zotero-unprocessed-min.requests.en-US.json

Could you try again using v1.5.24?

Works as expected with v1.5.24
sha256sum zotero-unprocessed-min*
f0ff0dc6df7906bb3bfcd32606fd6b2b0f7ebce18d1f3626109e146676ac286f  zotero-unprocessed-min.pyzotero.de-DE.json
6df7f88aa966ad47c1cb43e33d87d60f0bdf5ac0f6ead382141cc558513a84af  zotero-unprocessed-min.pyzotero.en-US.json
f0ff0dc6df7906bb3bfcd32606fd6b2b0f7ebce18d1f3626109e146676ac286f  zotero-unprocessed-min.requests.de-DE.json
6df7f88aa966ad47c1cb43e33d87d60f0bdf5ac0f6ead382141cc558513a84af  zotero-unprocessed-min.requests.en-US.json

Thank you for the really quick fix!

I encountered an error with the added locale when combining the top() with everything(). I was using v1.5.25.
It seems, that at the second top() call in everything(), the locale is added again, which leads to this invalid request URL after the first 100 items have been obtained:
URL: https://api.zotero.org/groups/4533881/items/top?include=bib%2Cbibtex%2Ccsljson%2Cdata&limit=100&linkwrap=1&locale=de-DE&start=100&locale=de-DE

Code reproducing this error:

from pyzotero import zotero, zotero_errors

def fetch_zotero_entries(locale: str) -> list:
    # initialize Text+ library object
    tplus_zotero_library = zotero.Zotero(library_id='4533881', library_type='group', locale=locale)
    try:
        tplus_zotero_library.add_parameters(format='json', include='bibtex,bib,csljson,data', linkwrap='1')
        tplus_entries = tplus_zotero_library.everything(tplus_zotero_library.top())
        return tplus_entries
    except zotero_errors.HTTPError as error:
        print(error)

fetch_zotero_entries(locale="de-DE")

Can you install master and try now? The new solution is a bit more robust about adding the locale if it already exists but I want to make sure it works before I push a new release.

I do not get an error anymore using top() in everything(), but the locale seems to get ignored again (en-US and de-DE-JSON have same hash) using the code from the original report.
sha256sum zotero-unprocessed*

cf775c6bf78158d780d91665e9cc55a1089795f61ba1ba0dfc67f566380b15db  zotero-unprocessed-min.pyzotero.de-DE.json
cf775c6bf78158d780d91665e9cc55a1089795f61ba1ba0dfc67f566380b15db  zotero-unprocessed-min.pyzotero.en-US.json
f0ff0dc6df7906bb3bfcd32606fd6b2b0f7ebce18d1f3626109e146676ac286f  zotero-unprocessed-min.requests.de-DE.json
6df7f88aa966ad47c1cb43e33d87d60f0bdf5ac0f6ead382141cc558513a84af  zotero-unprocessed-min.requests.en-US.json

pip list
Package            Version
------------------ --------------------
bibtexparser       1.4.1
certifi            2024.8.30
charset-normalizer 3.3.2
feedparser         6.0.11
idna               3.10
pip                24.2
pyparsing          3.1.4
pytz               2024.2
pyzotero           1.5.26.dev4+g12896b5
requests           2.32.3
sgmllib3k          1.0.0
urllib3            2.2.3

Also, this is my complete code generating the complete JSON files. Feel free to use it for testing

Complete Code
# This script collects entries from Zotero using pyzotero and stores them to a local JSON without any further processing
# This is needed, since the response from the API slows down every Hugo build
# Should run every night scheduled by the GitLab CI to keep the JSON updated
import json
import sys
import time

from pyzotero import zotero, zotero_errors

def fetch_zotero_entries(locale: str) -> list:
    # init some variables
    retry_request_max = 3

    # initialize Text+ library object
    tplus_zotero_library = zotero.Zotero(library_id='4533881', library_type='group', locale=locale)

    for i in range(retry_request_max):
        # this loop is needed, because the zotero library is big and API timeouts occur often
        try:
            # add required formats to request
            tplus_zotero_library.add_parameters(format='json', include='bibtex,bib,csljson,data', linkwrap='1')

            # request top level items and wrap them in zotero.everything
            # a single top() request would only allow up to 100 items per request
            tplus_entries = tplus_zotero_library.everything(tplus_zotero_library.top())
            return tplus_entries
        except zotero_errors.HTTPError:
            # wait for 180 seconds, since the Zotero API somtimes needs time to generate the answer
            print("Zotero API timeout. Trying again in 180 seconds")
            time.sleep(180)
            pass
    raise TimeoutError(f"Zotero API did not respond in time after {retry_request_max} retries")

def write_zotero_json(data, locale: str):
    path = f"data/zotero-unprocessed.{locale}.json"
    with open(path, 'w') as output_file:
        json.dump(data, output_file, indent=2)

def refresh_json(locale: str):
    zotero_items = fetch_zotero_entries(locale=locale)
    if zotero_items is not None:
        print(f"Successfully fetched entries for {locale}")
        write_zotero_json(zotero_items, locale)
    else:
        sys.exit(1)

refresh_json("de-DE")
refresh_json("en-US")


Use the new property cache in ListEvaluationResults

Summary
Adds a bunch of tests for the new property module (the arrow needs to keep pointing up :-))
and uses the module in ListEvaluationResults
Related: #4690
Change Type

[x] Bug fix (resolves an issue without affecting existing features)
[ ] Feature (adds new functionality without breaking changes)
[ ] Breaking change (may impact existing functionalities or require documentation updates)
[ ] Documentation (updates or additions to documentation)
[ ] Refactoring or test improvements (no bug fixes or new functionality)

Testing
curl -XGET  -H "Authorization: Bearer $MINDER_BEARER_TOKEN" 'http://localhost:8080/api/v1/results?provider=github-app-jakubtestorg&context.project=88eb1151-5a5b-4c14-9c2e-2bc359c0db94&profile=f375e42e-07ff-4a2b-9f6c-ff98be57fc2c'

Review Checklist:

[x] Reviewed my own code for quality and clarity.
[ ] Added comments to complex or tricky code sections.
[ ] Updated any affected documentation.
[x] Included tests that validate the fix or feature.
[ ] Checked that related changes are merged.

coverage: 53.141% (+0.02%) from 53.125%
when pulling ad8a0d356692411d6f835bf999b391249fb2ee4d on jhrozek:entity-cache
into f191f5d1e5afa4f5502f09d955c8340f733c048c on stacklok:main.


UITableView delete mode

Hello Team,
Its behaving weird when delete mode appears. You can refer below screenshot.

You can check with your sample itself which i've modified for you. Just try it out.

Hey. I can't reproduce the problem. Do you mean the graphical glitches or did you obscure your screenshot?

No i am saying about the graphical glitches on UITableView when it comes to edit mode. You can check it by this example

Hmm weird. I can't reproduce it :-/

Delete some record and scroll your tableview, you'll able to see that glitch.


Accept TLS certificates for Chef server #minor

For private (self-signed) chef-server, I want to validate server certificate, not skipping validation.

Thanks for the PR.  I'll look it over shortly.

Could you add a test that shows how to use the certs?  Do you have any idea if we could set this up to work with the example chef server and its Inspec tests?

@MarkGibbons
I wrote a test for TLS certificate validation. It explains how the private cert works.
This test I think is enough for the new option.
For the example chef server test, the test should run goiardi, which requires much more effort than this simple case.

thank you again.  I'll check out the new test. Much appreciated.

Adding some tests. Will merge once they work.

Included in #156


Take into account SafeArea padding when detecting hovered remove button

When a device is in landscape, the SafeArea padding may be on the left hand side (instead of the top). This takes into account the left SafeArea padding when detecting the hovered remove button.
Also note, that for the top padding, I changed it from .viewPadding.top; to .padding.top. According to Gemini this is the correct value to use. I tested and it worked fine but please test as well.

viewPadding.top represents the padding above the system's top bar (status bar).
padding.top represents the padding above the safe area, which takes into account the status bar, notches, and any other obstructions.
This is important for accounting for things like the iPhone's notch, which may be obscuring the top area of the screen even when the app is not in full-screen mode.

But is the issue which you post https://github.com/hm21/pro_image_editor/issues/68#issuecomment-2158547326 resolved already, or we still need to find a solution for that issue?

This one is not resolved. But I suspect it's some issue with the iphone simulator and may not happen on a real device. I don't have my test iphone with me right now but will have one to test later this week so I will try.

Btw if you have time can you also test on your device if it works when you get the safearea like below?

Yes, it does work as well. If that approach is preferred due to the Android issue then feel free to just commit directly and we can abandon this PR. Or I can update the PR, let me know.

Okay, thank you very much for helping resolve this issue. I released version 3.0.9 which resolves the issue now :)

Thanks again @hm21 - working for me now.
Not an issue for me, but one thing I did notice, is that if you were to add Padding() to the left side of the pro editor widget, then the calculation for the drop target would be off once again. Because it only calculates the top left area minus insets, the drop target is essentially pinned to the top left corner of the screen, whereas the actual Icon being drawn is pinned to the top left of the widget which would be different in that case.

Good to know, thanks for the info. I just released version 3.0.10 which should also fix this case, and now it doesn't matter if the user creates a custom widget for the remove area with an entirely different position.
Please let me know if there is an issue when you update, but in my tests everything works fine.
Below you can see how I now detect if the layer hit the remove area.
RenderBox? box =
    removeAreaKey.currentContext?.findRenderObject() as RenderBox?;
if (box != null) {
  Offset position = box.localToGlobal(Offset.zero);
  bool hit = Rect.fromLTWH(
    position.dx,
    position.dy,
    box.size.width,
    box.size.height,
  ).contains(detail.focalPoint);
  if (hoverRemoveBtn != hit) {
    hoverRemoveBtn = hit;
    onHoveredRemoveChanged.call(hoverRemoveBtn);
  }
}

I updated and it works fine as well. A nice final solution 👍


Search & Discovery - Show a specific message if search returns no results

Select some combination of categories, types, and agencies that results in no matches.
The main portion of the screen is blank (indicating no search results).

The blank screen is confusing to users.  Suggest adding at a minimum a message that says "No search results returned".  Or if possible a message that reflects their search - something like "Your search for ZZZ and XXX did not return any results".

All Browsers
I verified that the No Results messages appears when the filters are selected with no results and when a search term has no results.


Update merge_str_runner.py

This runs ok on 10 crams. May need more storage when we do the full cohort, but we can figure that out later?

combined zip and indexing with the mergeSTR command and confirms it runs ok


Gift acceptance process

Don't give an option to add gift to any account
The user can do that later from the gifts section

Verified this issue on dev app v2.0.71(452)


How to use logstash sync mysql data to doris

@zjd-melo
http://doris.apache.org/master/zh-CN/extending-doris/logstash.html#安装和编译

@zjd-melo
http://doris.apache.org/master/zh-CN/extending-doris/logstash.html#安装和编译

Thank you for your replay, does this plugin receive events from jdbc input?

Thank you for your replay, does this plugin receive events from jdbc input?

@zjd-melo
check this doc from Elastic, it seems ok for jdbc event.
https://www.elastic.co/guide/en/logstash/current/input-plugins.html

@zjd-melo
check this doc from Elastic, it seems ok for jdbc event.
https://www.elastic.co/guide/en/logstash/current/input-plugins.html

@francisoliverlee

@francisoliverlee

@francisoliverlee

@francisoliverlee

@francisoliverlee
 jdbc {
   jdbc_connection_string => "jdbc:mysql://<IP_ADDRESS>:3306/micros_policy"
   jdbc_user => "root"
   jdbc_password => "sqlpwd"
   jdbc_default_timezone => "Asia/Shanghai"
   jdbc_driver_class => "com.mysql.jdbc.Driver"
   jdbc_fetch_size => 5000

   schedule => "* * * * * Asia/Shanghai"

   record_last_run => true
   tracking_column => "last_modified"
   tracking_column_type => "timestamp"
   last_run_metadata_path => "./last_updated.db"
   use_column_value => true
   clean_run => false

   statement => "select id, model_name,'\n' as newline  from policy_newmodelingconfig  where last_modified > :sql_last_value"
 }
}

filter {
 mutate {
   remove_field => ["@version", "@timestamp"]
 }
}

output {
 stdout {
   codec => plain {
     format => "%{[id]},%{[model_name]}%{[newline]}"
   }
 }

 doris {
   codec => plain {
     format => "%{[id]},%{[model_name]}%{[newline]}"
   }
   timezone => "Asia/Shanghai"

   http_hosts => ["http://localhost:8030"]
   user => "root"
   password => ""
   db => "test"
   table => "test"
   label_prefix => "doris"
   column_separator => ","
 }
}

With this conf i got this.
3,m0000001
[2021-01-20T14:59:01,145][WARN ][logstash.outputs.doris   ][main] Failed to flush outgoing items {:outgoing_count=>1, :exception=>"TypeError", :backtrace=>["org/jruby/RubyString.java:2684:in `<<'",
  "/logstash-7.4.2/vendor/local_gems/b61803dd/logstash-output-doris-0.1.0/lib/logstash/outputs/doris.rb:179:in `block in flush'",
  "org/jruby/RubyArray.java:1800:in `each'", "/logstash-7.4.2/vendor/local_gems/b61803dd/logstash-output-doris-0.1.0/lib/logstash/outputs/doris.rb:178:in `flush'",
  "/logstash-7.4.2/vendor/bundle/jruby/2.5.0/gems/stud-0.0.23/lib/stud/buffer.rb:219:in `block in buffer_flush'", "org/jruby/RubyHash.java:1417:in `each'",
  "/logstash-7.4.2/vendor/bundle/jruby/2.5.0/gems/stud-0.0.23/lib/stud/buffer.rb:216:in `buffer_flush'",
  "/logstash-7.4.2/vendor/bundle/jruby/2.5.0/gems/stud-0.0.23/lib/stud/buffer.rb:159:in `buffer_receive'",
  "/logstash-7.4.2/vendor/local_gems/b61803dd/logstash-output-doris-0.1.0/lib/logstash/outputs/doris.rb:171:in `receive'",
  "/logstash-7.4.2/logstash-core/lib/logstash/outputs/base.rb:89:in `block in multi_receive'", "org/jruby/RubyArray.java:1800:in `each'",
  "/logstash-7.4.2/logstash-core/lib/logstash/outputs/base.rb:89:in `multi_receive'", "org/logstash/config/ir/compiler/OutputStrategyExt.java:118:in `multi_receive'",
  "org/logstash/config/ir/compiler/AbstractOutputDelegatorExt.java:101:in `multi_receive'",
  "/logstash-7.4.2/logstash-core/lib/logstash/java_pipeline.rb:243:in `block in start_workers'"]}

I don't know why this happen, should i format the event messsgae as csv?

@francisoliverlee
 jdbc {
   jdbc_connection_string => "jdbc:mysql://<IP_ADDRESS>:3306/micros_policy"
   jdbc_user => "root"
   jdbc_password => "sqlpwd"
   jdbc_default_timezone => "Asia/Shanghai"
   jdbc_driver_class => "com.mysql.jdbc.Driver"
   jdbc_fetch_size => 5000

   schedule => "* * * * * Asia/Shanghai"

   record_last_run => true
   tracking_column => "last_modified"
   tracking_column_type => "timestamp"
   last_run_metadata_path => "./last_updated.db"
   use_column_value => true
   clean_run => false

   statement => "select id, model_name,'\n' as newline  from policy_newmodelingconfig  where last_modified > :sql_last_value"
 }
}

filter {
 mutate {
   remove_field => ["@version", "@timestamp"]
 }
}

output {
 stdout {
   codec => plain {
     format => "%{[id]},%{[model_name]}%{[newline]}"
   }
 }

 doris {
   codec => plain {
     format => "%{[id]},%{[model_name]}%{[newline]}"
   }
   timezone => "Asia/Shanghai"

   http_hosts => ["http://localhost:8030"]
   user => "root"
   password => ""
   db => "test"
   table => "test"
   label_prefix => "doris"
   column_separator => ","
 }
}

With this conf i got this.
3,m0000001
[2021-01-20T14:59:01,145][WARN ][logstash.outputs.doris   ][main] Failed to flush outgoing items {:outgoing_count=>1, :exception=>"TypeError", :backtrace=>["org/jruby/RubyString.java:2684:in `<<'",
  "/logstash-7.4.2/vendor/local_gems/b61803dd/logstash-output-doris-0.1.0/lib/logstash/outputs/doris.rb:179:in `block in flush'",
  "org/jruby/RubyArray.java:1800:in `each'", "/logstash-7.4.2/vendor/local_gems/b61803dd/logstash-output-doris-0.1.0/lib/logstash/outputs/doris.rb:178:in `flush'",
  "/logstash-7.4.2/vendor/bundle/jruby/2.5.0/gems/stud-0.0.23/lib/stud/buffer.rb:219:in `block in buffer_flush'", "org/jruby/RubyHash.java:1417:in `each'",
  "/logstash-7.4.2/vendor/bundle/jruby/2.5.0/gems/stud-0.0.23/lib/stud/buffer.rb:216:in `buffer_flush'",
  "/logstash-7.4.2/vendor/bundle/jruby/2.5.0/gems/stud-0.0.23/lib/stud/buffer.rb:159:in `buffer_receive'",
  "/logstash-7.4.2/vendor/local_gems/b61803dd/logstash-output-doris-0.1.0/lib/logstash/outputs/doris.rb:171:in `receive'",
  "/logstash-7.4.2/logstash-core/lib/logstash/outputs/base.rb:89:in `block in multi_receive'", "org/jruby/RubyArray.java:1800:in `each'",
  "/logstash-7.4.2/logstash-core/lib/logstash/outputs/base.rb:89:in `multi_receive'", "org/logstash/config/ir/compiler/OutputStrategyExt.java:118:in `multi_receive'",
  "org/logstash/config/ir/compiler/AbstractOutputDelegatorExt.java:101:in `multi_receive'",
  "/logstash-7.4.2/logstash-core/lib/logstash/java_pipeline.rb:243:in `block in start_workers'"]}

I don't know why this happen, should i format the event messsgae as csv?

By remove the stdout part, this error happend.
{:outgoing_count=>1, :exception=>"TypeError", :backtrace=>["org/jruby/RubyString.java:2684:in `<<'",
"/logstash-7.4.2/vendor/local_gems/b61803dd/logstash-output-doris-0.1.0/lib/logstash/outputs/doris.rb:179:in `block in flush'",
"org/jruby/RubyArray.java:1800:in `each'",
"/logstash-7.4.2/vendor/local_gems/b61803dd/logstash-output-doris-0.1.0/lib/logstash/outputs/doris.rb:178:in `flush'",
"/logstash-7.4.2/vendor/bundle/jruby/2.5.0/gems/stud-0.0.23/lib/stud/buffer.rb:219:in `block in buffer_flush'",
"org/jruby/RubyHash.java:1417:in `each'",
"/logstash-7.4.2/vendor/bundle/jruby/2.5.0/gems/stud-0.0.23/lib/stud/buffer.rb:216:in `buffer_flush'",
"/logstash-7.4.2/vendor/bundle/jruby/2.5.0/gems/stud-0.0.23/lib/stud/buffer.rb:112:in `block in buffer_initialize'",
"org/jruby/RubyKernel.java:1425:in `loop'",
"/logstash-7.4.2/vendor/bundle/jruby/2.5.0/gems/stud-0.0.23/lib/stud/buffer.rb:110:in `block in buffer_initialize'"]}```

By remove the stdout part, this error happend.
{:outgoing_count=>1, :exception=>"TypeError", :backtrace=>["org/jruby/RubyString.java:2684:in `<<'",
"/logstash-7.4.2/vendor/local_gems/b61803dd/logstash-output-doris-0.1.0/lib/logstash/outputs/doris.rb:179:in `block in flush'",
"org/jruby/RubyArray.java:1800:in `each'",
"/logstash-7.4.2/vendor/local_gems/b61803dd/logstash-output-doris-0.1.0/lib/logstash/outputs/doris.rb:178:in `flush'",
"/logstash-7.4.2/vendor/bundle/jruby/2.5.0/gems/stud-0.0.23/lib/stud/buffer.rb:219:in `block in buffer_flush'",
"org/jruby/RubyHash.java:1417:in `each'",
"/logstash-7.4.2/vendor/bundle/jruby/2.5.0/gems/stud-0.0.23/lib/stud/buffer.rb:216:in `buffer_flush'",
"/logstash-7.4.2/vendor/bundle/jruby/2.5.0/gems/stud-0.0.23/lib/stud/buffer.rb:112:in `block in buffer_initialize'",
"org/jruby/RubyKernel.java:1425:in `loop'",
"/logstash-7.4.2/vendor/bundle/jruby/2.5.0/gems/stud-0.0.23/lib/stud/buffer.rb:110:in `block in buffer_initialize'"]}```


nvcc error

I'm trying to use hana in a CUDA project. I got this compilation error in nvcc (cuda 9.1 + gcc 6.3.0) when compiling the example in hana::map (http://boostorg.github.io/hana/structboost_1_1hana_1_1map.html, right before "Synopsis of associated functions"):
/home/aznb/.linuxbrew/include/boost/hana/fwd/optional.hpp(343): error: defaulted default constructor cannot be constexpr because the corresponding implicitly declared default constructor would not be constexpr

/home/aznb/.linuxbrew/include/boost/hana/string.hpp(90): error: expression must have a constant value
          detected during:
            instantiation of "boost::hana::string_detail::prepare_impl" based on template arguments <tmp, 0UL, 1UL, 2UL, 3UL, 4UL, 5UL, 6UL>
(97): here
            instantiation of "decltype(auto) boost::hana::string_detail::prepare(S) [with S=tmp]"
testmap.cpp(37): here

/home/aznb/.linuxbrew/include/boost/hana/string.hpp(90): error: expression must have a constant value
          detected during:
            instantiation of "boost::hana::string_detail::prepare_impl" based on template arguments <tmp, 0UL, 1UL, 2UL, 3UL, 4UL, 5UL, 6UL>
(97): here
            instantiation of "decltype(auto) boost::hana::string_detail::prepare(S) [with S=tmp]"
testmap.cpp(37): here

/home/aznb/.linuxbrew/include/boost/hana/string.hpp(90): error: expression must have a constant value
          detected during:
            instantiation of "boost::hana::string_detail::prepare_impl" based on template arguments <tmp, 0UL, 1UL, 2UL, 3UL, 4UL, 5UL, 6UL>
(97): here
            instantiation of "decltype(auto) boost::hana::string_detail::prepare(S) [with S=tmp]"
testmap.cpp(37): here

/home/aznb/.linuxbrew/include/boost/hana/string.hpp(90): error: expression must have a constant value
          detected during:
            instantiation of "boost::hana::string_detail::prepare_impl" based on template arguments <tmp, 0UL, 1UL, 2UL, 3UL, 4UL, 5UL, 6UL>
(97): here
            instantiation of "decltype(auto) boost::hana::string_detail::prepare(S) [with S=tmp]"
testmap.cpp(38): here

/home/aznb/.linuxbrew/include/boost/hana/string.hpp(90): error: expression must have a constant value
          detected during:
            instantiation of "boost::hana::string_detail::prepare_impl" based on template arguments <tmp, 0UL, 1UL, 2UL, 3UL, 4UL, 5UL, 6UL>
(97): here
            instantiation of "decltype(auto) boost::hana::string_detail::prepare(S) [with S=tmp]"
testmap.cpp(38): here

/home/aznb/.linuxbrew/include/boost/hana/string.hpp(90): error: expression must have a constant value
          detected during:
            instantiation of "boost::hana::string_detail::prepare_impl" based on template arguments <tmp, 0UL, 1UL, 2UL, 3UL, 4UL, 5UL, 6UL>
(97): here
            instantiation of "decltype(auto) boost::hana::string_detail::prepare(S) [with S=tmp]"
testmap.cpp(38): here

/home/aznb/.linuxbrew/include/boost/hana/string.hpp(90): error: expression must have a constant value
          detected during:
            instantiation of "boost::hana::string_detail::prepare_impl" based on template arguments <tmp, 0UL, 1UL, 2UL, 3UL, 4UL, 5UL, 6UL>
(97): here
            instantiation of "decltype(auto) boost::hana::string_detail::prepare(S) [with S=tmp]"
testmap.cpp(39): here

/home/aznb/.linuxbrew/include/boost/hana/string.hpp(90): error: expression must have a constant value
          detected during:
            instantiation of "boost::hana::string_detail::prepare_impl" based on template arguments <tmp, 0UL, 1UL, 2UL, 3UL, 4UL, 5UL, 6UL>
(97): here
            instantiation of "decltype(auto) boost::hana::string_detail::prepare(S) [with S=tmp]"
testmap.cpp(39): here

/home/aznb/.linuxbrew/include/boost/hana/string.hpp(90): error: expression must have a constant value
          detected during:
            instantiation of "boost::hana::string_detail::prepare_impl" based on template arguments <tmp, 0UL, 1UL, 2UL, 3UL, 4UL, 5UL, 6UL>
(97): here
            instantiation of "decltype(auto) boost::hana::string_detail::prepare(S) [with S=tmp]"
testmap.cpp(39): here

/home/aznb/.linuxbrew/include/boost/hana/string.hpp(90): error: expression must have a constant value
          detected during:
            instantiation of "boost::hana::string_detail::prepare_impl" based on template arguments <tmp, 0UL, 1UL, 2UL, 3UL, 4UL, 5UL, 6UL>
(97): here
            instantiation of "decltype(auto) boost::hana::string_detail::prepare(S) [with S=tmp]"
testmap.cpp(42): here

/home/aznb/.linuxbrew/include/boost/hana/string.hpp(90): error: expression must have a constant value
          detected during:
            instantiation of "boost::hana::string_detail::prepare_impl" based on template arguments <tmp, 0UL, 1UL, 2UL, 3UL, 4UL, 5UL, 6UL>
(97): here
            instantiation of "decltype(auto) boost::hana::string_detail::prepare(S) [with S=tmp]"
testmap.cpp(42): here

/home/aznb/.linuxbrew/include/boost/hana/string.hpp(90): error: expression must have a constant value
          detected during:
            instantiation of "boost::hana::string_detail::prepare_impl" based on template arguments <tmp, 0UL, 1UL, 2UL, 3UL, 4UL, 5UL, 6UL>
(97): here
            instantiation of "decltype(auto) boost::hana::string_detail::prepare(S) [with S=tmp]"
testmap.cpp(42): here

/home/aznb/.linuxbrew/include/boost/hana/string.hpp(90): error: expression must have a constant value
          detected during:
            instantiation of "boost::hana::string_detail::prepare_impl" based on template arguments <tmp, 0UL, 1UL, 2UL, 3UL, 4UL, 5UL, 6UL>
(97): here
            instantiation of "decltype(auto) boost::hana::string_detail::prepare(S) [with S=tmp]"
testmap.cpp(45): here

/home/aznb/.linuxbrew/include/boost/hana/string.hpp(90): error: expression must have a constant value
          detected during:
            instantiation of "boost::hana::string_detail::prepare_impl" based on template arguments <tmp, 0UL, 1UL, 2UL, 3UL, 4UL, 5UL, 6UL>
(97): here
            instantiation of "decltype(auto) boost::hana::string_detail::prepare(S) [with S=tmp]"
testmap.cpp(45): here

/home/aznb/.linuxbrew/include/boost/hana/string.hpp(90): error: expression must have a constant value
          detected during:
            instantiation of "boost::hana::string_detail::prepare_impl" based on template arguments <tmp, 0UL, 1UL, 2UL, 3UL, 4UL, 5UL, 6UL>
(97): here
            instantiation of "decltype(auto) boost::hana::string_detail::prepare(S) [with S=tmp]"
testmap.cpp(45): here

/home/aznb/.linuxbrew/include/boost/hana/string.hpp(90): error: expression must have a constant value
          detected during:
            instantiation of "boost::hana::string_detail::prepare_impl" based on template arguments <tmp, 0UL, 1UL, 2UL, 3UL, 4UL, 5UL, 6UL>
(97): here
            instantiation of "decltype(auto) boost::hana::string_detail::prepare(S) [with S=tmp]"
testmap.cpp(48): here

/home/aznb/.linuxbrew/include/boost/hana/string.hpp(90): error: expression must have a constant value
          detected during:
            instantiation of "boost::hana::string_detail::prepare_impl" based on template arguments <tmp, 0UL, 1UL, 2UL, 3UL, 4UL, 5UL, 6UL>
(97): here
            instantiation of "decltype(auto) boost::hana::string_detail::prepare(S) [with S=tmp]"
testmap.cpp(48): here

/home/aznb/.linuxbrew/include/boost/hana/string.hpp(90): error: expression must have a constant value
          detected during:
            instantiation of "boost::hana::string_detail::prepare_impl" based on template arguments <tmp, 0UL, 1UL, 2UL, 3UL, 4UL, 5UL, 6UL>
(97): here
            instantiation of "decltype(auto) boost::hana::string_detail::prepare(S) [with S=tmp]"
testmap.cpp(48): here

/home/aznb/.linuxbrew/include/boost/hana/string.hpp(90): error: expression must have a constant value
          detected during:
            instantiation of "boost::hana::string_detail::prepare_impl" based on template arguments <tmp, 0UL, 1UL, 2UL, 3UL, 4UL, 5UL, 6UL>
(97): here
            instantiation of "decltype(auto) boost::hana::string_detail::prepare(S) [with S=tmp]"
testmap.cpp(51): here

/home/aznb/.linuxbrew/include/boost/hana/string.hpp(90): error: expression must have a constant value
          detected during:
            instantiation of "boost::hana::string_detail::prepare_impl" based on template arguments <tmp, 0UL, 1UL, 2UL, 3UL, 4UL, 5UL, 6UL>
(97): here
            instantiation of "decltype(auto) boost::hana::string_detail::prepare(S) [with S=tmp]"
testmap.cpp(51): here

/home/aznb/.linuxbrew/include/boost/hana/string.hpp(90): error: expression must have a constant value
          detected during:
            instantiation of "boost::hana::string_detail::prepare_impl" based on template arguments <tmp, 0UL, 1UL, 2UL, 3UL, 4UL, 5UL, 6UL>
(97): here
            instantiation of "decltype(auto) boost::hana::string_detail::prepare(S) [with S=tmp]"
testmap.cpp(51): here

/home/aznb/.linuxbrew/include/boost/hana/string.hpp(90): error: expression must have a constant value
          detected during:
            instantiation of "boost::hana::string_detail::prepare_impl" based on template arguments <tmp, 0UL, 1UL, 2UL, 3UL, 4UL, 5UL, 6UL>
(97): here
            instantiation of "decltype(auto) boost::hana::string_detail::prepare(S) [with S=tmp]"
testmap.cpp(54): here

/home/aznb/.linuxbrew/include/boost/hana/string.hpp(90): error: expression must have a constant value
          detected during:
            instantiation of "boost::hana::string_detail::prepare_impl" based on template arguments <tmp, 0UL, 1UL, 2UL, 3UL, 4UL, 5UL, 6UL>
(97): here
            instantiation of "decltype(auto) boost::hana::string_detail::prepare(S) [with S=tmp]"
testmap.cpp(54): here

/home/aznb/.linuxbrew/include/boost/hana/string.hpp(90): error: expression must have a constant value
          detected during:
            instantiation of "boost::hana::string_detail::prepare_impl" based on template arguments <tmp, 0UL, 1UL, 2UL, 3UL, 4UL, 5UL, 6UL>
(97): here
            instantiation of "decltype(auto) boost::hana::string_detail::prepare(S) [with S=tmp]"
testmap.cpp(54): here

/home/aznb/.linuxbrew/include/boost/hana/string.hpp(90): error: expression must have a constant value
          detected during:
            instantiation of "boost::hana::string_detail::prepare_impl" based on template arguments <tmp, 0UL, 1UL, 2UL, 3UL, 4UL, 5UL, 6UL>
(97): here
            instantiation of "decltype(auto) boost::hana::string_detail::prepare(S) [with S=tmp]"
testmap.cpp(55): here

/home/aznb/.linuxbrew/include/boost/hana/string.hpp(90): error: expression must have a constant value
          detected during:
            instantiation of "boost::hana::string_detail::prepare_impl" based on template arguments <tmp, 0UL, 1UL, 2UL, 3UL, 4UL, 5UL, 6UL>
(97): here
            instantiation of "decltype(auto) boost::hana::string_detail::prepare(S) [with S=tmp]"
testmap.cpp(55): here

/home/aznb/.linuxbrew/include/boost/hana/string.hpp(90): error: expression must have a constant value
          detected during:
            instantiation of "boost::hana::string_detail::prepare_impl" based on template arguments <tmp, 0UL, 1UL, 2UL, 3UL, 4UL, 5UL, 6UL>
(97): here
            instantiation of "decltype(auto) boost::hana::string_detail::prepare(S) [with S=tmp]"
testmap.cpp(55): here

/home/aznb/.linuxbrew/include/boost/hana/string.hpp(90): error: expression must have a constant value
          detected during:
            instantiation of "boost::hana::string_detail::prepare_impl" based on template arguments <tmp, 0UL, 1UL, 2UL, 3UL, 4UL, 5UL, 6UL>
(97): here
            instantiation of "decltype(auto) boost::hana::string_detail::prepare(S) [with S=tmp]"
testmap.cpp(56): here

/home/aznb/.linuxbrew/include/boost/hana/string.hpp(90): error: expression must have a constant value
          detected during:
            instantiation of "boost::hana::string_detail::prepare_impl" based on template arguments <tmp, 0UL, 1UL, 2UL, 3UL, 4UL, 5UL, 6UL>
(97): here
            instantiation of "decltype(auto) boost::hana::string_detail::prepare(S) [with S=tmp]"
testmap.cpp(56): here

/home/aznb/.linuxbrew/include/boost/hana/string.hpp(90): error: expression must have a constant value
          detected during:
            instantiation of "boost::hana::string_detail::prepare_impl" based on template arguments <tmp, 0UL, 1UL, 2UL, 3UL, 4UL, 5UL, 6UL>
(97): here
            instantiation of "decltype(auto) boost::hana::string_detail::prepare(S) [with S=tmp]"
testmap.cpp(56): here

31 errors detected in the compilation of "/home/aznb/tmp/tmpxft_0002f4bb_00000000-8_testmap.cpp1.ii".

This looks like a nvcc bug but can someone confirm this? What should I report to Nvidia in order to get their attention to this? Too bad I can't use this library for my project...
Here's the source code and the command line in order to reproduce the error:
#include <boost/hana/assert.hpp>
#include <boost/hana/at_key.hpp>
#include <boost/hana/contains.hpp>
#include <boost/hana/map.hpp>
#include <boost/hana/pair.hpp>
#include <boost/hana/string.hpp>
#include <functional>
#include <string>
#include <vector>
namespace hana = boost::hana;
template <typename ...Events>
struct event_system {
    using Callback = std::function<void()>;
    hana::map<hana::pair<Events, std::vector<Callback>>...> map_;
    template <typename Event, typename F>
    void on(Event e, F handler) {
        auto is_known_event = hana::contains(map_, e);
        static_assert(is_known_event,
            "trying to add a handler to an unknown event");
        map_[e].push_back(handler);
    }
    template <typename Event>
    void trigger(Event e) const {
        auto is_known_event = hana::contains(map_, e);
        static_assert(is_known_event,
            "trying to trigger an unknown event");
        for (auto& handler : this->map_[e])
            handler();
    }
};
template <typename ...Events>
event_system<Events...> make_event_system(Events ...events) {
    return {};
}
int main() {
    auto events = make_event_system(
        BOOST_HANA_STRING("foo"),
        BOOST_HANA_STRING("bar"),
        BOOST_HANA_STRING("baz")
    );
    std::vector<std::string> triggered_events;
    events.on(BOOST_HANA_STRING("foo"), [&] {
        triggered_events.push_back("foo:1");
    });
    events.on(BOOST_HANA_STRING("foo"), [&] {
        triggered_events.push_back("foo:2");
    });
    events.on(BOOST_HANA_STRING("bar"), [&] {
        triggered_events.push_back("bar:1");
    });
    events.on(BOOST_HANA_STRING("baz"), [&] {
        triggered_events.push_back("baz:1");
    });
    events.trigger(BOOST_HANA_STRING("foo"));
    events.trigger(BOOST_HANA_STRING("bar"));
    events.trigger(BOOST_HANA_STRING("baz"));
    BOOST_HANA_RUNTIME_CHECK(triggered_events == std::vector<std::string>{
        "foo:1", "foo:2", "bar:1", "baz:1"
    });
}

nvcc -x cu testmap.cpp -o testmap -std=c++14

Note that the error doesn't happen if -x cu option is removed.

Your code does not compile on clang either. Just skimming through your error output the problem appears to be with how the BOOST_HANA_STRING macro is using a constexpr array or something.
The error that I am getting is caused by your declaring a map type:
hana::map<hana::pair<Events, std::vector<Callback>>...> map_;

Not only does this result in too many template arguments, but Boost.Hana makes no guarantee about the template parameters in the hana::map template. You have to use hana::make_map.
While the documentation does state this:
"Note that the actual representation of a hana::map is an implementation detail."
It does appear to be clear in the type signature located above that which should probably be changed to something like:
template<...>
struct boost::hana::map;

I'm saying that the example is incorrect and does not even compile on Clang.
I'm not sure why yours would work at all.
I'm not sure if I will have time to play with this, but it is kind of related to a presentation I am giving at C++Now next week on compiling C++ programs in Docker.
https://hub.docker.com/r/nvidia/cuda/ <-- Is that the toolchain you are using?

This example does compile with gcc 6.3.0 on my machine. The cuda 9.1 is the tool chain I'm using. The exact version is:
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2017 NVIDIA Corporation
Built on Fri_Nov__3_21:07:56_CDT_2017
Cuda compilation tools, release 9.1, V9.1.85

Also, doesn't the first line in the error message look like a compiler bug assuming that hana's definition of constexpr function meets the c++14 requirement?
/home/aznb/.linuxbrew/include/boost/hana/fwd/optional.hpp(343): error: defaulted default constructor cannot be constexpr because the corresponding implicitly declared default constructor would not be constexpr

What is the error you've seen on Clang?

I am mistaken. I must be on a really old version of Boost.Hana.
commit e3e8736aabd89c614bb26757eb31627e5c03fdb3
Author: Louis Dionne<EMAIL_ADDRESS>Date:   Mon Nov 14 17:52:44 2016 -0800

    [map] Allow declaring maps using map<Pairs...>, and provide a variadic constructor

I don't have access to NVCC and it's not currently a supported compiler. I can't make any guarantees about it, unfortunately. Your example appears to be correct, though, so it's either a bug in Hana or a bug in the compiler.
Have you tried building Hana's tests and examples? How many failures do you get? If you get a lot of unrelated failures, it may just be that NVCC is not sufficiently standards conforming to support Hana.

Closing since NVCC is not a supported compiler.


Run with command 'chalk-it --render [my.xprjson]'

When I run with comand 'chalk-it --render [my.xprjson]', got a error 'TypeError: window.chalkitLoadDashboard is not a function', how should I resolve it?

You are right. There was a regression since Chalk'it 0.6.0.
It will be fixed this week.
Use Chalk'it 0.5.6 if that helps

Warm thanks @TristanBartement !
Fixed


Access denied

I used this for over a year now and it worked great, unfortunately today I am getting Access denied and I have no idea why

Not one single answer?

version 2110 has broken lots of things, including AD groups. This may be why you are getting denied, if you used AD groups as gateway access.


Version bump to v0.9.1

After merging changes across, tagging them and verifying with running clusters, it seems we can bump the version that the installer deploys to v0.9.1.
Kubernetes cluster has been tested with the updated demo.sh and with the work-in-progress end to end tests.
Devstack cluster has been tested also with the end-to-end tests. There's the known limitation that we can't SSH into the VMs from the host. Docs have been revised in PR #117 to address that. (Already merged since it affected 0.9.0 also.

Result from kubernetes E2E test:
2016-06-23 06:34:39 (ip-192-168-99-10:clustertests) Test #1: Check that Kubernetes services are running on master : PASSED
2016-06-23 06:34:40 (ip-192-168-99-10:clustertests) Test #2: Check that Romana services are running on master : PASSED
2016-06-23 06:34:41 (ip-192-168-99-10:clustertests) Test #3: Check that Kubernetes services are running on minion : PASSED
2016-06-23 06:34:42 (ip-192-168-99-10:clustertests) Test #4: Check that Romana services are running on minion : PASSED
2016-06-23 06:34:42 (ip-192-168-99-10:clustertests) Test #6: Pull docker containers used in later tests : PASSED
2016-06-23 06:34:46 (ip-192-168-99-10:clustertests) Test #8: Check namespace creation triggers romana tenant creation : PASSED
2016-06-23 06:34:47 (ip-192-168-99-10:clustertests) Test #7: Check that kubernetes can launch some pods : PASSED
2016-06-23 06:34:54 (ip-192-168-99-10:clustertests) Test #9: End-to-End test checking default-allow, isolation and policy-allow : PASSED
2016-06-23 06:34:41 (ip-192-168-99-11:clustertests) Test #3: Check that Kubernetes services are running on minion : PASSED
2016-06-23 06:34:42 (ip-192-168-99-11:clustertests) Test #4: Check that Romana services are running on minion : PASSED
2016-06-23 06:34:42 (ip-192-168-99-11:clustertests) Test #6: Pull docker containers used in later tests : PASSED

Result from devstack E2E test:
2016-06-23 06:44:50 (ip-192-168-99-10:clustertests) Test #1: Check that openstack services are present : PASSED
2016-06-23 06:44:54 (ip-192-168-99-10:clustertests) Test #2: Check that Romana services are running on controller node : PASSED
2016-06-23 06:44:56 (ip-192-168-99-10:clustertests) Test #3: Check that Romana services are running on compute nodes : PASSED
2016-06-23 06:44:57 (ip-192-168-99-10:clustertests) Test #4: Check that VMs can be created on each compute node : PASSED
2016-06-23 06:44:56 (ip-192-168-99-11:clustertests) Test #3: Check that Romana services are running on compute nodes : PASSED


Swift Package Plugin prebuild command not always being ran

Description
TestApp.zip
When having a static swift package package (TestPluginPackage) that utilizes a Swift 5.6 plugin as a dependency for a dynamic swift package (TestWrapperPackage), and having that dynamic swift package (TestWrapperPackage) linked to an Xcode project target (TestApp (IOS)), I would expect the prebuild command plugin from TestPluginPackage to be run on every build of TestApp (IOS). However, this does not seem to be the case. I do not see the prebuild command in the Xcode build logs when building. Removing and re-add ingTestWrapperProject to TestApp temporarily fixes the issue and shows the prebuild command from the plugin in the logs again, until Xcode is closed and re-opened again. Then the bug re-occurs.
One other thing to note is that I do see the TestPluginPackage.swift file from TestPluginPackage get compiled when building TestApp, so it is being linked properly.
Also when building TestWrapperPackage or TestPluginPackage, I do see the prebuild command in the build logs as expected.
https://swiftpm.slack.com/archives/C14QU6CUU/p1654180271959699
Expected behavior
prebuild command plugin should always be ran
Actual behavior
Prebuild command plugin is not always ran
Steps to reproduce
On the sample app, build the TestApp (iOS) scheme on an iOS simulator. Notice that in the build logs, no prebuild command is logged. Remove and re-add TestWrapperPackage from the TestApp(IOS) Xcode target’s Frameworks, Libraries, Embed Content section to sometimes see the prebuild command run properly in the build logs. Restart Xcode to have it be stop running the rebuild command.
Swift Package Manager version/commit hash
5.6
Swift & OS version (output of swift --version && uname -a)
swift-driver version: 1.45.2 Apple Swift version 5.6 (swiftlang-<IP_ADDRESS>3.62 clang-13<IP_ADDRESS>)
Target: x86_64-apple-macosx12.0
Darwin tw-mbp-stonec 21.5.0 Darwin Kernel Version 21.5.0: Tue Apr 26 21:08:22 PDT 2022; root:xnu-8020.121.3~4/RELEASE_X86_64 x86_64

I have also seen this issue. The prebuild commands are simply not run.


PCH source file always built incorrectly as a C++ file

This issue was originally created at: 2005-07-14 16:04:41.
This issue was reported by: schooner.

schooner said at 2005-07-14 16:04:41

Consider the Sconstruct with the files associated with the build in the attached zip file. The build is specified with MSVS 7.1 (though the problem occurs even with MSVC 6.0). If you try to build, you will get the following output:
cl /nologo /TP -GX -Ox /c SourcePrecompC.c /FoSourcePrecompC.obj /YcSource.h /FpSourcePrecompC.pch SourcePrecompC.c
cl /nologo -GX -Ox /c Source2.c /FoSource2.obj /YuSource.h /FpSourcePrecompC.pch Source2.c
Source2.c(1) : fatal error C1853: 'SourcePrecompC.pch' precompiled header file is from a previous version of the compiler, or the precompiled header is C++ and you are using it from C (or vice versa)
scons: *** [Source2.obj] Error 2

The important part to note is "the precompiled header is C++ and you are using it from C" - This happens because when SCons builds SourcePrecompC.c , it adds the /TP flag which instructs the compiler to build the file as a C++ file. However, this needs to be compiled as a c file so that it can be used as the precompiled header for Source2.c, which is a c source file.
The MSVC tool should figure out what flags to pass for the PCH just as it does when it is just a source file.

issues@scons said at 2005-07-14 16:04:41

Converted from SourceForge tracker item 1238542

gregnoel said at 2008-10-05 07:54:06

Bug party triage.  Gary to research and see if it's still a problem.

garyo said at 2008-10-05 18:46:42

I'd like to look into this bug, but it seems like the attachment is missing.  It might have been lost when we converted to Tigris.  Schooner, if you're still around (I know this was a long time ago!) could you repost the attachment?  If I don't hear anything in a week, I'll have to close the bug due to lack of ability to reproduce it.

garyo said at 2008-10-19 06:28:16

Resolving as invalid due to missing attachment & no reply from OP, sorry.

This bug got closed for reproducibility reasons, but it's not hard to conclude the report hits on something significant.  The compiler itself has reported a problem as:

the precompiled header is C++ and you are using it from C (or vice versa)

Showing us they can't be mixed, and the current implementation (SCons/Tool/msvc.py) sets the compiler for a PCH build unconditionally to:
    env['PCHCOM'] = '$CXX /Fo${TARGETS[1]} $CXXFLAGS $CCFLAGS $CPPFLAGS $_CPPDEFFLAGS $_CPPINCFLAGS /c $SOURCES /Yc$PCHSTOP /Fp${TARGETS[0]} $CCPDBFLAGS $PCHPDBFLAGS'

$CXX evaluates to the same as $CC so that's not a problem, but $CXXFLAGS contains /TP, which means C++.  From the Microsoft docs:

/TC and /TP are global variants of /Tc and /Tp. They specify to the compiler to treat all files named on the command line as C source files (/TC) or C++ source files (/TP), without regard to location on the command line in relation to the option.

So we don't really have a mechanism in place to distinguish between C and C++, we just tell the compiler to assume it's all C++. Which usually isn't an issue, since C is part of the C++ standard, so they're essentially compatible, but in the case of PCH files, Microsoft has chosen to make a distinction.
Temporarily, I'm reopening this - it's possible the resolution is "tough, we're not going to go down this rathole, Don't Do That" (which might imply a small doc note somewhere).

PR #4441 proposes wording to at least document this assumption ("PCH is always C++"). It's done as a note so easy to update if there's ever a resolution to this issue.


JDBC Datasource property should allow to select or create a bean

When configuring a JDBC component you have to specify a mandatory Data Source Name. This can be the name of an existing bean (don't use the # for a bean reference, this doesn't work in this case...just use the plain name) or alternatively you can put there one of 2 constants:

dataSource
default

If you specify one of these 2 constants then the JDBC component will try to lookup a datasource bean from the registry. (See the tooltip in the screenshot below)

Source Example:

Ok, if I'm understanding correctly, in this case, the dataSource field should allow to create or select existing beans but without having a # prefix.

It can be also a predefined constant...see above description

yup, I saw that part as well. Judging by the list of custom features this field might require, I think it would be better to provide something custom for this case. It could also automatically add predefined beans for known databases.


[Design Feature Request for performance] on-demand scaling of workers with redundancy

Hi @knadh
I was studying the design of dungbeetle and I realized a scenario where this design might see bottleneck as per my understanding
As per my understanding  the workers fetch one job from the QUEUE and then write it to primary_db and result_db ( for frequent operations and then removed after a time-to-live time ) and result_db is a single one ( chosed from list randomly )which we declare when we start the process in config file
Now consider the worst-case like this

You have N number of requests coming in which is much higher than anticipated
This leads to large number of operations even on result_db
Because of this even the result_db starts facing bottleneck
Because of this writes might become slower on DB ( I consider secondary DB of not of that big capacity) degrading overall perfomance

In short result_db is like a single point of failure irrespective of number of workers we have
Proposed Solution

Broker selects one result_db at start
When a result_db encounters some kind of congestion it feedbacks it to the broker.
Broker the feedback crosses a threshhold , the broker does a health check on its result_db options and makes it as primary result database
Broker now writes the new  fresh job IDS to this new primary result database

if we implement this feedback on brokers then autoscalers like in kubernetes could use it to scale our workers on a particular queue. for this we need to implement a way to accept workers and create task tables just like redhat openshift does this for it's worker nodes

DB load balancing is a very complex task and it is not viable (or necessary) to add to the core.
This scenario can be solved easily with many approaches.
a) Launch multiple DungBeetle instances that speak to different result DBs and load/queue balance across them.
b) Put a robust DB load balancing solution between DungBeetle and the results DB, eg: pgBouncer.


How to disable SSR?

It is really hard to debug when something goes wrong server-side.
How do I force relay-nextjs to serve static JavaScript and make GraphQL queries client-side?

Next.js makes it quite difficult to entirely disable SSR, and relay-nextjs's data fetching is tightly integrated with the lifecycle of Next.js pages. Suggested workarounds are:

Start the session on a page separate from the one being debugged (a simple static page will work), then navigate to the target page. relay-nextjs does not use SSR or getServerSideProps on subsequent page navigations.
Use lazyLoadQuery to fetch page data rather than withRelay. This will skip over pretty much all of relay-nextjs's internal workings so debugging how this library works would be difficult.

Let me know if either of these work for you, we'd be happy to add them to an FAQ on the documentation site.

Use lazyLoadQuery to fetch page data rather than withRelay. This will skip over pretty much all of relay-nextjs's internal workings so debugging how this library works would be difficult.

I will try this path.
Thank you


fix: handle aggregation funct on FE

Description
Please include a summary of the change and which issue is fixed. Please also include relevant motivation and context. List any dependencies that are required for this change.
Fixes # (link to Jira or GitHub issue)
Type of change

[ ] Bug fix (non-breaking change which fixes an issue)
[ ] New feature (non-breaking change which adds functionality)
[ ] Breaking change (fix or feature that would cause existing functionality to not work as expected)

Checklist:

[ ] I have updated the CHANGELOG
[ ] I have requested at least 1 reviewer for this PR
[ ] I have made corresponding changes to the documentation

Decided to not handle min/max in year slider depending on rest of facets as I believe there is no meaningful way to do this.

Somehow managed to come up with something with @igor-kamil


SF_NPM_REGISTRY is not working

Summary
Environment variable SF_NPM_REGISTRY is not working
Steps To Reproduce
Install a sf plugin hosted on a private npm registry

SF_NPM_REGISTRY=URL sf plugins install {PLUGIN_NAME}

Expected result
SF Plugin is installed successfully
Actual result
Install fails because the private registry is not taken into account
Workaround
Use SFDX_NPM_REGISTRY variable instead
System Information
bash and zsh
{
  "cliVersion"<EMAIL_ADDRESS>  "architecture": "darwin-x64",
  "nodeVersion": "node-v16.20.2",
  "osVersion": "Darwin 22.6.0",
  "shell": "zsh",
  "rootPath": "/Users/{USER}/.npm-global/lib/node_modules/@salesforce/cli",
  "pluginVersions": [
    "@oclif/plugin-autocomplete 2.3.8 (core)",
    "@oclif/plugin-commands 2.2.26 (core)",
    "@oclif/plugin-help 5.2.19 (core)",
    "@oclif/plugin-not-found 2.4.1 (core)",
    "@oclif/plugin-plugins 3.8.2 (core)",
    "@oclif/plugin-search 0.0.22 (core)",
    "@oclif/plugin-update 3.2.3 (core)",
    "@oclif/plugin-version 1.3.10 (core)",
    "@oclif/plugin-warn-if-update-available 2.1.0 (core)",
    "@oclif/plugin-which 2.2.32 (core)",
    "@salesforce/cli 2.11.8 (core)",
    "apex 2.3.15 (core)",
    "auth 2.8.17 (core)",
    "data 2.5.12 (core)",
    "deploy-retrieve 1.18.3 (core)",
    "dev 1.1.10 (user)",
    "info 2.6.45 (core)",
    "limits 2.3.35 (core)",
    "login 1.2.31 (core)",
    "marketplace 0.2.2 (core)",
    "org 2.10.8 (core)",
    "packaging 1.20.0 (user)",
    "schema 2.3.28 (core)",
    "settings 1.4.30 (core)",
    "signups 1.4.22 (user)",
    "sobject 0.2.7 (core)",
    "source 2.10.36 (core)",
    "telemetry 2.3.4 (core)",
    "templates 55.5.13 (core)",
    "trust 2.6.15 (core)",
    "user 2.3.32 (core)"
  ]
}

Thanks @gavignon, It looks like it is setting the registry correctly but our code where we validate signatures only looks for SFDX_NPM_REGISTRY. We'll get a fix in!

This should be fixed in the nightly build. You can try it out at @salesforce/cli@nightly. It will be promoted to latest on October 25th

This issue is fixed in CLI version 2.14.6 (Oct 25, 2023).


Pipe Insertion + Streaming Controller

The original problem is that if you do something like
Stream.Foreach(N by 1){i =>
  val ctrmax = sram(i)
  Foreach(ctrmax by 1){j => ... }
}

The original pipe insertion rules would wrap the sram read and pass the result in a RegNew.  I made it so that the result is passed in a FIFORegNew so that it has the same behavior as Pipe.Foreach would have, and the inner Foreach wouldn't run until FIFORegNew catches a result.  I think there are 2 problems here though:
Stream.Foreach(N by 1){i =>
  val ctrmax = sram(i)
  Foreach(ctrmax by 1){j => ... }
  Foreach(ctrmax by 1){j => ... }
}

In this case, it is possible that one of these two will get to dequeue the injected FIFORegNew and the other will be left in the dark, or other kinds of messed up behavior that does not apply if we have a Pipe.Foreach and NBuffered RegNew.
There is also I think a case where banking/unrolling just crashes because of duplicates being requested but not existing.  I haven't gotten to the bottom of why it happens, but here is a snippet that should be able to reproduce it.  I think it has to do with some arithmetic nodes getting placed above the first load, then arithmetic nodes getting placed between the two loads that depends on the first group of nodes.  When pipe insertion comes along I think it just messes stuff up here.  Likely related to the pipe insertion binding stuff I added recently
      Stream.Foreach(OMAX_0 par P1, OMAX_1 par P2){ (C,R) =>
        val idx0 = C*STRIDE
        val idx1 = R*STRIDE

        // Fetch data
        local_data(0)(0) load INPUT_DATA(max(0,min(idx0-1+0,IMAX_0.value)), max(0,min(idx1-1+0,IMAX_1.value)), 0::INCHANS_MAX)
        local_data(0)(1) load INPUT_DATA(max(0,min(idx0-1+0,IMAX_0.value)), max(0,min(idx1-1+1,IMAX_1.value)), 0::INCHANS_MAX)

Right now the solution is to just have a unique val for each instance where you use that val.


[BUG] Test case test_csi_encrypted_block_volume fails on GKE COS_CONTAINERD

Describe the bug
Test case test_csi_encrypted_block_volume fails on GKE COS_CONTAINERD.
The encrypted volume is created successfully:
$ kubectl get volumes -n longhorn-system
NAME                                       DATA ENGINE   STATE      ROBUSTNESS   SCHEDULED   SIZE         NODE                                                  AGE
pvc-8d7ba226-3c52-4859-9295-36fe99fa8dbc   v1            attached   healthy<PHONE_NUMBER>   gke-lh-gke-tests-rip-lh-gke-tests-rip-875ecc69-kdrc   15m

But the pod is unable to mount it:
$ kubectl get pods
NAME                                   READY   STATUS              RESTARTS   AGE
csi-block-volume-test                  0/1     ContainerCreating   0          7m40s

$ kubectl describe pod csi-block-volume-test
Name:             csi-block-volume-test
Namespace:        default
Priority:         0
Service Account:  default
Node:             gke-lh-gke-tests-rip-lh-gke-tests-rip-875ecc69-kdrc/<IP_ADDRESS>
Start Time:       Tue, 24 Dec 2024 03:15:46 +0000
Labels:           <none>
Annotations:      <none>
Status:           Pending
IP:
IPs:              <none>
Containers:
  sleep:
    Container ID:
    Image:         busybox:1.34.0
    Image ID:
    Port:          <none>
    Host Port:     <none>
    Args:
      /bin/sh
      -c
      while true;do date;sleep 5; done
    State:          Waiting
      Reason:       ContainerCreating
    Ready:          False
    Restart Count:  0
    Environment:    <none>
    Mounts:
      /var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-crpln (ro)
    Devices:
      /dev/longhorn/longhorn-test-blk from longhorn-blk
Conditions:
  Type                        Status
  PodReadyToStartContainers   False
  Initialized                 True
  Ready                       False
  ContainersReady             False
  PodScheduled                True
Volumes:
  longhorn-blk:
    Type:       PersistentVolumeClaim (a reference to a PersistentVolumeClaim in the same namespace)
    ClaimName:  csi-block-volume-test-pvc
    ReadOnly:   false
  kube-api-access-crpln:
    Type:                    Projected (a volume that contains injected data from multiple sources)
    TokenExpirationSeconds:  3607
    ConfigMapName:           kube-root-ca.crt
    ConfigMapOptional:       <nil>
    DownwardAPI:             true
QoS Class:                   BestEffort
Node-Selectors:              <none>
Tolerations:                 node.kubernetes.io/not-ready:NoExecute op=Exists for 300s
                             node.kubernetes.io/unreachable:NoExecute op=Exists for 300s
Events:
  Type     Reason                  Age                   From                                   Message
  ----     ------                  ----                  ----                                   -------
  Normal   Scheduled               7m51s                 gke.io/optimize-utilization-scheduler  Successfully assigned default/csi-block-volume-test to gke-lh-gke-tests-rip-lh-gke-tests-rip-875ecc69-kdrc
  Normal   SuccessfulAttachVolume  7m40s                 attachdetach-controller                AttachVolume.Attach succeeded for volume "pvc-8d7ba226-3c52-4859-9295-36fe99fa8dbc"
  Warning  FailedMapVolume         62s (x11 over 7m38s)  kubelet                                MapVolume.SetUpDevice failed for volume "pvc-8d7ba226-3c52-4859-9295-36fe99fa8dbc" : rpc error: code = Internal desc = failed to encrypt device /dev/longhorn/pvc-8d7ba226-3c52-4859-9295-36fe99fa8dbc with LUKS: failed to execute: /usr/bin/nsenter [nsenter --mount=/host/proc/9340/ns/mnt --ipc=/host/proc/9340/ns/ipc cryptsetup -q luksFormat --type luks2 --cipher aes-xts-plain64 --hash sha256 --key-size 256 --pbkdf argon2i /dev/longhorn/pvc-8d7ba226-3c52-4859-9295-36fe99fa8dbc -d /dev/stdin], output , stderr Not compatible PBKDF options.
: exit status 1

To Reproduce
Run test case test_csi_encrypted_block_volume on GKE COS_CONTAINERD
Expected behavior

Support bundle for troubleshooting
supportbundle_91cfb0bd-f5fe-4872-bda7-339fbd09bb14_2024-12-24T03-39-42Z.zip
Environment

Longhorn version: master-head
Impacted volume (PV):
Installation method (e.g. Rancher Catalog App/Helm/Kubectl): kubectl
Kubernetes distro (e.g. RKE/K3s/EKS/OpenShift) and version: v1.31.1-gke.2105000

Number of control plane nodes in the cluster:
Number of worker nodes in the cluster:

Node config

OS type and version: cos-117-18613-0-92
Kernel version:
CPU per node:
Memory per node:
Disk type (e.g. SSD/NVMe/HDD):
Network bandwidth between the nodes (Gbps):

Underlying Infrastructure (e.g. on AWS/GCE, EKS/GKE, VMWare/KVM, Baremetal):
Number of Longhorn volumes in the cluster:

Additional context

Workaround and Mitigation

@yangchiu Does it happen in v1.7.2 and v1.6.3 as well?

@yangchiu Does it happen in v1.7.2 and v1.6.3 as well?

Yes.

best effort in v1.8.0

cc @mantissahz

I suspect this issue is due to the incompatible cryptesetup version.

Analyse (WIP):
> nsenter --mount=/host/proc/223034/ns/mnt --ipc=/host/proc/223034/ns/ipc cryptsetup -q luksFormat --type luks2 --cipher aes-cbc-essiv:sha256 --hash sha256 --key-size 256 --pbkdf argon2i --debug /dev/longhorn/pvc-f58ce135-cfc7-47f3-b9db-c07bb145999f
# cryptsetup 2.6.1 processing "cryptsetup -q luksFormat --type luks2 --cipher aes-cbc-essiv:sha256 --hash sha256 --key-size 256 --pbkdf argon2i --debug /dev/longhorn/pvc-f58ce135-cfc7-47f3-b9db-c07bb145999f"
# Verifying parameters for command luksFormat.
# Running command luksFormat.
# Installing SIGINT/SIGTERM handler.
# Unblocking interruption on signal.
# Allocating context for crypt device /dev/longhorn/pvc-f58ce135-cfc7-47f3-b9db-c07bb145999f.
# Trying to open and read device /dev/longhorn/pvc-f58ce135-cfc7-47f3-b9db-c07bb145999f with direct-io.
# Initialising device-mapper backend library.
# Interactive passphrase entry requested.
Enter passphrase for /dev/longhorn/pvc-f58ce135-cfc7-47f3-b9db-c07bb145999f:
# Crypto backend (OpenSSL 3.0.14 4 Jun 2024 [default][legacy]) initialized in cryptsetup library version 2.6.1.
# Detected kernel Linux 6.1.112+ x86_64.
# PBKDF argon2i, time_ms 2000 (iterations 0), max_memory_kb 1048576, parallel_threads 4.
# Formatting device /dev/longhorn/pvc-f58ce135-cfc7-47f3-b9db-c07bb145999f as type LUKS2.
# Auto-detected optimal encryption sector size for device /dev/longhorn/pvc-f58ce135-cfc7-47f3-b9db-c07bb145999f is 512 bytes.
# Topology: IO (512/0), offset = 0; Required alignment is 1048576 bytes.
# Checking if cipher aes-cbc-essiv:sha256 is usable.
# Using userspace crypto wrapper to access keyslot area.
# Formatting LUKS2 with JSON metadata area 12288 bytes and keyslots area 16744448 bytes.
# Creating new digest 0 (pbkdf2).
# Setting PBKDF2 type key digest 0.
# Running pbkdf2(sha256) benchmark.
# PBKDF benchmark: memory cost = 0, iterations = 1024000, threads = 0 (took 32 ms)
# PBKDF benchmark: memory cost = 0, iterations = 1081006, threads = 0 (took 485 ms)
# PBKDF benchmark: memory cost = 0, iterations = 1065626, threads = 0 (took 984 ms)
# Benchmark returns pbkdf2(sha256) 1065626 iterations, 0 memory, 0 threads (for 256-bits key).
# Segment 0 assigned to digest 0.
# Device size<PHONE_NUMBER>, offset 16777216.
# Wiping LUKS areas (0x000000 - 0x1000000) with zeroes.
# Wiping keyslots area (0x008000 - 0x1000000) with random data.
# Reusing open rw fd on device /dev/longhorn/pvc-f58ce135-cfc7-47f3-b9db-c07bb145999f
# Device size<PHONE_NUMBER>, offset 16777216.
# Acquiring write lock for device /dev/longhorn/pvc-f58ce135-cfc7-47f3-b9db-c07bb145999f.
# Opening lock resource file /run/cryptsetup/L_8:16
# Verifying lock handle for /dev/longhorn/pvc-f58ce135-cfc7-47f3-b9db-c07bb145999f.
# Device /dev/longhorn/pvc-f58ce135-cfc7-47f3-b9db-c07bb145999f WRITE lock taken.
# Trying to write LUKS2 header (16384 bytes) at offset 0.
# Reusing open rw fd on device /dev/longhorn/pvc-f58ce135-cfc7-47f3-b9db-c07bb145999f
# Checksum:b86e49236fc1c953f87dbff338bbb07e191f27adb56d81f73a7a4d957f04b3d2 (in-memory)
# Trying to write LUKS2 header (16384 bytes) at offset 16384.
# Reusing open rw fd on device /dev/longhorn/pvc-f58ce135-cfc7-47f3-b9db-c07bb145999f
# Checksum:25ebb0b4d8da49dffbe1b255b4d5a261d8892534606e1711d4fadce59f18a312 (in-memory)
# Device /dev/longhorn/pvc-f58ce135-cfc7-47f3-b9db-c07bb145999f WRITE lock released.
# Adding new keyslot -1 by passphrase, volume key provided by key (-1).
# Selected keyslot 0.
# Keyslot 0 assigned to digest 0.
# Trying to allocate LUKS2 keyslot 0.
# Found area 32768 -> 163840
# Running argon2i() benchmark.
Not compatible PBKDF options.
# Rolling back in-memory LUKS2 json metadata.
Existing 'crypto_LUKS' superblock signature on device /dev/longhorn/pvc-f58ce135-cfc7-47f3-b9db-c07bb145999f will be wiped.
Existing 'crypto_LUKS' superblock signature on device /dev/longhorn/pvc-f58ce135-cfc7-47f3-b9db-c07bb145999f will be wiped.
# Releasing crypt device /dev/longhorn/pvc-f58ce135-cfc7-47f3-b9db-c07bb145999f context.
# Releasing device-mapper backend.
# Closing read only fd for /dev/longhorn/pvc-f58ce135-cfc7-47f3-b9db-c07bb145999f.
# Closing read write fd for /dev/longhorn/pvc-f58ce135-cfc7-47f3-b9db-c07bb145999f.
Command failed with code -1 (wrong or missing parameters).

Seems to be failing at Running argon2i() benchmark.

Seems to be failing at Running argon2i() benchmark.

@mantissahz any ideas?

I don't think we can support argon2i and argon2id since they don't seem to be natively supported by COS_CONTAINERD. My proposal is to document this limitation and use pbkdf2 instead for COS_CONTAINERD.
What do you think @innobead @derekbit @mantissahz ?

I don't think we can support argon2i and argon2id since they don't seem to be natively supported by COS_CONTAINERD's cryptsetup. My proposal is to document this limitation and use pbkdf2 instead for COS_CONTAINERD.
What do you think @innobead @derekbit @mantissahz ?

I'm fine with the limitation.

Removing backport/1.6.5 label as COS is not supported in Longhorn versions before v1.7.0.

Verified pass on longhorn master(https://github.com/longhorn/longhorn-instance-manager/commit/e63b68bb6c0c8636fd009cab5c9b45ceb76dc1c7), v1.8.x(https://github.com/longhorn/longhorn-instance-manager/commit/418b59b6acc8e5d863169dc23f9ecd11762ed4b6)
Test case test_csi_encrypted_block_volume passed on GKE COS_CONTAINERD

master
v1.8.x


[WIP] Switch to using tox in the CI environment

Summary
This commit switches us to using tox to run tests in the CI environment.
This simplifies our CI environment by first enabling reproducing an
environment exactly like CI locally. The tox command run locally will do
the same thing as CI including setting up an isolated venv for testing.
As part of this the documentation is updated to show how to use tox
instead of the make test target.
Details and comments

I'm really looking forward to combining this with #1056 which will make our CI environment basically be a single command with a few env variables set, and we can greatly simplify the travis yaml

Labelling as on hold until after 0.7, as part of the CI discussion.


[material-ui][avatar] Add props deprecation with a codemod

Part of #40417

[x] I have followed (at least) the PR section of the contributing guide.

@DiegoAndai I adjust the migration doc format a bit to start with codemod because I think that's what the majority of users are looking for.

I adjust the migration doc format a bit to start with codemod because I think that's what the majority of users are looking for.

Thanks! can you rebase and do the same for the recently added Divider one?


Expose correlation details from host

Correlation details from host needs to be exposed as part of python function. This is already happening for node, java and powershell.
Bigger epic workitem: https://github.com/Azure/azure-functions-host/issues/3747
Related PR: https://github.com/Azure/azure-functions-python-worker/pull/554

Before we can do this, we need to import the new protobuf into Python.

Check with Yogesh for the unit tests and check in the code.

https://github.com/Azure/azure-functions-python-worker/pull/545 merged in

Kim Clark, from Alaska Airlines here, we've been waiting on this fix for python since September 2019.  Did it actually get implemented?  This issue points back to #545 which seems to say the PR for that code was cancelled due to test failures.  Is it actually implemented in a released version?  If not is it still planned to be?

@KimLClark yes this is done  and deployed. Please let us know if its not working for you.


⚠ Exoticaz has degraded performance

In 583b1bf, Exoticaz ($EZ) experienced degraded performance:

HTTP code: 200
Response time: 3776 ms

Resolved: Exoticaz performance has improved in 66fa622.


Write a test suite

Use JUnit

Maybe JUnit, but let's try TestFX. (There's another called Jemmy if need be.) Create tests for some known bugs.

Here's an article with a good example for TestFX: http://www.oraclejavamagazine-digital.com/javamagazine_twitter/20150910?pg=17#pg17

Tests are on the way. Doesn't need to be a bug of its own.


[2022.3.3] feat: set default maxTimeMS when creating an index; unhandled exc on setup() will exit kytosd

This is a backport from PR #414 to 2022.3.3.
Local tests
I simulated an upgrade from 2022.3.1 to master (future 2023.2), without running the DB scripts, and with two nodes down out of five (still has majority), same scenario that @italovalcy has reported, and it retried and eventually exited after 1m30 more or less (30 secs x 3 retries), notice that on console you can see the reason of the error  {'code': 50, 'codeName': 'MaxTimeMSExpired', 'errmsg ': 'operation exceeded time limit', 'errInfo': {'writeConcern': {'w': 'majority', 'wtimeout': 0, 'provenance': 'clientSupplied'}}} (it's a bit lower level-ish from our dependency pymongo but this was also part of intention, just so we don't hide these details if any future issue needs to be analyzed or fixed):
2023-09-26 15:42:11,176 - INFO [kytos.core.controller] (MainThread) Loading NApp kytos/flow_manager
2023-09-26 15:42:41,350 - WARNING [kytos.core.retry] (MainThread) Retry #1 for bootstrap_index, args: (<class 'kytos.core.db.Mongo'>, 'flows', [('flow.priority', -1)]), kwargs: {}, secon
ds since start: 30.04
2023-09-26 15:43:12,073 - WARNING [kytos.core.retry] (MainThread) Retry #2 for bootstrap_index, args: (<class 'kytos.core.db.Mongo'>, 'flows', [('flow.priority', -1)]), kwargs: {}, secon
ds since start: 60.76
Kytos couldn't start because of KytosNAppSetupException: NApp kytos/flow_manager exception operation exceeded time limit, full error: {'code': 50, 'codeName': 'MaxTimeMSExpired', 'errmsg
': 'operation exceeded time limit', 'errInfo': {'writeConcern': {'w': 'majority', 'wtimeout': 0, 'provenance': 'clientSupplied'}}}  Traceback (most recent call last):
  File "/home/viniarck/repos/kytos/kytos/core/controller.py", line 863, in load_napp
    napp = napp_module.Main(controller=self)
  File "/home/viniarck/repos/kytos/kytos/core/napps/base.py", line 194, in __init__
    self.setup()
  File "/home/viniarck/repos/napps/napps/kytos/flow_manager/main.py", line 88, in setup
    self.flow_controller.bootstrap_indexes()
  File "/home/viniarck/repos/kytos/.direnv/python-3.9/lib/python3.9/site-packages/tenacity/__init__.py", line 324, in wrapped_f
    return self(f, *args, **kw)
  File "/home/viniarck/repos/kytos/.direnv/python-3.9/lib/python3.9/site-packages/tenacity/__init__.py", line 404, in __call__
    do = self.iter(retry_state=retry_state)
  File "/home/viniarck/repos/kytos/.direnv/python-3.9/lib/python3.9/site-packages/tenacity/__init__.py", line 349, in iter
    return fut.result()
  File "/usr/lib/python3.9/concurrent/futures/_base.py", line 439, in result
    return self.__get_result()
  File "/usr/lib/python3.9/concurrent/futures/_base.py", line 391, in __get_result
    raise self._exception
  File "/home/viniarck/repos/kytos/.direnv/python-3.9/lib/python3.9/site-packages/tenacity/__init__.py", line 407, in __call__
    result = fn(*args, **kwargs)
  File "/home/viniarck/repos/kytos/kytos/core/retry.py", line 25, in decorated
    return func(*args, **kwargs)
  File "/home/viniarck/repos/napps/napps/kytos/flow_manager/controllers/__init__.py", line 73, in bootstrap_indexes
    if self.mongo.bootstrap_index(collection, keys, **kwargs):
  File "/home/viniarck/repos/kytos/.direnv/python-3.9/lib/python3.9/site-packages/tenacity/__init__.py", line 324, in wrapped_f
    return self(f, *args, **kw)
  File "/home/viniarck/repos/kytos/.direnv/python-3.9/lib/python3.9/site-packages/tenacity/__init__.py", line 404, in __call__
    do = self.iter(retry_state=retry_state)
  File "/home/viniarck/repos/kytos/.direnv/python-3.9/lib/python3.9/site-packages/tenacity/__init__.py", line 360, in iter
    raise retry_exc.reraise()
  File "/home/viniarck/repos/kytos/.direnv/python-3.9/lib/python3.9/site-packages/tenacity/__init__.py", line 193, in reraise
    raise self.last_attempt.result()
  File "/usr/lib/python3.9/concurrent/futures/_base.py", line 439, in result
    return self.__get_result()
  File "/usr/lib/python3.9/concurrent/futures/_base.py", line 391, in __get_result
    raise self._exception
  File "/home/viniarck/repos/kytos/.direnv/python-3.9/lib/python3.9/site-packages/tenacity/__init__.py", line 407, in __call__
    result = fn(*args, **kwargs)
  File "/home/viniarck/repos/kytos/kytos/core/db.py", line 126, in bootstrap_index
    return db[collection].create_index(keys, **kwargs)
  File "/home/viniarck/repos/kytos/.direnv/python-3.9/lib/python3.9/site-packages/pymongo/collection.py", line 2023, in create_index
    return self.__create_indexes([index], session, **cmd_options)[0]
  File "/home/viniarck/repos/kytos/.direnv/python-3.9/lib/python3.9/site-packages/pymongo/collection.py", line 1900, in __create_indexes
    self._command(
  File "/home/viniarck/repos/kytos/.direnv/python-3.9/lib/python3.9/site-packages/pymongo/collection.py", line 272, in _command
    return sock_info.command(
  File "/home/viniarck/repos/kytos/.direnv/python-3.9/lib/python3.9/site-packages/pymongo/pool.py", line 743, in command
    return command(
  File "/home/viniarck/repos/kytos/.direnv/python-3.9/lib/python3.9/site-packages/pymongo/network.py", line 160, in command
    helpers._check_command_response(
  File "/home/viniarck/repos/kytos/.direnv/python-3.9/lib/python3.9/site-packages/pymongo/helpers.py", line 137, in _check_command_response
    _raise_write_concern_error(_error)
  File "/home/viniarck/repos/kytos/.direnv/python-3.9/lib/python3.9/site-packages/pymongo/helpers.py", line 196, in _raise_write_concern_error
    raise WriteConcernError(error.get("errmsg"), error.get("code"), error)
pymongo.errors.WriteConcernError: operation exceeded time limit, full error: {'code': 50, 'codeName': 'MaxTimeMSExpired', 'errmsg': 'operation exceeded time limit', 'errInfo': {'writeCon
cern': {'w': 'majority', 'wtimeout': 0, 'provenance': 'clientSupplied'}}}

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/home/viniarck/repos/kytos/kytos/core/controller.py", line 265, in start
    self.start_controller()
  File "/home/viniarck/repos/kytos/kytos/core/controller.py", line 359, in start_controller
    self.load_napps()
  File "/home/viniarck/repos/kytos/kytos/core/controller.py", line 898, in load_napps
    self.load_napp(napp.username, napp.name)
  File "/home/viniarck/repos/kytos/kytos/core/controller.py", line 866, in load_napp
    raise KytosNAppSetupException(msg) from exc
kytos.core.exceptions.KytosNAppSetupException: KytosNAppSetupException: NApp kytos/flow_manager exception operation exceeded time limit, full error: {'code': 50, 'codeName': 'MaxTimeMSEx
pired', 'errmsg': 'operation exceeded time limit', 'errInfo': {'writeConcern': {'w': 'majority', 'wtimeout': 0, 'provenance': 'clientSupplied'}}}

2023-09-26 15:43:42,317 - ERROR [kytos.core.controller] (MainThread) 1
2023-09-26 15:43:42,317 - INFO [kytos.core.controller] (MainThread) Shutting down Kytos...
Task was destroyed but it is pending!
task: <Task pending name='Task-1' coro=<start_shell_async() running at /home/viniarck/repos/kytos/kytos/core/kytosd.py:120>>
sys:1: RuntimeWarning: coroutine 'start_shell_async' was never awaited
RuntimeWarning: Enable tracemalloc to get the object allocation traceback

~/repos/kytos feat/load_napps_or_shutdown*  1m 32s
❯

btw, thanks @italovalcy, the reproduction steps of the original issue were super helpful.


Fix broken tag in CSharp-SQL template README

Repoman Generation Results
Repoman pushed changes to remotes for the following projects:
Project: todo-csharp-sql
Remote: azure-samples-staging
Branch: pr/649
You can initialize this project with:
azd init -t Azure-Samples/todo-csharp-sql -b pr/649

View Changes | Compare Changes


Missing dependency: ayatana-appindicator3-0.1

I got the following while building on my machine:
# pkg-config --cflags  -- ayatana-appindicator3-0.1
Package ayatana-appindicator3-0.1 was not found in the pkg-config search path.
Perhaps you should add the directory containing `ayatana-appindicator3-0.1.pc'
to the PKG_CONFIG_PATH environment variable
Package 'ayatana-appindicator3-0.1', required by 'virtual:world', not found
pkg-config: exit status 1

Made it work installing the following package on Arch:
sudo pacman -Sy libayatana-appindicator

There where multiple related packages so I needed to check the packages file lists to figure the right one. Pehaps there should be a "dependencies" doc section?

Hi,
Thanks for raising this, I had needed to grab that dependency myself but must have forgotten to put it in the README.
Also just for reference - extra dependencies can be checked in the CI pipelines file, but I will try and ensure the README lists them all!


Make serverMiddleware available when generating static pages

What problem does this feature solve?
Some server side data APIs are provided as serverMiddleware. These middleware can be accessed both on client side and also on server side in asyncData when either running nuxt start or nuxt dev. This is a quite convenient way to access data needed for pages in asyncData.
Unfortunately none of the serverMiddleware seems to be working during static generation when running nuxt generate.
If the serverMiddleware were accessible during static file generation:

The page's asyncData could have access to the initial data. There was no need for providing payload in the generate method in nuxt.config.js.
With some logic in the serverMiddleware we could "record" the response to the dist folder in json files for the static files to access them (when no server is available)

I think currently the serverMiddleware are not used by design but I don't know the code enough to know why it is that way.
My current mitigation: start an API server on a different port in the nuxt.config.js. This works but feels unnecessary.
What does the proposed changes look like?
The middleware in serverMiddleware are accessible during static generation.

This feature request is available on Nuxt community (#c9978)

The PR #6159 should also enable to have access to the serverMiddleware when using nuxt generate :)


First couple pages of edits

(I think I'm pulling over a couple of files that you moved. I'm sorry. )
Some notes and questions:
Home page
Nerdpack or application? We seem to use these terms interchangeably.
Note that I have not yet edited the process section.
Add a Nerdpack

New Relic style is sentence case headings - I changed them, because it didn’t seem to impact the navigation.
Nerdpack approver - I was unclear if this is someone on the open source team (Joel, Melissa, etc) or does this refer to the person submitting the Nerdpack. And if it’s someone on the nr1-catalog maintainer team team, how does the submitter find out who this is?
General note: checklist has a lot in it, and maybe that’s overwhelming. Making these into tables might make them more readable than detailed checklists. Another option - everything on the list doesn’t have to be a check box. Some items are descriptions to support the action a user would check off. Like the screenshot subsection, which I made a list.

More to come.

 Thank you for your submission! We really appreciate it. Like many open source projects, we ask that you sign our Contributor License Agreement before we can accept your contribution.You have signed the CLA already but the status is still pending? Let us recheck it.


Re-add support for Robots.txt

This will come from the new "RobotsExclusionTools" repo

Added in 7e7a7f6399e3cfa5fefe2262b9d065a9c0c93509


[Flagfit]: The "new-awesome-permission-feature" flag will expire soon.

Warning
The @FlagType.Permission owner: momomomo111 will expire soon!
Please consider deleting @FlagType.Permission as the expiry date of 2023-06-20 is scheduled to pass within a week.The flag of key: "new-awesome-permission-feature" is used in the awesomePermissionFeatureEnabled function.

https://github.com/abema/workflow-test-flagfit/blob/b9094b1a906c362c505d98fbb2f2002ad6d4c165/sample-android/src/main/java/tv/abema/fragfit/SampleFlagService.kt#L48-L57

Warning
The @FlagType.Permission created by owner: momomomo111 has expired!
Please consider deleting @FlagType.Permission as the expiration date has passed on 2023-06-10.
The flag of key: "new-awesome-permission-feature" is used in the awesomePermissionFeatureEnabled function.

test


Support for Java and Eclipse

Any plans for supporting Java and a plugin for Eclipse?

We already support java through our existing supported interfaces in Visual Studio, VS Code and the Command line tool.


Session.open_tab() in notebooks and remote warning

Resolves #1102
Allows notebooks sessions to open a tab, and changes pure remote sessions to warn (can revert, but I'm thinking this is more friendly). Comments/changes in the language are welcome.
Tested in Colab.

I followed your lead and converted a couple other errors to warnings.


Want a logo?

Definitely!

Here with a proper color scheme

Will PR with SVG to the repo this afternoon.


Make the status view better

Currently the status view has the following bugs:

Number are shown to infinite precision
String states cannot be shown

Also it would be nice to offer some more visualizations for the status, like gauges, etc.

Have a "precision" setting to configure how many significant figures to show before truncating
Show a max and min values
Make the number centered & larger


Exit 0 when under teamcity and tests fail

Allows vagrant integration tests to have tests muted.

https://teamcity.mesosphere.io/viewLog.html?buildId=356806&buildTypeId=DcosIo_Dcos_VagrantIntegrationTests_ProvisioningTestGenconfBashPr&guest=1 -- the muting worked.

Slight chance the vagrant ssh would fail for reasons not related to the integration test run, but I think that's a reasonable gap for now.

:ship:


ClearChunkCommand and ClearOrphansCommand changes to remove deprecations in Symfony 6.1

Hi,
Would it be possible to change $defaultName property usage (overriding) in commands (ClearChunkCommand and ClearOrphansCommand) to attribute? Is this planned for future release?
I've upgraded my project to Symfony 6 and it shows now:
The "Symfony\Component\Console\Command\Command::$defaultName" property is considered final. You should not override it in "Oneup\UploaderBundle\Command\ClearChunkCommand".
The "Symfony\Component\Console\Command\Command::$defaultName" property is considered final. You should not override it in "Oneup\UploaderBundle\Command\ClearOrphansCommand".
Eg. in src/Command/ClearChunkCOmmand.php
+use Symfony\Component\Console\Attribute\AsCommand;
+#[AsCommand(name: 'oneup:uploader:clear-chunks', description: 'Clear chunks according to the max-age you defined in your configuration.')]
class ClearChunkCommand extends Command
{
-    protected static $defaultName = 'oneup:uploader:clear-chunks'; // Make command lazy load

    /**
     * @var ChunkManager
     */
    private $manager;

    public function __construct(ChunkManager $manager)
    {
        $this->manager = $manager;

        parent::__construct();
    }

-    protected function configure(): void
-    {
-        $this
-           ->setDescription('Clear chunks according to the max-age you defined in your configuration.')
-        ;
-    }

How to reproduce:
Compile project using OneupUploaderBundle in Symfony 6.1.3
|-------- | ------
| Version     | 4.0.1
|Symfony|6.1.3

Is this shown as an error (script execution fails) or just a (deprecation) notice?

Sorry for delay. It is just deprecation notice at the moment.

Good day,
please see: #434

Fixed in #436


[iot-edge] Add registry authentication step and fix parameter typo

It came to the attention of the IoT Edge team that our documentation on private registry use for runtime containers did not contain a step for private registry authentication in the setup instructions.  Add a setup step for registry authentication.
Cf. https://github.com/Azure/iotedge/issues/6823

Learn Build status updates of commit 6c88364:
:white_check_mark: Validation status: passed

File
Status
Preview URL
Details

articles/iot-edge/production-checklist.md
:white_check_mark:Succeeded

For more details, please refer to the build report.
Note: Broken links written as relative paths are included in the above build report. For broken links written as absolute paths or external URLs, see the broken link report.
For any questions, please:Try searching the learn.microsoft.com contributor guidesPost your question in the Learn support channel

Learn Build status updates of commit 6df7b18:
:white_check_mark: Validation status: passed

File
Status
Preview URL
Details

articles/iot-edge/production-checklist.md
:white_check_mark:Succeeded

For more details, please refer to the build report.
Note: Broken links written as relative paths are included in the above build report. For broken links written as absolute paths or external URLs, see the broken link report.
For any questions, please:Try searching the learn.microsoft.com contributor guidesPost your question in the Learn support channel

Learn Build status updates of commit 9a50042:
:white_check_mark: Validation status: passed

File
Status
Preview URL
Details

articles/iot-edge/production-checklist.md
:white_check_mark:Succeeded

For more details, please refer to the build report.
Note: Broken links written as relative paths are included in the above build report. For broken links written as absolute paths or external URLs, see the broken link report.
For any questions, please:Try searching the learn.microsoft.com contributor guidesPost your question in the Learn support channel

@PatAltimore,
Can you review the proposed changes?
IMPORTANT: When the changes are ready for publication, add a #sign-off comment to signal that the PR is ready for the review team to merge.
#label:"aq-pr-triaged"
@MicrosoftDocs/public-repo-pr-review-team

#sign-off