Add RPMs for ipsec extension

Adds the libreswan and NetworkManager-libreswan RPMs so IPSec tunnels can be configured on the nodes.
see https://github.com/openshift/os/pull/1308

We don't need to carry those in main OS as extensions in OKD can install any additional package from the repos. Last time we included gluster RPMs for tests to pass and folks were unhappy when it was removed - https://github.com/okd-project/okd/issues/1537

Ah indeed, thanks
/close


V-Slice Sound Tray

Changes

V-Slice Sound Tray
Sound Tray Supports Mod Folders (sounds, images)
Only works when the BASE_GAME_FILES allowed thingy is enabled.

Showcase

uhh i tried this on 0.7.3 and i got this error
source/backend/FunkinSoundTray.hx:133: characters 12-89 : Not enough arguments, expected key:String, library:Null
source/backend/FunkinSoundTray.hx:141: characters 13-66 : Not enough arguments, expected key:String, library:Null

Send me your returnSound function(Paths.hx) please :3

i think this is it.

Lemme have a look!

ok thanks

ok thanks

Uhh hey! 👋👋👋
Didn't test, but hopefully this works !!!
I've added a function that checks PsychEngine's version, and if it's below 1.0, it uses the returnSound function that's in your version of Psych!
Sorry... I'm awful at explaining.
I hope this helps. :3

uhh it compiles now however theres no change to the volume slider, its just the old one.

ok i see, do i replace all 36 key:string with it or just the one?

ok nvm i forgot about BASE_GAME_FILES lol thanks for the help!

np


Fix memory leak when hashed wheel time re-put

What is the purpose of the change
Brief changelog
Verifying this change

Checklist

[x] Make sure there is a GitHub_issue field for the change (usually before you start working on it). Trivial changes like typos do not require a GitHub issue. Your pull request should address just this issue, without pulling in other changes - one PR resolves one issue.
[ ] Each commit in the pull request should have a meaningful subject line and body.
[ ] Write a pull request description that is detailed enough to understand what the pull request does, how, and why.
[ ] Check if is necessary to patch to Dubbo 3 if you are work on Dubbo 2.7
[ ] Write necessary unit-test to verify your logic correction, more mock a little better when cross module dependency exist. If the new feature or significant change is committed, please remember to add sample in dubbo samples project.
[ ] Add some description to dubbo-website project if you are requesting to add a feature.
[ ] GitHub Actions works fine on your own branch.
[ ] If this contribution is large, please follow the Software Donation Guide.

Codecov Report

Merging #12022 (c64284b) into 3.2 (0d94d15) will decrease coverage by 0.05%.
The diff coverage is n/a.

@@             Coverage Diff              @@
##                3.2   #12022      +/-   ##
============================================
- Coverage     69.84%   69.79%   -0.05%
  Complexity        2        2
============================================
  Files          1575     1575
  Lines         64882    64881       -1
  Branches       9438     9439       +1
============================================
- Hits          45314    45285      -29
- Misses        15242    15262      +20
- Partials       4326     4334       +8

see 50 files with indirect coverage changes
:mega: We’re building smart automated test selection to slash your CI/CD build times. Learn more


Disable test_backward_deploy_conformance.swift on Swift-in-the-OS bots

We need a backward compatibility shim before this can work.
Fixes rdar://problem/59631880.

@swift-ci Please smoke test


updates to PF

Addition of IF2 and various bug fixes/improvements to the filtering algos in light of JSS revision, including generalization of latent node detection, so this fixes issue #935.
For review/testing only; DNM.
@perrydv feel free to take a look when/if you have a chance. I plan to do additional review myself.

Need to deal with testing errors.
Check that dimensionality for estimates, logLik etc. work if only one param is being estimated.

@perrydv I may be misremembering but I thought we did not want to allow 'resample=TRUE' in the control list for the PF and PF_block PMCMC samplers. It looks like they are still there.

@paciorek I think you're right.  I think it was an oversight and we should remove control$pfResample and the local resample and fix relevant code to assume resample is FALSE.

@perrydv here's what I see in test-filtering:

the 'basic auxiliary' gives slightly different numerical results now (for some parameters).
the 'multivariate auxiliary' gives rather different numerical results (for some parameters; same for others)
Looks like you added {get,set}LastLogLik to auxiliary filter but not bootstrap. The PMCMC testing used the default bootstrap, so algo wasn't even running until I added that to bootstrap too. The PMCMC tests now seem fine.

For items 1 and 2 I didn't want to dive too deep until got your reaction. I didn't think you had modified the auxiliary filter algo, but rather that the modification was for the more complicated dependency situation, which shouldn't arise in the test case. But quick skim suggests you did change some lines of calculation in the auxiliary filter run code. Not sure if that would be expected to change numerical results.

I've dealt with 1-param IF2 case and with PFresample removal. Also added a basic IF2 test.
There is of course a lot more we could do in terms of adding tests...

Ok, so in the email exchange btw Nick and @perrydv in early August, the discussion was around a bug in the APF for saveAll=FALSE.
However, subsequent to the changes in the APF code, we are now seeing different numerical results in test_filtering.R, which is testing the saveAll = TRUE case.
I'm in the midst of reconciling the numerical differences via the uncompiled model...

@perrydv I now see that in the look-ahead step you changed the calculation (this is confirmed in an email exchange of you and Nick). So this is presumably the (or at least one) reason for the numerical changes in the auxiliary filter output for saveAll=TRUE.
So I will regenerate the gold file.
        ## Multiply by p(x_t+1 | x_t).
##        auxll[i] <- auxll[i] + model$calculate(calc_thisNode_self)
##        auxll[i] <- auxll[i]+calculate(model, thisNode) ## This line was included previously.  Removing it has only trivial impact on established test results.  Maybe try with more extensive test.
        ## Multiply by weight from time t.

@paiorek I am catching up on this.  What you've said makes sense.  I don't think we gave much attention to the vector case during the work in August, so that is more of an open question.


searchAll and listAll does not work?

https://github.com/bizreach/elastic-scala-httpclient/blob/175851d1e75d74898b125fe76f54669efc643153/elastic-scala-httpclient/src/main/scala/jp/co/bizreach/elasticsearch4s/AsyncESClient.scala#L164
this method does not work.
listAsync need countAsIntAsync's result, so this method should be written as following.
  def listAllAsync[T](config: ESConfig)(f: SearchRequestBuilder => Unit)(implicit c: ClassTag[T]): Future[ESSearchResult[T]] = {
    for {
      count <- countAsIntAsync(config)(f)
      result <- listAsync[T](config) { searcher =>
        f(searcher)
        searcher.setFrom(0)
        searcher.setSize(count)
      }
    } yield result
  }

Oh, as you say, this method is considered not operating as intended. I will fix these bugs after releasing 3.2.4. Thank you for letting me know!

It's available in 3.2.5.


Multiple select - Select All and Display number of selected instead of all values

What problem does this feature solve?
Situations:
I have a multiple select with about 100 values. I just add an Option [Select All] for user to select all options.
But when use want to select 97 (all then remove 3 options) the list displays label of 97 items.... hmmm, so long text.
What does the proposed API look like?
Suggestion:

Officially have Select All option for component.
Can I have option to display "(97 items selected)" instead of "option1, option2, option3 ...... option 97"?
The number of Items can be configured.

Ex: if number of options is greater than X, component will display: (X items selected) instead of "option1... optionX"
Thanks

have not response ? I have the same question

Any updates on this?
What does "Ant Design" mean? will it be implemented?

ant design create ng-zorro-antd,it's a company's name
i use PrimeNg's multiple select   instead of ng-zorro-antd's

Sorry for the late reply guys! We will implement this in our recent milestone I.


Missing utility class selectors on docs site

Describe the bug
.util_is-smOnly, .util_is-mdOnly, .util_is-mdOnly--inline, .util_is-mdAppears, .util_is-mdAppears--inline, .util_is-lgOnly, and .util_is-lgOnly--inline are all missing from the docs site. They are, however, referenced in deprecation warnings (e.g. for .util_is-mobileOnly).
This prevents devs with less familiarity with the design system from knowing what is available to them.
Expected behavior
All WCSS selectors are present on the doc site.
Screenshots
Only the deprecated breakpoint utility classes show in the sidebar:

They are also missing from the search results:

Researching issue and looking for resolution.

:tada: This issue has been resolved in version 2.10.3 :tada:
The release is available on:

npm package (@latest dist-tag)
GitHub release

Your semantic-release bot :package::rocket:


chore(main): release 1.1.5

:robot: I have created a release beep boop
1.1.5 (2023-09-26)
Bug Fixes

correct upgrade parameter and overprovision (88daa27)

This PR was generated with Release Please. See documentation.

:robot: Release is at https://github.com/amestofortytwo/terraform-azurerm-selfhostedrunnervmss/releases/tag/v1.1.5 :sunflower:


[Bug] Unknown or incorrect time zone: 'GMT'

Search before asking

[X] I had searched in the issues and found no similar issues.

Version
doris 1.1.0
What's Wrong?
CREATE TABLE  aaaaaaaaaa (
id BIGINT NOT NULL,
time DATETIME NOT NULL,
org_id BIGINT,
object_id BIGINT NOT NULL,
employee_id BIGINT)
DUPLICATE KEY(id,time,org_id)
PARTITION BY RANGE(time)
(PARTITION p20210310 VALUES [('1970-01-01 00:00:00'), ('2021-03-11 00:00:00')))
DISTRIBUTED BY HASH(org_id) BUCKETS 4 PROPERTIES( "replication_num" = "3",
"dynamic_partition.enable" = "true",
"dynamic_partition.time_unit" = "MONTH",
"dynamic_partition.create_history_partition" = "TRUE",
"dynamic_partition.history_partition_num" = "360",
"dynamic_partition.end" = "140",
"dynamic_partition.prefix" = "p",
"dynamic_partition.buckets" = "4")
errCode = 2, detailMessage = Unknown or incorrect time zone: 'GMT'
What You Expected?
报错
How to Reproduce?
No response
Anything Else?
No response
Are you willing to submit PR?

