*: Add support for dynamically generating Bundle resources

Summary
Introduce support for embedding Bundles within the BundleInstance API, and dynamically generating Bundle resources within that API.
Prior work

Design document
Immutable Bundles

API Changes
The BundleInstance API has been updated to add support for configuring Bundle resources through a BundleTemplate spec.template field, which replaces the existing spec.BundleName require field. This API now closely resembles patterns seen throughout core Kubernetes, like the Deployment/ReplicaSet/StatefulSet/etc. APIs that contain an embedded PodSpec resource.
Also, the BundleInstance API now supports label or field selecting existing Bundle resources through the spec.Selector field. That field is required field in the BundleInstance CRD. Individual provisioners are responsible for implementing this in their controllers.
Behavior Changes
The plain provisioner now supports dynamically generated Bundle resources through the use of a spec.Template configuration. Note: the existing behavior around statically "activating' Bundle resources through the spec.BundleName field for an individual BundleInstance resource is no longer a possible workflow. In the future, both the static and dynamic "activation' of Bundle resources within an individual BundleInstance resource may be possible as it's a pattern seen throughout core Kubernetes (e.g. PersistentVolumes can be statically or dynamically provisioned.

Note: You can still manually create Bundle resources to help enable auditing workflows.

When the plain provisioner's BI controller sees a BundleInstance resource that contains a desired Bundle template that doesn't match any Bundles that exist on the cluster, a new Bundle will be generated to match that desired configuration. Note that existing Bundles aren't updated to the immutability of a Bundle's spec field.
In the case that multiple Bundles match the desired configuration, the BI controller is responsible for selecting the most recent Bundle based on the metadata.CreationTimestamp field, and ensuring that selected Bundle's unpacked contents are present on the cluster.
During updates to an individual BundleInstance resource, the plain provisioner is responsible for checking whether the newly generated Bundle resource is able to be successfully unpacked and installed, before removing the previously installed Bundle's contents from the cluster. This behavior helps prevent the scenario where newly generated Bundle resources fail to unpack, and the existing installation is deleted due to poor pivoting behavior.
Misc.
Closes #94
Closes #73
Signed-off-by: timflannagan<EMAIL_ADDRESS>

Notes from call for follow ups:

Blocking:

Add support for reconciling metadata.Annotations within a Bundle's template

Joe: hash the template, and use that hash for that Bundle's metadata.Name so the lookup logic for an existing Bundle is more straight forward

Label selectors (spec.Selector) being a required field for all provisioners?

Do we need label selectors? Rely on the core.rukpak.io/owner-kind label instead?
Use case is users want to inject their own labels/annotations for the generated Bundle
Punt on a top-level spec.Select metav1.LabelSelector field until we have a concrete use case where this is necessarily

Follow up:

Re-evaluate whether we need a safeguard around a limit on how many Bundles should be generated at a time

Do we need more than two Bundles at a time (one active/one pending)
Upgrade fails we roll back?
Keeping multiple helm release secrets around at a time

Shore up the UX around the BI printer columns to more-or-less emulate the Deployment/RS boolean values over string
Do we have a need for 1:N BundleInstance resources for subscription-esq scenarios?

Current expectation is that a higher level controller would manage an individual BundleInstance resource
Note: there's no adoption mechanism for an existing BundleInstance resources

RukPak's plain provisioner packaged as a BundleInstance resource


fix generate data PO external

Coverage remained the same at 78.616% when pulling c02f90d6a1bb3a9be4f35d783114418b4e057dec on achensetyawati:dev into 966ae3a388c0782acad4b9ed1a2a8dec4953dbae on danliris:dev.


Cannot proxy to Mariadb instance

Hey... maybe I am missing something but since the L4 Module seems to wait for a byte to be sent and is not opening a proxy connection until that moment it will not recieve the mariadb greeting session hence the client also waits until the connection is closed due to a timeout since nobody actually talked.
I tested with telnet:
kb@MacBook-Air ~ % telnet <IP_ADDRESS> 3306
Trying <IP_ADDRESS>...
Connected to localhost.
Escape character is '^]'.
Connection closed by foreign host.

kb@MacBook-Air ~ % telnet <IP_ADDRESS> 3306
Trying <IP_ADDRESS>...
Connected to localhost.
Escape character is '^]'.
test
Z
11.2.4-MariaDB-ubu220'0YQjCL7??-j4al|I8{&Fmumysql_native_password5#HY000Proxy header is not accepted from <IP_ADDRESS>Connection closed by foreign host.

When I just try to connect... it will close after:
WARN    layer4  matching connection     {"remote": "<IP_ADDRESS>:53364", "error": "aborted matching according to timeout"}
If I am fast enough to just send random bytes (like here text) MariaDB will answer with its greeting but of course terminate because just sent some garbage in its view.
What can I do? Is there a buffer value? Anything related to it?
Caddyfile:
{
  layer4 {

    :3306 {
      route {
        proxy {
          upstream mariadb:3306
        }
      }
    }

  }
}

@vnxme Just a quick thought as a side-note: I wonder if instead of upstream we should call it to like we do in the HTTP proxy (I can't remember if we already talked about this)?
@ydylla Do you think this is fixed by one of the proposed patches? Seems like it shouldn't be waiting to match in this case.

@mholt, I've certainly thought about it. Decided to avoid using to and keep upstream, because upstream here, unlike in the http app, may have multiple inner options like max_connections and tls_* ones defined per upstream. See more here.
In this case we could also use a shorter syntax:
{
  layer4 {
    :3306 {
      route {
        proxy mariadb:3306
      }
    }
  }
}

@mholt

Do you think this is fixed by one of the proposed patches?

No. It's essentially a duplicate of #212. prefetch is called eagerly right now so all protocols where the server speaks first will not work. I did not consider these cases during the rewrite.
I will try to make prefetch lazy again.

Thanks. :smiley: Since all the big changes lately I'm a little behind on side-effects. I appreciate your help!

Could you add a boolean tag lazy; when it's set, it works like it is now so that when applications just connect but not transmitting anything directly it will choose and upstream on first byte. Without lazy the whole connections is established directly?
I think it would prevent other users from encountering  this unexpected situation. I spent time in debugging if the containers are connected, if there are network errors etc.
If lazy explicitly set, the user has to know what he is doing.

@KevinBLT Please try it with the lazy-prefetch branch from #229.
There is no need for a lazy flag, reading lazily from the connection during matching works for all cases. And was also the old behavior before my rewrite. I just forgot to think about server speaks first configs 😅

@KevinBLT FIY, it's also fixed here, build caddy by xcaddy build --with github.com/mholt/caddy-l4=github.com/WeidiDeng/caddy-l4@routes-fixes

Yes, it is working! Thanks :)


Assertion failure

I'm having a problem with rustbuzz crashing inside of diffenator3 for a particular font (NotoSansMalayalam[wdth,wght].ttf.gz).
Here's a reproducer:
        let font = include_bytes!("NotoSansMalayalam[wdth,wght].ttf");
        let mut face = Face::from_slice(font, 0).unwrap();
        let mut buffer = UnicodeBuffer::new();
        let string = "സ്ഥലമായിരുന്നതിനാല്";
        buffer.push_str(string);
        println!(">{}", string);
        let plan = ShapePlan::new(
            &face,
            Direction::LeftToRight,
            Some(script::MALAYALAM),
            None,
            &[],
        );

        let output = shape_with_plan(&face, &plan, buffer);

And here's the backtrace:
                              ⋮ 12 frames hidden ⋮
13: core::panicking::panic::hc3763f3effcb9929
    at <unknown source file>
14: rustybuzz::hb::buffer::hb_buffer_t::move_to::he6a9580defbf1514
    at /Users/simon/.cargo/registry/src/index.crates.io-6f17d22bba15001f/rustybuzz-0.20.0/src/hb/buffer.rs:1156
    1154 │         }
    1155 │
    1156 >         assert!(i <= self.out_len + (self.len - self.idx));
    1157 │
    1158 │         if self.out_len < i {
15: rustybuzz::hb::ot_layout_gsubgpos::apply_lookup::hb0bb938a671a37e1
    at /Users/simon/.cargo/registry/src/index.crates.io-6f17d22bba15001f/rustybuzz-0.20.0/src/hb/ot_layout_gsubgpos.rs:980
     978 │     }
     979 │
     980 >     ctx.buffer.move_to(end);
     981 │ }
     982 │
16: <ttf_parser::ggg::chained_context::ChainedContextLookup as rustybuzz::hb::ot_layout_gsubgpos::Apply>::apply::h6da40ea28f40f5f6
    at /Users/simon/.cargo/registry/src/index.crates.io-6f17d22bba15001f/rustybuzz-0.20.0/src/hb/ot_layout_gsubgpos.rs:663
     661 │                 ctx.buffer
     662 │                     .unsafe_to_break_from_outbuffer(Some(start_index), Some(end_index));
     663 >                 apply_lookup(
     664 │                     ctx,
     665 │                     usize::from(input_coverages.len()),
17: rustybuzz::hb::ot_layout_gsub_table::<impl rustybuzz::hb::ot_layout_gsubgpos::Apply for ttf_parser::tables::gsub::SubstitutionSubtable>::apply::h3f7e621c5b38371c
    at /Users/simon/.cargo/registry/src/index.crates.io-6f17d22bba15001f/rustybuzz-0.20.0/src/hb/ot_layout_gsub_table.rs:49
      47 │             Self::Ligature(t) => t.apply(ctx),
      48 │             Self::Context(t) => t.apply(ctx),
      49 >             Self::ChainContext(t) => t.apply(ctx),
      50 │             Self::ReverseChainSingle(t) => t.apply(ctx),
      51 │         }
