Not updating and charging data

Not updating and charging data

Playnite 10.33
SS 3.1.7

07-06 20:17:11.408|INFO |SuccessStory#PluginDatabaseObject`4:RefreshNoLoader(Disco Elysium - a23f073a-3506-4ef2-ae91-78ad9125bdca)
07-06 20:17:11.410|INFO |SuccessStory#PluginDatabaseObject`4:RefreshManual(Disco Elysium - a23f073a-3506-4ef2-ae91-78ad9125bdca)
07-06 20:17:17.678|WARN |SuccessStory#TrueAchievements:No url for GetEstimateTimeToUnlock()

Can you try with the last release?

Can you try with the last release?

It tested on Epic and Steam and it worked well, amazing.
Thank you


User highmem 2-core jobs for picard

Tested resource allocation, but haven't run an actual job to completion.
Hail would provide 14G mem for 2 cores jobs, hope it should be enough!

I'll run a test and then add then work on haplotype caller and others


Super keyword

I have some coffeescript 1.7 code that uses the super keyword.  After upgrading from coffeelint 1.16.0 to 2.0.6, it is getting flagged for indentation problems:
  ✗ app/assets/javascripts/activities/seq_module.js.coffee
     ✗ #789: [stdin]:789:9: error: unexpected indentation
    super
        ^.

Here is a unit test:
    'Make sure bare super keyword is fine':
        topic:
            '''
            newMethod: ->
              super
            '''

        'returns no errors': (source) ->
            config =
                indentation:
                    level: 'error'
                    value: 2
            errors = coffeelint.lint(source)
            assert.isEmpty(errors)

coffeelint 2.0 is for coffeescript 2.0
This is not a coffeelint issue; [stdin] means compiling it caused an error.
Also in CS2 you can no longer call super bare without paren.
http://coffeescript.org/#try:newMethod%3A ->
  super

Due to a syntax clash with super with accessors, "bare" super (the keyword super without parentheses) no longer compiles to a super call forwarding all arguments.

Ok, good to know.  I wondered if it was the case that coffeelint is expecting coffeescript 2.0 code.    Thanks for this explanation.

Coffeelint does the right thing with well-formed coffee code:
'Make sure bare super keyword is fine':
    topic:
        '''
        class NewClass
          newMethod: ->
            super()
        '''

    'returns no errors': (source) ->
        config =
            indentation:
                level: 'error'
                value: 2
        errors = coffeelint.lint(source)
        assert.isEmpty(errors)

There's no longer a compiler error nor a coffeelint error.
 $ npm test
  Make sure bare super keyword is fine
    ✓ returns no errors

Thanks for coffeelint!


VAE and single-shot transfer for faster VFL training

Purpose
Showcase possible utilization of Variational Autoencoders for faster VFL trainings requiring less communication.
BASE CASE RUN: https://ml.azure.com/runs/coral_shelf_v4vn595mh4?wsid=/subscriptions/48bbc269-ce89-4f6f-9a12-c6f91fcb772d/resourcegroups/vertical-fl-sandbox-rg/workspaces/aml-vfl&tid=72f988bf-86f1-41af-91ab-2d7cd011db47#
VAE RUN: https://ml.azure.com/runs/willing_insect_wds2jjk1m1?wsid=/subscriptions/48bbc269-ce89-4f6f-9a12-c6f91fcb772d/resourcegroups/vertical-fl-sandbox-rg/workspaces/aml-vfl&tid=72f988bf-86f1-41af-91ab-2d7cd011db47#
What is the expected review turnaround time?

Urgency:

[ ] High (needs review today)
[X] Medium (needs review within a few days - most common)
[ ] Low (can wait a week)

Does this introduce a breaking change?

[X] Yes
[ ] No

Pull Request Type
What kind of change does this Pull Request introduce?

[ ] Bugfix
[X] Feature
[ ] Code style update (formatting, local variables)
[ ] Refactoring (no functional changes, no api changes)
[ ] Documentation content changes
[ ] Other... Please describe:

It's worth considering adding a new parameter “pre-train”(maybe) to the training script itself instead of having a new pretraining component, which would significantly reduce code duplication. As discussed, the major difference would be a model, data loader, and a training loop (coz of the communication layer) which can be easily implemented by introducing either a new method or a new class in the contributor.py file. Let's wait for others' opinions.

Thank you very much for invaluable input @garg-amit. I have considered this approach when originally developing the solution, however, let me state the reason why I have chosen the way it is written.
First and foremost, I like the distinction between the components in the pipeline. If we want to have an idiomatic solution that user easily understand it is probably preferable to avoid creating components that do everything. The main point of this repository is educational and not production solution that has steep understanding and learning curve.
Other than that, the pretraining component has following differences when compared to the training component:

Different inputs/output (here I would like to stress around additional output for embeddings which could be misleading in default case)
Different dataloader/sampler because pretraining does not require alignment across the samples
No communication layer because pretraining is completely independent of samples on other nodes and can utilize non-overlapping samples
Different model due to the nature of the problem. Regular VFL requires classifier whereas pretraining requires architecture aimed for unsupervised learning.
Different training loop due to the absence of communication layer/overhead and if we would merge both components into one, we would have either two training files, which would increase complexity of the solution, or have two different functions for training, which would make it inconsistent in regard to other samples.

Looking at it, please consider me as required before merging.

I've filed an issue #328 that I'd like you to implement first, in order to see more clearly each of the VFL samples. I believe VAE could be a distinct concept within the vertical-fl page, and a distinct tutorial maybe (TBD).

Looking at it, please consider me as required before merging.
Could you provide a link to a paper referencing this approach? I'd like to understand how canonical this approach is.

https://arxiv.org/pdf/2208.10278.pdf


NIFI-2339 Removed some outputs which could cause errors to reveal unauthorized data

Reviewing...

@joewitt I'm still seeing a bunch of details in error messages coming back to the client. Specifically what I'm seeing right now, it looks like StandardProcessGroup is using the toString of it's encapsulated components when generating exception message. We should ensure these toString's don't include those details.
You should be able to see examples of some of these by issuing requests that are invalid. Like deleting a component that has an incoming connection, deleting a group in an invalid state (when data is enqueued in an encapsulated connection), etc.


whitespace trim on group creation

Whitespace at the end of the group name creates a lookup problem
e.g.
"name":"NCSU Europe "}

andrew, can you assign this to me?

@dawenx I can't actually. Let me see what I can do.

I went ahead to fix it and submitted a pull request.

@maovt would you test on alpha and close this ticket?

tested on alpha and worked.


chore: auto-read manager endpoint in tests

Fixes RVT-4319

[!WARNING]
This pull request is not mergeable via GitHub because a downstack PR is open. Once all requirements are satisfied, merge this PR as a stack on Graphite.
Learn more

#1542  👈 (View in Graphite)
#1541
#1539
#1535 : 1 other dependent PR (#1538 )
main

This stack of pull requests is managed by Graphite. Learn more about stacking.


refactor: reduce distance btw the language and dropdown arrow

Match it with live, pls, it's a bit disconnected on test. This vid shows the disparity, I'm swapping browser tabs to highlight it.
https://github.com/streetlives/streetlives_v2/assets/13530245/144bf3c6-a034-4f2b-b57f-17314ca94425

@jbeard4 not done


chore: remove hurl-based "integration tests"

They do not bring any value whatsoever and test [soon-to-be] deprecated code.

Readme needs to be updated because there is an example in Getting Started section, that uses hurl etc/rpc/starknet_getStateRoot.hurl. TODO (in future):
* I think that this kind of simple example was nice in Readme, but for now we can be without it

* When the new api is going to be introduced from experimental, it should be mandatory to write a similar simple example in Readme that uses and shows new api's functionality

Done, now the getStateRoot example call is defined in README without hurl.


[roaring] Add new port

Fix https://github.com/RoaringBitmap/CRoaring/issues/135
Test project: https://github.com/myd7349/Ongoing-Study/tree/master/cpp/CMake/vcpkg/roaring_bitmaps_tests
Tested with:

x86-windows
x86-windows-static
x64-windows
x64-windows-static
x64-linux

@myd7349 I am just waiting on you to finish your "TODO" tests before merging.

@Rastaban Thanks for your reply. I have tested with a real project.

OK! There is no problem with this PR now.


Use zod schema inference to add types to callback

Thank you for your contribution @esemeniuc but the examples in the Readme are in plain JS (no TS)

I see, can we maybe add a comment for typescript users?

We already have a similar example here: https://react-hook-form.com/api/useform/#validationResolver
Scroll down a bit and select Zod instance and then TS.

Ah I did not see that page. Perhaps could you link the example from https://react-hook-form.com/get-started/#schemavalidation?

Sure! Do you want to add it at the top of the readme?

Slightly off-topic, but as someone new to TypeScript, Zod and RHF, what additional benefit does the type hint in the PR provide?
I've done a basic form prior with TS where the onSubmit method needed typing for the event otherwise it'd complain, but as that doesn't happen with the current Zod resolver example lacking the typing this PR adds, I'm curious what it helps with (register, handleSubmit, formState.errors?).
EDIT: I noticed it gave type hints to the string register() values and errors, which is useful.

I know that like with my basic form I still need to provide the type if the method isn't inlined, but the useForm<type> in this PR doesn't make a difference there:
const handleData = (d: z.infer<typeof schema>) => console.log(d)
// ...
<form onSubmit={handleSubmit(handleData)}>

Regarding the two links, I did come across the get-started one, but wasn't aware of the separate resolvers package until I saw a dev.to blogpost about it when looking into validation. I get that it's imported as a separate package in the example, no issue there.
I would have appreciated the other mentioned validators having their examples from the main docs on that get-started page though. I followed the docs link mentioned in this thread, but found it very noisy and a bit difficult to know what I was looking at.
The resolvers heading with typing to the right blended in the surrounding text above and below, both on light/dark themes, it didn't stand out as a heading and the examples required scrolling down further. On my browser, opening the link to a new tab had shouldUseNativeValidation heading near the top, few other lines preceding it.
Looking for something relevant I first noticed the "Rules" which was larger and in bold, and further down the actual examples being discussed. Most users would perhaps be visiting that docs link for the example snippets (I looked for this repo and saw examples on the README prior to knowing of the official docs examples), get-started would probably provide better UX. The heading is clear, and the examples snippets easily nearby to jump straight to.

@polarathene to get your handleData type-safe you can do the following:
const handleData = handleSubmit((d) => console.log(d));

return (<form onSubmit={handleData}>)

Closing in favor of https://github.com/react-hook-form/resolvers/pull/184


Update min PHP testing version from PHP 7.4 to 8.1

PHP 7.4 and 8.0 have been EOL https://www.php.net/supported-versions.php
See go/drop-php-8.0 for more details

Most of the changes came from generate_projects.sh after updating the tools/buildgen/plugins/expand_version.py file. The change to tools/internal_ci/helper_scripts/prepare_build_macos_rc is manual.

"Basic Tests PHP MacOS" failed. Looks like a phpunit version mismatch. Looks like there are more to be done here...

Ok "Basic Tests PHP MacOS" now passed. Cautiously optimistic...


Script editor graphic rendering problem

Description
While working on a script, clicking bottom two lines breaks the render and I saw below screen:

DBeaver Version
Community Edition   <IP_ADDRESS>401072024
Operating System
macOS Sonoma
Database and driver
PostgreSQL JDBC Driver
Steps to reproduce

Open new script editor
Copy paste a query
Indent as shown in the screen shot
Go to the bottom line
Screen distorts

Additional context
No response

Thank you for bug report. It's a duplicate of #22299, so I'm closing this issue.
You can vote for the mentioned issue with 👍 under the issue description to promote it to a higher priority.


Update IPFS [WIP]

This PR attempts to update the software with the latest version of IPFS. Unfortunately this version of IPFS introduced some breaking changes, and the way files are retrieved needs to be refactored.
This is a work in progress.

Closing this PR as Daniel's PR #9 replaces this PR.


query.filter_by not returning correct type of record - is this a bug?

Discussed in https://github.com/pallets-eco/flask-sqlalchemy/discussions/1354

Originally posted by scath999 June 30, 2024
I have a child model than inherits from a parent.
I want to access a relationship that exists on the child (in this example, "extras"), which is not on the parent.
When I query and find the child, the ORM returns the object as the parent type, making it impossible for me to access the relationship.
This is not happening when I use the terminal.
I'm unsure if this is an issue with my code, flask_sqlalchemy, or sqlalchemy. Guidance is welcome.
Example
class Parent (db.Model):
    id              = db.Column(db.Integer, primary_key=True, unique=True,)
    first_name      = db.Column(db.String(20))
    last_name       = db.Column(db.String(20))