[ ] Yes I am willing to submit a PR!

Code of Conduct

[X] I agree to follow this project's Code of Conduct

at first,the time zone variables are like below:
system_time_zone  GMT
time_zone         Asia/Chungking
so i change the operation system time zone to Asia/Chungking.and restart all doris fe and be
then SHOW VARIABLES LIKE '%time_zone%',every thing looks like ok.
system_time_zone  Asia/Chungking
time_zone         Asia/Chungking
but still get the error
errCode = 2, detailMessage = Unknown or incorrect time zone: 'GMT'

@Gabriel39

Hi @shutao917 you can just set '+08:00' or 'CST' to change time zone. GMT prefix is not supported now

Hi @shutao917 you can just set '+08:00' or 'CST' to change time zone. GMT prefix is not supported now

how to set?

Hi @shutao917 you can just set '+08:00' or 'CST' to change time zone. GMT prefix is not supported now

how to set?

SET global time_zone = '+08:00';

at first,the time zone variables are like below: system_time_zone GMT time_zone Asia/Chungking so i change the operation system time zone to Asia/Chungking.and restart all doris fe and be
then SHOW VARIABLES LIKE '%time_zone%',every thing looks like ok. system_time_zone Asia/Chungking time_zone Asia/Chungking
but still get the error errCode = 2, detailMessage = Unknown or incorrect time zone: 'GMT'

set time_zone = '+08:00' does't work。see below

MySQL [(none)]> show variables like '%time_zone%';
+------------------+-----------+
| Variable_name    | Value     |
+------------------+-----------+
| system_time_zone | GMT+08:00 |
| time_zone        | +08:00    |
+------------------+-----------+
2 rows in set (0.001 sec)

MySQL [(none)]> CREATE TABLE example_db.dynamic_partition (     k1 DATE,     k2 INT,     k3 SMALLINT,     v1 VARCHAR(2048),     v2 DATETIME DEFAULT "2014-02-04 15:36:00" ) DUPLICATE KEY(k1, k2, k3) PARTITION BY RANGE (k1) () DISTRIBUTED BY HASH(k2) BUCKETS 32 PROPERTIES(     "dynamic_partition.time_unit" = "DAY",     "dynamic_partition.start" = "-3",     "dynamic_partition.end" = "3",     "dynamic_partition.prefix" = "p",     "dynamic_partition.buckets" = "32"  );
ERROR 1105 (HY000): errCode = 2, detailMessage = Unknown or incorrect time zone: 'GMT+08:00'

why?


ClusterLoader - Adding resources versions state

Adding resources versions state
This is a map {apiVersion, Kind} -> {resourceVersion}
File pkg/state/resource_state.go.
Adding state that contains both namespaces state (previous state) and resources versions state
Files: pkg/state/state.go, pkg/state/namespaces_state.go.
Applying changes
Files: all not listed above.

/assign @wojtek-t

@wojtek-t  I've changed version type from string to uint64.

/lgtm


Allow Developers to use encrypted public and private keys for JWT

Is your feature request related to a problem? Please describe.

When using jwt.encode(header, payload, key), if the key is protected using a paraphrase, an error is thrown. This is because when creating the classes authlib.jose.rfc7518._backends._key_cryptography.RSAKey and 'authlib.jose.rfc7518._backends._key_cryptography.ECKey, when calling load_pem_private_keymethod ofcryptography.hazmat.primitives.serialization.load_pem_private_keythepassword argis passed asNoneby default and the developer ofauthlib` is not given an option to pass in a password.

A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
Describe the solution you'd like

Allow the developers to use password-protected keys

A clear and concise description of what you want to happen.
Describe alternatives you've considered
A clear and concise description of any alternative solutions or features you've considered.
Additional context
Add any other context or screenshots about the feature request here.

With our master code, you can do this:
from authlib.jose import JsonWebKey

with open('key.pem', 'rb') as f:
    key = JsonWebKey.import_key(f.read(), {'password': 'xxxx'})

Then you can pass this key to jwt.

Okay, thank you.
Do you think the issue is still valid or you can close it?


Polyup crashes inserting warning about being unable to infer the components dir.

I am hoping there is maybe something I am missing to make this more meaningful? I have an html file (several actually) that if I run polyup against and I get this output
polyup --overwrite main.html
Error attempting to upgrade main.html

/usr/local/lib/node_modules/polyup/lib/node_main.js:55
  throw e;
        ^
TypeError: Cannot read property 'previousSibling' of undefined
    at insertHtmlCommentBefore (/usr/local/lib/node_modules/polyup/lib/upgrade_html.js:580:11)
    at addHtmlImport (/usr/local/lib/node_modules/polyup/lib/upgrade_html.js:685:5)
    at upgradeGlobalCss (/usr/local/lib/node_modules/polyup/lib/upgrade_html.js:612:5)
    at upgradeHtml (/usr/local/lib/node_modules/polyup/lib/upgrade_html.js:47:3)
    at Object.<anonymous> (/usr/local/lib/node_modules/polyup/lib/node_main.js:52:15)
    at Module._compile (module.js:460:26)
    at Object.Module._extensions..js (module.js:478:10)
    at Module.load (module.js:355:32)
    at Function.Module._load (module.js:310:12)
    at Function.Module.runMain (module.js:501:10)

Thanks for the report! Yep, that's a bug. Ironically, it looks like it's in some error handling code.
Should be fixed by #14
You can give it a shot by running npm install -g PolymerLabs/polyup#warn-no-components-dir

Thanks, will give it a go Monday since it is a work related project.

Hi,
The most of the elements that i need to migrate, break with an error like that.
But there are more than a few of those, i'll put some of them if that help you.
/usr/local/lib/node_modules/polyup/lib/node_main.js:55
  throw e;
        ^
TypeError: Cannot read property 'match' of undefined
    at /usr/local/lib/node_modules/polyup/lib/upgrade_html.js:455:40
    at Array.forEach (native)
    at upgradeDataBoundTemplate (/usr/local/lib/node_modules/polyup/lib/upgrade_html.js:451:14)
    at Object.<anonymous> (/usr/local/lib/node_modules/polyup/lib/upgrade_html.js:136:5)
    at exports.each (/usr/local/lib/node_modules/polyup/node_modules/whacko/lib/api/traversing.js:294:24)
    at upgradeHtml (/usr/local/lib/node_modules/polyup/lib/upgrade_html.js:49:24)
    at Object.<anonymous> (/usr/local/lib/node_modules/polyup/lib/node_main.js:52:15)
    at Module._compile (module.js:460:26)
    at Object.Module._extensions..js (module.js:478:10)
    at Module.load (module.js:355:32)

/usr/local/lib/node_modules/polyup/lib/node_main.js:55
  throw e;
        ^
Error: Line 1: Unexpected token }
    at throwError (/usr/local/lib/node_modules/polyup/node_modules/espree/espree.js:2070:17)
    at throwUnexpected (/usr/local/lib/node_modules/polyup/node_modules/espree/espree.js:2133:5)
    at expect (/usr/local/lib/node_modules/polyup/node_modules/espree/espree.js:2142:9)
    at parseGroupExpression (/usr/local/lib/node_modules/polyup/node_modules/espree/espree.js:2814:5)
    at parsePrimaryExpression (/usr/local/lib/node_modules/polyup/node_modules/espree/espree.js:2830:16)
    at parseLeftHandSideExpressionAllowCall (/usr/local/lib/node_modules/polyup/node_modules/espree/espree.js:2995:57)
    at parsePostfixExpression (/usr/local/lib/node_modules/polyup/node_modules/espree/espree.js:3044:12)
    at parseUnaryExpression (/usr/local/lib/node_modules/polyup/node_modules/espree/espree.js:3104:16)
    at parseBinaryExpression (/usr/local/lib/node_modules/polyup/node_modules/espree/espree.js:3196:12)
    at parseConditionalExpression (/usr/local/lib/node_modules/polyup/node_modules/espree/espree.js:3257:12)

/usr/local/lib/node_modules/polyup/lib/node_main.js:55
  throw e;
        ^
TypeError: Cannot read property 'leadingComments' of undefined
    at /usr/local/lib/node_modules/polyup/lib/upgrade_js.js:380:34
    at Array.forEach (native)
    at /usr/local/lib/node_modules/polyup/lib/upgrade_js.js:375:17
    at Array.forEach (native)
    at /usr/local/lib/node_modules/polyup/lib/upgrade_js.js:363:27
    at Array.forEach (native)
    at migrateAttributesToPropertiesBlock (/usr/local/lib/node_modules/polyup/lib/upgrade_js.js:352:26)
    at /usr/local/lib/node_modules/polyup/lib/upgrade_js.js:97:5
    at Array.forEach (native)
    at upgradeJs (/usr/local/lib/node_modules/polyup/lib/upgrade_js.js:44:16)

As an advice, i believe the codes like this
<select value="{{ timeCondition }}" on-change="{{onTimeConditionChange}}">...</select>
could cause one or some of the issues, because in all the elements i have a "select" tag, that element can't be upgrade (throw an exception).

Should be fixed, let me know if you continue to see crashes.


Can I use this package to convert my intel hex to binary by putting the start and end addresses?

I have an intel hex file.
I need to binary this.
Can I use this package to convert my intel hex to binary by putting the start and end addresses?