18: rustybuzz::hb::ot::layout::GSUB::subst_lookup::<impl rustybuzz::hb::ot_layout_gsubgpos::Apply for rustybuzz::hb::ot_layout_common::SubstLookup>::apply::h1180360a0b8d580a
    at /Users/simon/.cargo/registry/src/index.crates.io-6f17d22bba15001f/rustybuzz-0.20.0/src/hb/ot/layout/GSUB/subst_lookup.rs:35
      33 │         if self.digest().may_have_glyph(ctx.buffer.cur(0).as_glyph()) {
      34 │             for subtable in &self.subtables {
      35 >                 if subtable.apply(ctx).is_some() {
      36 │                     return Some(());
      37 │                 }
19: rustybuzz::hb::ot_layout::apply_forward::h40254d8f0cec948a
    at /Users/simon/.cargo/registry/src/index.crates.io-6f17d22bba15001f/rustybuzz-0.20.0/src/hb/ot_layout.rs:302
     300 │         if (cur.mask & ctx.lookup_mask()) != 0
     301 │             && ctx.check_glyph_property(cur, ctx.lookup_props)
     302 >             && lookup.apply(ctx).is_some()
     303 │         {
     304 │             ret = true;
20: rustybuzz::hb::ot_layout::apply_string::h41a8546a60574f08
    at /Users/simon/.cargo/registry/src/index.crates.io-6f17d22bba15001f/rustybuzz-0.20.0/src/hb/ot_layout.rs:282
     280 │         }
     281 │         ctx.buffer.idx = 0;
     282 >         apply_forward(ctx, lookup);
     283 │
     284 │         if !T::IN_PLACE {
21: rustybuzz::hb::ot_layout::apply_layout_table::h29833b22a4aa51bc
    at /Users/simon/.cargo/registry/src/index.crates.io-6f17d22bba15001f/rustybuzz-0.20.0/src/hb/ot_layout.rs:256
     254 │                     ctx.per_syllable = lookup_map.per_syllable;
     255 │
     256 >                     apply_string::<T>(&mut ctx, lookup);
     257 │                 }
     258 │             }
22: rustybuzz::hb::ot_layout_gsub_table::substitute::h1449b349b6791f0f
    at /Users/simon/.cargo/registry/src/index.crates.io-6f17d22bba15001f/rustybuzz-0.20.0/src/hb/ot_layout_gsub_table.rs:13
      11 │
      12 │ pub fn substitute(plan: &hb_ot_shape_plan_t, face: &hb_font_t, buffer: &mut hb_buffer_t) {
      13 >     apply_layout_table(plan, face, buffer, face.gsub.as_ref());
      14 │ }
      15 │
23: rustybuzz::hb::ot_shape::hb_ot_substitute_plan::hccd88507dd191d9a
    at /Users/simon/.cargo/registry/src/index.crates.io-6f17d22bba15001f/rustybuzz-0.20.0/src/hb/ot_shape.rs:393
     391 │         aat_layout::hb_aat_layout_substitute(ctx.plan, ctx.face, ctx.buffer);
     392 │     } else {
     393 >         super::ot_layout_gsub_table::substitute(ctx.plan, ctx.face, ctx.buffer);
     394 │     }
     395 │ }