class Child (Parent):
    __tablename__ = "child"
    __mapper_args__ = {"polymorphic_identity": "child"}

    id          = db.Column(db.Integer, db.ForeignKey("Parent.id"), primary_key=True)
    extras      = db.relationship('Extra', backref='Child', lazy=True)

class Extra(db.Model):
    id           = db.Column(db.Integer, unique=True, primary_key=True)
    child_id     = db.Column(db.Integer, db.ForeignKey("Child.id"), nullable=False)
    text_of_extra = db.Column(db.String, nullable=False)

A simplified extract of my code looks roughly like:
the_child = Child.query.filter_by(id=child_id).first() # Simplified query demonstrating the point

print(f"child[ {the_child.id} ] has extras: {the_child.extras}")

The result is puzzling:
AttributeError: 'Parent' object has no attribute 'extras'
Note that the object reported is 'Parent' despite the query being made explicitly on 'Child'.
However, from the CLI
>>> with app.app_context():
 ...                 the_child = Child.query.filter_by(id=child_id).first()
 ...
 >>> the_child
<Child 001>
>>> the_child.extras
<sqlalchemy.orm.dynamic.AppenderQuery object at 0x000002649705F460>

@davidism Can you help me understand your rationale for closing this without comment?

My guess would be the lack of a self-contained snippet to reproduce this. Especially for more obscure issues like this one, it's good to have a small file that can be simply executed via python whatever.py to demonstrate the problem.
And preparing this also ensures that it's not something else in your code doing it.

Also it's a question about your own code, and you already have an open post about it.

Ok. I initially opened this as a discussion question and left it up for four days; no-one seemed interested in answering.
I then converted it to a ticket to create more visibility - which worked, you saw it - only to have you silently close it.
I understand this isn't your day job - the project this pertains to for me isn't mine either - but you don't have 100+ open tickets that you need to triage.
If you're just too busy, perhaps getting some volunteers to peek in on the discussion area and point people in the right direction would be helpful?
Thanks for your time, I guess.

If you add a snippet to reproduce it that confirms it's a problem on our side, we'll gladly reopen this. :)
Please note that this is also more scalable: If everyone posts a non-executable example of something that doesn't work, then it's O(n) on our side to turn it into something we can actually test, see if it we can reproduce the issue, etc.
OTOH, if everyone does that before reporting a problem, then it means that:

It's (usually) already clear that it's NOT a problem with your code or something weird you're doing there (we don't know your code besides what you posted)
We can now immediately take that snippet, run it, and most likely figure out what's wrong - in less time that it'd have taken us to create the snippet to reproduce it.

@ThiefMaster I hear ya, and I've been there; I can see your side. I was trying to save everyone some trouble.
Ideally, something like "Hey, we're not sure where this is going wrong - create a full ticket and we'll take a look" or "We've seen that before, it's an upstream issue. Create a ticket with that project" would have been the response to my discussion question. You've sort-of done that here, so I'll post a full code snippet when I have a chance.
Thanks again.


TagBot trigger issue

This issue is used to trigger TagBot; feel free to unsubscribe.
If you haven't already, you should update your TagBot.yml to include issue comment triggers.
Please see this post on Discourse for instructions and more details.
If you'd like for me to do this for you, comment TagBot fix on this issue.
I'll open a PR within a few hours, please be patient!

Triggering TagBot for merged registry pull request: https://github.com/JuliaRegistries/General/pull/80204

Triggering TagBot for merged registry pull request
This extra notification is being sent because I expected a tag to exist by now, but it doesn't.
You may want to check your TagBot configuration to ensure that it's running, and if it is, check the logs to make sure that there are no errors.

Triggering TagBot for merged registry pull request
This extra notification is being sent because I expected a tag to exist by now, but it doesn't.
You may want to check your TagBot configuration to ensure that it's running, and if it is, check the logs to make sure that there are no errors.

Triggering TagBot for merged registry pull request
This extra notification is being sent because I expected a tag to exist by now, but it doesn't.
You may want to check your TagBot configuration to ensure that it's running, and if it is, check the logs to make sure that there are no errors.

Triggering TagBot for merged registry pull request
This extra notification is being sent because I expected a tag to exist by now, but it doesn't.
You may want to check your TagBot configuration to ensure that it's running, and if it is, check the logs to make sure that there are no errors.

Triggering TagBot for merged registry pull request: https://github.com/JuliaRegistries/General/pull/80579

Triggering TagBot for merged registry pull request: https://github.com/JuliaRegistries/General/pull/100651


Fix issues surfaced by the release verification pipeline

Greenkeep dependencies.
Fix rollup issues.
Fix extraneous token registration in tests.

Fixes #59

!merge


Add controller to enable metrics/alerts for argocd instances