Yes, you can use this package to convert an intel hex to binary. I have added an example showing how you can do that:
https://github.com/domohuhn/intel_hex/blob/main/example/convert_to_binary.dart
The example will pad the file with zeros if there are gaps in the hex file (especially the start would be padded with zeros), but you can also just write the individual segments to disk.
Closing this issue.


[bct] Fix module key error

Fixes #37307

@msyyc this is the fix for the issue you opened, feel free to merge if it looks good to you :)

@msyyc this is the fix for the issue you opened, feel free to merge if it looks good to you :)

Test the PR locally and it works as expected. Thanks for the quick response!

/check-enforcer override

/check-enforcer override


Crash in cli & UI

Crash when starting search for some files.
I have reproduce on this torrent
https://kat.cr/robot-chicken-s08e17-food-1080p-hdtv-x264-mkv-zeus-t12527157.html
Unhandled Exception: System.AggregateException: One or more errors occurred. ---> CookComputing.XmlRpc.XmlRpcServerException: Backend fetch failed
at CookComputing.XmlRpc.XmlRpcClientProtocol.ReadResponse(XmlRpcRequest req, WebResponse webResp, Stream respStm)
at CookComputing.XmlRpc.XmlRpcClientProtocol.EndInvoke(IAsyncResult asr, Type returnType)
at XmlRpcProxy06183dd3-e70c-4990-9e84-80b52e6ee685.EndLogIn(IAsyncResult )
at System.Threading.Tasks.TaskFactory1.FromAsyncCoreLogic(IAsyncResult iar, Func2 endFunction, Action1 endAction, Task1 promise, Boolean requiresSynchronization)
--- End of inner exception stack trace ---
at System.Threading.Tasks.Task.ThrowIfExceptional(Boolean includeTaskCanceledExceptions)
at System.Threading.Tasks.Task1.GetResultCore(Boolean waitCompletionNotification)    at System.Threading.Tasks.Task1.get_Result()
at Subtle.Model.TaskExtensions.d__0`1.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at Subtle.Model.OSDbClient.d__9.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at Subtle.Cli.Program.d__6.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at Subtle.Cli.Program.Main(String[] args)
P.S. subtitle itself seemed to be bad indeed, link led to error page. Some time later, it was ok, and UI version was able to download, but a bit later - error again.

This is probably a server error. Errors like this need to be handled more gracefully (instead of throwing an exception and crashing the application).

This is resolved in v0.4.2.


Leaking/Masking Datadog resource names

hey @jgaskins, thanks for this awesome shard!
I'm having a few issues putting together the data on DD. Namely the primary span.resource keeps showing up in the redis/PG integrations and also the main web resource is showing their spans.
Here is my service layout

bonsai-ws (main lucky web app)

redis-primary (redis)
bonsai-primary (postgres)

bonsai-ws has the following 2 main traces

http.request (with resource_name as the controller action)
http.websocket.channel (with resource_name as the channel)

Everything works fine when I don't have the integrations setup (well except for the fact I have no data from redis/postgres).
But generally, I'm seeing traces from both of the trace names, all split into controllers or channels.
Like this example;

Here is how I have the setup at the moment;
# MonkeyPatch to report errors

require "../lib/datadog/src/integrations"
require "../lib/datadog/src/integrations/db"
require "../lib/datadog/src/integrations/redis"

module Datadog
  class Span
    Log = Lucky::Log.dexter
  end

  class DefaultTracer
    def report(ex)
      ExceptionService.notify(ex)
    end
  end
end

Datadog.configure do |c|
  c.service ENV["DD_SERVICE"], type: "web"

  # Define tags you want on every span
  c.tags = Datadog::Span::Metadata{
    "env"      => ENV["DD_ENV"]? || ENV["APP_NAME"],
    "version"  => ENV["DD_VERSION"],
    "pod_name" => ENV["HOSTNAME"], # example "bonsai-terminal-8486d85df7-bd6dx"
  }

  c.agent_host = ENV["DD_AGENT_HOST"]
  # The shard seems to have all the defaults we need
  # c.trace_agent_port = ENV["DD_TRACE_AGENT_PORT"]
  # c.metrics_agent_port = ENV["DD_METRICS_AGENT_PORT"]
end

bonsai_primary = Datadog::Integrations::DB.new(
  service_name: "bonsai-primary",
  host: AppDatabase.settings.credentials.hostname,
  db: AppDatabase.settings.credentials.database
)

bonsai_sync = Datadog::Integrations::DB.new(
  service_name: "bonsai-sync",
  host: SyncDatabase.settings.credentials.hostname,
  db: SyncDatabase.settings.credentials.database
)

redis_primary_with_pool = Datadog::Integrations::Redis.new(
  service_name: "redis-primary",
  uri: URI.parse(Config.settings.redis_url + Config.settings.redis_pooling_query)
)

redis_primary = Datadog::Integrations::Redis.new(
  service_name: "redis-primary",
  uri: URI.parse(Config.settings.redis_url)
)

Datadog.configure do |c|
  c.use bonsai_primary
  c.use bonsai_sync
  c.use redis_primary
  c.use redis_primary_with_pool
end

Note: I put those integrations in a separate block as it was even worse before when I had them in the same block for some reason.

With the integrations live
Notice how some of the traces now don't have a resource name, instead they are using the trace name.
This seem to be only if x trace has sub queries, i.e. redis or postgres is being traced are children.

Websocket example
Now that the integrations are live, the previously call ChangesChannel resource has been replaced by the trace name since it has some sub spans

Redis service is fine

This leads me to believe there is something going on with the parent/active spans, perhaps the redis/postgres spans are override the resource name of the main span.
However, I couldn't find anything obvious in the code.
Have you found this an issue or do I have the wrong setup?

Interesting. I've seen something like this before, but could never figure out why it was happening and it only happens every so often, not as consistently as you seem to be seeing it. For example, here's what I'm seeing:

I'm not using Lucky, which might be part of it. What is calling Datadog.tracer.trace "http.request"?

I'm not using Lucky, which might be part of it

By this, I mean I may not be running into the same things you are because I'm wiring it up differently. Not that Lucky is the problem. 😄

There is one trick I'm having to do regarding reporting the http status code, but it doesn't seem to change anything with the endpoints/websocket channels without redis or postgres. Only the endpoints with the redis and postgres spans nested seem to have the issue.
I implemented the http.request trace like this, using a custom http handler middleware

This is the trace block

For the websocket trace, i'm just wrapping the subscribe method using a similar way

Hmm, that seems pretty similar to what I'm doing:
# Included into individual routes to inspect the path taken during routing,
# including into nested routes.
module Traceable
  def trace(*args, **kwargs)
    Datadog.tracer.trace(*args, **kwargs) { |span| yield span }
  end

  # Called in route blocks to override the default "#{request.method} #{request.resource}"
  # value set in DatadogHandler
  def set_resource(resource : String)
    if span = Datadog.tracer.active_span
      span.resource = resource
    end
  end

  def set_tag(key : String, value : String)
    if span = Datadog.tracer.active_span
      span.tags[key] = value
    end
  end
end

# Added to HTTP::Server middleware
class DatadogHandler
  include HTTP::Handler
  include Traceable

  def call(context)
    request = context.request

    resource = "#{request.method} #{request.resource}"
    tags = Datadog::Span::Metadata {
      "http.method" => request.method,
      "http.resource" => request.resource,
      "http.host" => request.hostname || "",
      "http.user_agent" => request.headers["User-Agent"]? || "",
    }

    trace "http.server.request", type: "http", resource: resource, tags: tags do |span|
      call_next context
      span.tags["http.status_code"] = context.response.status_code.to_s
      span.tags["http.response.content_type"] = context.response.headers["Content-Type"]? || ""
    end
  end
end

And then in my routes:
struct Inbox
  # ...
  include Traceable

  def initialize(@current_user : User)
  end

  def call(context)
    route context do |r, response, session|
      set_resource "Inbox"
      # ...
    end
  end
end

The fact that I'm calling set_resource in my routes may be part of why I'm not seeing this, but I'm not sure.

thanks for sharing @jgaskins
So if I disable all the integrations and also remove the require statements
# require "../lib/datadog/src/integrations"
# require "../lib/datadog/src/integrations/db"
# require "../lib/datadog/src/integrations/redis"

Everything goes back to normal;

> The Hydra::Index is back
And also shown on the tracing lists

That Hydra guy calls Redis a few times in the lifecycle, but Ping::Index is just application code (a single span)
This is why I'm trying to figure out what nested span issue is going on.
I'll check over your work and see if I can implement your changes into mine to see if it can make a difference. I'll ping back my results shortly.
Also, is the way I'm loading the Redis/DB integrations correct?

Hey @jgaskins It still didn't work unfrotuantely.
This was my new implementation.
I split the logging and tracing into 2, since I noticed another opportunity to inject the trace data into the logs - the ruby version of this allows this so taking pointers from that.
However, its also not showing the trace data in the logs yet (still investigating)

# Middleware

class AppServer < Lucky::BaseAppServer
  # Learn about middleware with HTTP::Handlers:
  # https://luckyframework.org/guides/http-and-routing/http-handlers
  def middleware : Array(HTTP::Handler)
    [
      Lucky::ForceSSLHandler.new,
      Lucky::RequestIdHandler.new,
      Lucky::HttpMethodOverrideHandler.new,
      TraceHandler.new,
      LogHandler.new, # this is after the TraceHandler so we can inject tracing into logs
      Lucky::RemoteIpHandler.new,
      Cable::Handler(ApplicationCable::Connection).new,
      Honeybadger::Handler.new,
      Lucky::ErrorHandler.new(action: Errors::Show),
      CORSHandler.new,
      Lucky::RouteHandler.new,
      Lucky::RouteNotFoundHandler.new,
    ] of HTTP::Handler
  end

  def protocol
    "http"
  end

  def listen
    # Learn about bind_tcp: https://tinyurl.com/bind-tcp-docs
    server.bind_tcp(host, port, reuse_port: false)
    server.listen
  end
end

# This only takes care of the tracing side, then calls on the logger next

class TraceHandler
  include HTTP::Handler
  include HandlerHelper
  include Traceable

  TRACE_KEYS = {
    trace_name:          "http.server.request",
    http_method:         "http.method",
    http_status_code:    "http.status_code",
    http_resource:       "http.resource",
    http_host:           "http.host",
    http_user_agent:     "http.user_agent",
    http_request_id:     "http.request_id",
    http_version:        "http.version",
    default_status_code: "200",
  }

  def call(context)
    request = context.request
    user_agent = user_agent(context)
    client_version = client_version(user_agent)
    tags = Datadog::Span::Metadata{
      TRACE_KEYS[:http_method]      => request.method,
      TRACE_KEYS[:http_status_code] => TRACE_KEYS[:default_status_code],
      TRACE_KEYS[:http_resource]    => request.resource,
      TRACE_KEYS[:http_host]        => request.hostname || "",
      TRACE_KEYS[:http_user_agent]  => user_agent || "",
      TRACE_KEYS[:http_request_id]  => context.request_id.to_s,
      TRACE_KEYS[:http_version]     => request.version || "",
    }

    # We use the lucky helper to find the action name
    # instead of /path we get Ping::Index
    handler = Lucky.router.find_action(request)
    resource = if handler
                 handler.payload.to_s
               else
                 request.path
               end

    # we only know the status code after we have a response
    # so we yield
    # then update the span tags
    trace TRACE_KEYS[:trace_name], type: "web", resource: resource, tags: tags do |span|
      call_next(context)
      span.tags[TRACE_KEYS[:http_status_code]] = context.response.status_code.to_s
    end
  end
end

# Log formatter default data
# with the current trace injected into the dd key (same as the ruby implementation)

# However, I didn't manage to get this data flowing...

private def default_data
  data = {
    "level"     => entry.severity.to_s.try(&.upcase),
    "logger"    => (entry.source.presence || "Lucky").try(&.titleize),
    "timestamp" => entry.timestamp,
    "ddsource"  => ["crystal"],
    "dd"        => {
      "env"      => ENV["DD_ENV"]?,
      "service"  => ENV["DD_SERVICE"]?,
      "version"  => ENV["DD_VERSION"]?,
      "span_id"  => Datadog.tracer.active_span.try(&.id).to_s,
      "trace_id" => Datadog.tracer.active_span.try(&.trace_id).to_s,
    },
  }
  data["message"] = entry.message unless entry.message.empty?
  data
end

# In Lucky, each controller action is a class and they allow before hooks, so I created a global one with the Traceable module code you shared.

module RequestTracer
  include Traceable

  macro included
    before enrich_tracing
  end

  def enrich_tracing
    set_trace_resource self.class.name.to_s
    continue
  end
end

Again if I remove the integrations loaded, all is good. But with Redis/PG I'm back where I started - But if I get this logging part and resource_name right, this would be awesome!
I did some digging on the datadog dashboard and found a way to expose the trace top level json;

Which confirms my suspicions that I'm sending DD the operation and resource name as the same value. Which eliminates the doubt I had that datadog was getting mixed up with the nesting.
The data looks terrific otherwise :-)

Key things I'm trying to solve;

resource.name is being set as operation_name when there is a nested trace
Tracing is not showing in logging (I compact the key/values)

I added some logging within the shard (DefaultTracer#trace) to monitor the requests
This is the result without Postgres
web          | TRACE
web          | service_name bonsai-ws
web          | service_type web
web          | name http.server.request
web          | resource Canary::Show
web          | tags {"http.method" => "GET", "http.status_code" => "200", "http.resource" => "/canary/2e46708d-38bd-44a8-9bf1-4572ac7792e8", "http.host" => "localhost", "http.user_agent" => "PostmanRuntime/7.29.0", "http.request_id" => "3b02a6b0-bebf-4064-a508-248a1154c77e", "http.version" => "HTTP/1.1", "restaurant_id" => "63c6a71c-9e6e-420e-b290-d8b1b64fb1e5", "client" => "", "client_version" => ""}
web          | parent_id 0
web          | trace_id<PHONE_NUMBER>869271593
web          | span_id<PHONE_NUMBER>105770589
web          | --------------------------------
web          | TRACE
web          | service_name redis-primary
web          | service_type db
web          | name query
web          | resource get
web          | tags {}
web          | parent_id<PHONE_NUMBER>105770589
web          | trace_id<PHONE_NUMBER>025501574
web          | span_id<PHONE_NUMBER>162754503
web          | --------------------------------
web          | TRACE
web          | service_name redis-primary
web          | service_type db
web          | name query
web          | resource hgetall
web          | tags {}
web          | parent_id<PHONE_NUMBER>162754503
web          | trace_id<PHONE_NUMBER>025501574
web          | span_id<PHONE_NUMBER>409377103
web          | --------------------------------
web          | TRACE
web          | service_name redis-primary
web          | service_type db
web          | name query
web          | resource publish
web          | tags {}
web          | parent_id<PHONE_NUMBER>409377103
web          | trace_id<PHONE_NUMBER>025501574
web          | span_id<PHONE_NUMBER>744009893
web          | --------------------------------
web          | {"level":"INFO","logger":"Lucky","timestamp":"2022-05-16T14:00:08+04:00","ddsource":["crystal"],"dd":{"env":null,"service":"bonsai-ws","version":"1.2.3","span_id":"","trace_id":""},"duration":0.002599173,"method":"GET","path":"/canary/2e46708d-38bd-44a8-9bf1-4572ac7792e8","request_id":"3b02a6b0-bebf-4064-a508-248a1154c77e","restaurant_id":"63c6a71c-9e6e-420e-b290-d8b1b64fb1e5","status":200,"user_agent":"PostmanRuntime/7.29.0"}

Example with PostgreSQL

Note: the parent_id of the first trace is the trace from the previous HTTP request.

web          | TRACE
web          | service_name bonsai-ws
web          | service_type web
web          | name http.server.request
web          | resource Hydra::Index
web          | tags {"http.method" => "GET", "http.status_code" => "200", "http.resource" => "/hydra", "http.host" => "localhost", "http.user_agent" => "PostmanRuntime/7.29.0", "http.request_id" => "ae589e9f-6660-475c-92b0-f56655977fd1", "http.version" => "HTTP/1.1", "restaurant_id" => "63c6a71c-9e6e-420e-b290-d8b1b64fb1e5", "client" => "", "client_version" => ""}
web          | parent_id<PHONE_NUMBER>912256803
web          | trace_id<PHONE_NUMBER>873337330
web          | span_id<PHONE_NUMBER>297102346
web          | --------------------------------
web          | TRACE
web          | service_name redis-primary
web          | service_type db
web          | name query
web          | resource get
web          | tags {}
web          | parent_id<PHONE_NUMBER>297102346
web          | trace_id<PHONE_NUMBER>873337330
web          | span_id<PHONE_NUMBER>659448547
web          | --------------------------------
web          | TRACE
web          | service_name bonsai-primary
web          | service_type db
web          | name db.query
web          | resource SELECT 1 AS one FROM guests WHERE guests.id = $1 LIMIT 1
web          | tags {}
web          | parent_id<PHONE_NUMBER>659448547
web          | trace_id<PHONE_NUMBER>873337330
web          | span_id<PHONE_NUMBER>719510558
web          | --------------------------------
web          | TRACE
web          | service_name redis-primary
web          | service_type db
web          | name query
web          | resource hgetall
web          | tags {}
web          | parent_id<PHONE_NUMBER>719510558
web          | trace_id<PHONE_NUMBER>873337330
web          | span_id<PHONE_NUMBER>661041065
web          | --------------------------------
web          | {"level":"INFO","logger":"Lucky","timestamp":"2022-05-16T14:06:34+04:00","ddsource":["crystal"],"dd":{"env":null,"service":"bonsai-ws","version":"1.2.3","span_id":"","trace_id":""},"duration":0.056767268,"method":"GET","path":"/hydra","request_id":"ae589e9f-6660-475c-92b0-f56655977fd1","restaurant_id":"63c6a71c-9e6e-420e-b290-d8b1b64fb1e5","status":200,"user_agent":"PostmanRuntime/7.29.0"}

I then hit the ping endpoint
web          | TRACE
web          | service_name bonsai-ws
web          | service_type web
web          | name http.server.request
web          | resource Ping::Index
web          | tags {"http.method" => "GET", "http.status_code" => "200", "http.resource" => "/ping", "http.host" => "localhost", "http.user_agent" => "PostmanRuntime/7.29.0", "http.request_id" => "228b5a8b-f4f8-454d-9e12-0869d88c4926", "http.version" => "HTTP/1.1", "restaurant_id" => "", "client" => "", "client_version" => ""}
web          | parent_id<PHONE_NUMBER>643703492
web          | trace_id<PHONE_NUMBER>873337330
web          | span_id<PHONE_NUMBER>217596780
web          | --------------------------------
web          | {"level":"INFO","logger":"Lucky","timestamp":"2022-05-16T14:11:39+04:00","ddsource":["crystal"],"dd":{"env":null,"service":"bonsai-ws","version":"1.2.3","span_id":"","trace_id":""},"duration":3.5227e-5,"method":"GET","path":"/ping","request_id":"228b5a8b-f4f8-454d-9e12-0869d88c4926","status":200,"user_agent":"PostmanRuntime/7.29.0"}

parent_id is also in this endpoint

I then update the helper to wipe the fiber data after each request
module Traceable
  def trace(*args, **kwargs)
    Datadog.tracer.trace(*args, **kwargs) { |span| yield span }
  end

  # value set in TrackingHandler
  def set_trace_resource(resource : String)
    if span = Datadog.tracer.active_span
      span.resource = resource
    end
  end

  def set_trace_tag(key : String, value : String)
    if span = Datadog.tracer.active_span
      span.tags[key] = value
    end
  end

  def reset_trace!
    Fiber.current.current_datadog_span = nil
    Fiber.current.current_datadog_trace = nil
  end
end

Then I added an after hook for each request to clear the data
module RequestTracer
  include Traceable

  macro included
    before enrich_tracing
    after reset_tracing # this clears out the Fiber.current trace data
  end

  def enrich_tracing
    set_trace_resource self.class.name.to_s
    continue
  end

  def reset_tracing
    reset_trace!
    continue
  end
end

This worked!! Well it worked in the sense that the parent_id of the subsequent request is back to 0
But... The Datadog resource name is still showing the operation name haha
The worst part of this weird situation is that on Datadog the logs are showing the correct resource Hydra::Index
But I guess that means we have the correct

Regards, the logs, I just realised logging is done on a different Fiber... so will have a figure out a cleaner way of injecting the trace data into the logs.
Still debugging... But I know there is something in the code causing this now.

Ok I found a possible solution for the logs, there is a context API to the log, so if you set that inside the trace block, the logs generated within that block will have the trace and span ids
module Traceable
  def trace(*args, **kwargs)
    Datadog.tracer.trace(*args, **kwargs) do |span|
      Lucky::Log.dexter.log.context = Log::Metadata.build({trace_id: span.trace_id.to_s, span_id: span.id.to_s})
      yield span
      Lucky::Log.dexter.log.context = Log::Metadata.build({trace_id: "", span_id: ""})
    end
  end
end

I'm using this lucky json formatter, but can be adapted for any foramatter
# Monkey patch method flatten json key/values
# lib/dexter/src/dexter/json_log_formatter.cr
module Dexter
  struct JSONLogFormatter < BaseFormatter
    def call
      context_data = entry.context.to_h
      trace_id = context_data.delete(:trace_id)
      span_id = context_data.delete(:span_id)
      local_data = context_data.delete(:local).try(&.as_h) || context_data.delete("local").try(&.as_h)

      data = default_data
      data = data.merge(local_data) if local_data
      data = data.merge(context_data)
      data = data.merge(datadog_data(span_id, trace_id))

      exception_data.try do |exception_data_|
        data = data.merge(exception_data_)
      end

      data
        .compact
        .to_json(io)
    end

    private def default_data
      data = {
        "level"     => entry.severity.to_s.try(&.upcase),
        "logger"    => (entry.source.presence || "Lucky").try(&.titleize),
        "timestamp" => entry.timestamp,
      }
      data["message"] = entry.message unless entry.message.empty?
      data
    end

    private def datadog_data(span_id, trace_id)
      {
        "ddsource" => ["crystal"],
        "dd"       => {
          "env"      => ENV["DD_ENV"]?,
          "service"  => ENV["DD_SERVICE"]?,
          "version"  => ENV["DD_VERSION"]?,
          "span_id"  => span_id,
          "trace_id" => trace_id,
        },
      }
    end
  end
end

Results
{
  "dd": {
    "env": "staging",
    "service": "bonsai-ws",
    "span_id": "2866245041478857817",
    "trace_id": "2815534784969904792",
    "version": "1.2.3"
  },
  "ddsource": [
    "crystal"
  ],
  "duration": 0.00169134,
  "level": "INFO",
  "logger": "Lucky",
  "method": "GET",
  "path": "/hydra",
  "request_id": "51925971-4944-4a81-b259-beeac5626f70",
  "status": 200,
  "timestamp": "2022-05-16T18:55:11+04:00",
  "user_agent": "PostmanRuntime/7.29.0"
}


⚠ Bofrost.com has degraded performance

In 580f250, Bofrost.com (https://www.bofrost.com) experienced degraded performance:

HTTP code: 200
Response time: 2496 ms

Resolved: Bofrost.com performance has improved in 9eeb90b after 6 minutes.


Automatic sanity check of data, flagging out-of-range or suspiciously large changes

Propose a system that on each run of the pipeline would sanity check data for values that are out of a reasonable range, or with a suspiciously large change from one run of the pipeline to the next.  Ideally checks would apply to data at all stages along the pipeline -- input sources, intermediate data, as well as generated data (output cell indexed by table/variable/key/date) -- but we could start by implementing where this is easiest.  The results would be reported in a pipeline status report and/or stored (either appending to a log, or in a more structured format or database) for future reference (for instance, when suspicious data is manually discovered, one could look to see when it was introduced).
Some errors that have come up that would likely be caught by such a system:
Regions with confirmed cases > population
Regions with area > area of earth

Related issue for epidemiology data: #186


Add capabilities to TransactionOptions

are the capabilities actually used anywhere?

Apart from the temporary use, not right now no. But we still need support for it.


feature(payments): initialize GQL and page structure

done:

GraphQL: schema & apollo code generation (happens automatically post dependency install, can manually call it with yarn gql:compile
page structure for /dashboard/payments/...

TODO:

build out the actual pages
hook up the gql queries using either SSR or apollo useQuery hooks (SSR vs CSR)

Look at:
https://www.apollographql.com/docs/react/data/queries

📝 Changed routes:

…ard/payments/contracts
…payments/contracts/new

(view full size)
(view full size)

…ayments/purchases/[id]
…ard/payments/purchases

(view full size)
(view full size)

…oard/payments/settings

(view full size)

Commit 3c9d84ea12053f51a2d8efdec5fcfb29ede472db (https://thirdweb-95o9i6edf.thirdweb-preview.com).

Superseded by #1986


Security: OAuth Client ID and Secret are accessible to any user of an Apps Script in almost all samples

This mirrors the same issue in the OAuth2 library: https://github.com/googleworkspace/apps-script-oauth2/issues/378
getService() or the equivalent method is public in almost all of the available samples and documentation, instead of having a trailing underscore like getService_().
This means that any user can call getService by using google.script.run in the browser console, which will return the application's OAuth Client ID and Secret (which are not supposed to be given to users!). This allows any user of an extension to impersonate that extension by using its ID/Secret.
This issue was discovered during an internal security review for an extension I was building, and unfortunately it means that anyone who has copied one of the samples here and is using it in production is currently vulnerable to having their Client ID/Secret read by any user of the extension, provided they did not change the getService method to be private.
I reported this issue through https://g.co/vulnz per the security policy https://github.com/googleworkspace/apps-script-oauth2/security/policy and was told to open a public issue on this repo (issue tracker reference: https://issuetracker.google.com/issues/238056715)
I have a PR ready to go that fixes this issue for the samples right now, but unfortunately it won't retroactively fix it for anyone who has copied a sample.

PR: https://github.com/googleworkspace/apps-script-oauth1/pull/54


Just compute the current len once.

Fix env var types assignments.

makes sense! thanks! can you please adapt to the fixed I made in between? a pull from the master should suffice


Initial positioning of TileLayer

I've got 4 tiles each 256x256px large in zoom level 1. When creating a 512x512 px canvas for my map initialising it with zoom-level 1, why are the 4 tiles not "properly" positioned? As they would fit exactly into the 512x512 canvas, I would expect all tiles to be fully visible. Instead of this the whole picture is moved several px down-left, or respectively south-west.
Is that somehown intended or considered a bug?
Further I need some correlation between LatLng of the map and tileLayer-Position. More precisely, I would need to be able to set: Zoom-Level 0 of TileLayer xy spreads from LatLng s to LatLng e. So I would always be able to draw Polygons oder Polylines at fixed LatLng positions.
This should be possible already, shouldn't it? Any ideas, what I'm doing wrong with my TileLayer positioning?
Kind regards!

The number of tiles used for the world horizontally and vertically is 2^zoom. So for zoom 0, it's 2^0 = 1, for zoom 1 it's 2^1 = 2, for zoom 2 - 2^2 = 4 (not 3) and so on.

I believe this is not right, it should be  2^(zoom*2), at zoom level 1 => 4 tile images, at zoom level 2 =>16,  because every direction is doubled


plugin approval

Please fix metadata.txt to reference https://github.com/pibic-ifg2022/PIBIC2022/issues for issues

It's ok! Thanks


Fix the help menu

help menu localization is currently not working. i fixed it.

I have fix for this already. Just did not push it yet

It works without the strings


DNS lookup of memcachedNodes

We have a AWS setup with:-
elasticache.our-domain CNAME
and
memcachedNodes="elasticache.our-domain"
We've got a low ttl on the CNAME records and the JVM Java8 is running with -Dsun.net.inetaddr.ttl=60. However if we rebuild the elasticache with a new CNAME this isn't picked up despite the box resolving the new address.
I've sniffed DNS traffic and not seen anything come through. However I do see a lookup on startup.

I think part of the issue is that we're creating the InetSocketAddress via new InetSocketAddress( hostname, port ) here, which performs the name lookup on creation (via InetAddress.getByName(hostname)) - no chance that this will be reresolved again. This resolved InetSocketAddress is then passed to the memcached client which uses it internally (here's a related spymemcached issue). Because of the latter, we'd probably have to regularly check for changed name resolution results and in this case replace the memcached client. Perhaps looking deeper into the spymemcached code shows other possibilities.

Btw, which memcached client are you using, spymemcached, couchbase or elasticache?

Heya Magro,
We are using these jars:-
AmazonElastiCacheClusterClient-1.1.0.jar
memcached-session-manager-1.9.1.jar
memcached-session-manager-tc8-1.9.1.jar

and this config.
<?xml version="1.0" encoding="UTF-8"?>
<Context>
  <WatchedResource>WEB-INF/web.xml</WatchedResource>
  <Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
     storageKeyPrefix="static:${aws.stackName}_XXX"
     memcachedNodes="cache.ourdomain.com"
     memcachedProtocol="binary"
     sticky="false"
     sessionBackupAsync="false"
     sessionBackupTimeout="300"
     requestUriIgnorePattern=".*\.(gif|jpg|jpeg|png|wmv|avi|mpg|mpeg|mp4|htm|html|js|css|mp3|swf|ico|flv)$"
  />
</Context>

When running successfully on a 2 node cluster we get these log messages showing the endpoint switching between the two.
2016-06-15 04:57:32.516 INFO net.spy.memcached.ConfigurationPoller:  Starting configuration poller.
2016-06-15 04:57:32.516 INFO net.spy.memcached.ConfigurationPoller:  Endpoint to use for configuration access in this poll NodeEndPoint - HostName:xxxxxx.0001.usw1.cache.amazonaws.com IpAddress:10.x.x.88 Port:11211
2016-06-15 04:58:32.516 INFO net.spy.memcached.ConfigurationPoller:  Starting configuration poller.
2016-06-15 04:58:32.516 INFO net.spy.memcached.ConfigurationPoller:  Endpoint to use for configuration access in this poll NodeEndPoint - HostName:xxxx.0002.usw1.cache.amazonaws.com IpAddress:10.x.x.89 Port:11211

So it looks like we are using the auto-discovery mechanism.

Interestingly digging around the autodiscovery mechanism there's code to recreate the final discovered sockets as they do change when cluster sizes increase:-
https://github.com/awslabs/aws-elasticache-cluster-client-memcached-for-java/blob/master/src/main/java/net/spy/memcached/ConfigurationPoller.java
      if(endpoints.isEmpty()){
        //If no nodes are available status, then get all the endpoints. This provides an
        //oppurtunity to re-resolve the hostname by recreating InetSocketAddress instance in "NodeEndPoint".getInetSocketAddress().
        endpoints = client.getAllNodeEndPoints();
      }

but looking through the code samples you posted if that memcachedNodes socket is never re-tested it will always be the same ip:port combo. I'm surprised this isn't a problem for more people. I'm not a Java dev myself so not much I can help with. Where does this responsibilty lie?

Heya Magro,
What do you think about using something like Haproxy as a local proxy between Tomcat and the memcached cluster?

@gilesw Not sure if haproxy would work. I just checked if one could override InetSocketAddress to perform transparent reresolution once its InetAddress is accessed (which is called from SocketChannel.connect invoked by MemcachedConnection.attemptReconnects), but unfortunately this is not possible because everything is final (and even the equals method uses the internal InetSocketAddressHolder which would have to be patched as well) - therefore this seems not to be possible.
Looking further at MemcachedConnection.attemptReconnects, in one case it uses node.getNodeEndPoint().getInetSocketAddress(true); to determine the InetSocketAddress, where true means reresolve. Therefore this client seems to support dns reresolution already - not sure why it's not working. AFAICS in stock spymemcached this is not the case (would have to be added there).

Same issue here, will try to dig the code to submit a PR if possible.


Enhance Fee and Commission Payment Routing for Marketplace and Policies

Task linked: CU-861mu78f5 Smart Contract Updates - Fees, UpdateEntity


Computed value from parent as a child component's props should be reactive.

Just like the title describe.
I have a parent component, this parent component has a computed value (which is set cache: false, and have not reactive dependency in getter, just like Date.now()).
 But in fact, the computed value in child component is not reactive.
Here is the example to show this(resize the editor and click the button, you will see this). I think it is normally for computed value is reactive for component.

It's working as expected: it's not reactive in bindings, only works for js:
http://v1.vuejs.org/guide/reactivity.html#Inside-Computed-Properties (at the end)
You should open the question on the forums (http://forum.vuejs.org/) for help

@posva But it does not make sense that when I make computed no cache, and call it again in component, I will get the value never compute.

However, note this only affects programmatic access inside JavaScript; data-bindings are still dependency-driven.

Therefore, it doens't work if you pass the computed property by prop (which is a data-binding), and it only works when you execute this.parentWidth = this.$parent.realtimeWidth.

@fnlctrl Oh... I see, so it means there is no way to bind computed value to child component... THX!

No I didn't mean you cannot bin computed value as prop to child component. It just doesn't work in your case, because your computed value doesn't have dependencies (this.$el.getBoundingClientRect().value isn't a dependency, nor is it reactive)

Yeah~ Get it, I'm sorry I lost this point. 😄


Bike-Shedding: renaming flatMap, flatMapLatest for consistency and ease of adoption

Proposed Change
This was brought up by @jhusain and I agree, flatMap isn't the easiest way to explain the operator.
The proposal is to change to a structure of [mergeStrategy][MappingStrategy] for names:
merging strategies are:

merge
concat
latest (or switch)
zip
combine

mapping strategies are:

All - no mapping is done
Map - a function is called to do the mapping
MapTo - a value is provided to do the mapping

So for example:

flatMap(x => someObservable(x)) -> mergeMap(x => someObservable(x))
flatMap(Observable.just(32)) -> mergeMapTo(Observable.just(32))
flatMapLatest(x => someObservable(x)) -> latestMap(x => someObservable(x)) (or switchMap(x => someObservable(x)))
a.zip(b, (a,b) => a + b) -> a.zipMap(b, (a,b) => a + b)
Observable.zipArray(a, b, c) -> Observable.zipAll(a, b, c)
a.combineLatest(b, (a, b) => a + b) -> a.combineMap(b, (a, b) => a + b)
a.combineLatest(b, (a, b) => [a, b]) -> a.combineAll(b)
a.withLatestFrom(b, (a, b) => a + b) -> a.withMap(a, (a, b) => a + b)

Other questions

What about zip, combineLatest and withLatestFrom? which are all merge strategies... how can we fit them into this idiom? Are they different enough they don't require change?

cc/ @trxcllnt
(edit: adding zip and combine) I suppose we can merge them with All defaulting to an Array.

... I guess by this idiom, perhaps zipArray would be zipAll and zip would be zipMap? There could be a zipMapTo, also I suppose.

Again, this is complete and total bike-shedding since this is a full semantic version different.

The proposal is to change to a structure of [mergeStrategy][MappingStrategy] for names

Big thumbs up for this proposal.

mergeMap :+1:
mergeMapTo :+1: although I'd use the example mergeMapTo(Observable.from([10,20,30])) because the just example seems redundant (doesn't show mergeMapTo's usefulness) since we can write just .mapTo(32)
switchMap :+1: I prefer this one over latestMap because latestMap might get confused with combineLatest, these are two very different things.
zipMap :-1: I think the name zip is perfect
combineMap :-1: but soon I'll say it's :+1:, I'll explain.
combineAll :-1:
withMap :-1:

I think these are two different categories:

mergeMap, concatMap, switchMap
zip, combineLatest, withLatestFrom

The first always takes one Observable as input, the second category always takes at least two Observables as input. I'd say the former are expansion-mapping operators, and the latter are combination operators. (word "expansion" because a value from the source Observable is mapped to an Observable of many values on the resulting Observable)
While I think zip name is perfect (really easy to explain with the zipper metaphor), I think we could do something about combineLatest and withLatestFrom.
I think Kefir has the best combinator operator.
combine takes a set of active Observables and a set of passive Observables:
Kefir.combine(obss: Observable<any>[], passiveObss?: Observable<any>[], combinator?: Function)
Active Observables, when emitting next, are those that produce a nextevent on the resulting Observable, with the combination of the latest value from all (either active or passive) Observables. Passive Observables, when emittingnext, do not incur a next` event on the resulting Observable.
So the static combineLatest(a$, b$, combinator) is combine([a$, b$], [], combinator) and instance a$.withLatestFrom(b$, combinator) is combine([a$], [b$], combinator).
Hence combine is more general, so combineLatest and withLatestFrom are just special cases of it.
I like Elm's name for combineLatest, which is map2, map3, map4, etc depending on how many Signals are being combined. Perhaps one candidate for combineLatest, in this light, would be multiMap or combineMap, because the idea here is "map many Observables together, combined". So while I said up there that I didn't like combineMap, that's because it is not in the expansion-mapping category, so it should not be read as [mergeStrategy][mappingStrategy]. On the other hand, if it's called combineMap, it can and probably will be easily confused to be in the expansion-mapping category.
Finally, I have been teaching withLatestFrom as simplyMapThisObservableButPleaseAlsoUseTheLatestEventsFromTheseObservables. People totally get it like that, so maybe we need the name map in withLatestFrom. Also noteworthy: withLatestFrom is always an instance Observable, so the way a.withLatestFrom(b, fn) will be read is always "Observable A with the latest from Observable B". Candidates: mapUsingLatest ("A mapped using the latest B"), mapWithLatest ("A mapped with the latest B").
Another way of thinking about the combine flavors is: combineLatest is symmetric (all members are active), withLatestFrom is asymmetric (some are active, some are passive). So, tossing symmetricCombine and asymmetricCombine just as ideas, even though they are finger-twisters to type.
Yet another tossed idea is to have map be polymorphic:

map(selectorFn) plain ol' map
map(observables: Observable<any>[], selectorFn) is combineLatest, name inspired by Elm's map2, map3, etc, dropping the numbers.

I'm not entirely convinced of all these names, so I'm open to hear some comments, but here is my best bet so far:
Expansion-mapping operators:

mergeMap (instance)
concatMap (instance)
switchMap (instance)

Combination operators:

combine (static)
combineMap (instance)
mapWithLatest (instance)

Ok, giving second thought to it, zipMap might be fine.

If I am to throw in my $0.02, I would suggest that the mapping strategy need only be specified when it differs from the default "as-is" mode. So zip would emit values as-is, though combined into an array of course, whereas zipMap is named as such because you're explicitly naiming your intention to do something with the inputs other than the default.

@staltz @blesh zip doesn't need to be renamed to zipMap because there's no map between source events and inner Observables. Since zipAll exists, it'd probably be logical to have zip, zipMap, and zipAll just to maintain parity with merge, mergeMap, and mergeAll, though I have my doubts about the usefulness of zipMap.

@blesh and while zip, combineLatest, and withLatestFrom do merge observables together, I'd argue (and I think @benjchristensen would agree) they're really hybrid merge + buffer strategies. Their selector isn't for mapping between events and inner Observables, they're for reducing the buffered values to a single value. I vote for keeping the current zip, combineLatest, and withLatestFrom names, or maybe just rename withLatestFrom to joinLatest?