24: rustybuzz::hb::ot_shape::substitute_pre::hcbfcfe8bf658fb43
    at /Users/simon/.cargo/registry/src/index.crates.io-6f17d22bba15001f/rustybuzz-0.20.0/src/hb/ot_shape.rs:346
     344 │ fn substitute_pre(ctx: &mut hb_ot_shape_context_t) {
     345 │     hb_ot_substitute_default(ctx);
     346 >     hb_ot_substitute_plan(ctx);
     347 │
     348 │     if ctx.plan.apply_morx && ctx.plan.apply_gpos {
25: rustybuzz::hb::ot_shape::shape_internal::hc835d90c43eef53c
    at /Users/simon/.cargo/registry/src/index.crates.io-6f17d22bba15001f/rustybuzz-0.20.0/src/hb/ot_shape.rs:334
     332 │     }
     333 │
     334 >     substitute_pre(ctx);
     335 │     position(ctx);
     336 │     substitute_post(ctx);
26: rustybuzz::hb::shape::shape_with_plan::h2df57445f599ab4b
    at /Users/simon/.cargo/registry/src/index.crates.io-6f17d22bba15001f/rustybuzz-0.20.0/src/hb/shape.rs:71
      69 │         #[cfg(not(feature = "wasm-shaper"))]
      70 │         {
      71 >             shape_internal(&mut hb_ot_shape_context_t {
      72 │                 plan,
      73 │                 face,
27: diffenator3_lib::render::renderer::tests::test_rustybuzz_crash::he1916ce60e7b4dcd
    at /Users/simon/hacks/typography/diffenator3/diffenator3-lib/src/render/renderer.rs:223
     221 │         );
     222 │
     223 >         let output = shape_with_plan(&face, &plan, buffer);
     224 │         panic!("Fail")
     225 │     }

Does the same font/text crash HB by any chance?
That piece of code is the nastiest part of OT / HB.

No crash in HB, no. I'll try adding some debugging prints around the values of end, match_positions etc and run it again in both.

The problem is this line:
        end = (end as isize + delta) as _;

In this case, end is initially 0, delta is -2, so the value of end after this statement is<PHONE_NUMBER>3709551615. An attempt to resize the buffer to 18 exabytes does not go well.

I'm getting confused between harfruzz and rustybuzz. This failure was in harfruzz; I don't know if it applies to rustybuzz. Fix in https://github.com/harfbuzz/harfruzz/pull/15

Will open a PR for here with a test case.

There are a few other instances of this exact construct as well as a large number of as invocations on integer types that are not very safe or idiomatic. That doesn't necessarily mean it is even possible to trigger other issues like this one, but it does mean there could be a little more defensive coding here.

The problem is this line:
        end = (end as isize + delta) as _;

In this case, end is initially 0, delta is -2, so the value of end after this statement is<PHONE_NUMBER>3709551615. An attempt to resize the buffer to 18 exabytes does not go well.

I think the problem is that in HB, end is defined as signed int, but that is lost in the translation maybe? I prefer staying close to HB instead of using saturating_add here, which would need verification that it satisfies the semantics.

Yes, end was/is inheriting its type much earlier from ctx.buffer.backtrack_len() which returns usize not isize. I'll look into making mut end: isize to start with, and also whether the other unsigned types that have stuff subtracted from them may have been signed types in HB.

@behdad In fixing the integer type to track HB's implementation I have a question about this from HB:
static bool match_lookahead (hb_ot_apply_context_t *c,
			     unsigned int count,
			     const HBUINT lookahead[],
			     match_func_t match_func,
			     const void *match_data,
			     unsigned int start_index,
			     unsigned int *end_index)
{
  TRACE_APPLY (nullptr);

  hb_ot_apply_context_t::skipping_iterator_t &skippy_iter = c->iter_context;
  skippy_iter.reset (start_index - 1);

My C isn't very good so I don't claim to understand the implications on that side, but on the Rust side it seems suspicious. The start_index is being passed into this function unsigned, but promptly has a value subtracted from it. This is one of the other cases I initially flagged in #146 as potentially needing a safeguard.
Is there any potential of this being called with a starting index of 0?

Is there any potential of this being called with a starting index of 0?

No. Because match_lookahead is always called with start_index following the "input" match, which always has at least one item in it. We can add an assert I think.

An assert it is.
A bit latter on (again from HB code):
unsigned int last_num_components = _hb_glyph_info_get_lig_num_comps (&buffer->cur());
unsigned int components_so_far = last_num_components;
// both numbers get manipulated, then later...
unsigned int new_lig_comp = components_so_far - last_num_components + hb_min (this_comp, last_num_components);

Should I just assert!(components_so_far >= last_num_components) in the places where this subtraction happens, or cast it to a signed value instead or use saturating_sub() instead?

An assert it is.
A bit latter on (again from HB code):
unsigned int last_num_components = _hb_glyph_info_get_lig_num_comps (&buffer->cur());
unsigned int components_so_far = last_num_components;
// both numbers get manipulated, then later...

If you check out how they are manipulated, `components_so_far` starts as being equal to `last_num_components`, and every time `last_num_components` changes, it is *added* to `components_so_far`. So that assert you suggest is indeed guaranteed.

unsigned int new_lig_comp = components_so_far - last_num_components + hb_min (this_comp, last_num_components);

Should I just `assert!(components_so_far >= last_num_components)` in the places where this subtraction happens, or cast it to a signed value instead or use `saturating_sub()` instead?

That makes sense, and my PR is asserting it now as well.
I did just spot another instance of a type mismatch (the prev() function has stop as a signed type where HB is unsigned) so I'll go add that too. That's the last of the related potentially problematic math situations I see see in the gsubgpos module at least.


Round ltv values to 3 decimal places

just what it says, Travis couldn't find any errors either

@fna Are we also changing the database field to Decimal instead of Float?

I haven't done it, but it does make sense if we're only interested in the 3 decimal points. I'll update this branch.

@fna
calculate_loan_to_value in views.py needs to be updated to convert float to string to decimal, since it is outputting a float, and try to do a comparison with decimal in the database.  It crashes.

@amymok excellent find, but I can't recreate it, could you describe the steps?

looks great :+1:


Image Validator DOWN

Reported by Régis:
" The parameters seem to be ok, but the process end up with a blank page. The url is https://iiif.io/api/image/validator/results/?server=https%3A%2F%2Fccj-iiif.huma-num.fr&prefix=iiif%2Fimage&identifier=JP2%2F67352ccc-d1b0-11e1-89ae-279075081939.jp2&version=2.0&level=1"
Following the link results in a blank page with just the title and a Return to Validator link. Going to the validator page:
https://iiif.io/api/image/validator/
it doesn't list the available tests and checking:
http://image-validator.iiif.io
you get a blank screen. So I think the image validator Elastic Beanstalk service is down.

According to Elastic Beanstalk service it went down yesterday at 17:01 UK time. It did send a notification to say it had got into a Severe state. It sent the following emails:

16:39 - Environment health has transitioned from Ok to Warning
17:01 - Environment health has transitioned from Warning to Severe
17:11 -  iiif-website-proxy Ok to Warning. 1.9 % of the requests to the ELB are failing with HTTP 5xx
17:16 - iiif-website-proxy Environment health has transitioned from Warning to Ok

So what has probably happened is it went down around 16:40 sent the warning emails and then someone tried to use the validator around 17:10 which caused the website proxy errors. It would be useful if the validator continued to send emails if its in severe state rather than just on the change on state.

Ssh and http access to the instance is failing. Trying to get the logs through Elastic Beanstalk is also failing. Status check for the instance both say the instance is OK. It currently has two checks:

System Status Checks - checks network and power
Instance Status Checks - checks operating system is receiving traffic.

and both say they are ok...

It would be nice if Elastic Beanstalk created a new instance if the 1 instance is failing... It looks like this might be possible with:
https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/environmentconfig-autoscaling-healthchecktype.html
Note in the description it mentions:
"Amazon EC2 status checks only cover an instance's health, not the health of your application, server, or any Docker containers running on the instance. If your application crashes, but the instance that it runs on is still healthy, it may be kicked out of the load balancer, but Auto Scaling won't replace it automatically. The default behavior is good for troubleshooting. If Auto Scaling replaced the instance as soon as the application crashed, you might not realize that anything went wrong, even if it crashed quickly after starting up. "
Which I think is happening here. The application is failing but this isn't enough to reboot the application...

To fix it for now I am going to reboot the instance...

So reboot didn't work. Had to terminate but should have tried stop first. Terminate removes the instance and it can't be restarted. Luckily Elastic beanstalk created a new instance and this seems to be working correctly.
Longer term it would be good to look into if Elastic beanstalk could auto deploy a new instance on it reaching severe for a period of time (maybe 1 hour to avoid deployment complications). I will monitor this and see if this is happening regularly...

Reported to AWS that the status checks for the instance seem to be failing as there is something seriously wrong with the instance and this should be picked up. Its more of an application issue if you can't get the logs or ssh into it.
If this starts happening more often then implementing https://github.com/IIIF/image-validator/issues/83 would be a solution.


NoMethodError

NoMethodError: undefined method `each' for #LogStash::Event:0x6255eda6
map_fields at /home/hmaxwell/conversion-hekad-config/logstash/logstash/vendor/bundle/jruby/1.9/gems/logstash-output-riemann-0.1.1/lib/logstash/outputs/riemann.rb:111
receive at /home/hmaxwell/conversion-hekad-config/logstash/logstash/vendor/bundle/jruby/1.9/gems/logstash-output-riemann-0.1.1/lib/logstash/outputs/riemann.rb:145
handle at /home/hmaxwell/conversion-hekad-config/logstash/logstash/lib/logstash/outputs/base.rb:86
initialize at (eval):28
call at org/jruby/RubyProc.java:271
output at /home/hmaxwell/conversion-hekad-config/logstash/logstash/lib/logstash/pipeline.rb:272
outputworker at /home/hmaxwell/conversion-hekad-config/logstash/logstash/lib/logstash/pipeline.rb:231
start_outputs at /home/hmaxwell/conversion-hekad-config/logstash/logstash/lib/logstash/pipeline.rb:160

Same issue here.

Same issue with Logstash 1.5.0.

#5 fixes this


fixed a small typo in one of the tests

@matthewware  could you rebase this PR to have just 0ba4b33 off of develop.  Then we can merge  995aca5 separately.

Sure!  I should have done that from the beginning but spaced out this afternoon.


test_od - re-enable f16 test with newer AVD system image

fixes issue  #5941
how?

using the system image "google_apis_playstore" instead of "default" results in slightly newer OS version (2019 instead of 2018) that apparently fixed the issue with f16c instruction set

found by chance when investigateting different issue. Sadly the different issue (PR #6080) is not yet fixed by this version.
This brings me to the general question: Why are we using the old API level 28? Is there any specific reason why not switching to a even newer one?

Why are we using the old API level 28? Is there any specific reason why not switching to a even newer one?

no good reason I think


[5.8] move eloquent exceptions to exceptions folder

Just a better way to organize exception classes inside Illuminate\Database\Eloquent
on same way like Illuminate\Http\Exceptions.

This is PR into master branch because it is not backward compatible for 5.6

This doesn't really "solve" anything and just creates breaking changes for little reason.


Add 'current_isolated' and 'current_quarantined' of Canton ZH

With regard to #771, we are asking Cantons to integrate the respective values.
Please add two additional rows to the right of your CSV resource; according to https://github.com/openZH/covid_19/blob/master/COVID19_Fallzahlen_Beispiel.csv

#789

#793


[UI] Handle issue of event firing multiple times(HEAD-300)

The event was listened by all the facets, added check to fire only when the keys match.
Also merged the events in search landing page, pls check if the logic is correct.

Check also merchandising component. It has the same logic as search landing page

Updated code to remove the event from search-landing-page, its same as klevu-merchandising now.
The removed function in klevu-search-landing-page is being handled in the #applyFilters function.


Logo design

@mefengl

IDK, then it will be two styles?

The style still matches:

Or do you like original one:

Original one?
The 'G' is not that bad I think

Original one? The 'G' is not that bad I think

So which one do you choose

Top or bottom in last pic

bottom

OK and this is for dark mode, is it your final decision

cool


Consume Kafka Message Asynchronously

Description
Based on the example, we need to wrap the Consume method in a while loop. Is it possible to consume the message asynchronously?
Checklist
Please provide the following information:

[x] Confluent.Kafka nuget version: 0.11.3
[ ] Apache Kafka version:
[ ] Client configuration:
[x] Operating system: Windows
[ ] Provide logs (with "debug" : "..." as necessary in configuration)
[ ] Provide broker log excerpts
[ ] Critical issue

you need to implement a poll loop yourself. you can of course encapsulate this up and set it running in a separate thread though if you like.
do you have an API in mind? feel free to jot down some pseudo code if you have a concept for how this should work. there is certainly scope for providing a consumer at a higher level of abstraction.

I might have misunderstood what you mean by 'asynchronously' above. The Consumer will provide a ConsumeAsync method in version 1.0.

Consumer's ConsumeAsync is still missing from the latest version (<IP_ADDRESS>). When will this be available?

it's not on the near-term roadmap, but we still plan to add it.

Any updates for regarding the ConsumeAsync method? Thanks

it's not on the near-term roadmap, but we still plan to add it.

We don't view it as important as closing the gap on features with java, for example adding transactions. If there's a reason you view this as critical, feel free to explain.

Hi, currently I'm developing a Consumer Web Api in Net Core 2.2 that is called via Depenncy Injection. But it seems like the library lacks of ConsumeAsync inr order to do that. I saw that you have shared ProduceAsync method as DI to use as API controller. I also saw your Consume running in loop making hard to consume message asynchronously. Any tips to implement Consume Web Api?

ok, sounds like a REST proxy type thing? if the consumer poll is driven calls to the http handler method then yes, this will take a bit of effort to set up properly. suggest first doing a consume call with 0 timeout which won't block. if that doesn't return a message that's where it gets tricky. you could Task.Run a blocking Consume call and await that, but if you expect high load you'll want a better solution, which would be to have a single thread completing the tasks (similar to how the producer works). this is what we will implement, but we can do it better if we make some modifications to librdkafka, which is a bigger effort, which is why we haven't done it yet.

I have exactly similar requirements too for a ConsumeAsync.

I'm really, really need ConsumeAsync not to block the main Thread. 😅
When you hear about his implementation, please, give us a pass.

@mhowlett would it make sense to re-open this issue since it was not yet implemented?

@mhowlett Has there been any movement on ConsumeAsync?

it's not a near term priority explicitly, but we haven't forgotten about it.

Hi, as @rknidzam asked before, I am also getting trouble to find best way to implement Consumer application. In order to use models in API, I am planning to put consumer application as BackgroundService with adding it to hosted services. But I am not sure about the effects to API performance and also I don't know how can I scale up consumers horizontaly independent from API. I am using .Net Core and do you have any idea about best practice to implement Consumer in .Net Core with using microservice architecture ?

Hi, is there any update on this?
In terms of putting the Consume operation on a separate thread, its fairly easy to move it to a new thread using
Task.Run(() => {     while (true)     {         var c = _consumer.Consume();         ...     } });
However, the real problem for me is that the blocking version of Consume will hog a thread - if we therefore have a service that is subscribing to hundreds or thousands of topics, we risk starving the thread pool.
Having a ConsumeAsync function that supports the TPL (ie makes use of async/await) will allow threads to not be blocked and be reused, avoiding this issue. For me, this is the main reason a proper ConsumeAsync method is desired.

generally, you should be only using one consumer per process (you definitely shouldn't be creating thousands because they're very expensive, in fact, each consumer utilizes multiple threads behind the scenes). the impact of an additional thread that's not doing anything in the case the consume call is blocking will be insignificant. note that a single consumer is capable of delivering hundreds of thousands of messages to your application per second.

@mhowlett you have noted that a single consumer is capable of delivering hundreds of thousands of messages to your application per second. Yeah, you are right. But what can I do if my processing time of messages is more than 20 minutes. One way, I think increase consumer counts which is under one consumer group. But it's limited too, as you know, if we've 12 partitions, we can only run 12 consumers under one group ID. So what do suggest to me?

Thanks for your answer. I've used below code
Parallel.ForEach(new List<ConsumeResult<Ignore, string>> { consumer.Consume(cts.Token) }, async consumerResult =>                         {                             // Process Messages                         });

interesting idea. you won't get partition/thread affinity, but i don't immediately see a problem with it.

@kauanschumacher Try running the consumer in a background thread, it's a best practice anyway. (for instance in an aspnet app invoke it via HostedService etc..)

Can we please raise the priority on ConsumeAsync? This is simply the standard way of doing things in C# now and I am getting really tired of having to explain why we have to find some hack around the lack of this functionality every time.

Agree with @HassanHashemi that HostedService is the best option to consume messages from Kafka. The only precaution is that the calling thread gets blocked until there are new messages to be delivered to consumer. This could be worked around by await Task.Yield().
You can find more details in my article about Kafka Consumer API

Agree with @HassanHashemi that HostedService is the best option to consume messages from Kafka. The only precaution is that the calling thread gets blocked until there are new messages to be delivered to consumer. This could be worked around by await Task.Yield().
You can find more details in my article about Kafka Consumer API

There is no such thing like a hack to transform the consumer to asynchronous.
This is a great question which really isn't explained well in most texts about C# and async.
I searched for this for ages thinking I could and should maybe be implementing my own async I/O methods. If a method/library I was using didn't have async methods I thought I should somehow wrap these functions in code that made them asynchronous. It turns out that this isn't really feasible for most programmers. Yes, you can spawn a new thread using Thread.Start(() => {...}) or using Parallel.ForEach and that does make your code asynchronous, but it also creates a new thread which is an expensive overhead for asynchronous operations. It can certainly free up your UI thread to ensure your app stays responsive, but it doesn't create a truly async operation the way that ProduceAsync() is a truly asynchronous operation.
This is because async methods in the .net libraries use something called "standard P/Invoke asynchronous I/O system in .NET" to call low level OS code that doesn't require a dedicated CPU thread while doing outbound IO (networking or storage). It actually doesn't dedicate a thread to its work and signals the .net runtime when it's done doing its stuff.
I'm not familiar with the details but this knowledge is enough to free me from trying to implement async I/O and make me focus on using the async methods when available.
Therefore we need the implementation of consumeAsync().

There is no such thing like a hack to transform the consumer to asynchronous.
This is a great question which really isn't explained well in most texts about C# and async.
I searched for this for ages thinking I could and should maybe be implementing my own async I/O methods. If a method/library I was using didn't have async methods I thought I should somehow wrap these functions in code that made them asynchronous. It turns out that this isn't really feasible for most programmers. Yes, you can spawn a new thread using Thread.Start(() => {...}) or using Parallel.ForEach and that does make your code asynchronous, but it also creates a new thread which is an expensive overhead for asynchronous operations. It can certainly free up your UI thread to ensure your app stays responsive, but it doesn't create a truly async operation the way that ProduceAsync() is a truly asynchronous operation.
This is because async methods in the .net libraries use something called "standard P/Invoke asynchronous I/O system in .NET" to call low level OS code that doesn't require a dedicated CPU thread while doing outbound IO (networking or storage). It actually doesn't dedicate a thread to its work and signals the .net runtime when it's done doing its stuff.
I'm not familiar with the details but this knowledge is enough to free me from trying to implement async I/O and make me focus on using the async methods when available.
Therefore we need the implementation of consumeAsync().

behind the scenes, Consume hits a librdkafka queue (does not wait on io). and since librdkafka doesn't use a thread pool / async framework - instead has a collection of long running threads for specific purposes - i think that implementing an async consume will cost another thread, however you do it.
the other complication here is ordering considerations. currently everything in the consumer api happens on a single thread, which is simple. as soon as we start allowing things to continue on different threads, we need to consider the implications of that. there may not be much to worry about, but it's something that needs to be thought through.

behind the scenes, Consume hits a librdkafka queue (does not wait on io). and since librdkafka doesn't use a thread pool / async framework - instead has a collection of long running threads for specific purposes - i think that implementing an async consume will cost another thread, however you do it.
the other complication here is ordering considerations. currently everything in the consumer api happens on a single thread, which is simple. as soon as we start allowing things to continue on different threads, we need to consider the implications of that. there may not be much to worry about, but it's something that needs to be thought through.

note that there's a relatively new example: https://github.com/confluentinc/confluent-kafka-dotnet/blob/master/examples/Web/RequestTimeConsumer.cs that demonstrates how to use the Consumer in a BackgroundService (which implements IHostedService).

note that there's a relatively new example: https://github.com/confluentinc/confluent-kafka-dotnet/blob/master/examples/Web/RequestTimeConsumer.cs that demonstrates how to use the Consumer in a BackgroundService (which implements IHostedService).

Any updates for regarding the ConsumeAsync method? Thanks

It's likely we won't ever do this due to inherent limitations with the implementation.
However, I think there is a higher level (reactive) consumer API that we should build that is applicable to pretty much all use cases - the existing consumer API is lower level than most people need. We could/would make all methods on the higher level API async. So we would have 2 APIs - one that is high level and idiomatic, and a lower level one, which you wouldn't need to use unless you had an advanced use case, in which case it's less of an issue to require people understand how to integrate sync and async code well.

Hi @mhowlett
We've encountered the same issue. Note that non-async blocking code is a big no-no in modern .Net development. The issue is that creating consumers effectively causes the creation of new threads, and .Net allocates new threads at a rate of 1 per second by default, so creating multiple consumers causes a temporary starvation of threads, in turn causing all kinds of issues such as lower application throughput and sporadic timeouts.
It may be possible to support asynchronicity without modifying the underlying librdkafka, like so:

When the application calls Consume(), create a TaskCompletionSource object and return its (uncompleted) Task property. That will cause the application to await on that task till it's signaled as completed at a later time.
Hold that TaskCompletionSource in some queue (there should usually be up to one object in the queue, the application isn't likely to consume from the same consumer concurrently)
When the underlying librdkafka queue has messages in it, pop the next TaskCompletionSource and put the messages in it using SetResult(). This will cause the awaiting application to resume. I assume you can be notified of messages entering the queue (Subscribe?).
If you want to support timeouts, you can simply return instead a Task.WhenAny(Task.Delay(timeout), TaskCompletionSource.Task)

For your consideration.

If your still here for ConsumerAsync , here is alternate implementation of C# Kafka Client  which provides asynchronous implementations.
https://github.com/criteo/kafka-sharp

My understanding is Criteo have switched to using the Confluent client. It's a lot of work to build and maintain a Kafka client - it would be a safer bet (in terms of reliability, and maintenance of the internals) to go with the one backed by Confluent and build a layer on top of this client which works around the limitations.

My understanding is Criteo have switched to using the Confluent client. It's a lot of work to build and maintain a Kafka client - it would be a safer bet (in terms of reliability, and maintenance of the internals) to go with the one backed by Confluent and build a layer on top of this client which works around the API limitations.

ok, right it makes sense. Thank you for latest updates on this.

My understanding is Criteo have switched to using the Confluent client. It's a lot of work to build and maintain a Kafka client - it would be a safer bet (in terms of reliability, and maintenance of the internals) to go with the one backed by Confluent and build a layer on top of this client which works around the API limitations.

ok, right it makes sense. Thank you for latest updates on this.

Gave it a try and wrote a simple asynchronous wrapper for the consumer, that does not spawn tasks on the thread-pool on every consume, but instead uses a permanent background thread combined with some signalling. See kafka-net-async. It's tested very minimally so far. Not sure how it behaves in real-world scenarios.

generally, you should be only using one consumer per process (you definitely shouldn't be creating thousands because they're very expensive, in fact, each consumer utilizes multiple threads behind the scenes). the impact of an additional thread that's not doing anything in the case the consume call is blocking will be insignificant. note that a single consumer is capable of delivering hundreds of thousands of messages to your application per second.

This conversation has seriously helped educate me a lot about utilizing Kafka consumers in .Net. I guess I am a little confused reading some of the messages.   I want to thank @mhowlett  for his contribution here.   I guess I was confused on the one comment about one consumer per process.  I am looking at some microservice type applications that have multiple consumers running in different BackgroundService service type classes in an ASP.Net Core application.  Would this be an anti-pattern or misuse of Kafka, since it can result in thread pool starvation ?   Should each Kafka consumer be placed in its own executable service and we perhaps have an API or some other means to allow the main service to process the Kafka messages consumed by our service?

Has this been implemented? I can't see it in the latest version.
If it's not implemented, please reopen the issue.

Async API should be implemented in order to not blocking thread on IO operation.

I can't believe my eyes... Are you guys serious? 5 years have passed, and still no ConsumeAsync method? What century are you living in? 19th? Is that production library, or some highschool computer sience homework?

@nyan-cat perhaps a little harsh... I'm all for this feature being added, but there is no reason to take that attitude. If you are desperate, you could always contribute the code change yourself...

Has this requirement progressed? A ConsumeAsync method is indeed needed. Just like the .net queue has always only had the dequeue synchronization method, most developers choose to use the lib with the DequeueAsync method

Hello. Any update on this topic?  👀

Thanks for your answer. I've used below code Parallel.ForEach(new List<ConsumeResult<Ignore, string>> { consumer.Consume(cts.Token) }, async consumerResult => { // Process Messages });

@mirsahibmovsumov, will it work to poll continuously if I do not have message when this block gets executed

Still waiting for this

A use case that ConsumeAsync would allow is where your .NET Core background service has a thin HTTP service that needs to process requests regarding the health of the background service. A thread blocking Consume() makes that impossible.
IMHO having a .NET library in 2023 without async support is not fit for purpose.

Thanks for your answer. I've used below code Parallel.ForEach(new List<ConsumeResult<Ignore, string>> { consumer.Consume(cts.Token) }, async consumerResult => { // Process Messages });

@mirsahibmovsumov, will it work to poll/consume continuously like while if I do not have message when this block gets executed

Of course, let me share with my code base a bit wide
public void Consume()

{

    var cts = PrepareCancellationTokenSource();

    using var consumer = new ConsumerBuilder<Ignore, string>(_consumerConfig).Build();
    consumer.Subscribe(_kafkaConfig.TopicName);

    try
    {
        while (true)
        {
            try
            {
                Parallel.ForEach(new List<ConsumeResult<Ignore, string>> { consumer.Consume(cts.Token) }, async consumerResult =>
                {
                    Log.Information("Consumed message \'MessageValue}\' at: ConsumerResultTopicPartitionOffset}\'.", consumerResult.Message.Value, consumerResult.TopicPartitionOffset);
                    await ProcessMessages(consumerResult.Message.Value);
                    Log.Information("Processed message \'MessageValue}\' at: ConsumerResultTopicPartitionOffset}\'.", consumerResult.Message.Value, consumerResult.TopicPartitionOffset);
                });
            }
            catch (ConsumeException e)
            {
                Log.Error("Error occured: {ErrorReason}", e.Error.Reason);
            }
        }
    }
    catch (Exception)
    {
        // Ensure the consumer leaves the group cleanly and final offsets are committed.
        consumer.Close();
    }
}

This should be reopened

This blocks the main thread... Running a consumer with an http endpoint, then the http listener will not listen before a message is consumed.

Another interesting workaround which i'm currently evaluating:
`
private async Task<ConsumeResult<string, string>?> Consume(
IConsumer<string, string> kafkaConsumer,
DateTime cutoff,
CancellationToken cancellationToken)
{
while (DateTime.UtcNow < cutoff)
{
var cr = kafkaConsumer.Consume(TimeSpan.Zero); // this one does not block !!!
if (cr != null)
{
return cr;
}
await Task.Delay(_config.ConsumerPollInterval, cancellationToken);
}
        return null;
    }

`
What do you think, guys?

This is just odd. I am sure underneath somewhere there must be some part of Kafka which actually knows when a message arrives. So the task is to bubble that information up to the .NET library in order to complete the awaiting task. Without polling, without blocking the calling thread.
I am pretty sure its tougher than it looks from and armchair, but as far as I understand, it has been done for Rust and other languages already.  This thread is 6 yrs old and all I can see is workarounds, when literally every serious package supports async now.
Do I misread the situation?

generally, you should be only using one consumer per process (you definitely shouldn't be creating thousands because they're very expensive, in fact, each consumer utilizes multiple threads behind the scenes). the impact of an additional thread that's not doing anything in the case the consume call is blocking will be insignificant. note that a single consumer is capable of delivering hundreds of thousands of messages to your application per second.

If that is the case, why is there only a generic implementation available for consumer? There is only a ConsumerBuilder<TKey, TValue>. That means we have to use at least one consumer per message type, however with a non-generic consumer builder we could implement a continuously polling consumer with custom routing for different message types.
What I would like to achieve is to create a high throughput service infrastructure. According to the quoted message I should not use too many consumers. I do not mind creating my own routing for messages, which I can manage by putting the message type into the header.
However what I see all in the examples over the internet is infinite polling loops and ad-hoc consumer creation - which is a anti-pattern according to this comment. Is there any documentation regarding good practices on consumer utilization in .NET?
My current implementation utilizes a "consumer pool" that is responsible for creating consumers for required key and value types. And uses a BackroundService that iterates over these consumers in the pool and continuously polling messages for each consumer. Then I have a promise like mechanism using TaskCompletionSource and async enumerators to route the fetched messages to different "virtual" consumers in the service.
I can provide a reference implementation if anyone is interested. But I really would like to understand how to use the .NET API properly without consuming more resources than required for the task.
Thank you in advance for any suggestion :)

generally, you should be only using one consumer per process (you definitely shouldn't be creating thousands because they're very expensive, in fact, each consumer utilizes multiple threads behind the scenes). the impact of an additional thread that's not doing anything in the case the consume call is blocking will be insignificant. note that a single consumer is capable of delivering hundreds of thousands of messages to your application per second.

A consumer can be subscribed to a single topic only, right? When I have to listen to a dozen topics, what is the suggested approach?

Has this been implemented? I can't see it in the latest version.
Async Method !!!!
If it's not implemented, please reopen the issue.

It is utterly embarrassing and completely ridiculous that a package for communicating with an infrastructure-level tool with 1M downloads doesn't have async support in big 2024. WTH?!

generally, you should be only using one consumer per process (you definitely shouldn't be creating thousands because they're very expensive, in fact, each consumer utilizes multiple threads behind the scenes). the impact of an additional thread that's not doing anything in the case the consume call is blocking will be insignificant. note that a single consumer is capable of delivering hundreds of thousands of messages to your application per second.

A consumer can be subscribed to a single topic only, right? When I have to listen to a dozen topics, what is the suggested approach?

You can use regex to subscribe to multiple topics within one consumer. This, however, forces you to follow a pattern when naming topics (maybe not a bad thing?). When doing that make sure to prefix your regex with ^ for example: ^game-events-* would match game-events-1, game-events-2 and etc
If you have dynamic topic creation, refer to this


Zoom support on touch devices (pinch-to-resize or css transform)

Hi,
I'm using this in a side project and I'm very happy with it :)
I have a feature request: I would really like to be able to zoom. I don't particularly care if that would be viewport resizing (which your event handlers currently prevent), or css transforms like e.g. https://react-quick-pinch-zoom.netlify.app/ uses.
I am happy to help with the solution, in fact I already tried, but I don't have any experience working directly with mouse/touch events.

@clawoflight Did you get react-quick-pinch-zoom implemented?


New coin: Shield Nickle

Description
Shield Nickle
Denomination: 5¢
Name of denomination:  Nickle
Years of minting: 1866-1883
Mints: Philadelphia
Other

[x] Lables added

Hey! Mind if I work on this?

@lyallstewart Noticed that there are no images for the Shield penny. So just comment out the image and image-related tags.


GGUF-converted LORAs are not able to be used.

I am not sure if this is supported, however a GGUF converted LORA is not able to be used with text2image. The LORA itself seems to convert and quantize well, however it is not recognized by text2image as a valid LORA. An example of what is output is below.
[INFO ] stable-diffusion.cpp:556  - Attempting to apply 1 LoRAs
[WARN ] stable-diffusion.cpp:518  - can not find LORA_NAME.safetensors or LORA_NAME.ckpt for lora LORA_NAME
[INFO ] stable-diffusion.cpp:1203 - apply_loras completed, taking 0.00s

I am very new to this project, and I am unaware if this is intentional behavior or a potential area for expansion. Thank you for all of your work!

Currently only safetensors and checkpoint files are supported for LoRAs. Precision in LoRAs is very important so it's likely one wouldn't get as reliable results if using a quantized gguf LoRA. If one wanted to try anyway one could remove the filename extension check in the "apply_lora" function as the LoRA loading logic calls "init_from_file" which should be able to handle gguf files just like the primary model loader but it's possible there will be other pitfalls.


Improve derive syntax

[x] Sqlite tests
[x] Postgres tests
[x] Mysql tests
[x] Comprehensive compile errors tests
[x] Deprecated syntax support
[x] Comprehensive compile warnings tests
[x] #[column_name = "QUERY PLAN"] support
[x] TypePath for sql_type and foreign_derive?
[x] Remove changeset_options keyword

Still some work to do. I just wanted to create a draft PR to show some progress. You can see that the commits are from 2 months ago :)
Regarding duplicated attributes, neither clap nor other repos which follow this overridable pattern has warnings. And I actually think it's good like that because it might open up some modularized use cases for end users.

Still some work to do. I just wanted to create a draft PR to show some progress. You can see that the commits are from 2 months ago :)
Regarding duplicated attributes, neither clap nor other repos which follow this overridable pattern has warnings. And I actually think it's good like that because it might open up some modularized use cases for end users.

@pksunkara Are you interested in finishing this PR in the next few weeks?

Yup, I was just rebasing this.

@weiznich Why does selectable derive have sql_type attribute helper? reference. I don't see it being used anywhere in the selectable expansion.
Also, since this is a new derive, we don't need backward compatibility for this and remove the old attribute helpers, right?

Yes, sql_type  is not used there.

Also, since this is a new derive, we don't need backward compatibility for this and remove the old attribute helpers, right?

Sounds reasonable :+1:

@weiznich Can you please give a preliminary look and see if you are okay with the format of the new attributes?

CI is weird. I am locally on 1.48.0 and am unable to reproduce this error at all. Or the spanned::Spanned error.

I haven't gone through the error/warning messages yet for the compile tests. I should have specifically said not to review those files inorder to save some time.

As far as I see there is currently no way to emit a deprecation warning on a build not using rustc nightly. That's bad, we should find some way to "fix" that, even if that means to emit some "warnings" via eprintln!

So the Readme states:

Warnings are emitted only on nightly, they are ignored on stable.

which is unfortunate, as we really want to show the deprecated message everywhere. I see a few options around this:

Provide our own wrapping macro that emits warnings via eprintln! instead of just ignoring them. This likely requires a similar version check than done by proc-macro-error
Try to fix that in proc-macro-error by maybe using eprintln! there?
Emit an error instead? Maybe behind a feature flag? (Diesel already has a with/without-deprectated feature flag) (I'm not really sold on that option)

Yeah, I am not exactly sure what we want to do regarding that. I am leaving it for the last thing to do though. Hopefully we will come up with something by then.

@weiznich This is ready

I should probably comment here to say that I've a rebased version of this locally, which also fixes at least some of the remarks. I can try to clean it up a bit tomorrow and push it afterwards.

I should probably comment here to say that I've a rebased version of this locally, which also fixes at least some of the remarks. I can try to clean it up a bit tomorrow and push it afterwards.

Oh, I was just about to do the rebase for the final push this week to get this merged. I will wait for you. Would you mind if you create a new commit for your changes instead of bundling them up with my rebased commits?

I've pushed my rebased version. Hopefully this is a good starting point for fixing the remaining issues.

I am not sold on the commit you pushed since we have the span already at dba9212 (#2626).
I will be able to take a deeper look tomorrow and also address the last comment that's left.

I am not sold on the commit you pushed since we have the span already at dba9212 (#2626).

I think an important point to note here is that there are a few different spans involved here:

The span of the field as whole, as returned by SynField.span(). That's the span that seems to point only to the beginning of the field.
The span of each element in the attribute. So in a #[diesel(embed, serialize_as = "…")] attribute are two of those spans. One pointing to embed and one pointing to serialize_as = "…". Those are stored in ident_span
The span of a field attribute as whole thing. For  #[diesel(embed, serialize_as = "…")] this will point to diesel(embed, serialize_as = "…"). It seems like trying to point to the whole attribute just creates a single char span at the beginning 😞 . That needs to be a separate entry as there may be more than one attribute here per field. That stored in attribute_span
The span of the field itself. I opted to use either the span of the field name (for structs with named fields) or the span of the field type (for tuple structs) for this. That stored in field.span

I am going to separate the AttributeSpanWrapper work into a separate PR that will get opened up once this is merged as a fast follow. I think we need a little bit discussion on it. And I might have a better idea on how to do that.
I pulled the commit locally and saved it.

Addressed all the comments now. The only question left from my original goal of the work is:

TypePath for sql_type, serialize_as, deserialize_as?

Can you please give a look at https://docs.rs/syn/latest/syn/enum.Type.html and tell me which of those variants do we allow for the above mentioned attributes?

Can you please give a look at https://docs.rs/syn/latest/syn/enum.Type.html and tell me which of those variants do we allow for the above mentioned attributes?

I would just accept TypePath there and nothing else. If that turns out to be not enough we can easily include more variants later on.

Address review and used TypePath

@pksunkara I want to use this opportunity to thank your for your long term effort here. I really appreciate this. :heart:

No problem. I just wish I had the time to actually focus on this properly in a straight forward manner instead of doing over a long time.


Redux Saga and Loop

http://stackoverflow.com/questions/41704984/redux-saga-and-loop

Isn't that like trying to integrate superagent with axios? You could write an adapter as saga's actions are easy to differentiate but I don't think that this is problem on which maintainers should focus.

@kirkstrobeck i'm afraid this is a common difficulty that people have when using multiple enhancers more broadly than just redux-loop. unfortunately I won't be able to fix this as a redux-loop-specific thing but i can offer the advice of trying to play with the order of your enhancers in createStore, even if it means you need to call applyMiddleware more than once. see if it works with redux-loop applied after the redux-saga middleware and before. if neither get you what you need i'm afraid you'll be stuck with the situation. although, redux-loop does expose a getModel function which should at least at some readability to the process of pulling out the state


some iptables rules created if ipv4.firewall is false

Distribution: Ubuntu
Distribution version: 16.04.3 LTS
The output of "lxc info" or if that fails:

Kernel version: 4.13.0-32-generic
LXC version: 2.0.8-0ubuntu1~16.04.2
LXD version: 2.21-0ubuntu2~16.04.1
Storage backend in use: dir

Issue description
lxd generate some iptables rules even if i have ipv{4,6}.firewall set to false. If you have your own iptables rules, these created by lxd are set to the top of your rules after reboot. It should not create any rules when set to false.
Steps to reproduce

Set ipv4.firewall: false to lxdbr0 config
Clean iptables
restart lxd daemon

After that iptables -L looks like:
root@cm[LXD]:~# iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:domain /* generated for LXD network lxdbr0 */
ACCEPT     udp  --  anywhere             anywhere             udp dpt:domain /* generated for LXD network lxdbr0 */
ACCEPT     udp  --  anywhere             anywhere             udp dpt:bootps /* generated for LXD network lxdbr0 */

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination
ACCEPT     tcp  --  anywhere             anywhere             tcp spt:domain /* generated for LXD network lxdbr0 */
ACCEPT     udp  --  anywhere             anywhere             udp spt:domain /* generated for LXD network lxdbr0 */
ACCEPT     udp  --  anywhere             anywhere             udp spt:bootps /* generated for LXD network lxdbr0 */

Information to attach
configuration of my lxdbr0:
root@cm[LXD]:~# lxc network list
+--------+--------+---------+-------------+---------+
|  NAME  |  TYPE  | MANAGED | DESCRIPTION | USED BY |
+--------+--------+---------+-------------+---------+
| lxdbr0 | bridge | YES     |             | 10      |
+--------+--------+---------+-------------+---------+
root@cm[LXD]:~# lxc network show lxdbr0
config:
  dns.domain: cm.lxd
  ipv4.address: <IP_ADDRESS>/24
  ipv4.firewall: "false"
  ipv4.nat: "false"
  ipv6.address: fd42:e025:97ce:7011::1/64
  ipv6.firewall: "false"
  ipv6.nat: "false"
  raw.dnsmasq: conf-file=/etc/dnsmasq.d/local
description: ""
name: lxdbr0
type: bridge
used_by:
- /1.0/containers/elastic
- /1.0/containers/le
- /1.0/containers/mail
- /1.0/containers/mailapi
- /1.0/containers/mda1
- /1.0/containers/mda2
- /1.0/containers/mysql
- /1.0/containers/redis
- /1.0/containers/valvula
- /1.0/containers/webmail
managed: true

Regards,
Jan

That's been fixed already.

https://github.com/lxc/lxd/commit/4a064e2f70595a30aef9bf1407aba34ad7792884#diff-349a3c779b4794afc5584dc92129a373

not really. you're wright in terms of vanished iptables-rules but all iptables-modules are already loaded active within the kernel -> lsmod | grep table like
ip6table_nat           16384  0
ip6table_filter        16384  0
ip6_tables             28672  2 ip6table_filter,ip6table_nat
iptable_nat            16384  0
iptable_mangle         16384  0
iptable_filter         16384  0
ip_tables              24576  3 iptable_filter,iptable_mangle,iptable_nat
x_tables               36864  5 ip6table_filter,ip_tables,iptable_filter,iptable_mangle,ip6_tables
I need to have those modules NOT LOADED permanently but no chance, right?
cheers
gan


Source code of fixing bounding box missing

Hi,
Hope you all are doing well.
In the demo, I noticed that I can fix the bounding box originally detected by the model, but the fixer_app does not include such functionality. In fixer_app, I can fix the detected joints via an appealing UI; however, the same functionality is not provided for fixing the bounding box.
Though this is not part of the core animating project, it would be good to have that feature within the repository too.
I would be glad to develop this part and have it merged into the repo if the maintainers consider it necessary.

Hello @ShahryarSaljoughi
Thanks for offering to improve the repo in this manner. Extending the annotation fixing tool to include bounding box edits would indeed be useful and I would merge such a PR into main. Do note that changes to the bounding box would have downstream effects on the segmentation mask and the joint locations, so the PR would need to handle making such modifications as well.

Thank you.
OK then I'm on it, I'll let you know when the PR is ready.
I'm new to open source contributions, I suppose I should close this issue as it has met its purpose, I'll open a new issue when the PR is ready.


Fix location of tests for SwiftPM

Is there any chance this could get merged?
Without this relocation, SPM builds swiftly fail with the following output:
error: the package has an unsupported layout, unexpected source file(s) found: [...]
fix: move the file(s) inside a module


Update comp manifest generation

Description
Change how component level manifests are generated for GMC

Move all generated component level manifests into a common flat directory
Disable k8s probes for GMC manifest

Issues
n/a
Type of change
List the type of change like below. Please delete options that are not relevant.

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

Dependencies
n/a
Tests
n/a

The generated manifest examples are shown as https://github.com/lianhao/GenAIInfra/tree/manifest_show/manifests/common

The manifests/README should also be updated.
Others looks good

The manifests/README should also be updated. Others looks good

@yongfengdu manifests/README is updated

Thanks @lianhao ,  Is it possible to remove the configmaps from manifests?  GMC will not use them(both the global one and the ones under each of the microservices).


Netcore merge

This is a cleaned up version of the .NetCore2.2 branch which only contains the new commits.
This is to avoid problems due to different base branches - the relevant commits are cherry-picked and adapted to avoid any conflicts. As far as I can see, this has all needed changes from that branch.
@tebjan - please have a look at the commits (especially yours). If this is ok, we can rebase and merge this.

this PR has only 8 files changed, while the other one has 18 files changed... can't compare it in detail right now.

The other changes should have been an artifact due the unneeded netstandard commit - though I can run through them again later today to make sure that they are really not needed.

Ok, here is a breakdown of the additionally changed files:
Unneeded changes as far as I can see:

.gitignore - not related to the PR
SVGViewer/SVGViewer.csproj
SvgW3CTestRunner/SvgW3CTestRunner.csproj
SvgW3CTestRunner/app.config
SvgW3CTestRunner/Properties/Resources.Designer.cs
2 deleted ExCSS Parser files

Already in master:

Svg.sln
SvgDocument.cs
SvgElementStyle.cs
LexerIssueTests.cs
AssemblyInfo.cs (where needed)

@tebjan - I split of the commits @gvheertum made and merged them to master separately to make things clearer.
This PR now only contains your commits for automatic git versioning and added authors. The branch name is a bit misleading, as it has nothing to with Netcore (the netcore stuff is already in master). Please check if this can be merged.

thanks for looking into it, yes this can be merged. we could improve the nuget preview version naming, but i can do that after the merge.

Thanks!


Add Task Unit Tests to expand code coverage

Describe the bug
Unit tests are needed to expand code testing coverage. There should be a new branch, "unit_tests" created, which will integrate unit testing (so that coverage is at least 50%) for each respective Task in software.nealk.concurrent.tasks.

In progress on branch "Unit_Testing." Presently up to 33% coverage.

Up to 37% coverage after release of v0.2.7

This issue's status has been downgraded to: ON-HOLD
Unit tests cannot be conducted until #15 has been closed.

Ticket Status
This ticket's status has been updated to: HOLD
Remarks
Unit tests cannot be conducted until #15 has been closed.

Ticket Status
This ticket's status has been updated to: OPEN
Remarks
Although the library already has an assortment of tests at this point, new contributors are welcome to start off by writing unit or integration tests for the library. To get started, simply comment on the ticket, then link your pull request to #9.


IP address validation

Add validation for IP addresses.  Make sure they are properly formed and nameservers, gateway... etc are within the subnet

As part of this, if the gateway has not been set, choose the first addressable address in the range as the default.


when adding users via API no invitation email gets send

Attempted Debugging

[X] I have read the debugging page

Searched GitHub Issues

[X] I have searched GitHub for the issue.

Describe the Scenario
when adding users via API no invitation email gets send
in the request there the parameter send_invite=1 but no email gets send
when adding manually email gets send
Exact BookStack Version
v23.10.4
Log Content
No response
Hosting Environment
Docker

Hi @tlederer,
This appears to be an issue of the handling of this parameter within BookStack.
If you send the data as JSON, where you can specify true for the value, this should work, but I don't think it's possible to send an invite via x-www-form-urlencoded data right now.
I've assigned this to be addressed for the next feature release.
Dev notes
Incoming data is validated as boolean castable type, but not actually cast so the send invite check fails:
https://github.com/BookStackApp/BookStack/blob/00b5dd78528bff804a502dcaa5cd43b18652e0a9/app/Users/Controllers/UserApiController.php#L93

Perfect @ssddanbrown - just checked it. Sending the data as JSON works!
You saved my day as I will need to create over 250 accounts. Thanks so much.

The core issue has now been addressed in 56d07f1909c61d40a946eb636be864ede4b00ab6, with test to cover and docs updated to note, which will be part of the next feature release.
Thanks again @tlederer for raising.


[tern-es6] jump to definition for imported from

With the demo http://ternjs.net/es6/doc/demo/#ES6, it should be cool if we could have jump to definition for imported from:
import {list} from "list // here jump to definition open list tab "

@marijnh if you have no time to do that, I will try to study to implement that once tern-es6 will be available in this git repository.

This was implemented already, but had a bug. Fixed now.

Works like a charm now, thanks!


Proposal: consistent file associations

If I open values-schema.yaml I expect that it will select the "YAML file association", and that if you open YAML files with Helm syntax that it will select the "helm-template file association"
BTW: the latter is not named consistently, in the "File Association menu" it shows up as helm-template, and in settings.json it shows up as helm).

I am not sure what is intended here. Can you be specific? It is not possible for go templating to understand the nature of what it is templating. If you think helm charts or helmfile templating should be aware of the format it is templating, then please take this upstream.


V2V - Collect virt-v2v PID from conversion host in kill_virtv2v

In the current implementation, we still use the old format of task.options[:virtv2v_wrapper] to identify the PID of virt-v2v. The value is always nil as we don't store it there anymore, which in turns makes the cancellation ineffective. This PR fixes it by calling get_conversion_state, that gets the state from the conversion host, and thus the PID.
Associated RHBZ: https://bugzilla.redhat.com/show_bug.cgi?id=1666799

Hammer backport details:
$ git log -1
commit 0e878b781b1cfdf4b3cd5c35fbfb29578ad30679
Author: Adam Grare<EMAIL_ADDRESS>Date:   Fri Jan 18 14:37:51 2019 -0500

    Merge pull request #18372 from fdupont-redhat/v2v_fix_virtv2v_kill

    V2V - Collect virt-v2v PID from conversion host in kill_virtv2v

    (cherry picked from commit 526045d22faae29ad8d74e4625c9f09206d5f97e)

    https://bugzilla.redhat.com/show_bug.cgi?id=1672699


Update to use Log instead of Logger

Update to use Log instead of Logger, which is removed in 0.36. This s…tops < 0.34 from being used, as Log doesn't exist before. I didn't bump the version.

FYI this should close #2

@maiha anytime, thanks for the work on this library, it's been working well!


Don't override model_class in Container collections

By setting the model_class in the base collections auto_model_class will never be invoked which forces the parser to always pass :type when building inventory objects.
This causes issues with providers which share parsers not allowing auto_model_class to properly pick up the child manager's subclass.
For example Kubernetes and Openshift share an inventory refresh parser, with :model_class set in the base the kubernetes parser has to explicitly set :type => "ManageIQ::Providers::Kubernetes::ContainerManager::Container" which means that openshift cannot inherit that parser without also getting Kubernetes type records.
This hasn't been a problem because STI hasn't allowed for Openshift to subclass K8s models anyway but https://github.com/ManageIQ/manageiq/pull/20756 is changing that.
TODO: Add tests for kubernetes and openshift repos

@miq-bot cross-repo-tests https://github.com/ManageIQ/manageiq-providers-kubernetes/pull/411, https://github.com/ManageIQ/manageiq-providers-openshift/pull/198

Cross repo tests are green @Fryguy


Getting minified html to save

Another thing I noticed. In the Save handler, when I get the html from the region, I get also many unnecessary spaces and newline chars. Is it possible to get a stripped version, like minified, of the html?
Thanks

Hi @cadilhac,
You can modify the indentation applied using the ContentEdit.INDENT setting and specifying it as a blank space, e.g:
ContentEdit.INDENT = '';

But you can't set the tool not to save with new lines after each editable element output.
The HTMLString library CT relies outputs pretty efficient HTML for it's part, but the new lines and indentation are applied by ContentEdit.

It would be great if it was an option too. I imagine I will be able to remove the newlines by myself though...

I'd be careful about removing them yourself as you will need to check for newlines in preformatted elements, this includes <pre> tags and elements styled with white-space: nowrap;.
If you'd like this to be a feature please post a feature request on the ContentEdit issue tracker.


[bug] cmake error at find_program(UNZIPPER lbunzip2 bunzip2)

When I try to build projects from source code with tag rocm-5.7.0, cmake reports the following error：
-- UNZIPPER-NOTFOUND -k -f /home/marco/workspace/MIOpen/src/kernels/gfx1030_36.db.bz2
CMake Error at CMakeLists.txt:485 (message):
  /home/marco/workspace/MIOpen/src/kernels/gfx1030_36.db could not be
  extracted, file is empty!
Call Stack (most recent call first):
  CMakeLists.txt:496 (unpack_db)

I have bunzip2 on my system and I don't have lbunzip2，but that should work too.
So I think find_program(UNZIPPER lbunzip2 bunzip2) should be changed to find_program(UNZIPPER NAMES lbunzip2 bunzip2)  on CMakeLists.txt line 473

Hi @JiaJiDuan lbzip2 is recommended since it is parallel. However, indeed if you have bzip2 it should still work. You are welcome to raise a PR, or we can fix it together with some later PRs.
One other thing I have noticed is whether you have pulled the git-lfs files?

I see that it has already been fixed with https://github.com/ROCmSoftwarePlatform/MIOpen/pull/2276/files and will be included in our next non-patch release.

Hi, @junliume .Thank you for your reply.

I see that it has already been fixed with https://github.com/ROCmSoftwarePlatform/MIOpen/pull/2276/files and will be included in our next non-patch release.

Great! Looking forward to the next version.

lbzip2 is recommended since it is parallel. However, indeed if you have bzip2 it should still work.

The bunzip2 I used was obtained through install_deps.cmake. It does not contain lbunzip2 as a boost dependency.
I am now using lbunzip2 through apt install lbzip2

One other thing I have noticed is whether you have pulled the git-lfs files?

I haven't. I have git-lfs installed, but don't know how to use it.
Compiled a warning：
CMake Warning at CMakeLists.txt:548 (message):
  GIT LFS Files not pulled down, skipped: gfx90a.kdb.bz2; gfx1030.kdb.bz2;
  gfx908.kdb.bz2; gfx906.kdb.bz2; gfx900.kdb.bz2

This probably doesn't matter to me because my AMDGPU is gfx1102. But I still want to know how to use git-lfs in this project.

Looking forward to your reply.

Hi, @junliume .Thank you for your reply. I'll look at your script carefully.
I will close this issue.
In the future, if I have new doubts, I will open a new issue.

Hi,@junliume. Thank you for your reply. I'll look at your script carefully.
I will close this issue.
In the future, if I have new doubts, I will open a new issue.


Avoid publicly exporting constants from libsqlite3-sys multiple times.

Closes #252.

I think this broke diesel 😨 see https://github.com/diesel-rs/diesel/issues/844

Also, removing public items is most definitely a breaking change. I'd yank 0.7.2 and publish it as 0.8.

Blarg. I thought all the relevant constants were publicly exposed by the bindgen bindings. Will fix shortly.


dpt rp1 stop on welcome after step 3

Hi, after step by step in your tutorial, my DPT stay on welcome screen and could not enter in system. How to recover it. I try to reconnect it to digital paper app but failed.
Any suggestion?

How do you operate step by step?
fwupdatered in debug mode?

The steps is :
python dpt-tools.py ip
fw
yes
fw.pkg
fw
yes
FwUpdater.pkg
and the dpt enter in "welcome " screen and never exit

which “FwUpdater.pkg”?

This one
\fw_updater_packer_unpacker\pkg_example\flashable_mod_boot_img_<IP_ADDRESS>10

how can I flash back to the official system? HappyZ master.

if there have no error before, you should wait a few minutes still the welcome disappear.
Now you can try hold the home button in poweroff status, and push the power button to power on The device, when the yellow LED flashing, hold the home button for a few seconds and release. when the black square is appeared, you can try to link the device in diagnosis mode, and you can reflush it.

which version was your original system? it will stuck if yours was 1.4xx but you flashed 1.6

just flash the right version to it, it then won't stuck there

@6bigfire @HappyZ  I can't enter into the diagnosis mode. I did the following steps.

reset it to power off
press home + power button until the yellow LED flashing, then release the power button with home button still on
a few seconds later, there were a few squares at the left right corner and a big square at the center
a few seconds later, I release the home button. But the squares are never dispear. The yellow and red LED flashing alternatively.

Is there any other method to reboot the device?

Seeing the square at the center means you entered diagnosis mode, you need to connect your DPT to computer and use the tool to make a connection (by entering the correct serial port).

Once you connected via the tool, just type in install-pkg and follow the instruction.

@HappyZ  Thanks, Happy.
Through this way, my DP enter into a screen with "updating... please wait", then reboot automatically and enter into "welcome" screen. The "welcome" screen lasting more than half an hour now. Is it normal? how long usually it lasting?

She returns! really thanks for your advice!

@HappyZ, I have the same situation as yogi08. But when I following the solution and type “fw” or “diagnosis” the console automatically restarts. Can you further explain how can I connect with my serial port with the dpt-tools.py?

@tangshi141  please start a new issue. What do you mean by console automatically restarts? If you see the black squares, use python dpt-tools.py --diagnosis directly to enter. The serial port for Windows should be something like COMx where x is a number.  For Mac it would be /dev/tty.usbserialxxx, and for Linux it should be /dev/ttyUSBx


Just a couple of questions..

I've used i3 before but it been a while since I touched Linux, my last time I ended up using xmonad. So can you explain to me the difference here as to what this is trying to accomplish, I'm how is it different from resizing with the built in function of Yabai beside going in to resize mode?
Also, are you able to pull up Alacritty with your config by hitting alt - return while Alacritty is closed? As far as I know you can only do that if you're in Linux sending a message straight to the socket (ipc_socket (unix only)).
Sorry for the beginner questions, this is the second script I tried using and I'm struggling to figure out the advantages of it.
Oh, and for some reason even after adding to my path
export PATH="$HOME/.config/alacritty":$PATH
I could not get yabai3 to function, I could call it in my terminal, it would resize, but it returned this:
yabai3 resize grow height 64
cannot locate a bsp node fence.

with the bindings it would go into resize mode, but it wouldn't resize. The only time I got it to resize was by adding the absolute path to my skhdrc
Thanks!

So can you explain to me the difference here as to what this is trying to accomplish, I'm how is it different from resizing with the built in function of Yabai beside going in to resize mode?

yabai resizing is more low level compared to i3's resize commands. yabai3 resize tries to imitate i3's resizing behavior, which just works. You can see this by looking at the script, it just uses yabai -m window --resize with default directions, and it works no matter if a right/left/bottom/top most window is selected, because it tries the opposite direction if the first resize fails.

Also, are you able to pull up Alacritty with your config by hitting alt - return while Alacritty is closed? As far as I know you can only do that if you're in Linux sending a message straight to the socket (ipc_socket (unix only)).

Yes, that works for me, because I have bound this to
alacritty msg create-window; open -a Alacritty

as explained in the README. This always calls open -a Alacritty, which on MacOS starts the application, if it is not already started, and just focuses it otherwise. So if Alacritty isn't running yet, alacritty msg create-window will fail, which doesn't matter because open -a Alacritty will then just start the app.

export PATH="$HOME/.config/alacritty":$PATH

You shouldn't put configuration directories into your $PATH. Better, clone yabai3 somewhere, create a directory for custom binaries and scripts, like ~/bin, add this one to your path (e.g. PATH="${HOME}/bin:${PATH}), then create a link to the yabai3 script inside this dir (cd ~/bin; ln -s ~/path/to/yabai3/yabai3) and you should be able to invoke yabai3 from any terminal or script.

cannot locate a bsp node fence.

This is printed once if you resize a bottom window, which is fine. It should still resize. The way yabai3 works is that it tries to resize the window as if it is a top window, and if that fails (with this error message), it tries to resize the window as a bottom window. If that also fails, this error message will be printed twice and nothing is resized. This happens if you try to resize the height of a window that already has full height.
In general, you can try out the individual yabai3 commands from a terminal window, before binding keys to it.

Thanks for taking your time and helping me out. For some reason I copied line 63 out of your skhdrc file which only have alt - return : alacritty-new.
Everything is working now. Thank you!


Replace 'dpstd' to 'oneapi::dpl' for dpc_reduce sample test

Summary
Newer oneDPL will get rid of dpstd namespace. So please help update dpc_reduce test to replace 'dpstd' with 'oneapi::dpl'
Problem line
main.cpp
750:  buffer calc_values(results_per_rank, num_step_per_rank);
751:  auto calc_begin2 = dpstd::begin(calc_values);
752:  auto calc_end2 = dpstd::end(calc_values);

https://github.com/oneapi-src/oneAPI-samples/pull/350 address this request.
Txt was changed from dpstd to onedpl.
Will reassign to bug owner so that he/she can verify fix and close bug.

This has been resolved, closing


navigator.clipboard and @media (prefers-color-scheme: dark)

Recently I tried using this framework. This framework is great. But still get some trouble with it. (ARM base macOS)

navigator.clipboard doesn't work. I can't set clipboard directly through JS's navigator.clipboard. But Python's QApplication.clipboard() works fine.
@media prefers-color-scheme would not change after app launch. It can't handle the situation that user's computer change system's prefers-color-scheme on fly.

Fix it!
You can use it from version 0.16.5
./venv-pyloid/bin/pip install --upgrade pyloid

It was because QWebEngine was blocking it with permissions.
Currently, the default permission is True.

Pyloid now use [data-pyloid-theme].
This attribute allows you to build a more scalable dark mode. It basically follows the theme of the system.
And theme change after app launch. it detect system theme change.

Example
[data-pyloid-theme='light'] {
  --background-color: white;
  --font-color: #333333;
}

[data-pyloid-theme='dark'] {
  --background-color: #333333;
  --font-color: white;
}

body {
  background-color: var(--background-color);
  color: var(--font-color);
}

Thanks for the issue!
More issues and features please.
I will solve it as soon as possible :D


After the data packet returns from the tun0 tunnel of B to the tun0 of A, there is no problem of routing and forwarding to the PC.

1、Use the ip rule routing strategy to request data packets to reach B from A successfully, then return from tun0 of B to tun0 of A and then return to PC，
such as topology:

2、Failure situation
ip rule del from <IP_ADDRESS> table 3
ip rule add  fwmark 3  table 3
iptables -A PREROUTING -t mangle -i eth0 -s <IP_ADDRESS> -j MARK --set-mark 3
In the second case, after the data packet is returned from B’s tun0 to A’s tun0, the capture packet can see that tun0 returns the data packet normally, and then does not return to the PC. Is this a program problem?
My goal is to see if I can achieve precise control of routing policies through iptables policies, such as separating tcp/udp and going through different tunnels, etc.
抱歉哦，英文不咋滴，谷歌翻译的，请谅解！

In the second case, after the data packet is returned from B’s tun0 to A’s tun0, the capture packet can see that tun0 returns the data packet normally, and then does not return to the PC. Is this a program problem?

No this is not a program problem.
tinyfecVPN just creates a virtual link.  Routing packet is the job of ip route and kernel.
if you link works but your route is not working, you need to check you routing rules and iptables.


[video_player] Play only a part of a video

Hello
Is there a way to display only a part of a video through the video player ?
There is the seekTo but I don't see any "stop at" method
Is it possible ?
I'm using the player through chewie so the versions are the following :
Flutter : 1.20.0
chewie : 0.9.10
video_player : 0.10.12+5

@Extazx2
Per seekTo document,
Sets the video's current timestamp to be at moment. The next time the video is played it will resume from the given moment.
You may play around this method to see if it serves your purpose.

@Extazx2 I would like to achieve the same thing, give start and stop and play this part in the loop. Have you found any solution?
@darshankawar seekTo was mentioned in the question.

@darshankawar as @qbait mentioned, I know of seekTo.
My intended goal is to have a loop like @qbait described

@Extazx2
Does this open issue sound similar to yours ?

Yes it is.

@Extazx2 Thanks for confirming.
Closing this as duplicate. Please follow-up in linked issue for updates and any questions you may have.
If you disagree, write in comments and I'll reopen.
Thanks.

Hi! Have the same issue. Have you found solution?


Printer not placing

Using schematica in a server where schematica is supported. I'm the only one having issues with printing and I tried changing most of the settings: instant place on/off, adjacent only, etc... Whenever I load a schematic and start printing, most of the blocks I place rollback and turn blue again. Is there an easy fix?
using version 1.8

Upload fml-client-latest.log to gist or pastebin.

mb it was server side :/


Added optional dnsview_name parameter to resource_dns_rr

This provider works great but we also needed to be able to create records in different DNS Views. Could be useful for others using this provider.

Thanks for your contribution.


Failed to implement v1::TopK, always get value but not index as output

I tried to implement argmax via TopK-1
 as codes attached below , but no matter I set sort to "value" or "index", no matter I use const auto result = std::make_shared<op::Result>(topk->output(1).get_node_shared_ptr()) or const auto result = std::make_shared<op::Result>(topk->output(0).get_node_shared_ptr()), I can't get the index as output, I always get value as output. I think there is something wrong with the TopK-1. Please help, thanks very much!
const auto k = op::Constant::create(element::i64, Shape{}, {1});
auto topk = std::make_shared<op::v1::TopK>(inputNode, k, 1, "max", "index");
const auto result = std::make_shared<op::Result>(topk->output(1).get_node_shared_ptr());

Hi, could you help to update? Thanks!


[UBS Courier tab] No error message “Номер введено не вірно. Спробуйте ще раз.” under 'Еко магазин' text input field if user enters less than 10 numeric characters

Environment: macOS High Sierra 10.13.6, Google Chrome, version 91.0.4472.114 (Official Build) (x86_64).
Reproducible: always.
Build found: July 1, 2021.
Steps to reproduce

Go to https://ita-social-projects.github.io/GreenCityClient/#/
Click on 'Увійти'
Log in as a registered user (e.g. Login<EMAIL_ADDRESS> Password: 'Motherload1!')
Click on 'UBS кур'єр' tab
Enter less than 10 numeric characters into 'Еко магазин' text input field (e.g. 12345678)

Actual result
The system displays no error message.
Expected result
The system should display the following error message (screenshot attached):

User story and test case links
#2196 #2379
Test case GC-2049
Labels to be added
"Bug", "UBS Courier", "UBS", "GreenCityUBS", Priority ("pri: high"), Severity ("severity: minor"), Type ("UI").

The Bug is still reproducing.


fix: update the link to Chart Parameters section

Updates the link in openfga/README.
Description

This line:
https://github.com/openfga/helm-charts/blob/88eaf10a0a64062aff3f4839f5336d2fc58f25dc/charts/openfga/README.md?plain=1#L18
contains a broken link. This PR fixes it.
References

For simplicity I decided not to create an issue for that (it would be an overkill for such typo-like fix). Please let me know if this is fine.
Review Checklist

[x] I have clicked on "allow edits by maintainers".
[ ] I have added documentation for new/changed functionality in this PR or in a PR to openfga.dev [Provide a link to any relevant PRs in the references section above]
[x] The correct base branch is being used, if not main
[x] I have added tests to validate that the change in functionality is working as expected

Thanks @vil02


Do not densify sparse gradients in LossScaleOptimizer

The method get_unscaled_gradients is currently converting sparse gradients to dense gradients. We can avoid this implicit conversion to save on memory.

Thanks for the PR!


Enhancement/chatbase

Proposed changes
This adds more detail to the chatbase analytics messages including the response of the bot, input slot values, and message handled status.
Types of changes

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

Checklist

[ ] My code follows the code style of this project
[ ] My change requires a change to the documentation
[ ] I have updated the documentation accordingly
[ ] I have added tests to cover my changes
[ ] All new and existing tests passed

This should be ready now. Let me know if I need to update anything.

Thank you!!!


chore(build-patterns.sh): remove $(npm bin) reference

Issue #, if available:
#1000
Description of changes:
By submitting this pull request, I confirm that you can use, modify, copy, and redistribute this contribution, under the terms of your choice.

AWS CodeBuild CI Report

CodeBuild project: githubautobuild-for-cdk-v2
Commit ID: ec376e387e3f2021b118cb2ef29a2381e39fb81c
Result: SUCCEEDED
Build Logs (available for 30 days)

Powered by github-codebuild-logs, available on the AWS Serverless Application Repository