Adds a new controller to watch for the creation of ArgoCD instances and to add the configuration to enable the built-in metrics stack to scrape metrics from the new ArgoCD.  Also adds an alert rule to report ArgoCD applications that are out of sync.
How to test by running the operator locally
Login to an openshift cluster from the command line
Download the operator-sdk binary from here: https://github.com/operator-framework/operator-sdk/releases/tag/v0.17.2
Check out the argocd-metrics branch from https://github.com/jopit/gitops-operator
cd gitops-operator
go mod vendor
kubectl apply -f deploy/crds
operator-sdk run --local --watch-namespace ""
Create a new argocd application in the openshift-gitops namespace with auto-sync turned off, do not sync the app.  It may take several minutes (I've seen it take over five minutes) but eventually an alert should show up on the overview page in the openshift admin console.

You can also go to the Monitoring>Metrics page in the admin console and enter a PromQL query, for example sum(argocd_app_info{dest_namespace=~"default",health_status!=""}) by (sync_status)
Testing note by Shoubhik
Please validate that deleting up an ArgoCD instance also removes all associated rolebindings/roles and monitoring objects that were created.
Resources to be automatically deleted
Where %s is the name of the namespace the argocd instance was installed into

Kind
Name

Role
%s-read

RoleBinding
%s-prometheus-k8s-read-binding

ServiceMonitor
%s

ServiceMonitor
%s-server

ServiceMonitor
%s-repo-server

PrometheusRule
gitops-operator-argocd-alerts.

@wtam2018 @bigkevmcd Could you also please take a look at this PR?

/ok-to-test
@jopit added to org.

@jopit Can you please provide the steps for how to verify the changes

@jopit I have added unit test target in OpenShift CI via pr https://github.com/redhat-developer/gitops-operator/pull/55. Can you please rebase.

@sbose78 @wtam2018 @amitkrout I believe I've addressed all of the review comments, could you all please take another look at this PR?

@jopit added a testing note for QE / @dewan-ahmed @amitkrout
Could you list the resources created that one should expect to be gone when an ArgoCD is removed ?

/lgtm
/approve

@sbose78 @dewan-ahmed @amitkrout I've added the list of  resources that should be deleted when an argocd instance is deleted to the initial comment of this PR.

Successfully validated following the instructions in the PR. attached screenshot and logs for reference.
cc: @amitkrout

dewanahmed@dahmed-mac gitops-operator % oc get argocd -n openshift-gitops
NAME             AGE
argocd-cluster   13m
dewanahmed@dahmed-mac gitops-operator % oc get clusterrole openshift-gitops-read
Error from server (NotFound): clusterroles.rbac.authorization.k8s.io "openshift-gitops-read" not found
dewanahmed@dahmed-mac gitops-operator % oc get role openshift-gitops-read
Error from server (NotFound): roles.rbac.authorization.k8s.io "openshift-gitops-read" not found
dewanahmed@dahmed-mac gitops-operator % oc get role openshift-gitops-read -n openshift-gitops
NAME                    CREATED AT
openshift-gitops-read   2021-02-23T18:27:38Z
dewanahmed@dahmed-mac gitops-operator % oc get rolebinding openshift-gitops-prometheus-k8s-read-binding -n openshift-gitops
NAME                                           ROLE                         AGE
openshift-gitops-prometheus-k8s-read-binding   Role/openshift-gitops-read   17m
dewanahmed@dahmed-mac gitops-operator % oc get servicemonitor openshift-gitops
Error from server (NotFound): servicemonitors.monitoring.coreos.com "openshift-gitops" not found
dewanahmed@dahmed-mac gitops-operator % oc get servicemonitor openshift-gitops -n openshift-gitops
Error from server (NotFound): servicemonitors.monitoring.coreos.com "openshift-gitops" not found
dewanahmed@dahmed-mac gitops-operator % oc get servicemonitor openshift-gitops-server -n openshift-gitops
Error from server (NotFound): servicemonitors.monitoring.coreos.com "openshift-gitops-server" not found
dewanahmed@dahmed-mac gitops-operator % oc get PrometheusRule gitops-operator-argocd-alerts
Error from server (NotFound): prometheusrules.monitoring.coreos.com "gitops-operator-argocd-alerts" not found
dewanahmed@dahmed-mac gitops-operator % oc get PrometheusRule gitops-operator-argocd-alerts -n openshift-gitops
NAME                            AGE
gitops-operator-argocd-alerts   20m
dewanahmed@dahmed-mac gitops-operator % oc get servicemonitor
No resources found in default namespace.
dewanahmed@dahmed-mac gitops-operator % oc get servicemonitor -n openshift-gitops
NAME                         AGE
argocd-cluster               22m
argocd-cluster-repo-server   22m
argocd-cluster-server        22m
dewanahmed@dahmed-mac gitops-operator % oc get argocd
No resources found in default namespace.
dewanahmed@dahmed-mac gitops-operator % oc get argocd -n openshift-gitops
NAME             AGE
argocd-cluster   25m
dewanahmed@dahmed-mac gitops-operator % oc delete argocd -n openshift-gitops
error: resource(s) were provided, but no name, label selector, or --all flag specified
dewanahmed@dahmed-mac gitops-operator % oc delete argocd argocd-cluster -n openshift-gitops
argocd.argoproj.io "argocd-cluster" deleted
dewanahmed@dahmed-mac gitops-operator % oc get servicemonitor -n openshift-gitops
No resources found in openshift-gitops namespace.
dewanahmed@dahmed-mac gitops-operator % oc get PrometheusRule gitops-operator-argocd-alerts -n openshift-gitops
Error from server (NotFound): prometheusrules.monitoring.coreos.com "gitops-operator-argocd-alerts" not found
dewanahmed@dahmed-mac gitops-operator % oc get rolebinding openshift-gitops-prometheus-k8s-read-binding -n openshift-gitops
Error from server (NotFound): rolebindings.rbac.authorization.k8s.io "openshift-gitops-prometheus-k8s-read-binding" not found
dewanahmed@dahmed-mac gitops-operator % oc get role openshift-gitops-read -n openshift-gitopsError from server (NotFound): roles.rbac.authorization.k8s.io "openshift-gitops-read" not found


Add additional resources to Java

Testing plan:
GIFs or screenshots:

Closing as I don't think this clearly improves the documentation.


ps4KernelCall magic breaks

The (cool) macro logic seems to break the linker somehow. If you have not used ps4KernelExecute anywhere, it does not know that the lib should be included. Need to see if we need to change the function or can fix the pre-processor. ... Ah the pre-processor ...

Resolved by using plain old asm instead of c11 preprocessor magic. For now, that's ok.


AssumeRole DurationSeconds can now be up to 12 hours

According to AWS's documentation, sts:AssumeRole can return credentials that are valid up to 12 hours, so... this utility should support that behvaior: https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRole.html#API_AssumeRole_RequestParameters
Filing this in part to remind myself to submit a PR for it later.

I just created a PR for something unrelated, but needed to up the value to test, so I included this as part of #44. Please modify or comment if something needs to be changed.

Merged, thanks!


Feature/new drinking fields in export

Thanks dude
On 8 Feb 2016 21:32, "Eddie Jaoude"<EMAIL_ADDRESS>wrote:

Merged #113 https://github.com/TransformCore/HayPersistenceApi/pull/113.
—
Reply to this email directly or view it on GitHub
https://github.com/TransformCore/HayPersistenceApi/pull/113#event-543480610
.


Update docker description

Move the old environment variable to appendix
List some of examples for using a more generic way of setting environment variables

Done & close the issue.


change org.links default to empty hash

Fixes # .
bug encountered during setting up dev env.
Changes proposed in this PR:

change default for orgs.links from empty array to empty hash

closing as it will be dealt with in the migrations of PR #1273


No cache refactor

Use regex to validate urls

Coverage increased (+0.04%) to 56.382% when pulling a20b506e1e139d085a38a351e9fdacd329f93a16 on no-cache-refactor into 55da591f11e39f6886b07e37731d09d250493420 on master.

Coverage increased (+0.08%) to 56.422% when pulling 2cb6899077b019dc776e988f7459c69df4477553 on no-cache-refactor into 55da591f11e39f6886b07e37731d09d250493420 on master.

Coverage increased (+0.08%) to 56.422% when pulling 2cb6899077b019dc776e988f7459c69df4477553 on no-cache-refactor into 55da591f11e39f6886b07e37731d09d250493420 on master.

Coverage increased (+0.1%) to 56.462% when pulling 12137fc09d7585cf563031f60eb9cf7ec2712f49 on no-cache-refactor into 55da591f11e39f6886b07e37731d09d250493420 on master.

Coverage increased (+0.1%) to 56.462% when pulling 12137fc09d7585cf563031f60eb9cf7ec2712f49 on no-cache-refactor into 55da591f11e39f6886b07e37731d09d250493420 on master.


Issues when Upgrading from Boostrap 4 to Bootstrap 5

I wanted to upgrade my django desktop application to the latest python/django/boostrap.  I am at Bootstrap 4 and rely heavily on jQuery scripts.  Upgrading Python to 3.9 and Django to 3.2 went exceedingly well.  Upgrading to Bootstrap 5 was a fiasco. You introduced multiple breaking changes and did not provide a good path for jQuery other than to re-code them in javascript or utilize some obscure method.  This is an unacceptable burden on my time and reflects very poorly on your product roadmap decisions!  I reverted to Bootstrap 4 and everything works as it should.  I will be staying on Bootstrap 4 until I find a replacement for bootstrap.
Cheers,
"One Disgruntled User"

This is a major release, meaning breaking changes. Everything is documented in our migration guide and in each component's docs.
Sorry to get such feedback without any sepcific issues we may help with.
Good luck with your framework migration.


Update conf.py

Improved written grammar in the documentation

Hi Florence,
Thanks for your effort. But I'm not sure if I want to merge this PR in its current form. There are two reasons for this:
First (more relevant): It's too trivial. It slightly improves the grammar of an obscure comment in an obscure file, i.e., no "normal" user will ever benefit from it, and even developers who stumble over this will only notice if they happen to be language-geeks. I am aware that there is lots of potential for language improvements, but please do something useful, e.g. overhaul the README file or improve the the API documentation (e.g., here, here or here)
Second (less important): Before I can merge your first PR for any Mercedes-Benz project on github, you must have signed and submitted the CLA. The primary point of this is that you certify that you have all necessary rights to your contributions; IOW that your contributions does not infringe any rights of third parties.

I'll close this: this is for a very old version and -- more importantly -- I consider the changes to be more of a regression than an improvement.


Add data persistency check for chaos experiment node_storage_fill

The litmus-experiment should be capable of evicting the kubernetes node.
The inputs such as namespace, pod label and pvc should be given in env. It should validate the behaviour of application.
Test and run the code before submitting.
Procedure
This scenario validates the behaviour of application and OpenEBS persistent volumes in the amidst of chaos induced on OpenEBS data plane and control plane components.
After injecting the chaos into the component specified via environmental variable, litmus experiment observes the behaviour of corresponding OpenEBS PV and the application which consumes the volume.
Based on the value of env DATA_PERSISTENCE, the corresponding data consistency util will be executed. At present only busybox and percona-mysql are supported. Along with specifying env in the litmus experiment, user needs to pass name for configmap and the data consistency specific parameters required via configmap in the format as follows:
    parameters.yml: |
      blocksize: 4k
      blockcount: 1024
      testfile: difiletest

It is recommended to pass test-name for configmap and mount the corresponding configmap as volume in the litmus pod. The above snippet holds the parameters required for validation data consistency in busybox application.
For percona-mysql, the following parameters are to be injected into configmap.
    parameters.yml: |
      dbuser: root
      dbpassword: k8sDem0
      dbname: tdb

The configmap data will be utilised by litmus experiments as its variables while executing the scenario. Based on the data provided, litmus checks if the data is consistent after recovering from induced chaos.

Expected to be tracked at: https://github.com/mayadata-io/litmus


Add glTF nodes for supported assets for some compatibility with glTF Viewers

XVIZ could leverage glTF and add nodes to the scene to allow any XVIZ stored assets to be compatible with glTF viewers (such as images or point clouds).
Specifically we could

Add a scene quad textured with an image
Add the point cloud to the scene

gltf as an XVIZ transport format will be removed in 1.x


Invitation of thelinuxfoundation to GitHub Shipwright org

In order for CD Foundation to support the project properly and make insights available for the project on LFX, the user thelinuxfoundation must be invited to the GitHub Shipwright Organization.
Please invite the user thelinuxfoundation as an owner at the organization level (not per repository) to the GitHub organization to start the process of including the project on LFX Insights.

Done @fdegir

Thanks @SaschaSchwarze0. I confirm LFX turned green now. Will get back a new issue if things don't work as expected.


Revert back the ceph base image

as we are facing the xfs issue as the xfsprogs version has changed in ceph:v15 base image.
due to this cephcsi is not working in older kernel versions
updates: #966
Signed-off-by: Madhu Rajanna<EMAIL_ADDRESS>

@humblec @nixpanic PTAL

this needs manual merging.

The actual problem is XFS (rbd0): Superblock has unknown read-only compatible features (0x4) enabled. (in the kernel logs, dmesg) as that points to the "filesystem formatted with new xfsprogs, mounting on older kernel".

The actual problem is XFS (rbd0): Superblock has unknown read-only compatible features (0x4) enabled. (in the kernel logs, dmesg) as that points to the "filesystem formatted with new xfsprogs, mounting on older kernel".

IMO the user will check the nodeplugin container logs not the dmesg at first
do you want me to add the dmesg logs in the commit message?

IMO the user will check the nodeplugin container logs not the dmesg at first
do you want me to add the dmesg logs in the commit message?

Yes, I expect that too. But the error is the generic "failed to mount" problem, it is required to look in dmesg for reporting. No need to add the message, lets get this out of the door quickly.

Merging this one as the CI is passed and we have two approvals

It's unclear to me - at some point, we'll have to upgrade - what's our long term solution to this?

It's unclear to me - at some point, we'll have to upgrade - what's our long term solution to this?

we could make a matrix based on xfsprogs and kernel in our code which allows to enable/disable reflink .
Additional reference # https://github.com/ceph/ceph-csi/issues/966

It's unclear to me - at some point, we'll have to upgrade - what's our long term solution to this?

@mykaul this is a temp fix to unblock the upstream users who are hitting this issue, we are going to fix the issue in long term(we need more discussion to understand how things should work in mix kernel version cluster)

we could make a matrix based on xfsprogs and kernel in our code which allows to enable/disable reflink .

This is not sufficient. The pod where the provisioner or 1st attacher is running may have a different version of the kernel than other worker nodes. If that is the case, even a detection during provisioning, or during the 1st attaching, is not reliable.
There needs to be a commandline or StorageClass option that makes it possible to enable new feature (like reflink). Be conservative and enable only on request, as that prevents issues like this from happening again. #1009 is the PR for the master branch where this is also discussed.


feat: timeouts

It may be cool if we could add custom timeouts to each individual conversation instance, rather than just relying on the session timeouts. They can only expire all conversations, or none.

Please review #50.


recv_message and how to write back into input_packet and read from out_packet

Basically I am stuck with how to passing the CAN frames/contents up for upper layers for processing. If I am not wrong, the following recv_message()  will call the CAN recv_mesg. Assuming that I have read a CAN frame, how do I convert it to InputPacket?
void Server::receiver_loop()
{
InputPacket input_packet{};
while (running_cond_)
{
TransportRc transport_rc = TransportRc::ok;
if (recv_message(input_packet, RECEIVE_TIMEOUT, transport_rc))
{
input_scheduler_.push(std::move(input_packet), 0);
}
....
bool CAN2Agent::recv_message(
InputPacket& input_packet,
int timeout,
TransportRc& transport_rc)
{
bool rv = false;
SocketCanStatus can_status = STATUS_CAN_OP_ERROR;
struct CanFrame can_msg;
int i = 0;
if (socket_can.read(can_msg) != STATUS_OK)
{
	printf("*** CAN - read error *** \n");
	transport_rc = TransportRc::server_error;
}

I manage to read the content of the CAN interface, however, I have no idea how to pass the content back to the input_packet, despite long research. I thought it would be easier to replicate the  structure which I have done it later, namely CAN2EndPoint.  Unfortunately, I still not able to write back to the input_packet. Would you shed some light here, please?

Since bool CAN2Agent::send_message(
OutputPacket output_packet,
TransportRc& transport_rc)
and
bool CAN2Agent::recv_message(
InputPacket& input_packet,
int timeout,
TransportRc& transport_rc)
and the  is extended from
I use the "source" and "destination" members of respective input_packet, and output_packet structures for writing to and reading from the values,which are different from using "OutputMessagePtr" and  "InputMessagePtr". Let me know if that work for the rest of the system, please?

Hello and sorry for the late reply. Last week we were very busy with ROS World 2020 and I could not address this issue. Also please try to keep all the information regarding this CAN transport into a single issue, because that way is easier to track it. There are currently three different issues open in the Micro XRCE-DDS Agent repository adressing this port.
Regarding your question, it should be very similar to the logics involved in other transport using Linux sockets. InputPacket must be filled with a source member, which is the endpoint information; and a message member, which is an InputMessage class instance, initializated with the raw uint8_t * buffer read from the socket, and the number of bytes read. Please have a look at TCPv$AgentLinux.cpp:412 (read_message) method implementation.

Hello,
I am wanting to use gdb for debugging the code. Is it possible to generate gdb debugging code with the existing Makefile. I have search Makefile, but could not identify anything, compilation options which I use or add. Any advice?

Good morning @vibnwis, you can indeed build the Agent using the -DCMAKE_BUILD_TYPE=DEBUG flag to generate symbols that can later be used by gdb to debug your code. I do not really understand your question

Thank you for the answer. That is exactly what I wanted to know.
On Thu, 3 Dec 2020 at 19:33, Jose Antonio Moral<EMAIL_ADDRESS>wrote:

Good morning @vibnwis https://github.com/vibnwis, you can indeed build
the Agent using the -DCMAKE_BUILD_TYPE=DEBUG flag to generate symbols
that can later be used by gdb to debug your code. I do not really
understand your question
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
https://github.com/eProsima/Micro-XRCE-DDS-Agent/issues/197#issuecomment-737698079,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/ADCYQVUVWQ4CLIDBEDQU5GDSS4WMPANCNFSM4TUQOGUQ
.

I think, I asked this question before, is the UAGENT_DISCOVERY_PROFILE a
must? I wakely remember, it is not necessary. Please advise.
On Thu, 3 Dec 2020 at 19:35, vibnwis<EMAIL_ADDRESS>wrote:

Thank you for the answer. That is exactly what I wanted to know.
On Thu, 3 Dec 2020 at 19:33, Jose Antonio Moral<EMAIL_ADDRESS>wrote:

Good morning @vibnwis https://github.com/vibnwis, you can indeed build
the Agent using the -DCMAKE_BUILD_TYPE=DEBUG flag to generate symbols
that can later be used by gdb to debug your code. I do not really
understand your question
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
https://github.com/eProsima/Micro-XRCE-DDS-Agent/issues/197#issuecomment-737698079,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/ADCYQVUVWQ4CLIDBEDQU5GDSS4WMPANCNFSM4TUQOGUQ
.

I think, I asked this question before, is the UAGENT_DISCOVERY_PROFILE a must? I wakely remember, it is not necessary. Please advise.
…
On Thu, 3 Dec 2020 at 19:35, vibnwis @.> wrote: Thank you for the answer. That is exactly what I wanted to know. On Thu, 3 Dec 2020 at 19:33, Jose Antonio Moral @.> wrote: > Good morning @vibnwis https://github.com/vibnwis, you can indeed build > the Agent using the -DCMAKE_BUILD_TYPE=DEBUG flag to generate symbols > that can later be used by gdb to debug your code. I do not really > understand your question > > — > You are receiving this because you were mentioned. > Reply to this email directly, view it on GitHub > <#197 (comment)>, > or unsubscribe > https://github.com/notifications/unsubscribe-auth/ADCYQVUVWQ4CLIDBEDQU5GDSS4WMPANCNFSM4TUQOGUQ > . >

Well, not really. The Discovery profile enables a discovery server that allow clients to automatically retrieve information about which agent(s) are present in their network, by means of sending a GET_INFO petition to which the discovery server answers with pairs of IP addresses and ports to which the client tries to establish a session to. If you know your agent's IP and port prior to connecting, which is the case most of the times, you can disable this feature.

CAN-bus has not address or any forms of identification. Connection is
established at the physical layer through arbitration.
I presume the option is -D UAGENT_DISCOVERY_PROFILE = OFF
On Thu, 3 Dec 2020 at 19:42, Jose Antonio Moral<EMAIL_ADDRESS>wrote:

I think, I asked this question before, is the UAGENT_DISCOVERY_PROFILE a
must? I wakely remember, it is not necessary. Please advise.
… <#m_-5348198958836749186_>
On Thu, 3 Dec 2020 at 19:35, vibnwis @.> wrote: Thank you for the
answer. That is exactly what I wanted to know. On Thu, 3 Dec 2020 at 19:33,
Jose Antonio Moral @.> wrote: > Good morning @vibnwis
https://github.com/vibnwis https://github.com/vibnwis, you can indeed
build > the Agent using the -DCMAKE_BUILD_TYPE=DEBUG flag to generate
symbols > that can later be used by gdb to debug your code. I do not really

understand your question > > — > You are receiving this because you were
mentioned. > Reply to this email directly, view it on GitHub > <#197
(comment)
https://github.com/eProsima/Micro-XRCE-DDS-Agent/issues/197#issuecomment-737698079>,
or unsubscribe >
https://github.com/notifications/unsubscribe-auth/ADCYQVUVWQ4CLIDBEDQU5GDSS4WMPANCNFSM4TUQOGUQ
. >

Well, not really. The Discovery profile enables a discovery server that
allow clients to automatically retrieve information about which agent(s)
are present in their network, by means of sending a GET_INFO petition to
which the discovery server answers with pairs of IP addresses and ports to
which the client tries to establish a session to. If you know your agent's
IP and port prior to connecting, which is the case most of the times, you
can disable this feature.
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
https://github.com/eProsima/Micro-XRCE-DDS-Agent/issues/197#issuecomment-737701653,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/ADCYQVQ6VPPYUI2QQEPO6HDSS4XOBANCNFSM4TUQOGUQ
.

Yes, that is right :slightly_smiling_face:

Also, I switched Off the UAGENT_P2P_PROFILE. I presume it is
consequential.

I was not sure what options for running uagent. I use MicroXRCEAgent
can2 dds. However, I am still not able to run to completion. Feel free to
advise.

Thank you in advance.
On Thu, 3 Dec 2020 at 19:46, vibnwis<EMAIL_ADDRESS>wrote:

CAN-bus has not address or any forms of identification. Connection is
established at the physical layer through arbitration.
I presume the option is -D UAGENT_DISCOVERY_PROFILE = OFF
On Thu, 3 Dec 2020 at 19:42, Jose Antonio Moral<EMAIL_ADDRESS>wrote:

I think, I asked this question before, is the UAGENT_DISCOVERY_PROFILE a
must? I wakely remember, it is not necessary. Please advise.
… <#m_8868777834810854793_m_-5348198958836749186_>
On Thu, 3 Dec 2020 at 19:35, vibnwis @.> wrote: Thank you for the
answer. That is exactly what I wanted to know. On Thu, 3 Dec 2020 at 19:33,
Jose Antonio Moral @.> wrote: > Good morning @vibnwis
https://github.com/vibnwis https://github.com/vibnwis, you can indeed
build > the Agent using the -DCMAKE_BUILD_TYPE=DEBUG flag to generate
symbols > that can later be used by gdb to debug your code. I do not really

understand your question > > — > You are receiving this because you were
mentioned. > Reply to this email directly, view it on GitHub > <#197
(comment)
https://github.com/eProsima/Micro-XRCE-DDS-Agent/issues/197#issuecomment-737698079>,
or unsubscribe >
https://github.com/notifications/unsubscribe-auth/ADCYQVUVWQ4CLIDBEDQU5GDSS4WMPANCNFSM4TUQOGUQ
. >

Well, not really. The Discovery profile enables a discovery server that
allow clients to automatically retrieve information about which agent(s)
are present in their network, by means of sending a GET_INFO petition to
which the discovery server answers with pairs of IP addresses and ports to
which the client tries to establish a session to. If you know your agent's
IP and port prior to connecting, which is the case most of the times, you
can disable this feature.
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
https://github.com/eProsima/Micro-XRCE-DDS-Agent/issues/197#issuecomment-737701653,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/ADCYQVQ6VPPYUI2QQEPO6HDSS4XOBANCNFSM4TUQOGUQ
.

I am trying to get uagent to run. Obviously, I don't if mine will work. which in facts, I tried many times, it failed. Hence, I tried with udp instead with the following commands.

./MicroXRCEAgent udp, ./MicroXRCEAgent udp -p=8888,./MicroXRCEAgent udp -p 8888
None of those work. It keeps displaying messages "A subcommand is required
Run with --help for more information."
At "Enter command", I have tried, udp, tcp, can2, can, 8888, also none of those work.
I am sure what it is expecting. Can you advise, please?

Okie, I managed to advance one step. However, now it shows an error.
Enter command: can2 -d 222
Press CTRL+C to exit
terminate called after throwing an instance of 'std::logic_error'
what():  basic_string::_M_construct null not valid
I am trying to resolve it. Appreciate your advice, please?

To be honest, C++ is not something I use often. This is my time dealing with such highly professional C++ program. It is a bit overwhelm for me. Also, the editor is not able to jump to the declarations or references, make it very hard to grab to good understanding.
I try to look for where the error, "'std::logic_error'
what(): basic_string::_M_construct null not valid" was generated. Still searching  since the last message. Hence, very appreciate your advice, please?

Hello, how could I test all these in order to get to the point you are stuck with? Which branch do I have to use? I assume I should refer to your fork of the Micro XRCE-DDS Agent.
Also, regarding the error, it seems like you are using the "old" CLI. It can get a little bit messy when entering not valid commands. Did you add the can option in the include/uxr/agent/utils/CLI.hpp? If not, please do so. If you want to switch to the new CLI (which is lighter, and easier in my opinion) you should compile the agent with the -DUAGENT_CLI_PROFILE=OFF, then check that the can option is correctly added in uxr/agent/utils/argumentParser.hpp. We are planning to eventually remove the former version, anyways.

Yes, I have added the CAN (old) and CAN2 (newer) options in the
include/uxr/agent/utils/CLI.hpp and uxr/agent/utils/argumentParser.hpp. I
will use the CLI by adding -DUAGENT_CLI_PROFILE=OFF and see how it does.
As for testing at your, you can get a copy from the fork of the Micro
XRCE-DDS Agent. However, probably not a good idea until next monday, as I
have not uploaded the latest changes, but I will do it over the weekend.
Hence, next Monday is better.
On Sat, 5 Dec 2020 at 00:37, Jose Antonio Moral<EMAIL_ADDRESS>wrote:

Hello, how could I test all these in order to get to the point you are
stuck with? Which branch do I have to use? I assume I should refer to your
fork of the Micro XRCE-DDS Agent.
Also, regarding the error, it seems like you are using the "old" CLI. It
can get a little bit messy when entering not valid commands. Did you add
the can option in the include/uxr/agent/utils/CLI.hpp? If not, please do
so. If you want to switch to the new CLI (which is lighter, and easier in
my opinion) you should compile the agent with the -DUAGENT_CLI_PROFILE=OFF,
then check that the can option is correctly added in
uxr/agent/utils/argumentParser.hpp. We are planning to eventually remove
the former version, anyways.
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
https://github.com/eProsima/Micro-XRCE-DDS-Agent/issues/197#issuecomment-738736599,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/ADCYQVTRLWO3D24FDFQTPIDSTDCW5ANCNFSM4TUQOGUQ
.

ok, do not worry. We are on holiday in Spain Monday and Tuesday, so I will test your changes on Wednesday. Feel free to add any update in this issue.
Have a nice weekend!

hi,
I have some parts of uagent working. It could receive a complete from micro-client. However, the Read() SocketCAN failed with "segmentation fault". I am looking into the problem now.
Back to micro-client. At the moment, I have removed the very first transmitting frame. I added it before allowing uagent to test its receiving functions.
Here are my questions.
When running uagent, It goes to CAN2Agent::init(), and then CAN2Agent::recv_message(). From what I observe, both the uclient and uagent are at the listening state. What messaging would take place? why no messaging take place? what have I missed out?
Very appreciate your comments.

Further test, I experienced the following issues. Perhaps it is easier to show the output of the CAN-Transport communication.
In general, uagent succeeded initializing SocketCAN, and moved onto recv_message() from SocketCAN successfully. However, it came back to recv_message(), and caused "segmentation fault" at read(). However, I have re-run the read() on it own, which posed no issues. However, the integrated with uagent experienced "segmentation faults". From gdb, it stopped at session_id(), and the system exit(). I wonder why causes the error. See the output messages for more information.
SocketCAN  bind() succeeded
SocketCAN  getsockopt() succeeded
SocketCAN  error none
SocketCAN for interface can0
succeeded
CAN2Agent::recv_message() entered
SocketCAN::read  getsockopt() succeeded len = 4
SocketCAN:: Read() - About to read from CAN interface can0
Read() returns values = 16 and data length of 8
SocketCAN: Read() Classis frame.flags = 291
SocketCAN: Read() Non-Error frame.flags = 291
SocketCAN: Read() frame.can_dlc= 8, frame.can_id = 291
data[17]data[34]data[51]data[68]data[85]data[102]data[119]data[136]
SocketCAN: Read() ended
len 8 byte, id: 291 data[0]: 11 data[1]: 22 data[2]: 33 data[3]: 44 data[4]: 55 data[5]: 66 data[6]: 77 data[7]: 88
write frame_id to source of input_packet
write frame_len to source of input_packet
write frame_data to source of input_packet
set_data()- len 8
set_data()- ended
CAN2Agent::recv_message() exited
CAN2Agent::recv_message() entered
SocketCAN::read  getsockopt() succeeded len = 4
SocketCAN:: Read() - About to read from CAN interface can0

I suspect re-entering of re-entering to CAN2Agent::recv_message() may have modified the data-structure of SocketCAN socket_can_. At here, I have confirmed that it works by itself. If possible would you mind verify the variable definitions in CAN2AgentLinux and the scheduler that manages the recv_message(). I wonder if that makes sense.

Here are the traces with GDB, I have verified and confirmed that the SocketCAN handler and  the memory space for struct can_frame are intact, not corrupted. Please see the second segment for the messages. The s, CAN socket handler and the cframe are not destroyed. Appreciate your comments please?
-------------------------gdb traces -----------------------------
Temporary breakpoint 1, main (argc=21845, argv=0x0) at /home/wiki-ros/ms-bot-evn/Micro-XRCE-DDS-Agent/microxrce_agent.cpp:18
18      {
(gdb) [New Thread 0x7ffff5e00700 (LWP 84523)]
[New Thread 0x7ffff55ff700 (LWP 84524)]
[New Thread 0x7ffff4dfe700 (LWP 84525)]
[New Thread 0x7fffeffff700 (LWP 84526)]
[New Thread 0x7fffef7fe700 (LWP 84527)]
[Switching to Thread 0x7ffff4dfe700 (LWP 84525)]
Thread 4 "MicroXRCEAgent" hit Breakpoint 4, eprosima::uxr::SocketCan::read (this=0x7ffff00112e8, msg=...) at /home/wiki-ros/ms-bot-evn/Micro-XRCE-DDS-Agent/src/cpp/transport/can/socketcan_cpp.cpp:345
345             printf("SocketCAN:: Read() - A Frame memory space is ready and about to read from CAN interface can0\n");
Switching to thread 6 (Thread 0x7fffef7fe700 (LWP 84527))
[New Thread 0x7fffeeffd700 (LWP 84533)]
Switching to thread 6 (Thread 0x7fffef7fe700 (LWP 84527))
[Switching to thread 1 (Thread 0x7ffff5e0c280 (LWP 84512))]
#0  __pthread_clockjoin_ex (threadid=140737318487808, thread_return=0x0, clockid=, abstime=, block=) at pthread_join_common.c:145
145     pthread_join_common.c: No such file or directory.
Switching to thread 7 (Thread 0x7fffeeffd700 (LWP 84533))
Switching to thread 7 (Thread 0x7fffeeffd700 (LWP 84533))
Switching to thread 7 (Thread 0x7fffeeffd700 (LWP 84533))
Thread 4 "MicroXRCEAgent" hit Breakpoint 4, eprosima::uxr::SocketCan::read (this=0x7ffff00112e8, msg=...) at /home/wiki-ros/ms-bot-evn/Micro-XRCE-DDS-Agent/src/cpp/transport/can/socketcan_cpp.cpp:345
345             printf("SocketCAN:: Read() - A Frame memory space is ready and about to read from CAN interface can0\n");
Thread 6 "MicroXRCEAgent" received signal SIGSEGV, Segmentation fault.
[Switching to Thread 0x7fffef7fe700 (LWP 84527)]
0x00007ffff7d00394 in dds::xrce::MessageHeader::session_id (this=0x10) at /home/wiki-ros/ms-bot-evn/Micro-XRCE-DDS-Agent/include/uxr/agent/types/MessageHeader.hpp:90
90              return m_session_id;
[Switching to thread 6 (Thread 0x7fffef7fe700 (LWP 84527))]
#0  0x00007ffff7d00394 in dds::xrce::MessageHeader::session_id (this=0x10) at /home/wiki-ros/ms-bot-evn/Micro-XRCE-DDS-Agent/include/uxr/agent/types/MessageHeader.hpp:90
90              return m_session_id;
[Thread 0x7fffef7fe700 (LWP 84527) exited]
[Thread 0x7fffeffff700 (LWP 84526) exited]
[Thread 0x7ffff4dfe700 (LWP 84525) exited]
[Thread 0x7ffff55ff700 (LWP 84524) exited]
[Thread 0x7ffff5e00700 (LWP 84523) exited]
[Thread 0x7ffff5e0c280 (LWP 84512) exited]
Program terminated with signal SIGSEGV, Segmentation fault.
The program no longer exists.
---------------------------------------------------- printf --------------------------------------
an_frame is 16 bytesSocketCAN  bind() succeeded
SocketCAN  getsockopt() succeeded
SocketCAN  error none
SocketCAN for interface can0
succeeded
CAN2Agent::recv_message() entered
SocketCAN:: handler 3
SocketCAN::read  getsockopt() succeeded len = 4
SocketCAN:: Read() - A Frame memory space is ready and about to read from CAN interface can0
Read() returns values = 16 and data length of 8
SocketCAN: Read() Classis frame.flags = 291
SocketCAN: Read() Non-Error frame.flags = 291
SocketCAN: Read() frame.can_dlc= 8, frame.can_id = 291
data[17]data[34]data[51]data[68]data[85]data[102]data[119]data[136]
SocketCAN: Read() ended
len 8 byte, id: 291 data[0]: 11 data[1]: 22 data[2]: 33 data[3]: 44 data[4]: 55 data[5]: 66 data[6]: 77 data[7]: 88
write frame_id to source of input_packet
write frame_len to source of input_packet
write frame_data to source of input_packet
set_data()- len 8
set_data()- ended
CAN2Agent::recv_message() exited
CAN2Agent::recv_message() entered
SocketCAN:: handler 3
SocketCAN::read  getsockopt() succeeded len = 4
SocketCAN:: Read() - A Frame memory space is ready and about to read from CAN interface can0
Segmentation fault (core dumped)

Hi,
I single stepped through using gdb. I found out that after CAN2AgentLinux::recv_message(), the system control passed back to the scheduler of void Server::receiver_loop(), and then segmentation fault took place. See the gdb messages below. Kindly advise please.

Temporary breakpoint 1, main (argc=21845, argv=0x0) at /home/wiki-ros/ms-bot-evn/Micro-XRCE-DDS-Agent/microxrce_agent.cpp:18
18      {
[New Thread 0x7ffff5e00700 (LWP 98532)]
[New Thread 0x7ffff55ff700 (LWP 98533)]
[New Thread 0x7ffff4dfe700 (LWP 98534)]
[New Thread 0x7fffeffff700 (LWP 98535)]
[New Thread 0x7fffef7fe700 (LWP 98536)]
[Switching to Thread 0x7ffff4dfe700 (LWP 98534)]
Thread 4 "MicroXRCEAgent" hit Breakpoint 3, eprosima::uxr::SocketCan::read (this=0x7ffff00112e8, msg=...) at /home/wiki-ros/ms-bot-evn/Micro-XRCE-DDS-Agent/src/cpp/transport/can/socketcan_cpp.cpp:345
345             printf("SocketCAN:: Read() - A Frame memory space is ready and about to read from CAN interface can0\n");
Switching to thread 6 (Thread 0x7fffef7fe700 (LWP 98536))
[New Thread 0x7fffeeffd700 (LWP 98564)]
Switching to thread 6 (Thread 0x7fffef7fe700 (LWP 98536))
[Switching to thread 1 (Thread 0x7ffff5e0c280 (LWP 98520))]
#0  __pthread_clockjoin_ex (threadid=140737318487808, thread_return=0x0, clockid=, abstime=, block=) at pthread_join_common.c:145
145     pthread_join_common.c: No such file or directory.
Switching to thread 7 (Thread 0x7fffeeffd700 (LWP 98564))
Switching to thread 7 (Thread 0x7fffeeffd700 (LWP 98564))
Switching to thread 7 (Thread 0x7fffeeffd700 (LWP 98564))
Switching to thread 7 (Thread 0x7fffeeffd700 (LWP 98564))
Switching to thread 7 (Thread 0x7fffeeffd700 (LWP 98564))
Thread 1 "MicroXRCEAgent" received signal SIGINT, Interrupt.
[Switching to Thread 0x7ffff5e0c280 (LWP 98520)]
__pthread_clockjoin_ex (threadid=140737318487808, thread_return=0x0, clockid=, abstime=, block=) at pthread_join_common.c:145
145     in pthread_join_common.c
Switching to thread 7 (Thread 0x7fffeeffd700 (LWP 98564))
[Switching to Thread 0x7ffff4dfe700 (LWP 98534)]
Thread 4 "MicroXRCEAgent" hit Breakpoint 9, eprosima::uxr::SocketCan::read (this=0x7ffff00112e8, msg=...) at /home/wiki-ros/ms-bot-evn/Micro-XRCE-DDS-Agent/src/cpp/transport/can/socketcan_cpp.cpp:356
356             if (num_bytes == 0)
Switching to thread 7 (Thread 0x7fffeeffd700 (LWP 98564))
Thread 4 "MicroXRCEAgent" hit Breakpoint 6, eprosima::uxr::SocketCan::read (this=0x7ffff00112e8, msg=...) at /home/wiki-ros/ms-bot-evn/Micro-XRCE-DDS-Agent/src/cpp/transport/can/socketcan_cpp.cpp:424
424             printf("\nSocketCAN: Read() ended\n");
Switching to thread 7 (Thread 0x7fffeeffd700 (LWP 98564))
Switching to thread 7 (Thread 0x7fffeeffd700 (LWP 98564))
Thread 4 "MicroXRCEAgent" hit Breakpoint 7, eprosima::uxr::SocketCan::read (this=0x7ffff00112e8, msg=...) at /home/wiki-ros/ms-bot-evn/Micro-XRCE-DDS-Agent/src/cpp/transport/can/socketcan_cpp.cpp:428
428             return STATUS_OK;
Switching to thread 7 (Thread 0x7fffeeffd700 (LWP 98564))
Switching to thread 7 (Thread 0x7fffeeffd700 (LWP 98564))
Switching to thread 7 (Thread 0x7fffeeffd700 (LWP 98564))
Switching to thread 7 (Thread 0x7fffeeffd700 (LWP 98564))
Switching to thread 7 (Thread 0x7fffeeffd700 (LWP 98564))
Switching to thread 7 (Thread 0x7fffeeffd700 (LWP 98564))
Switching to thread 7 (Thread 0x7fffeeffd700 (LWP 98564))
Switching to thread 7 (Thread 0x7fffeeffd700 (LWP 98564))
[Switching to thread 7 (Thread 0x7fffeeffd700 (LWP 98564))]
#0  0x00007ffff75833bf in __GI___clock_nanosleep (clock_id=clock_id@entry=0, flags=flags@entry=0, req=0x7fffeeffcd60, rem=0x7fffeeffcd60) at ../sysdeps/unix/sysv/linux/clock_nanosleep.c:78
78      ../sysdeps/unix/sysv/linux/clock_nanosleep.c: No such file or directory.
Switching to thread 7 (Thread 0x7fffeeffd700 (LWP 98564))
Switching to thread 7 (Thread 0x7fffeeffd700 (LWP 98564))
Switching to thread 7 (Thread 0x7fffeeffd700 (LWP 98564))
[Switching to thread 7 (Thread 0x7fffeeffd700 (LWP 98564))]
#0  0x00007ffff75833bf in __GI___clock_nanosleep (clock_id=clock_id@entry=0, flags=flags@entry=0, req=0x7fffeeffcd60, rem=0x7fffeeffcd60) at ../sysdeps/unix/sysv/linux/clock_nanosleep.c:78
78      in ../sysdeps/unix/sysv/linux/clock_nanosleep.c
Switching to thread 7 (Thread 0x7fffeeffd700 (LWP 98564))
Switching to thread 7 (Thread 0x7fffeeffd700 (LWP 98564))
Switching to thread 7 (Thread 0x7fffeeffd700 (LWP 98564))
Switching to thread 7 (Thread 0x7fffeeffd700 (LWP 98564))
Switching to thread 7 (Thread 0x7fffeeffd700 (LWP 98564))
Switching to thread 7 (Thread 0x7fffeeffd700 (LWP 98564))
[Switching to thread 7 (Thread 0x7fffeeffd700 (LWP 98564))]
#0  0x00007ffff75833bf in __GI___clock_nanosleep (clock_id=clock_id@entry=0, flags=flags@entry=0, req=0x7fffeeffcd60, rem=0x7fffeeffcd60) at ../sysdeps/unix/sysv/linux/clock_nanosleep.c:78
78      in ../sysdeps/unix/sysv/linux/clock_nanosleep.c
Switching to thread 7 (Thread 0x7fffeeffd700 (LWP 98564))
Switching to thread 7 (Thread 0x7fffeeffd700 (LWP 98564))
Switching to thread 7 (Thread 0x7fffeeffd700 (LWP 98564))
Switching to thread 7 (Thread 0x7fffeeffd700 (LWP 98564))
Switching to thread 7 (Thread 0x7fffeeffd700 (LWP 98564))
Switching to thread 7 (Thread 0x7fffeeffd700 (LWP 98564))
Switching to thread 7 (Thread 0x7fffeeffd700 (LWP 98564))
Switching to thread 7 (Thread 0x7fffeeffd700 (LWP 98564))
Switching to thread 7 (Thread 0x7fffeeffd700 (LWP 98564))
Switching to thread 7 (Thread 0x7fffeeffd700 (LWP 98564))
Switching to thread 7 (Thread 0x7fffeeffd700 (LWP 98564))
[Switching to thread 7 (Thread 0x7fffeeffd700 (LWP 98564))]
#0  0x00007ffff75833bf in __GI___clock_nanosleep (clock_id=clock_id@entry=0, flags=flags@entry=0, req=0x7fffeeffcd60, rem=0x7fffeeffcd60) at ../sysdeps/unix/sysv/linux/clock_nanosleep.c:78
78      in ../sysdeps/unix/sysv/linux/clock_nanosleep.c
Switching to thread 7 (Thread 0x7fffeeffd700 (LWP 98564))
Switching to thread 7 (Thread 0x7fffeeffd700 (LWP 98564))
Switching to thread 7 (Thread 0x7fffeeffd700 (LWP 98564))
Switching to thread 7 (Thread 0x7fffeeffd700 (LWP 98564))
Switching to thread 7 (Thread 0x7fffeeffd700 (LWP 98564))
[Switching to thread 7 (Thread 0x7fffeeffd700 (LWP 98564))]
#0  0x00007ffff75833bf in __GI___clock_nanosleep (clock_id=clock_id@entry=0, flags=flags@entry=0, req=0x7fffeeffcd60, rem=0x7fffeeffcd60) at ../sysdeps/unix/sysv/linux/clock_nanosleep.c:78
78      in ../sysdeps/unix/sysv/linux/clock_nanosleep.c
Switching to thread 7 (Thread 0x7fffeeffd700 (LWP 98564))
Switching to thread 7 (Thread 0x7fffeeffd700 (LWP 98564))
[Switching to thread 7 (Thread 0x7fffeeffd700 (LWP 98564))]
#0  0x00007ffff75833bf in __GI___clock_nanosleep (clock_id=clock_id@entry=0, flags=flags@entry=0, req=0x7fffeeffcd60, rem=0x7fffeeffcd60) at ../sysdeps/unix/sysv/linux/clock_nanosleep.c:78
78      in ../sysdeps/unix/sysv/linux/clock_nanosleep.c
Switching to thread 7 (Thread 0x7fffeeffd700 (LWP 98564))
Switching to thread 7 (Thread 0x7fffeeffd700 (LWP 98564))
Switching to thread 7 (Thread 0x7fffeeffd700 (LWP 98564))
Switching to thread 7 (Thread 0x7fffeeffd700 (LWP 98564))
Switching to thread 7 (Thread 0x7fffeeffd700 (LWP 98564))
Switching to thread 7 (Thread 0x7fffeeffd700 (LWP 98564))
Switching to thread 7 (Thread 0x7fffeeffd700 (LWP 98564))
Switching to thread 7 (Thread 0x7fffeeffd700 (LWP 98564))
Switching to thread 7 (Thread 0x7fffeeffd700 (LWP 98564))
Switching to thread 7 (Thread 0x7fffeeffd700 (LWP 98564))
Switching to thread 7 (Thread 0x7fffeeffd700 (LWP 98564))
Thread 6 "MicroXRCEAgent" received signal SIGSEGV, Segmentation fault.
[Switching to Thread 0x7fffef7fe700 (LWP 98536)]
0x00007ffff7d00394 in dds::xrce::MessageHeader::session_id (this=0x10) at /home/wiki-ros/ms-bot-evn/Micro-XRCE-DDS-Agent/include/uxr/agent/types/MessageHeader.hpp:90
90              return m_session_id;
Switching to thread 7 (Thread 0x7fffeeffd700 (LWP 98564))
[Thread 0x7fffeeffd700 (LWP 98564) exited]
[Thread 0x7fffef7fe700 (LWP 98536) exited]
[Thread 0x7fffeffff700 (LWP 98535) exited]
[Thread 0x7ffff4dfe700 (LWP 98534) exited]
[Thread 0x7ffff55ff700 (LWP 98533) exited]
[Thread 0x7ffff5e00700 (LWP 98532) exited]
Program terminated with signal SIGSEGV, Segmentation fault.
The program no longer exists.

Hi,
Further probes, I found the cause of the error, ie segmentation fault. By adding these two lines, it resolved the error.
input_packet.message.reset(new InputMessage(buffer_, CAN_MTU));
input_packet.source = CAN2EndPoint(can_msg.id, can_msg.len);
However, something I am not sure are:

How do I test the CAN2Agent::send_message() routine. The reason is when running in gdb with a breakpoint in the send_message(), it did not pause ie it does not send out any messages.
bool CAN2Agent::send_message(
OutputPacket output_packet,
TransportRc& transport_rc)
{
bool rv = false;
SocketCanStatus can_status = STATUS_CAN_OP_ERROR;
struct CanFrame can_msg;
uint8_t retry = 0;
printf("CAN2Agent::send_message() entered \n");
can_msg.id = output_packet.destination.get_id(); <--------------1
can_msg.len = output_packet.destination.get_len();  <----------2
data_size = output_packet.destination.get_data(can_msg.data);  <-------------3

From the code with number 1, 2, 3 above. However, I am not sure where those values are set?

The Micro-Client, does not send out any messages as well. It is in listening mode as far I am concerned. What should I expect?

Appreciate your comments, please?
Thank you

I have deleted some old messages because I think it would cause confusion whoever read it, and also it has been resolved. It would be cleaner as well for you to focus on my questions.
Basically, I have completed adding the CAN-transport. Partially I have tested it working, as init(), recv_message(), finit(), except send_message(). However, the main issues I have are:

What and how to get a complete UAgent and U-Client to establish a client-server connection. Currently, I don't any nodes are transmitting any message. Results of my current testing.
When transmitting message from a node, it needs to specify the an frame ID for bus arbitration purpose. Being at transport layer protocol, I don't hard-code or add that. At application layer, how does it set it, and the frame size? FYI it can not more than 8 bytes.
I look forward hearing from you soon.
Thank you
Vi

Hi jamoralp
I sent out this massage to pablo too.
Okie, further trace, I found that uxr_create_session(&session) of u-client indeed calls send_message() routine below, and the send_msg() also correctly calls the send_can_msg() of CAN-Transport implementation. However, here it comes the issue, from the gdb, I could see that the length of the buffer (ie request message) is 20. However, CAN bus could only take 8 bytes. Would you able to help advising what would be the best strategy for resolving the solution. I can think of reducing it to 8, but I do not know about the implication of it may involve for other parts of the system. Obviously, its counterpart, uagent will need to change accordingly. Would you help to discuss it with jamoralp too. I am happy to make those changes here. However, your advice and assistance are very much needed, please. I look forward to hearing from you soon.

Hello @vibnwis  I have found that there are a couple of persons interested also in a micro-ROS CAN transport, I have created a slack channel to talk about this: https://micro-ros.slack.com/archives/C01H4A538CV
Please join if interested.

Okie. I will
On Fri, 18 Dec 2020 at 8:38 PM, Pablo Garrido<EMAIL_ADDRESS>wrote:

Hello @vibnwis https://github.com/vibnwis I have found that there are a
couple of persons interested also in a micro-ROS CAN transport, I have
created a slack channel to talk about this:
https://micro-ros.slack.com/archives/C01H4A538CV
Please join if interested.
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
https://github.com/eProsima/Micro-XRCE-DDS-Agent/issues/197#issuecomment-747923380,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/ADCYQVWBWSPA75Q5PPNYMZDSVMBGDANCNFSM4TUQOGUQ
.

Hi Pablo,
It does not allow me to join except those with domain of

de.bosch.com
eprosima.com
fiware.org
piap.pl

On Fri, 18 Dec 2020 at 20:38, Pablo Garrido<EMAIL_ADDRESS>wrote:

Hello @vibnwis https://github.com/vibnwis I have found that there are a
couple of persons interested also in a micro-ROS CAN transport, I have
created a slack channel to talk about this:
https://micro-ros.slack.com/archives/C01H4A538CV
Please join if interested.
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
https://github.com/eProsima/Micro-XRCE-DDS-Agent/issues/197#issuecomment-747923380,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/ADCYQVWBWSPA75Q5PPNYMZDSVMBGDANCNFSM4TUQOGUQ
.

Here you have a place to put your mail and we can accept you in the group: https://micro-ros.github.io/ In the bottom right

Hi Pablo and Jose,
I have implemented the CAN-framing protocol that breaking down long messages to 8-bytes CAN frames and at the other end rejoin the CAN-frames to the original message. Would you please advise what is happening, and the issues. From the messages after rejoined, they are identical, however, it still not able to create a session. From the client output message, you can see that the "appMain: Error-Create session fail". Of course, when it hits this, the system simply halts. Please advise.
How to read to files.
[1]. For u-client,
"CAN payload: data[0] = 0x3", represents it is sending out frame #4 of a long message. A long message is broken down to 7 bytes, and the very first byte is the frame number. The last frame is "data[0] = 0x0", of which I use to determine to re-join the previously received frames.
"< CAN2 concatenated frames" is showing the complete message after rejoining together.
"CAN ID" is CAN identification
"CAN DLC" is the CAN frame data length.
"HAL_CAN_AddTxMessage()"  represents success in sending a CAN frame. The numbers of the message are same as the number CAN breakdown frames of a long messages, ie 24 bytes of a long messages is broken down to 4 CAN frames of 7, 7, 7, 3 bytes length,
[2]. This applies to u-Agent.
U-agent-session-messaging-comms.txt
u-client-CAN-framing session comms.txt

I suspect that the received message not being accepted or passed properly back to the caller of receiving routine.
This is how the client, recv_can_msg() looks like. The contents of arr[] has copied to transport->buffer, and update its pointer to *buf as well as the the len value. However, I don't see anything abnormal here.
static bool recv_can_msg(void* instance, uint8_t** buf, size_t* len, int timeout)
{
bool rv = false;
uxrUDPTransport* transport = (uxrUDPTransport*)instance;

uint8_t arr[XRCE_CAN2_MTU];

uint32_t id, length, msg_len = 0;
uint8_t fr_num = 0;
int i;

/*
 * CAN-bus frame can be read directly the circular buffer.
 *
 * Hence, discard the uxr_read_udp_data_platform(), instead read the CAN frame directly
 * from the circular buffer.
 *
 * However, the platform->fd can be added for handling Txheader (sending out CAN frame) and reading CAN
 * frame from the circular buffer (cb).
 * For time being, it accesses to the low-level data structure directly
 */

size_t bytes_received = cb_read_CAN_frame(arr, &id, &length);

printf("\n\r recv_can_msg() bytes_received is %d \n\r",bytes_received );

if (0 < bytes_received)
{

	fr_num = arr[0];
	printf ("\n\r inFrame id=0x%x, fr_num=%d  length=%d\n\r",id,fr_num, length);
	msg_len = processInFrame(id, arr, fr_num, length);

	printf ("\n\r msg_len %d \n\r", msg_len);
	if (msg_len) {
    	printf ("\n\r< CAN2 concatenated frames \n\r");
    	for (i=0; i<msg_len; i++) {
    		if (!(i%8))
    		    printf ("\n\r");
    		printf("[%d]=0x%x ", i, arr[i]);
    	}
    	printf ("\n\rCAN2 concatenated frames > \n\r");

    	resetIDMessage(id);
    	memcpy(transport->buffer, arr, msg_len);
    	*buf = transport->buffer;
    	*len = msg_len;
    	rv = true;
    }
}

return rv;

}

Hi Pablo and Jose,
Further traces, I found that for a session to be created, besides those stream of data, it also needs info.last_requested_status to updated to non-0xFF. However, from the traces, see below, it shows despite having the right data stream ( I almost confident it is so), the info.last_requested_status remains 0xFF. Appreciate your advice, please.
msg_len 24
< CAN2 concatenated frames
[0]=0x80 [1]=0x0 [2]=0x0 [3]=0x0 [4]=0x0 [5]=0x1 [6]=0x10 [7]=0x0
[8]=0x58 [9]=0x52 [10]=0x43 [11]=0x45 [12]=0x1 [13]=0x0 [14]=0x1 [15]=0xf
[16]=0xba [17]=0x5e [18]=0xba [19]=0x11 [20]=0x81 [21]=0x0 [22]=0xfc [23]=0xf
CAN2 concatenated frames >
listen_message() must_be_read is 1
listen_message() data-length is 24
[0]=0x80 [1]=0x0 [2]=0x0 [3]=0x0 [4]=0x0 [5]=0x1 [6]=0x10 [7]=0x0
[8]=0x58 [9]=0x52 [10]=0x43 [11]=0x45 [12]=0x1 [13]=0x0 [14]=0x1 [15]=0xf
[16]=0xba [17]=0x5e [18]=0xba [19]=0x11 [20]=0x81 [21]=0x0 [22]=0xfc [23]=0xf
session->info.last_requested_status 255
listen_message() ended

Hello, thank you for the effort being put into this.
For me, it is quite difficult to understand what is happening if there is no example I can execute to debug the session (I have never really used CAN sockets). Therefore, if possible, could you provide with the exact steps to reproduce the situation you are describing above? Do you have any micro XRCE-DDS Client code that replicates a real CAN buffer device, in order to establish a "fake" connection and being able to debug the code? Thank you.

To be honest, for the following is about u-client as I am solving one at a time. At the moment, I see issues take place in the u-client.
It is understandable. I think, at your end you may able to run or debug without CAN devices. Those output messages were intended to give some information and scenario from which you may relate to the code that may cause the issues, being hopeful.
However, I think I could give some more information.
From u-client, uxr_create_session_retries() routine where tries to create a session. By that, it sends out  "[0]=0x80 [1]=0x0 [2]=0x0 [3]=0x0 [4]=0x0 [5]=0x1 [6]=0x10 [7]=0x0
[8]=0x58 [9]=0x52 [10]=0x43 [11]=0x45 [12]=0x1 [13]=0x0 [14]=0x1 [15]=0xf
[16]=0xba [17]=0x5e [18]=0xba [19]=0x11 [20]=0x81 [21]=0x0 [22]=0xfc [23]=0xf",
, and u-Agent responses to it by sending the similar message.  I could be wrong, as this infers from the output traces.
It then execute wait_session_status() {
bool wait_session_status(uxrSession* session, uint8_t* buffer, size_t length, size_t attempts)
{
session->info.last_requested_status = UXR_STATUS_NONE;
int poll_ms = UXR_CONFIG_MIN_SESSION_CONNECTION_INTERVAL;
for(size_t i = 0; i < attempts && session->info.last_requested_status == UXR_STATUS_NONE; ++i)
{
    send_message(session, buffer, length);
    poll_ms = listen_message(session, poll_ms) ? UXR_CONFIG_MIN_SESSION_CONNECTION_INTERVAL : poll_ms * 2;
}

return session->info.last_requested_status != UXR_STATUS_NONE;

}
where you can the for-loop conditions, and one of it is session->info.last_requested_status = = UXR_STATUS_NONE. For breaking the loop, session->info.last_requested_status should not be UXR_STATUS_NONE.
In the routine, it calls listen_message()
bool listen_message(uxrSession* session, int poll_ms)
{
uint8_t* data; size_t length;
int rv = 0, i;
bool must_be_read = recv_message(session, &data, &length, poll_ms);
if (must_be_read == true)
	rv = 1;

printf("\n\r listen_message() must_be_read is %d", rv);
printf("\n\r listen_message() data-length is %d \n\r", length);

for (i=0; i<length; i++) {
	if (!(i%8))
	    printf ("\n\r");
	printf("[%d]=0x%x ", i, (*(data + i)));

}

if(must_be_read)
{
    ucdrBuffer ub;
    ucdr_init_buffer(&ub, data, (uint32_t)length);
    read_message(session, &ub);
    printf("\r\nsession->info.last_requested_status %d \r\n", session->info.last_requested_status);
}

printf("\n\r listen_message() ended \n\r ", rv);
return must_be_read;

}
recv_message() call recv_can_mesg() which is a CAN-transport implementation.
Having received all the frames and put them together as a complete message, it set the must_be_read to true, and execute the following code
if(must_be_read)
{
ucdrBuffer ub;
ucdr_init_buffer(&ub, data, (uint32_t)length);
read_message(session, &ub);
printf("\r\nsession->info.last_requested_status %d \r\n", session->info.last_requested_status);
}
read_message(session, &ub); is where info.last_requested_status  is updated. However, it stays 0xFF for some reasons. I suspect the new CAN-Transport does not full some of those conditions. I don't know what conditions of those. Hence your advice are appreciated.

Answering your question on "Do you have any micro XRCE-DDS Client code that replicates a real CAN buffer device, in order to establish a "fake" connection and being able to debug the code? Thank you."
Unfortunately, no. I did not expect this to happen. Hence, it never crossed my mind wanting to setup that.

Well, you must be testing your code somewhere. Which board are you using? Where is the application responsible of sending the requests to the agent? That is the code I want to get access to, in order to better understand it.

On Olimex STM32-F407 board with a PC.
uClient sending request and listening to the response
int poll_ms = UXR_CONFIG_MIN_SESSION_CONNECTION_INTERVAL;
for(size_t i = 0; i < attempts && session->info.last_requested_status == UXR_STATUS_NONE; ++i)
{
send_message(session, buffer, length);
poll_ms = listen_message(session, poll_ms) ? UXR_CONFIG_MIN_SESSION_CONNECTION_INTERVAL : poll_ms * 2;
}
return session->info.last_requested_status != UXR_STATUS_NONE;

It is in session.c, and attached is interface of the CAN driver, if this helps.
udp_transport_external_c.txt
CAN implementation

Hi Pablo and Jose,
Happy new year. I think, the CAN-Bus transport implementation for uClient and uAgent is very close to the end. I think, I have missed out some conditions which cause the session not able to establish. Appreciate your comments, please?

Hi Pablo and Jose,
Happy new year. I think, the CAN-Bus transport implementation for uClient and uAgent is very close to the end. I think, I have missed out some conditions which cause the session not able to establish. Appreciate your comments, please?

Hi Pablo and Jose,
I am thinking of how to lighten your support. I was wondering if possible sharing the requirements for creating a session i.e., the communication protocol. With that, I could debug and correct it myself at my end.

Hi Pablo and Jose,
I am thinking of how to lighten your support. I was wondering if possible sharing the requirements for creating a session i.e., the communication protocol. With that, I could debug and correct it myself at my end.

Hello @vibnwis, you can find details about the XRCE-DDS standard here: https://www.omg.org/spec/DDS-XRCE/1.0/PDF
You can find documentation about our implementation here: https://micro-xrce-dds.docs.eprosima.com/en/latest/

Hello @vibnwis, you can find details about the XRCE-DDS standard here: https://www.omg.org/spec/DDS-XRCE/1.0/PDF
You can find documentation about our implementation here: https://micro-xrce-dds.docs.eprosima.com/en/latest/

Hi Pablo,
Many thanks for the document. I am reading the document now.
I was wondering if this is a mistake, in 8.2.1 Message, the sentence "the first byte has a 16-byte alignment", otherwise, what does it that mean?

Hi Pablo,
Many thanks for the document. I am reading the document now.
I was wondering if this is a mistake, in 8.2.1 Message, the sentence "the first byte has a 16-byte alignment", otherwise, what does it that mean?

It just that the first byte of an XRCE message has a 16 B alignment. Where do you see the mistake?

It just that the first byte of an XRCE message has a 16 B alignment. Where do you see the mistake?

I don't understand "the first byte",  "has a",  "16-Byte alignment". It
does not make sense.
On Sat, 16 Jan 2021 at 01:46, Pablo Garrido<EMAIL_ADDRESS>wrote:

It just that the first byte of an XRCE message has a 16 B alignment
https://en.wikipedia.org/wiki/Data_structure_alignment. Where do you
see the mistake?
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
https://github.com/eProsima/Micro-XRCE-DDS-Agent/issues/197#issuecomment-760920517,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/ADCYQVXFCWBPBB5IMIS5H6TS2AZ6HANCNFSM4TUQOGUQ
.

I don't understand "the first byte",  "has a",  "16-Byte alignment". It
does not make sense.
On Sat, 16 Jan 2021 at 01:46, Pablo Garrido<EMAIL_ADDRESS>wrote:

It just that the first byte of an XRCE message has a 16 B alignment
https://en.wikipedia.org/wiki/Data_structure_alignment. Where do you
see the mistake?
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
https://github.com/eProsima/Micro-XRCE-DDS-Agent/issues/197#issuecomment-760920517,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/ADCYQVXFCWBPBB5IMIS5H6TS2AZ6HANCNFSM4TUQOGUQ
.

Does it mean the first segment of an XRCE message has a 16-Byte alignment?
On Sat, 16 Jan 2021 at 01:52, vibnwis<EMAIL_ADDRESS>wrote:

I don't understand "the first byte",  "has a",  "16-Byte alignment". It
does not make sense.
On Sat, 16 Jan 2021 at 01:46, Pablo Garrido<EMAIL_ADDRESS>wrote:

It just that the first byte of an XRCE message has a 16 B alignment
https://en.wikipedia.org/wiki/Data_structure_alignment. Where do you
see the mistake?
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
https://github.com/eProsima/Micro-XRCE-DDS-Agent/issues/197#issuecomment-760920517,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/ADCYQVXFCWBPBB5IMIS5H6TS2AZ6HANCNFSM4TUQOGUQ
.

Does it mean the first segment of an XRCE message has a 16-Byte alignment?
On Sat, 16 Jan 2021 at 01:52, vibnwis<EMAIL_ADDRESS>wrote:

I don't understand "the first byte",  "has a",  "16-Byte alignment". It
does not make sense.
On Sat, 16 Jan 2021 at 01:46, Pablo Garrido<EMAIL_ADDRESS>wrote:

It just that the first byte of an XRCE message has a 16 B alignment
https://en.wikipedia.org/wiki/Data_structure_alignment. Where do you
see the mistake?
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
https://github.com/eProsima/Micro-XRCE-DDS-Agent/issues/197#issuecomment-760920517,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/ADCYQVXFCWBPBB5IMIS5H6TS2AZ6HANCNFSM4TUQOGUQ
.

Hi Pablo and Jose,
XRCE protocols say uAgent responses to submessageID CREATE_CLIENT(0x0) with submessageID STATUS_AGENT (0x4).
However, from the messages captured, showing below, it shows that the uAGent received  CREATE_CLIENT(0x0) submessages, but responded to it with also a CREATE_CLIENT submessage.
Any comments, please?
------ uAgent receiving a message, made out of 4 frames due to limitation of CAN-Bus ------
< CAN2 concatenated frames
[0]=0x80 [1]=0x0 [2]=0x0 [3]=0x0 [4]=0x0 [5]=0x1 [6]=0x10 [7]=0x0
[8]=0x58 [9]=0x52 [10]=0x43 [11]=0x45 [12]=0x1 [13]=0x0 [14]=0x1 [15]=0xf
[16]=0xba [17]=0x5e [18]=0xba [19]=0x11 [20]=0x81 [21]=0x0 [22]=0xfc [23]=0xf
CAN2 concatenated frames >
set_data()- len 24
set_data()- ended
len 24 byte, id: 0x123
data[0]: 0x80 data[1]: 0x0 data[2]: 0x0 data[3]: 0x0 data[4]: 0x0 data[5]: 0x1 data[6]: 0x10 data[7]: 0x0
data[8]: 0x58 data[9]: 0x52 data[10]: 0x43 data[11]: 0x45 data[12]: 0x1 data[13]: 0x0 data[14]: 0x1 data[15]: 0xf
data[16]: 0xba data[17]: 0x5e data[18]: 0xba data[19]: 0x11 data[20]: 0x81 data[21]: 0x0 data[22]: 0xfc data[23]: 0xf
write frame_id 0x123 to source of input_packet
write message_len 24 to source of input_packet
CAN2Agent::recv_message() exited
CAN2Agent::recv_message() entered
SocketCAN:: handler 3
SocketCAN::read  getsockopt() succeeded len = 4
SocketCAN:: Read() - A Frame memory space is ready and about to read from CAN interface can0
[1608462735.786223] info     | SessionManager.hpp | establish_session        | session re-established | client_key: 0x3126770193, address: 291
------ uAgent sending out a message, then breaking into 4 frames due to limitation of CAN-Bus ------
CAN2Agent::send_message() entered
CAN2Agent::send_message() copied id 291CAN2Agent::send_message() copied len 24SocketCAN: write() frame.can_dlc= 8, frame.can_id = 291
data[0x3] data[0x80] data[0x0] data[0x0] data[0x0] data[0x0] data[0x1] data[0x10] Frame 3 was written to the CANSocket.
SocketCAN: write() frame.can_dlc= 8, frame.can_id = 291
data[0x2] data[0x0] data[0x58] data[0x52] data[0x43] data[0x45] data[0x1] data[0x0] Frame 2 was written to the CANSocket.
SocketCAN: write() frame.can_dlc= 8, frame.can_id = 291
data[0x1] data[0x1] data[0xf] data[0xba] data[0x5e] data[0xba] data[0x11] data[0x81] Frame 1 was written to the CANSocket.
SocketCAN: write() frame.can_dlc= 4, frame.can_id = 291
data[0x0] data[0x0] data[0xfc] data[0xf] Frame 0 was written to the CANSocket.
CAN2Agent::send_message() exited

Hi Pablo and Jose,
XRCE protocols say uAgent responses to submessageID CREATE_CLIENT(0x0) with submessageID STATUS_AGENT (0x4).
However, from the messages captured, showing below, it shows that the uAGent received  CREATE_CLIENT(0x0) submessages, but responded to it with also a CREATE_CLIENT submessage.
Any comments, please?
------ uAgent receiving a message, made out of 4 frames due to limitation of CAN-Bus ------
< CAN2 concatenated frames
[0]=0x80 [1]=0x0 [2]=0x0 [3]=0x0 [4]=0x0 [5]=0x1 [6]=0x10 [7]=0x0
[8]=0x58 [9]=0x52 [10]=0x43 [11]=0x45 [12]=0x1 [13]=0x0 [14]=0x1 [15]=0xf
[16]=0xba [17]=0x5e [18]=0xba [19]=0x11 [20]=0x81 [21]=0x0 [22]=0xfc [23]=0xf
CAN2 concatenated frames >
set_data()- len 24
set_data()- ended
len 24 byte, id: 0x123
data[0]: 0x80 data[1]: 0x0 data[2]: 0x0 data[3]: 0x0 data[4]: 0x0 data[5]: 0x1 data[6]: 0x10 data[7]: 0x0
data[8]: 0x58 data[9]: 0x52 data[10]: 0x43 data[11]: 0x45 data[12]: 0x1 data[13]: 0x0 data[14]: 0x1 data[15]: 0xf
data[16]: 0xba data[17]: 0x5e data[18]: 0xba data[19]: 0x11 data[20]: 0x81 data[21]: 0x0 data[22]: 0xfc data[23]: 0xf
write frame_id 0x123 to source of input_packet
write message_len 24 to source of input_packet
CAN2Agent::recv_message() exited
CAN2Agent::recv_message() entered
SocketCAN:: handler 3
SocketCAN::read  getsockopt() succeeded len = 4
SocketCAN:: Read() - A Frame memory space is ready and about to read from CAN interface can0
[1608462735.786223] info     | SessionManager.hpp | establish_session        | session re-established | client_key: 0x3126770193, address: 291
------ uAgent sending out a message, then breaking into 4 frames due to limitation of CAN-Bus ------
CAN2Agent::send_message() entered
CAN2Agent::send_message() copied id 291CAN2Agent::send_message() copied len 24SocketCAN: write() frame.can_dlc= 8, frame.can_id = 291
data[0x3] data[0x80] data[0x0] data[0x0] data[0x0] data[0x0] data[0x1] data[0x10] Frame 3 was written to the CANSocket.
SocketCAN: write() frame.can_dlc= 8, frame.can_id = 291
data[0x2] data[0x0] data[0x58] data[0x52] data[0x43] data[0x45] data[0x1] data[0x0] Frame 2 was written to the CANSocket.
SocketCAN: write() frame.can_dlc= 8, frame.can_id = 291
data[0x1] data[0x1] data[0xf] data[0xba] data[0x5e] data[0xba] data[0x11] data[0x81] Frame 1 was written to the CANSocket.
SocketCAN: write() frame.can_dlc= 4, frame.can_id = 291
data[0x0] data[0x0] data[0xfc] data[0xf] Frame 0 was written to the CANSocket.
CAN2Agent::send_message() exited

I revisited the CAN2Agent::send_message() and the bool CAN2Agent::recv_message(), making sure they do not use a common message buffers. I can confirm that they don't use a common message buffer.
Knowing that you guys are busy. As I am lack of the upper layer protocols implementation knowledge, however, I am happy to help.   Can you please point out to the possible causes of the issues, I will then try it at this end.  I look forward to hearing from you soon. Thank you

I revisited the CAN2Agent::send_message() and the bool CAN2Agent::recv_message(), making sure they do not use a common message buffers. I can confirm that they don't use a common message buffer.
Knowing that you guys are busy. As I am lack of the upper layer protocols implementation knowledge, however, I am happy to help.   Can you please point out to the possible causes of the issues, I will then try it at this end.  I look forward to hearing from you soon. Thank you

Hi Pablo, Jose and team,
I have been tracing the code line by line. I hope you guys can give me some clues. This project is a Master Degree project, which I initiated since August 2020, it is through Massey University Auckland, New Zealand. Should you require further confirmation, I am happy to introduce my supervisors. The reasons are I do not step on anyone/organization toes. I will fully disclose the code as required by the open-source requirements.
The following are the traces, output messages when I run the uAgent and the Client. In simplicity, the uclient sent out 0x80 session_id and 0x00 submesssage_id, in return, it received 0x80 session_id, and 0x00 submessage_id as well. For me to understand it further, I created the traces as well as fake the messages of session_id 0x81 and 0x80 together with submessage_id 0x0 and 0x4. Below are the code and the condition. Nevertheless, they still failed in terms of creating a session. Hence, I hope you guys can provide some insight or advice. Also, If it is not causing any problems, to make the work simpler for you guys, can I request complete working messages for creating a session between uClient and uAgent. With that at least, I can compare and make necessary changes to code.
------ A message response sending from uAgent ----------
CAN2Agent::send_message() entered
CAN2Agent::send_message() copied id 291CAN2Agent::send_message() copied len 24SocketCAN: write() frame.can_dlc= 8, frame.can_id = 291
data[0x3] data[0x80] data[0x0] data[0x0] data[0x0] data[0x0] data[0x1] data[0x10] Frame 3 was written to the CANSocket.
SocketCAN: write() frame.can_dlc= 8, frame.can_id = 291
data[0x2] data[0x0] data[0x58] data[0x52] data[0x43] data[0x45] data[0x1] data[0x0] Frame 2 was written to the CANSocket.
SocketCAN: write() frame.can_dlc= 8, frame.can_id = 291
data[0x1] data[0x1] data[0xf] data[0xba] data[0x5e] data[0xba] data[0x11] data[0x81] Frame 1 was written to the CANSocket.
SocketCAN: write() frame.can_dlc= 4, frame.can_id = 291
data[0x0] data[0x0] data[0xfc] data[0xf] Frame 0 was written to the CANSocket.
CAN2Agent::send_message() exited

At uClient, session creation still failed
It begins by initialization through function, void uxr_init_session(uxrSession* session, uxrCommunication* comm, uint32_t key)
{
//uxr_init_session_info(&session->info, 0x81, key);

;;
}
Which set the &session->info = 0x81, key = BA5EBA!!
When session_id received is 0x80, in function bool uxr_read_session_header(const uxrSessionInfo* info, ucdrBuffer* ub, uint8_t* stream_id_raw, uxrSeqNum* seq_num) at line must_be_read = session_id == info->id;, due to the session_id is 0x80, expected value info->id = 0x81, it returned a must_be_read=false value which stop reading the submessage contents. Subsequently the session->info.last_requested_status remains unchanged at 255. This causes function wait_session_status(uxrSession* session, uint8_t* buffer, size_t length, size_t attempts) to retry till the last attempt by the followign for-loop for(size_t i = 0; i < attempts && session->info.last_requested_status == UXR_STATUS_NONE; ++i). However, for a session to be created, it must receive submessage_id=0x04. As such I fake a message with submessage_id=0x04, and the session_id=0x81. However, from the traces, it returned session->info.last_requested_status = 88 which still does not meet UXR_STATUS_OK. See the code below.
bool created = received && UXR_STATUS_OK == session->info.last_requested_status;

Hi Pablo, Jose and team,
I have been tracing the code line by line. I hope you guys can give me some clues. This project is a Master Degree project, which I initiated since August 2020, it is through Massey University Auckland, New Zealand. Should you require further confirmation, I am happy to introduce my supervisors. The reasons are I do not step on anyone/organization toes. I will fully disclose the code as required by the open-source requirements.
The following are the traces, output messages when I run the uAgent and the Client. In simplicity, the uclient sent out 0x80 session_id and 0x00 submesssage_id, in return, it received 0x80 session_id, and 0x00 submessage_id as well. For me to understand it further, I created the traces as well as fake the messages of session_id 0x81 and 0x80 together with submessage_id 0x0 and 0x4. Below are the code and the condition. Nevertheless, they still failed in terms of creating a session. Hence, I hope you guys can provide some insight or advice. Also, If it is not causing any problems, to make the work simpler for you guys, can I request complete working messages for creating a session between uClient and uAgent. With that at least, I can compare and make necessary changes to code.
------ A message response sending from uAgent ----------
CAN2Agent::send_message() entered
CAN2Agent::send_message() copied id 291CAN2Agent::send_message() copied len 24SocketCAN: write() frame.can_dlc= 8, frame.can_id = 291
data[0x3] data[0x80] data[0x0] data[0x0] data[0x0] data[0x0] data[0x1] data[0x10] Frame 3 was written to the CANSocket.
SocketCAN: write() frame.can_dlc= 8, frame.can_id = 291
data[0x2] data[0x0] data[0x58] data[0x52] data[0x43] data[0x45] data[0x1] data[0x0] Frame 2 was written to the CANSocket.
SocketCAN: write() frame.can_dlc= 8, frame.can_id = 291
data[0x1] data[0x1] data[0xf] data[0xba] data[0x5e] data[0xba] data[0x11] data[0x81] Frame 1 was written to the CANSocket.
SocketCAN: write() frame.can_dlc= 4, frame.can_id = 291
data[0x0] data[0x0] data[0xfc] data[0xf] Frame 0 was written to the CANSocket.
CAN2Agent::send_message() exited

At uClient, session creation still failed
It begins by initialization through function, void uxr_init_session(uxrSession* session, uxrCommunication* comm, uint32_t key)
{
//uxr_init_session_info(&session->info, 0x81, key);

;;
}
Which set the &session->info = 0x81, key = BA5EBA!!
When session_id received is 0x80, in function bool uxr_read_session_header(const uxrSessionInfo* info, ucdrBuffer* ub, uint8_t* stream_id_raw, uxrSeqNum* seq_num) at line must_be_read = session_id == info->id;, due to the session_id is 0x80, expected value info->id = 0x81, it returned a must_be_read=false value which stop reading the submessage contents. Subsequently the session->info.last_requested_status remains unchanged at 255. This causes function wait_session_status(uxrSession* session, uint8_t* buffer, size_t length, size_t attempts) to retry till the last attempt by the followign for-loop for(size_t i = 0; i < attempts && session->info.last_requested_status == UXR_STATUS_NONE; ++i). However, for a session to be created, it must receive submessage_id=0x04. As such I fake a message with submessage_id=0x04, and the session_id=0x81. However, from the traces, it returned session->info.last_requested_status = 88 which still does not meet UXR_STATUS_OK. See the code below.
bool created = received && UXR_STATUS_OK == session->info.last_requested_status;

Resolved.  Should use output_packet.message instead for sending messages.


Needs an upper bound bump for hledger-lib-1.40

A revision allowing hledger-lib >=1.33 && <1.41 would be enough (I tested with --allow-newer).

Ping @hpdeifel

PS I'm happy to help with such revisions if you'd like me to; I'd need access at https://hackage.haskell.org/package/hledger-iadd

Fixed, sorry for the delay!
@simonmichael I've added you as maintainer on hackage. Please feel free to publish revisions if I don't respond within a few days.


CryomagneticsModel4G Power Supply Driver

This Pull Request introduces the CryomagneticsModel4G
Summary of driver features:

Unit Conversion Handling: Implemented a reliable mechanism for unit conversions between kilogauss (kG) and tesla (T), ensuring precise magnetic field computations.
Parameter Management: Added comprehensive parameter support for magnetic field, ramp rates, and voltage readings, allowing detailed control and monitoring of the instrument.
Robust Error Detection: Enhanced the driver’s ability to detect and manage hardware-specific errors such as quench conditions and power failures, preventing operations under unsafe or unsuitable conditions.
Optimized magnet operating state checks to reduce command execution latency and system load.
Logging: Updated logging framework for clearer operational insights and enriched inline documentation for better code maintainability.

Testing:
Complemented the new features with a suite of unit tests, ensuring robustness and reliability through extensive coverage.

Thanks @trevormorgan Left a few more comments in line. Pleas also remember

Please also make sure to add the CryoMagnetics folder to the docs. under docs/driver_api

@trevormorgan , and a news fragment would be great to add :) https://microsoft.github.io/Qcodes/community/contributing.html#pull-requests?highlight=newsfragments


Render workbench inside visual viewport.

This PR attempts to ensure the workbench is rendered inside the visual viewport. Technically there are two solutions but none of them is perfect

CSS safe area inset. It works fine for the home indicator if we set it on document.body but it leads to tons of rendering issues as document.body right now is position: fixed; height: 100%;. We can probably make it absolute to fix the bug we saw on VSO but the safe area inset doesn't take onscreen keyboard into account, which means if you are using onscreen keyboard, it won't shrink the workbench. No go
window.visualViewport, it works properly. The only catch is it doesn't rule out home indicator but it's fine.

Right now, window.visualViewport is used when it exits and it has higher priority than window.height, document.body.clientY.
Another change @sbatten proposed is changing whether a focused view (editor, terminal, etc) should be shrinked or not when the view port size shrinks.

Touch is disabled on body to ensure that when the size of workbench is smaller than body, you won't be able to scroll the whole body and see the whitespace below the workbench.


Refactor code, fix logic bugs, complete missing implementations

Reorganize code by splitting up each optimization into a separate function with a common behaviour:

Check if the instruction is suitable for the optimisation
Return immediately if not
Continue if is suitable
Return true if optimization has been applied
Return false otherwise

Refactor optAlgId by applying DRY programming principle

Refactorized all opt passes with the following benefits:

increased readability
less code indentation by immediately exiting from the pass if the assumptions are not met
optMultiInstr generalized for the patterns that lead to nullification with adds and subs

@ent0n29 @ch-fano aspetto la vostra revisione