@trxcllnt

zip doesn't need to be renamed to zipMap because there's no map between source events and inner Observables.

Isn't there? Isn't the selector function a way of mapping from source events to resulting Observable?
I'd say new zip could behave like zipArray in RxJS v3, and new zipMap would be behave like zip in RxJS v3 with selector. Because of parity with merge, which doesn't take a selector function.

@staltz nope, zip's selector function is for reducing buffered events to a single event, not for mapping input events to inner merged Observables.

So does Elm's map3 reduce three events to a single event, yet it's called map.

just rename withLatestFrom to joinLatest

Why? No rationale given behind this one, and it doesn't read as clearly as "A mapped with latest from B".

@staltz: So does Elm's map3 reduce three events to a single event, yet it's called map.

yes, but Elm is a Haskell dialect and numbers in Haskell methods denote the argument count, a limitation we don't have in JS.
mergeMap gets its name from the fact that the operator merges after a map (coincidentally in Haskell, bind is defined in terms of fmap and join [a.k.a. Observable's merge]). concatMap concats after a map, and switchMap switches after a map.
The reason [the current] zip shouldn't be renamed to zipMap is because zip doesn't zip after a map... it maps after zipping.
I'm not saying zipMap wouldn't be a useful operator, just that if we're naming things with @blesh's proposed formula, [mergeStrategy]``[MappingStrategy], zip should stay named zip, and we introduce a new zipMap operator that maps then zips. For instance:
// mergeMap
Observable.prototype.mergeMap = (selector) => {
  return this.map(selector).mergeAll();
};
// zipMap
Observable.prototype.zipMap = (selector) => {
  return this.map(selector).zipAll();
}
// zip
Observable.prototype.zip = (...others, selector) => {
  return Observable.zip([this].concat(others), selector);
}

Why? No rationale given behind this one, and it doesn't read as clearly as "A mapped with latest from B".

Just thought I'd throw it in while we're bike-shedding about operators. withLatestFrom has always stuck out to me, as it doesn't fit the naming convention of any other operators. It is unique in its functionality (no other single operator does exactly what it does), but seemed like it would fit in a classification group like the others do. Last night I realized it's probably a new kind of join strategy, thus the name joinLatest.

The reason [the current] zip shouldn't be renamed to zipMap is because zip doesn't zip after a map... it maps after zipping.

Good point.

Last night I realized it's probably a new kind of join strategy, thus the name joinLatest.

Here's the RxJava issue where withLatestFrom came into existence, proposed by @benjchristensen. The discussion probably sheds some light on where did the name come from. I'd avoid join because there is already join in RxJava, and would confuse people to diverge in semantics. It's still a big advantage of Rx that operators are named roughly the same across languages/platforms. And that makes me realize we should try to be a bit conservative, or write a migration guide, or affect RxJava to do a similar major rename.

@staltz I'm aware of the join operator, and that's exactly why I'm suggesting this name: it seems like withLatestFrom is a specialization of join. There's join, groupJoin, and now joinLatest.

While we're on join, I'll be honest: forkJoin never made sense to me, personally. joinLast or something? I dunno... (yay bike-shedding)

Counter-proposal: Should the formula be [mapStrategy][MergeStrategy]? Since that's the order it happens in...

mapMerge
mapConcat
mapZip

I could live with joinLatest (in contrast with combineLatest), but for the sake of beginners, it's not a friendly name. "combine" and "join" are synonyms in English, so for Rx training we have to assign them different semantics and it isn't obvious which one is which. I prefer names that already suggest the semantics.

Counter-proposal: Should the formula be [mapStrategy][MergeStrategy]?

That makes perfect sense. If we let go of familiarity, mapMerge is better than mergeMap.

And if we do go with [mapStrategy] [mergeStrategy], then it would make sense to use sampleMap ("withLatestFrom") and combineMap ("combineLatest").

@staltz as @benjchristensen mentioned in the RxJava thread, withLatestFrom isn't sampling anything in the traditional sense. @jmhofer hit the nail on the head, it's a specialization of groupJoin, as you can see in this jsbin example.

FYI that we tried adopting mergeMap instead of flatMap in RxJava and eventually gave up because the entire world uses flatMap. We stuck with concatMap and switchMap, but deleted mergeMap even though it is more symmetric.

I vote for keeping the current zip, combineLatest, and withLatestFrom names

:+1: on keeping these.

mergeMap, switchMap, concatMap

:+1: on these names ... though I think that you should still have flatMap as an alias to mergeMap as it is ubiqitous.

Agreed with @benjchristensen that flatMap should be the default for map/mergeAll behavior, because it is the defacto community standard for combining sequences.
I think we should have the following:

flatMap
concatMap for map/concatAll
flatMapWithMaxConcurrency for map/merge(n)
flatMapFirst - previously from @jhusain and exclusive
flatMapLatest - still uses the RxJS standard

I don't like switchMap because we have switchFirst and switchLatest already in RxJS so we need to be explicit about which value we're selecting.

@trxcllnt

as benjchristensen mentioned in the RxJava thread, withLatestFrom isn't sampling anything in the traditional sense.

How not? a.withLatestFrom(b, fn) samples b when a emits, then uses values from both a and b to map to a result.
--1-----2--3-------4--------|
-----a---------b-------c----|
(          sample           )
-----1---------3-------4----|

-----a---------b-------c----|
--1-----2--3-------4--------|
(       withLatestFrom      )
-----a1--------b3------c4---|

@staltz How not? a.withLatestFrom(b, fn) samples b when a emits, then uses values from both a and b to map to a result.

Ah, I get where you're coming from now. This may be a misclassification on my part, but I've understood operators to fall into specific classification groups by their behavior. merge, concat, and switch are flattening operators, i.e. operators that work on Observables of Observables, but with specific logic around how the inner Observables are flattened. Similarly, sample, throttle, zip, combineLatest, buffer, window, join, and groupJoin are buffering operators, or operators that buffer events internally and emit based on custom logic.
zip and combineLatest buffer events and emit them on coincidence, buffer and window buffer events in non-overlapping groups of events, sample and throttle buffer events and emit via scheduling, and join and groupJoin buffer events and emit them based on custom opening and closing logic.
The reason I don't believe the sampling name fits with this operator is that it isn't buffering the event then using a scheduler to emit the values. It's closer to zip and combineLatest, since it's emitting events on coincidence, but there's not a shared vocabulary for coincidence aside from join, so the join name feels more correct to me.

sample and throttle buffer events and emit via scheduling.

Are you talking about the setTimeout scheduler? One use of sample is indeed source.sample(interval), but the other case is source.sample(otherObservable), and the latter is not emitting via scheduling. And that's the one I'm referring to.
In any case, if the word "sample" evokes traditional signal processing sampling by a constant frequency, another candidate word is "snapshot": snapshotMap.

@staltz Yes, sample can "schedule" emission using another Observable, but it's not joining the sampled Observable and the "scheduler" Observable's values together. Join is.

Alright, you convinced me.

I think all of these have been met, or are being met by other issues. Closing.


Custom Report builder

Should all the Built in Expressions for the task be available for drag and drop in the Custom Report builder?

They should be - but don't forget that RM expressions are only available for RM reports and likewise for unknowns.  As well, Summary expressions don't show up in the report builder (but their output can be exported using the report built for that purpose).
I hope this captures the essence of your question - I often feel like expressions are "missing" but in the end they are usually covered by one of the two conditions above.

I will have to learn to export the Summary expressions. Thanks


Fixing position sort

Sorting by position is currently broken because the effective check of:
if (0){
}

Does not not pass. So we must check if position is explicitly undefined so that we will branch into the sort logic even if the position value is 0.

Tested, LGTM


UnsatisfiedLinkError

Hi,
Just started with skobbler and when I try to run the demo app I am getting the following error :
at java.lang.Runtime.loadLibrary(Runtime.java:358)
at java.lang.System.loadLibrary(System.java:526)
at com.skobbler.ngx.versioning.SKVersioningManager.<clinit>(SourceFile:29)
at skobbler.sdkdemo.activities.SplashActivity.n_onCreate(Native Method)
at skobbler.sdkdemo.activities.SplashActivity.onCreate(SplashActivity.java:35)
at android.app.Activity.performCreate(Activity.java:5458)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1093)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2376)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2470)
at android.app.ActivityThread.access$900(ActivityThread.java:174)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1307)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:146)
at android.app.ActivityThread.main(ActivityThread.java:5593)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1283)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1099)
at dalvik.system.NativeStart.main(Native Method)```

Am I missing something here in terms of initialization? Any direction in solving this will be a great help.

Thanks!!

Hi Dhanush-S,
May I ask what device and build configuration you're using?
-TD

Hi,
Thanks for quick reply.
I am using Samsung Tab 3(android 4.4.2) device and tried in API 10 emulator.
I am using AnyCPU configuration.I am using Mac for development.Should I initialize some settings or am I missing something here?
Thanks.

Hi,
After some hours of frustration I came to know that the binding project's target framework was set to 4.0.After setting it to 2.3 it started working for me in the application.
Thanks.

Hi Dhanush-S,
Glad to hear you have it working now.
The binding project target framework should be 2.3 as it is set in the csproj file.
Is the reason that it wasn't working because you changed it yourself?
-TD

Hi TrekDev,
Yes,after changing the binding project's target framework to 2.3 it started working for me.
One quick question,does NearBySearch work with skobbler sdk,coz I keep getting the search result count to be 0 in my application.Checked with the Sdk Demo project,there also I am getting the count to be 0.Is it problem with my skobbler sdk or my implementation?Any pointers is useful.
Thanks.

Hi Dhanush-S,
Have you added your API key to the demo project?
In SplashActivity.cs you have to replace private const string ApiKey = "API_KEY_HERE"; with your Mobile API key provided to you by Skobbler. You can find your key by signing in to Skobbler and checking your api keys

Hi TrekDev,
Yes,I had forgot to put API_KEY in demo application.It successfully gave the results for search.But in my application it is still giving the result count to be 0.I checked everything right from implementation and all the application settings and manifest,but no clue.Any ideas where I could be going wrong.
Thanks.

Hi Dhanush-S,
My only guess would be initialisation of the SDK. Take a look at the demo application SplashActivity.cs.
Other than that I can't really help you because I don't know what it is you are doing, or any warning/errors it is giving you. The result of SearchManager.NearbySearch() will give you a SKSearchStatus which will tell you if/why it is failing. If you post your relevant code as a gist I might have a better chance of helping.
-TD

I'll assume you've found a solution since you haven't responded in a while.
If you're still having problems please open another issue with some specific details about your problem.


Hide Char in preparation for new package:ffi

Signed-off-by: Sunbreak<EMAIL_ADDRESS>

Since https://pub.dev/packages/ffi/versions/1.2.0-dev.0 Char is inside package:ffi according to https://github.com/dart-lang/ffi/pull/128

@dcharkes should we retract 1.2.0-dev.0 as well as 1.2.0, just for completeness?

ffigen's dev release depends on it, and people are experimenting with it and finding bugs. So, I'd say no.

I also saw this isolated incident in the Flutter issue database.

Pub should never select pre-releases by itself. So maybe the bug reported upgraded his project right in the time 1.2.0 stable was live?

These types have landed in 2.17 (not yet released to stable), and they have been renamed to UnsignedChar and SignedChar, which solves the problem of name clashes altogether. See https://api.dart.dev/be/184424/dart-ffi/dart-ffi-library.html.
As a result, I'm closing this PR -- hope that's OK?


Super buggy behaviour after upgrade to EXPO 36

Hi,
I just upgraded to EXPO SDK 36 which includes React Native 0.61.4 and react-native-reanimated 1.4.0 and react-native-gesture-handler 1.5.0.
After upgrading, the whole Pager is broken for me.
I've uploaded you a video.
https://www.youtube.com/watch?v=COA_LwrWfK4&
So the first image is always working, but any index > 1 will start to act super weird. They stay in the transitioned position until I touch the screen and move it by 1 pixel. If I chose to take an element which is out of my adjacentChildOffset, it just displays nothing until I touch and move for a pixel.
Is there any chance you could have a quick look into this? My schedule on this app is for friday and I spent a decent amount of time upgrading to SDK 36 and this is the last puzzle piece that is broken now for me :(

Ok, I managed to fix this myself FOR NOW.
I exported my Pager with
function arePropsEqual(prevProps, nextProps) {
    return prevProps.stories === nextProps.stories;
}

export default memo(Stories, arePropsEqual);

So removing memo(), I don't have these blanks anymore and my stuff works. But the transition stuff was still flickering there for a second until the image showed up. It was fixed after I changed the pageInterpolation. I had to add
    zIndex: (offset: Animated.Node<number>) => multiply(floor(offset), -1),

    opacity: {
        inputRange: [-2, -1, 0, 1, 2, 3, 4],
        outputRange: [0, 0, 1, 1, 1, 0, 0],
    },

as in your examples. I guess there were there for a reason, but I removed it, because that zindex stuff looked like useless for my case, but after that upgrade I got your point. I leave this open for now, because I am curious why memo() is breaking on this new version

i see - those dependencies work fine for me. i would very much appreciate a repro for something like this, there are too many moving parts here to determine whats going on


Have better validation library

Should be backwards compatible, look at:
http://rickharrison.github.com/validate.js/

What you think about having an input field data attribute to get this "for free"? like data-rules="min_length[8]", then have the view class search for these attributes to auto-create a FormValidator?


[SSZ] Support merkleization for basic types (ints, bools)

@Godspower-Eze You should work on this one first


Broken persisted queries support

Hi @enisdenjo, first of all, thank you for maintaining such an awesome project!
I would like to report an issue related to persisted queries support.
As described in the recipes:
// 🛸 server

import { parse, ExecutionArgs } from 'graphql';
import { createHandler } from 'graphql-sse';
import { schema } from './my-graphql';

// a unique GraphQL execution ID used for representing
// a query in the persisted queries store. when subscribing
// you should use the `SubscriptionPayload.query` to transmit the id
type QueryID = string;

const queriesStore: Record<QueryID, ExecutionArgs> = {
  iWantTheGreetings: {
    schema, // you may even provide different schemas in the queries store
    document: parse('subscription Greetings { greetings }'),
  },
};

export const handler = createHandler({
  onSubscribe: (_req, params) => {
    const persistedQuery =
      queriesStore[String(params.extensions?.persistedQuery)];
    if (persistedQuery) {
      return {
        ...persistedQuery,
        variableValues: params.variables, // use the variables from the client
        contextValue: undefined,
      };
    }

    // for extra security only allow the queries from the store
    return [null, { status: 404, statusText: 'Not Found' }];
  },
});

onSubscribe would return a ExecutionArgs result, leading graphql to execute the expected resolver.
However in current implementation, the returned result from above example is treated as ExecutionResult, hence the resolver is not triggered.
https://github.com/enisdenjo/graphql-sse/blob/d4890f1a513ab21573c52be6ccb57c8cd14919d7/src/handler.ts#L587-L600
https://github.com/enisdenjo/graphql-sse/blob/d4890f1a513ab21573c52be6ccb57c8cd14919d7/src/handler.ts#L1107-L1110
Please let me know if I missed anything, and if more details are needed, thank you!

Hey there, thanks for reporting! I think I know where the problem is, fix coming soon...


Added wallet fixtures

Fixes #549  .
Changes proposed in this PR:

added wallet fixtures in the root conftest (publisher, consumer, another_consumer, factory_deployer).

I will change the base after the tests pass.


Fix first release bugs on listener and certmapping LWRP

Fix service recipe convergence issue due to registry_key value set with symbol
Fix listener LWRP convergence issue due to registry_key value set to nil instead of empty string
Fix typo in the listener LWRP
Improve tests for listener LWRP
Fix service_certmapping implementation
Add test for service_certmapping LWRP
Support why_run in both service_certmapping and listener LWRP

+1


[stable/grafana] Update grafana version to 6.2.4.

@maorfr @zanhsieh @rtluckie
What this PR does / why we need it:
Grafana 6.2.3 was removed from Docker after this issue was discovered: https://github.com/grafana/grafana/issues/17613
Checklist
[Place an '[x]' (no spaces) in all applicable fields. Please remove unrelated fields.]

[x] DCO signed
[x] Chart Version bumped
[x] Variables are documented in the README.md
[x] Title of the PR starts with chart name (e.g. [stable/chart])

Duplicate of https://github.com/helm/charts/pull/14880
I should have checked first.


Fix dts for Intel 10G X505T

Acked-by: Volodymyr Babchuk<EMAIL_ADDRESS>

Merged manually into the master branch


Master branch should be protected

Context: https://github.com/lewagon/dotfiles/commit/8e0e5fa4f79e5675aaa275ccf365dedf02643738
It looks like someone accidentally committed to master, which created temporary weird effects for students on setup day 🙀
Since this is a...fairly important repo, can we please lock the master branch? I'd do it myself but I don't have permissions. Maybe @Eschults, you have to do it?
Thanks so much!

👋 I added branch rules this morning, also the repo has limited Write accesses since the beginning, so not sure what happened here 🤔

Branch protection rules should prevent this from happening in the future 👌

Thank you!!


Feature Request: Context menu item on the default cover to visit album

Double clicking on the cover when playing a song should take us to the album the song belongs to image
Right now double clicking on the image does nothing, so hopefully adding such a feature won't cause any issues.

I don't think that's a good idea to double-click to go to the song album.
I could add a context menu item to go to the song album on right-click.

I don't think that's a good idea to double-click to go to the song album. I could add a context menu item to go to the song album on right-click.

That works as well, thank you.

I'll rename the issue title for more clarity.

Confirmed!


Receiver for Linux (especially for Raspberry Pi)

Hi,
I am developing a multi-protocol audio receiver for linux, which also supports scream.
Check it out here: https://github.com/mincequi/cornrow.
Currently, it only supports 44.1/48 kHz, Stereo, 16 Bit.
Testers welcome; please share your feedback :)

Thanks, I added a note to the README! :)