Move GitHubSource to contrib

Expected Behavior
Sources are organized and installed consistently. GitHubSource, like other sources, lives in contrib/github and is installed by applying github.yaml.
Actual Behavior
All sources are in contrib/<sourcename> except GitHubSource which is in the root dir. All sources are installed with <sourcename>.yaml except GitHubSource which is installed with the inaccurately-named eventing-sources.yaml.
/kind chore

@grantr
I think I can help on this task, but I saw the gitlib source for contrib still pending: #382 , is that any specific reason?

Hi @vincent-pli! I'm hoping we'll be able to do more reviews once Kubecon is over this week.
I recommend holding off on this one since there might be some larger structural changes to make at the same time, and we need to consider how to do that.
/cc @n3wscott

@grantr Got it, thanks

Is someone working on this one?

Is someone working on this one?

I think there is nobody working on this.
@duglin do you want to go ahead and do it? Or maybe @vincent-pli who expressed some interest?
We should have this in for 0.7. Let me know, otherwise I can work on it. Thanks!

We should wait until this gets merged https://github.com/knative/eventing-contrib/pull/452

ok, will work on this one...
/assign


GUI Login Page

@GhanshamSoomarani Your PR has been merged successfully, Thank you for your contribution.
Give repo a star if it was useful.
Happy hacking.


saga serialize/deserialize

Coverage decreased (-1.8%) to 89.985% when pulling f888df8e1407fcfb375f8b83434ac2bbc87274b2 on TankTian:serialize into 5a77d19097b0a0a24d947e92b48699836913d1dd on ServiceComb:master.

Duplicate of #3


Dynamically add/remove packages from HTTP server

It would be nice if it were possible to start the HTTP server, and then when someone creates a new package to somehow "add it" to the HTTP server that's running.
For example, if I have this set up for my org, it'll be run as root. I'm not sure how I'd add a package once the server is running, aside from restarting the server once I've installed the package

Maybe. It depends on how complex this implementation would be. Restarting the server doesn't seem like a horrible workaround to me.

I agree that restarting the server isn't usually a big deal, but I'm working in a really restricted environment where it would take an IT support ticket to restart the server each time, and they would begin to question us if we were restarting it often.


nodejs-pg-age driver returns 'undefined' for primitive column types (v0.7.0)

According to the documentation on Apache AGE types (https://age.apache.org/docs/master/intro/types.html):

AGE uses a custom data type called agtype, which is the only data type returned by AGE

I'm using the nodejs driver as per the instructions on the README page (https://github.com/apache/incubator-age/tree/master/drivers/nodejs/README.md):
The driver works fine as long as the query returns an agtype that contains an object or an array, but for all other types the driver returns undefined.
For example, this query:
SELECT * FROM cypher('dev', $$ RETURN 555 as value $$) as (value agtype)
the nodejs-pg-age driver returns this (note the return value is undefined).
Result {
  command: 'SELECT',
  rowCount: 1,
  oid: null,
  rows: [ { value: undefined } ],
  fields: [
    Field {
      name: 'value',
      tableID: 0,
      columnID: 0,
      dataTypeID: 16448,
      dataTypeSize: -1,
      dataTypeModifier: -1,
      format: 'text'
    }
  ],
  ...

It seems the driver's type parser only recognizes objects and arrays.
If I define the column type as integer it returns the expected value:
SELECT * FROM cypher('dev', $$ RETURN 555 as value $$) as (value integer)
Result {
  command: 'SELECT',
  rowCount: 1,
  oid: null,
  rows: [ { value: 555 } ],
  fields: [
    Field {
      name: 'value',
      tableID: 0,
      columnID: 0,
      dataTypeID: 16448,
      dataTypeSize: -1,
      dataTypeModifier: -1,
      format: 'text'
    }
  ],
  ...

My question is, shouldn't the nodejs driver (node-pg-age) be parsing all valid agtype values -- including numbers, strings and booleans -- not just objects and arrays?

It will fix it.
https://github.com/apache/incubator-age/pull/177

@emotionbug - Thanks very much for the speedy fix, works as expected now.

Thanks @emotionbug


Support for i.MX8MPlus

Issue #, if available:
Description of changes:
Modified runbook to include instructions for i.MX8MPlus

Thank you for your contribution!


Added updated meeting links

Added the updated links to README

Thanks for this, @sumana-19. I think there's slight confusion on the ask in the original issue. I know, @chandrashritii, will assist in clarifying.
It's good to get this README updated. I believe that the other issue intends to refer to https://github.com/layer5io/layer5/blob/master/README.md

Thanks again, @sumana-19   you’re most welcome to join the Layer5 community - https://layer5.io/community

Thanks, @leecalcote !
On Sat, Sep 26, 2020 at 1:51 AM Lee Calcote<EMAIL_ADDRESS>wrote:

Thanks again, @sumana-19 https://github.com/sumana-19 you’re most
welcome to join the Layer5 community - https://layer5.io/community
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
https://github.com/layer5io/meet/pull/1#issuecomment-699136337, or
unsubscribe
https://github.com/notifications/unsubscribe-auth/AOZNHCABDFEFX5NEVJZDINLSHT3VTANCNFSM4RZZOKKQ
.


Review, product, sales's index page done.

Review, product, sales's index page done.

Resolve conflicts


Use global.proxy.includeIPRanges instead of  --includeIPRanges

Fixes https://github.com/istio/istio.github.io/issues/1433.
Describes using the global.proxy.includeIPRanges Helm variable, instead of  istioctl kube-inject --includeIPRanges option used previously.

Deploy preview for preliminary-istio failed.
Built with commit f4250ddcadf65d0094c43b128ad2331b98b4b3b1
https://app.netlify.com/sites/preliminary-istio/deploys/5b16b0338df8940743b1ffde

@frankbu @geeknoid I have applied your comments, thanks.

[APPROVALNOTIFIER] This PR is NOT APPROVED
This pull-request has been approved by: gyliu513, vadimeisenbergibm
To fully approve this pull request, please assign additional approvers.
We suggest the following additional approver: geeknoid
Assign the PR to them by writing /assign @geeknoid in a comment when ready.
The full list of commands accepted by this bot can be found here.
The pull request process is described here

Needs approval from an approver in each of these files:

OWNERS

Approvers can indicate their approval by writing /approve in a comment
Approvers can cancel approval by writing /approve cancel in a comment

/lgtm cancel

[APPROVALNOTIFIER] This PR is NOT APPROVED
This pull-request has been approved by: vadimeisenbergibm
To fully approve this pull request, please assign additional approvers.
We suggest the following additional approver: geeknoid
Assign the PR to them by writing /assign @geeknoid in a comment when ready.
The full list of commands accepted by this bot can be found here.
The pull request process is described here

Needs approval from an approver in each of these files:

OWNERS

Approvers can indicate their approval by writing /approve in a comment
Approvers can cancel approval by writing /approve cancel in a comment

[APPROVALNOTIFIER] This PR is NOT APPROVED
This pull-request has been approved by: gyliu513, vadimeisenbergibm
To fully approve this pull request, please assign additional approvers.
We suggest the following additional approver: geeknoid
Assign the PR to them by writing /assign @geeknoid in a comment when ready.
The full list of commands accepted by this bot can be found here.
The pull request process is described here

Needs approval from an approver in each of these files:

OWNERS

Approvers can indicate their approval by writing /approve in a comment
Approvers can cancel approval by writing /approve cancel in a comment

New changes are detected. LGTM label has been removed.


Implement live reloading server

Currently a third-party tool is needed to enable live-reloading, which makes it less accessible to novice users. There are plenty Python packages that can do this, but we need to pick the right one that integrates nicely with the event-loop that is already present in Entangled.

[ ] Most solutions work by having the http-server inject a bit of Javascript into pages. Check feasibility of implementing this on top of native http.server. See for instance this gist
[ ] livereload is an available and ready Python package. The API documentation is a bit minimal. We could run livereload from a separate thread and not worry too much about watch duplication. This could cause timing issues, where browsers are reloading before sites are finished rendering. It would be nicer if we can send a signal to the browser when we know its ok to reload.

im under the impression that the mkdocs based live server that comes with html rendering and updates does well for that already,
unless there is a intent to replicate the mkdocs featureset partially, it may be best to just integrate

Yes, MkDocs does a lot of what we want, with a few remarks:

The watchdog routine is not under our control, even though detecting file changes correctly is a very sensitive part of the user experience. For instance, I've had issues with file saving in Vim not being detected.
MkDocs output is very nice, but I want Entangled to work independent from it. Other targets include Julia's Documenter.jl, Rustdoc and last but not least Pandoc, which can also be used to generate PDF for publishing journal papers.

We'll only implement this feature now if it helps first user experience and can be done in relatively short amount of time. Seeing that MkDocs is probably the easiest way to start an Entangled project, this issue won't have the highest priority.


Redisson creating new connections when using pollFromAny

I have the following code.
redisson.getScoredSortedSet(keys.stream().findFirst().get()).pollFirstFromAny(1, TimeUnit.MINUTES, keys.toArray(new String[0]))
The above code results to connections getting acquired and released every second as follows. What can I do so that it reuses connections from the pool rather than creating new ones.
{"debug_level":"DEBUG","debug_timestamp":"2020-12-14 22:17:22,950","debug_thread":"redisson-timer-4-1","debug_file":"ClusterConnectionManager.java", "debug_line":"749","debug_message":"slot 5048 for otpnext","clientId": "","datasetId": "","unitId": "","eventId": "","flow": "","exception":""}
{"debug_level":"DEBUG","debug_timestamp":"2020-12-14 22:17:22,950","debug_thread":"redisson-timer-4-1","debug_file":"RedisExecutor.java", "debug_line":"610","debug_message":"acquired connection for command (BZPOPMIN) and params [{otpnext}-queue-otp_devteam_vs20160etrtrish_c0, 1] from slot NodeSource [slot=5048, addr=null, redisClient=null, redirect=null, entry=null] using node /<IP_ADDRESS>:6379... RedisConnection@119754824 [redisClient=[addr=redis://<IP_ADDRESS>:6379], channel=[id: 0x825d4b56, L:/<IP_ADDRESS>:57595 - R:/<IP_ADDRESS>:6379], currentCommand=null]","clientId": "","datasetId": "","unitId": "","eventId": "","flow": "","exception":""}
{"debug_level":"DEBUG","debug_timestamp":"2020-12-14 22:17:22,950","debug_thread":"redisson-timer-4-1","debug_file":"RedisExecutor.java", "debug_line":"610","debug_message":"acquired connection for command (BZPOPMIN) and params [{otpnext}-queue-otp_devteam_vs20160etrtrish_c0, 1] from slot NodeSource [slot=5048, addr=null, redisClient=null, redirect=null, entry=null] using node /<IP_ADDRESS>:6379... RedisConnection@119754824 [redisClient=[addr=redis://<IP_ADDRESS>:6379], channel=[id: 0x825d4b56, L:/<IP_ADDRESS>:57595 - R:/<IP_ADDRESS>:6379], currentCommand=null]","clientId": "","datasetId": "","unitId": "","eventId": "","flow": "","exception":""}
{"debug_level":"DEBUG","debug_timestamp":"2020-12-14 22:17:22,951","debug_thread":"redisson-netty-2-8","debug_file":"ConnectionWatchdog.java", "debug_line":"108","debug_message":"reconnecting RedisConnection@137358397 [redisClient=[addr=redis://<IP_ADDRESS>:6379], channel=[id: 0x1a909b89, L:/<IP_ADDRESS>:57594 ! R:/<IP_ADDRESS>:6379], currentCommand=CommandData [promise=RedissonPromise [promise=ImmediateEventExecutor$ImmediatePromise@33b6766c(success)], command=(BZPOPMIN), params=[{otpnext}-queue-otp_provisionqa_111318compu_83, 1], codec=org.redisson.codec.MarshallingCodec]] to /<IP_ADDRESS>:6379 ","clientId": "","datasetId": "","unitId": "","eventId": "","flow": "","exception":""}
{"debug_level":"DEBUG","debug_timestamp":"2020-12-14 22:17:22,951","debug_thread":"redisson-netty-2-8","debug_file":"ConnectionWatchdog.java", "debug_line":"108","debug_message":"reconnecting RedisConnection@137358397 [redisClient=[addr=redis://<IP_ADDRESS>:6379], channel=[id: 0x1a909b89, L:/<IP_ADDRESS>:57594 ! R:/<IP_ADDRESS>:6379], currentCommand=CommandData [promise=RedissonPromise [promise=ImmediateEventExecutor$ImmediatePromise@33b6766c(success)], command=(BZPOPMIN), params=[{otpnext}-queue-otp_provisionqa_111318compu_83, 1], codec=org.redisson.codec.MarshallingCodec]] to /<IP_ADDRESS>:6379 ","clientId": "","datasetId": "","unitId": "","eventId": "","flow": "","exception":""}
{"debug_level":"DEBUG","debug_timestamp":"2020-12-14 22:17:23,143","debug_thread":"redisson-netty-2-32","debug_file":"ConnectionWatchdog.java", "debug_line":"130","debug_message":"RedisConnection@137358397 [redisClient=[addr=redis://<IP_ADDRESS>:6379], channel=[id: 0xa51bb60f, L:/<IP_ADDRESS>:57616 - R:/<IP_ADDRESS>:6379], currentCommand=CommandData [promise=RedissonPromise [promise=ImmediateEventExecutor$ImmediatePromise@650dc38f(success: PONG)], command=(PING), params=[], codec=null]] connected to /<IP_ADDRESS>:6379, command: CommandData [promise=RedissonPromise [promise=ImmediateEventExecutor$ImmediatePromise@650dc38f(success: PONG)], command=(PING), params=[], codec=null]","clientId": "","datasetId": "","unitId": "","eventId": "","flow": "","exception":""}
{"debug_level":"DEBUG","debug_timestamp":"2020-12-14 22:17:23,143","debug_thread":"redisson-netty-2-32","debug_file":"ConnectionWatchdog.java", "debug_line":"130","debug_message":"RedisConnection@137358397 [redisClient=[addr=redis://<IP_ADDRESS>:6379], channel=[id: 0xa51bb60f, L:/<IP_ADDRESS>:57616 - R:/<IP_ADDRESS>:6379], currentCommand=CommandData [promise=RedissonPromise [promise=ImmediateEventExecutor$ImmediatePromise@650dc38f(success: PONG)], command=(PING), params=[], codec=null]] connected to /<IP_ADDRESS>:6379, command: CommandData [promise=RedissonPromise [promise=ImmediateEventExecutor$ImmediatePromise@650dc38f(success: PONG)], command=(PING), params=[], codec=null]","clientId": "","datasetId": "","unitId": "","eventId": "","flow": "","exception":""}
{"debug_level":"DEBUG","debug_timestamp":"2020-12-14 22:17:24,050","debug_thread":"redisson-timer-4-1","debug_file":"RedisExecutor.java", "debug_line":"632","debug_message":"connection released for command (BZPOPMIN) and params [{otpnext}-queue-otp_devteam_vs20160etrtrish_c0, 1] from slot NodeSource [slot=5048, addr=null, redisClient=null, redirect=null, entry=null] using connection RedisConnection@119754824 [redisClient=[addr=redis://<IP_ADDRESS>:6379], channel=[id: 0x825d4b56, L:/<IP_ADDRESS>:57595 - R:/<IP_ADDRESS>:6379], currentCommand=CommandData [promise=RedissonPromise [promise=ImmediateEventExecutor$ImmediatePromise@780fc07f(success)], command=(BZPOPMIN), params=[{otpnext}-queue-otp_devteam_vs20160etrtrish_c0, 1], codec=org.redisson.codec.MarshallingCodec]]","clientId": "","datasetId": "","unitId": "","eventId": "","flow": "","exception":""}
{"debug_level":"DEBUG","debug_timestamp":"2020-12-14 22:17:24,050","debug_thread":"redisson-timer-4-1","debug_file":"RedisExecutor.java", "debug_line":"632","debug_message":"connection released for command (BZPOPMIN) and params [{otpnext}-queue-otp_devteam_vs20160etrtrish_c0, 1] from slot NodeSource [slot=5048, addr=null, redisClient=null, redirect=null, entry=null] using connection RedisConnection@119754824 [redisClient=[addr=redis://<IP_ADDRESS>:6379], channel=[id: 0x825d4b56, L:/<IP_ADDRESS>:57595 - R:/<IP_ADDRESS>:6379], currentCommand=CommandData [promise=RedissonPromise [promise=ImmediateEventExecutor$ImmediatePromise@780fc07f(success)], command=(BZPOPMIN), params=[{otpnext}-queue-otp_devteam_vs20160etrtrish_c0, 1], codec=org.redisson.codec.MarshallingCodec]]","clientId": "","datasetId": "","unitId": "","eventId": "","flow": "","exception":""}
{"debug_level":"DEBUG","debug_timestamp":"2020-12-14 22:17:24,051","debug_thread":"redisson-timer-4-1","debug_file":"ClusterConnectionManager.java", "debug_line":"749","debug_message":"slot 5048 for otpnext","clientId": "","datasetId": "","unitId": "","eventId": "","flow": "","exception":""}
{"debug_level":"DEBUG","debug_timestamp":"2020-12-14 22:17:24,051","debug_thread":"redisson-timer-4-1","debug_file":"ClusterConnectionManager.java", "debug_line":"749","debug_message":"slot 5048 for otpnext","clientId": "","datasetId": "","unitId": "","eventId": "","flow": "","exception":""}
{"debug_level":"DEBUG","debug_timestamp":"2020-12-14 22:17:24,051","debug_thread":"redisson-timer-4-1","debug_file":"RedisExecutor.java", "debug_line":"610","debug_message":"acquired connection for command (BZPOPMIN) and params [{otpnext}-queue-otp_provisionqa_111318compu_83, 1] from slot NodeSource [slot=5048, addr=null, redisClient=null, redirect=null, entry=null] using node /<IP_ADDRESS>:6379... RedisConnection@1901897413 [redisClient=[addr=redis://<IP_ADDRESS>:6379], channel=[id: 0x486880a2, L:/<IP_ADDRESS>:57596 - R:/<IP_ADDRESS>:6379], currentCommand=null]","clientId": "","datasetId": "","unitId": "","eventId": "","flow": "","exception":""}
{"debug_level":"DEBUG","debug_timestamp":"2020-12-14 22:17:24,051","debug_thread":"redisson-timer-4-1","debug_file":"RedisExecutor.java", "debug_line":"610","debug_message":"acquired connection for command (BZPOPMIN) and params [{otpnext}-queue-otp_provisionqa_111318compu_83, 1] from slot NodeSource [slot=5048, addr=null, redisClient=null, redirect=null, entry=null] using node /<IP_ADDRESS>:6379... RedisConnection@1901897413 [redisClient=[addr=redis://<IP_ADDRESS>:6379], channel=[id: 0x486880a2, L:/<IP_ADDRESS>:57596 - R:/<IP_ADDRESS>:6379], currentCommand=null]","clientId": "","datasetId": "","unitId": "","eventId": "","flow": "","exception":""}
{"debug_level":"DEBUG","debug_timestamp":"2020-12-14 22:17:24,052","debug_thread":"redisson-netty-2-9","debug_file":"ConnectionWatchdog.java", "debug_line":"108","debug_message":"reconnecting RedisConnection@119754824 [redisClient=[addr=redis://<IP_ADDRESS>:6379], channel=[id: 0x825d4b56, L:/<IP_ADDRESS>:57595 ! R:/<IP_ADDRESS>:6379], currentCommand=CommandData [promise=RedissonPromise [promise=ImmediateEventExecutor$ImmediatePromise@780fc07f(success)], command=(BZPOPMIN), params=[{otpnext}-queue-otp_devteam_vs20160etrtrish_c0, 1], codec=org.redisson.codec.MarshallingCodec]] to /<IP_ADDRESS>:6379 ","clientId": "","datasetId": "","unitId": "","eventId": "","flow": "","exception":""}
{"debug_level":"DEBUG","debug_timestamp":"2020-12-14 22:17:24,052","debug_thread":"redisson-netty-2-9","debug_file":"ConnectionWatchdog.java", "debug_line":"108","debug_message":"reconnecting RedisConnection@119754824 [redisClient=[addr=redis://<IP_ADDRESS>:6379], channel=[id: 0x825d4b56, L:/<IP_ADDRESS>:57595 ! R:/<IP_ADDRESS>:6379], currentCommand=CommandData [promise=RedissonPromise [promise=ImmediateEventExecutor$ImmediatePromise@780fc07f(success)], command=(BZPOPMIN), params=[{otpnext}-queue-otp_devteam_vs20160etrtrish_c0, 1], codec=org.redisson.codec.MarshallingCodec]] to /<IP_ADDRESS>:6379 ","clientId": "","datasetId": "","unitId": "","eventId": "","flow": "","exception":""}
{"debug_level":"DEBUG","debug_timestamp":"2020-12-14 22:17:24,251","debug_thread":"redisson-netty-2-7","debug_file":"ConnectionWatchdog.java", "debug_line":"130","debug_message":"RedisConnection@119754824 [redisClient=[addr=redis://<IP_ADDRESS>:6379], channel=[id: 0xe627b32e, L:/<IP_ADDRESS>:57617 - R:/<IP_ADDRESS>:6379], currentCommand=CommandData [promise=RedissonPromise [promise=ImmediateEventExecutor$ImmediatePromise@7eec7d3f(success: PONG)], command=(PING), params=[], codec=null]] connected to /<IP_ADDRESS>:6379, command: CommandData [promise=RedissonPromise [promise=ImmediateEventExecutor$ImmediatePromise@7eec7d3f(success: PONG)], command=(PING), params=[], codec=null]","clientId": "","datasetId": "","unitId": "","eventId": "","flow": "","exception":""}
{"debug_level":"DEBUG","debug_timestamp":"2020-12-14 22:17:24,251","debug_thread":"redisson-netty-2-7","debug_file":"ConnectionWatchdog.java", "debug_line":"130","debug_message":"RedisConnection@119754824 [redisClient=[addr=redis://<IP_ADDRESS>:6379], channel=[id: 0xe627b32e, L:/<IP_ADDRESS>:57617 - R:/<IP_ADDRESS>:6379], currentCommand=CommandData [promise=RedissonPromise [promise=ImmediateEventExecutor$ImmediatePromise@7eec7d3f(success: PONG)], command=(PING), params=[], codec=null]] connected to /<IP_ADDRESS>:6379, command: CommandData [promise=RedissonPromise [promise=ImmediateEventExecutor$ImmediatePromise@7eec7d3f(success: PONG)], command=(PING), params=[], codec=null]","clientId": "","datasetId": "","unitId": "","eventId": "","flow": "","exception":""}
{"debug_level":"DEBUG","debug_timestamp":"2020-12-14 22:17:25,150","debug_thread":"redisson-timer-4-1","debug_file":"RedisExecutor.java", "debug_line":"632","debug_message":"connection released for command (BZPOPMIN) and params [{otpnext}-queue-otp_provisionqa_111318compu_83, 1] from slot NodeSource [slot=5048, addr=null, redisClient=null, redirect=null, entry=null] using connection RedisConnection@1901897413 [redisClient=[addr=redis://<IP_ADDRESS>:6379], channel=[id: 0x486880a2, L:/<IP_ADDRESS>:57596 - R:/<IP_ADDRESS>:6379], currentCommand=CommandData [promise=RedissonPromise [promise=ImmediateEventExecutor$ImmediatePromise@45d6efba(success)], command=(BZPOPMIN), params=[{otpnext}-queue-otp_provisionqa_111318compu_83, 1], codec=org.redisson.codec.MarshallingCodec]]","clientId": "","datasetId": "","unitId": "","eventId": "","flow": "","exception":""}
{"debug_level":"DEBUG","debug_timestamp":"2020-12-14 22:17:25,150","debug_thread":"redisson-timer-4-1","debug_file":"RedisExecutor.java", "debug_line":"632","debug_message":"connection released for command (BZPOPMIN) and params [{otpnext}-queue-otp_provisionqa_111318compu_83, 1] from slot NodeSource [slot=5048, addr=null, redisClient=null, redirect=null, entry=null] using connection RedisConnection@1901897413 [redisClient=[addr=redis://<IP_ADDRESS>:6379], channel=[id: 0x486880a2, L:/<IP_ADDRESS>:57596 - R:/<IP_ADDRESS>:6379], currentCommand=CommandData [promise=RedissonPromise [promise=ImmediateEventExecutor$ImmediatePromise@45d6efba(success)], command=(BZPOPMIN), params=[{otpnext}-queue-otp_provisionqa_111318compu_83, 1], codec=org.redisson.codec.MarshallingCodec]]","clientId": "","datasetId": "","unitId": "","eventId": "","flow": "","exception":""}
{"debug_level":"DEBUG","debug_timestamp":"2020-12-14 22:17:25,150","debug_thread":"redisson-timer-4-1","debug_file":"ClusterConnectionManager.java", "debug_line":"749","debug_message":"slot 5048 for otpnext","clientId": "","datasetId": "","unitId": "","eventId": "","flow": "","exception":""}
{"debug_level":"DEBUG","debug_timestamp":"2020-12-14 22:17:25,150","debug_thread":"redisson-timer-4-1","debug_file":"ClusterConnectionManager.java", "debug_line":"749","debug_message":"slot 5048 for otpnext","clientId": "","datasetId": "","unitId": "","eventId": "","flow": "","exception":""}
{"debug_level":"DEBUG","debug_timestamp":"2020-12-14 22:17:25,150","debug_thread":"redisson-timer-4-1","debug_file":"RedisExecutor.java", "debug_line":"610","debug_message":"acquired connection for command (BZPOPMIN) and params [{otpnext}-queue-otp_provisionqa_111318compu_83, 1] from slot NodeSource [slot=5048, addr=null, redisClient=null, redirect=null, entry=null] using node /<IP_ADDRESS>:6379... RedisConnection@1127088553 [redisClient=[addr=redis://<IP_ADDRESS>:6379], channel=[id: 0xbbd79ac3, L:/<IP_ADDRESS>:57597 - R:/<IP_ADDRESS>:6379], currentCommand=null]","clientId": "","datasetId": "","unitId": "","eventId": "","flow": "","exception":""}
{"debug_level":"DEBUG","debug_timestamp":"2020-12-14 22:17:25,150","debug_thread":"redisson-timer-4-1","debug_file":"RedisExecutor.java", "debug_line":"610","debug_message":"acquired connection for command (BZPOPMIN) and params [{otpnext}-queue-otp_provisionqa_111318compu_83, 1] from slot NodeSource [slot=5048, addr=null, redisClient=null, redirect=null, entry=null] using node /<IP_ADDRESS>:6379... RedisConnection@1127088553 [redisClient=[addr=redis://<IP_ADDRESS>:6379], channel=[id: 0xbbd79ac3, L:/<IP_ADDRESS>:57597 - R:/<IP_ADDRESS>:6379], currentCommand=null]","clientId": "","datasetId": "","unitId": "","eventId": "","flow": "","exception":""}
{"debug_level":"DEBUG","debug_timestamp":"2020-12-14 22:17:25,151","debug_thread":"redisson-netty-2-10","debug_file":"ConnectionWatchdog.java", "debug_line":"108","debug_message":"reconnecting RedisConnection@1901897413 [redisClient=[addr=redis://<IP_ADDRESS>:6379], channel=[id: 0x486880a2, L:/<IP_ADDRESS>:57596 ! R:/<IP_ADDRESS>:6379], currentCommand=CommandData [promise=RedissonPromise [promise=ImmediateEventExecutor$ImmediatePromise@45d6efba(success)], command=(BZPOPMIN), params=[{otpnext}-queue-otp_provisionqa_111318compu_83, 1], codec=org.redisson.codec.MarshallingCodec]] to /<IP_ADDRESS>:6379 ","clientId": "","datasetId": "","unitId": "","eventId": "","flow": "","exception":""}
{"debug_level":"DEBUG","debug_timestamp":"2020-12-14 22:17:25,151","debug_thread":"redisson-netty-2-10","debug_file":"ConnectionWatchdog.java", "debug_line":"108","debug_message":"reconnecting RedisConnection@1901897413 [redisClient=[addr=redis://<IP_ADDRESS>:6379], channel=[id: 0x486880a2, L:/<IP_ADDRESS>:57596 ! R:/<IP_ADDRESS>:6379], currentCommand=CommandData [promise=RedissonPromise [promise=ImmediateEventExecutor$ImmediatePromise@45d6efba(success)], command=(BZPOPMIN), params=[{otpnext}-queue-otp_provisionqa_111318compu_83, 1], codec=org.redisson.codec.MarshallingCodec]] to /<IP_ADDRESS>:6379 ","clientId": "","datasetId": "","unitId": "","eventId": "","flow": "","exception":""}
{"debug_level":"DEBUG","debug_timestamp":"2020-12-14 22:17:25,339","debug_thread":"redisson-netty-2-8","debug_file":"ConnectionWatchdog.java", "debug_line":"130","debug_message":"RedisConnection@1901897413 [redisClient=[addr=redis://<IP_ADDRESS>:6379], channel=[id: 0x72d6dac8, L:/<IP_ADDRESS>:57620 - R:/<IP_ADDRESS>:6379], currentCommand=CommandData [promise=RedissonPromise [promise=ImmediateEventExecutor$ImmediatePromise@37abd12(success: PONG)], command=(PING), params=[], codec=null]] connected to /<IP_ADDRESS>:6379, command: CommandData [promise=RedissonPromise [promise=ImmediateEventExecutor$ImmediatePromise@37abd12(success: PONG)], command=(PING), params=[], codec=null]","clientId": "","datasetId": "","unitId": "","eventId": "","flow": "","exception":""}
{"debug_level":"DEBUG","debug_timestamp":"2020-12-14 22:17:25,339","debug_thread":"redisson-netty-2-8","debug_file":"ConnectionWatchdog.java", "debug_line":"130","debug_message":"RedisConnection@1901897413 [redisClient=[addr=redis://<IP_ADDRESS>:6379], channel=[id: 0x72d6dac8, L:/<IP_ADDRESS>:57620 - R:/<IP_ADDRESS>:6379], currentCommand=CommandData [promise=RedissonPromise [promise=ImmediateEventExecutor$ImmediatePromise@37abd12(success: PONG)], command=(PING), params=[], codec=null]] connected to /<IP_ADDRESS>:6379, command: CommandData [promise=RedissonPromise [promise=ImmediateEventExecutor$ImmediatePromise@37abd12(success: PONG)], command=(PING), params=[], codec=null]","clientId": "","datasetId": "","unitId": "","eventId": "","flow": "","exception":""}
{"debug_level":"DEBUG","debug_timestamp":"2020-12-14 22:17:26,251","debug_thread":"redisson-timer-4-1","debug_file":"RedisExecutor.java", "debug_line":"632","debug_message":"connection released for command (BZPOPMIN) and params [{otpnext}-queue-otp_provisionqa_111318compu_83, 1] from slot NodeSource [slot=5048, addr=null, redisClient=null, redirect=null, entry=null] using connection RedisConnection@1127088553 [redisClient=[addr=redis://<IP_ADDRESS>:6379], channel=[id: 0xbbd79ac3, L:/<IP_ADDRESS>:57597 - R:/<IP_ADDRESS>:6379], currentCommand=CommandData [promise=RedissonPromise [promise=ImmediateEventExecutor$ImmediatePromise@1da96dea(success)], command=(BZPOPMIN), params=[{otpnext}-queue-otp_provisionqa_111318compu_83, 1], codec=org.redisson.codec.MarshallingCodec]]","clientId": "","datasetId": "","unitId": "","eventId": "","flow": "","exception":""}
{"debug_level":"DEBUG","debug_timestamp":"2020-12-14 22:17:26,251","debug_thread":"redisson-timer-4-1","debug_file":"RedisExecutor.java", "debug_line":"632","debug_message":"connection released for command (BZPOPMIN) and params [{otpnext}-queue-otp_provisionqa_111318compu_83, 1] from slot NodeSource [slot=5048, addr=null, redisClient=null, redirect=null, entry=null] using connection RedisConnection@1127088553 [redisClient=[addr=redis://<IP_ADDRESS>:6379], channel=[id: 0xbbd79ac3, L:/<IP_ADDRESS>:57597 - R:/<IP_ADDRESS>:6379], currentCommand=CommandData [promise=RedissonPromise [promise=ImmediateEventExecutor$ImmediatePromise@1da96dea(success)], command=(BZPOPMIN), params=[{otpnext}-queue-otp_provisionqa_111318compu_83, 1], codec=org.redisson.codec.MarshallingCodec]]","clientId": "","datasetId": "","unitId": "","eventId": "","flow": "","exception":""}
{"debug_level":"DEBUG","debug_timestamp":"2020-12-14 22:17:26,251","debug_thread":"redisson-timer-4-1","debug_file":"ClusterConnectionManager.java", "debug_line":"749","debug_message":"slot 5048 for otpnext","clientId": "","datasetId": "","unitId": "","eventId": "","flow": "","exception":""}
{"debug_level":"DEBUG","debug_timestamp":"2020-12-14 22:17:26,251","debug_thread":"redisson-timer-4-1","debug_file":"ClusterConnectionManager.java", "debug_line":"749","debug_message":"slot 5048 for otpnext","clientId": "","datasetId": "","unitId": "","eventId": "","flow": "","exception":""}
{"debug_level":"DEBUG","debug_timestamp":"2020-12-14 22:17:26,251","debug_thread":"redisson-timer-4-1","debug_file":"RedisExecutor.java", "debug_line":"610","debug_message":"acquired connection for command (BZPOPMIN) and params [{otpnext}-queue-otp_devteam_vs20160etrtrish_c0, 1] from slot NodeSource [slot=5048, addr=null, redisClient=null, redirect=null, entry=null] using node /<IP_ADDRESS>:6379... RedisConnection@549722594 [redisClient=[addr=redis://<IP_ADDRESS>:6379], channel=[id: 0x523655de, L:/<IP_ADDRESS>:57598 - R:/<IP_ADDRESS>:6379], currentCommand=null]","clientId": "","datasetId": "","unitId": "","eventId": "","flow": "","exception":""}
{"debug_level":"DEBUG","debug_timestamp":"2020-12-14 22:17:26,251","debug_thread":"redisson-timer-4-1","debug_file":"RedisExecutor.java", "debug_line":"610","debug_message":"acquired connection for command (BZPOPMIN) and params [{otpnext}-queue-otp_devteam_vs20160etrtrish_c0, 1] from slot NodeSource [slot=5048, addr=null, redisClient=null, redirect=null, entry=null] using node /<IP_ADDRESS>:6379... RedisConnection@549722594 [redisClient=[addr=redis://<IP_ADDRESS>:6379], channel=[id: 0x523655de, L:/<IP_ADDRESS>:57598 - R:/<IP_ADDRESS>:6379], currentCommand=null]","clientId": "","datasetId": "","unitId": "","eventId": "","flow": "","exception":""}
{"debug_level":"DEBUG","debug_timestamp":"2020-12-14 22:17:26,252","debug_thread":"redisson-netty-2-11","debug_file":"ConnectionWatchdog.java", "debug_line":"108","debug_message":"reconnecting RedisConnection@1127088553 [redisClient=[addr=redis://<IP_ADDRESS>:6379], channel=[id: 0xbbd79ac3, L:/<IP_ADDRESS>:57597 ! R:/<IP_ADDRESS>:6379], currentCommand=CommandData [promise=RedissonPromise [promise=ImmediateEventExecutor$ImmediatePromise@1da96dea(success)], command=(BZPOPMIN), params=[{otpnext}-queue-otp_provisionqa_111318compu_83, 1], codec=org.redisson.codec.MarshallingCodec]] to /<IP_ADDRESS>:6379 ","clientId": "","datasetId": "","unitId": "","eventId": "","flow": "","exception":""}
{"debug_level":"DEBUG","debug_timestamp":"2020-12-14 22:17:26,252","debug_thread":"redisson-netty-2-11","debug_file":"ConnectionWatchdog.java", "debug_line":"108","debug_message":"reconnecting RedisConnection@1127088553 [redisClient=[addr=redis://<IP_ADDRESS>:6379], channel=[id: 0xbbd79ac3, L:/<IP_ADDRESS>:57597 ! R:/<IP_ADDRESS>:6379], currentCommand=CommandData [promise=RedissonPromise [promise=ImmediateEventExecutor$ImmediatePromise@1da96dea(success)], command=(BZPOPMIN), params=[{otpnext}-queue-otp_provisionqa_111318compu_83, 1], codec=org.redisson.codec.MarshallingCodec]] to /<IP_ADDRESS>:6379 ","clientId": "","datasetId": "","unitId": "","eventId": "","flow": "","exception":""}
{"debug_level":"DEBUG","debug_timestamp":"2020-12-14 22:17:26,353","debug_thread":"redisson-netty-2-5","debug_file":"ClusterConnectionManager.java", "debug_line":"453","debug_message":"cluster nodes state got from /<IP_ADDRESS>:6379:
I am connecting to Elasticcache which is running redis with 2 nodes and cluster mode enabled
clusterServersConfig:
idleConnectionTimeout: 10000
connectTimeout: 10000
timeout: 3000
retryAttempts: 3
retryInterval: 1500
subscriptionsPerConnection: 5
sslEnableEndpointIdentification: true
sslProvider: "JDK"
pingConnectionInterval: 30000
keepAlive: true
tcpNoDelay: false
loadBalancer: !<org.redisson.connection.balancer.RoundRobinLoadBalancer> {}
slaveConnectionMinimumIdleSize: 24
slaveConnectionPoolSize: 64
failedSlaveReconnectionInterval: 3000
failedSlaveCheckInterval: 180000
masterConnectionMinimumIdleSize: 24
masterConnectionPoolSize: 64
readMode: "SLAVE"
subscriptionMode: "MASTER"
subscriptionConnectionMinimumIdleSize: 1
subscriptionConnectionPoolSize: 50
dnsMonitoringInterval: 5000
natMapper: !<org.redisson.api.DefaultNatMapper> {}
nodeAddresses:

"redis://xyz:6379"
scanInterval: 5000
checkSlotsCoverage: true
threads: 16
nettyThreads: 32
referenceEnabled: true
transportMode: "NIO"
lockWatchdogTimeout: 30000
keepPubSubOrder: true
decodeInExecutor: false
useScriptCache: false
minCleanUpDelay: 5
maxCleanUpDelay: 1800
cleanUpKeysAmount: 100
nettyHook: !<org.redisson.client.DefaultNettyHook> {}
useThreadClassLoader: true
addressResolverGroupFactory: !<org.redisson.connection.DnsAddressResolverGroupFactory> {}

Redisson already uses connection pool. acquire/release operations performed on connection pool.

Not sure why the metrics show creating around 50 new connections every minute. This is a single application which only does pollFromAny during the test. I observed lots of PINGs and BZPOPMIN commands being executed.

After some more testing, this was happening because the application was running on a slow connection to redis on VPN. Once the application is deployed to AWS, I no longer see these huge number of new connections getting created. Hence no issue.

pingConnectionInterval = 30000, so after 30sec of reply absence connection is reconnected.


Change Stefan's Tekton pipeline to use local model

User Story

#2

References

@StevenTobin mentioned that it might be better to use a local model instead of downloading one from AzureML at least for now; useful in case there are network issues between the cluster and Azure. Stefan's code creates a PVC and downloads the model to it anyway so that hopefully shouldn't be hard to change.

Originally posted by @piotrpdev in https://github.com/opendatahub-io/ai-edge/issues/2#issuecomment-1676993395
A/C
TBD

Done in my fork: https://github.com/piotrpdev/azureml-model-to-edge/tree/dev
Model is copied to the PVC using oc cp and a ubi9 pod


Declare sets as linkedhashsets

This is the small change I mentioned to declare linkedhashsets publicly

@samskiter I don't think it would be right to make this change. I was happy to leave this style in this project in your change for #558 but I don't think we can roll this out to all users of this project.
IMO

This isn't idiomatic in the Java world (despite there being an argument for doing it)
These sets aren't required to be ordered
There's no reason to restrict generated types to LinkedHashSet in particular (even if people want ordering, any implementation will do).

It's good to be conservative about changes that cause significant alteration to generated output, as this affects a lot of users. I don't think there's a strong case for doing it here and I think a lot of people won't like this for the reasons above.
Sorry if I wasn't clear when commenting on #558, I am happy that there is a logical reason to use LinkedHashSet there but I don't strong case to roll this out to the code we generate.

@joelittlejohn Fair enough, your call :)
IMO (just to have another bash at changing your mind ;) )

If order is not required, why don't we declare as Collection regardless of whether unique is set or not. I would say that order is very much required when it comes to JSON arrays.
Even by using Set you could argue you are restricting type too much. What if we wanted to switch to some 'UniqueList' implementation instead - we'd have to change the public declaration. The LinkedHashSet isn't ideal, but as you say, Java lacks much in the way of interfaces to defined the behaviour.

It is a long way to move from List to Set just because I've added 'unique'.
This change would never be a breaking change, but I agree it's important to be careful what it put out to users.

Not convinced on either of your bullets :) but I'm not sure enumerating the reasons why would be useful.
Given the trade-offs here, declaring Set is closest to the expectations of the Java community IMO, which is why I think it's most appropriate for our generated sources.


Crash in operation dealloc

If you remember my previous question, I have a NetworkOperation, which wraps an Alamofire Request. I'm attempting to update my operations to not use the completion handlers but store state in the class, as suggested. However, after making that change I'm hitting a crash at runtime when the operation is deallocated. Here's my operation:
class NetworkOperation<T: Decodable where T == T.DecodedType> : Operation {
    let request: Request
    var responseObject: T? = nil

    init(request: Request) {
        self.request = request

        super.init()

        request.responseObject { (responseObject: T?, error: APIError?) in
            self.responseObject = responseObject
            self.finish(error)
        }

        addObserver(NetworkObserver())
    }

    override func execute() {
        request.resume()
    }

    override func cancel() {
        request.cancel()
        super.cancel()
    }
}

And here's the crash:
thread #1: tid = 0x223dc1, 0x000000010c6dacea libswiftCore.dylib`_swift_release_(swift::HeapObject*) + 10, queue = 'com.apple.main-thread', stop reason = EXC_BAD_ACCESS (code=EXC_I386_GPFLT)
    frame #0: 0x000000010c6dacea libswiftCore.dylib`_swift_release_(swift::HeapObject*) + 10
    frame #1: 0x000000010672deda App`@objc App.NetworkOperation.__ivar_destroyer + 74 at NetworkOperation.swift:0
    frame #2: 0x000000010c02f7bb libobjc.A.dylib`object_cxxDestructFromClass(objc_object*, objc_class*) + 127
    frame #3: 0x000000010c03a390 libobjc.A.dylib`objc_destructInstance + 93
    frame #4: 0x000000010c03a3c3 libobjc.A.dylib`object_dispose + 22
    frame #5: 0x0000000108998a6f Foundation`-[NSOperation dealloc] + 89
    frame #6: 0x0000000108a01b49 Foundation`NSKVODeallocate + 94
    frame #7: 0x000000010c044afe libobjc.A.dylib`objc_object::sidetable_release(bool) + 232
    frame #8: 0x000000010c0450b8 libobjc.A.dylib`(anonymous namespace)::AutoreleasePoolPage::pop(void*) + 488
    frame #9: 0x000000010b3c5446 CoreFoundation`_CFAutoreleasePoolPop + 22
    frame #10: 0x000000010b3f93c1 CoreFoundation`__CFRunLoopRun + 2081
    frame #11: 0x000000010b3f8918 CoreFoundation`CFRunLoopRunSpecific + 488
    frame #12: 0x000000010dc7fad2 GraphicsServices`GSEventRunModal + 161
    frame #13: 0x000000010997699e UIKit`UIApplicationMain + 171
  * frame #14: 0x0000000106633e5d App`main + 109 at AppDelegate.swift:12
    frame #15: 0x000000010cbed92d libdyld.dylib`start + 1
    frame #16: 0x000000010cbed92d libdyld.dylib`start + 1

I suspect this is just a compiler bug but this is a rather big blocker. Any suggestions or have you seen anything like this before?

Hey @jshier haven't seen anything like this....
Can you change your request handler closure to not capture self, use [weak self] or [unowned self]. While this retain cycle might not be the cause, it's probably going to confuse this debugging.
If that doesn't fix it - can you share a mini project that re-produces the crash? Can you share/attach the request class?

@jshier any news on this ticket?

I'll see if I can create a minimized project that reproduces this, but it'll be a little while before I have time.

But what about the retain cycle - I'm pretty sure this is causing the crash. The operation owns the request, the request owns a closure, which strongly captures self. At the very least you've got a memory leak as the operation can never be released.
If you just change the closure to capture self weakly using [weak self] then it will not crash.

I'm going to close this issue, as it's not re-producible without deliberately introducing a retain cycle.


Update deppendencies to latest stable releases

This pull request is to start a travis-ci run and test against dependencies updates.
Among the various outdated and unstable dependencies what would be probable valid is to update to jasmine 2.4.1
\cc @sjelin @juliemr

I signed it! yeeeee!

Here you are @sjelin @juliemr !
The pull is ready for integration :)

@juliemr I'm giving you this because you're in a better place to analyze the cost/benefits of updating all these dependencies.

Gotcha, I'll take a look this week.

i've rebased the pull request cause jshint released the 2.9.1 that was included by me as 2.9.1-rc2.
@juliemr can you remember to tale a look at this? thanks

Sorry for the slow response, it's been a holiday week. I'll really take a look this week.

no worry @juliemr and thanks for your time!

Ok, I've rebased and squashed and confirmed that npm test passes.
This is now merged as 5930d1444aef2f053c132eb437d07f9b000d7803. Thank you!


Quality of life visual shaders updates

Closes #63993
Addresses in part #63780

multiply part of addmultiply defaults to 1
curvetexture's repeat is off
vectors into float takes first component instead of average

Looks fine on PR review, would be nice to have more feedback from other Visual Shader Power users (I.e. Rodzilla, arnklit)

Rodzilla's comment:

I tested this and the PR looks good 👍

Sounds like almost nobody is relying on the automatic averaging when converting from vector to scalar, so lets go ahead and merge. Worst case, we need to do some UI/UX work to make this new behaviour more clear


validate goimports in CI

Checks go import format in CI so that we don't need to care about it in PR reviews.
Example output: https://drone-pr.rancher.io/harvester/harvester/882/1/2

We can do this by golangci-lint
https://golangci-lint.run/usage/configuration/


MVC InputFilterPluginManager missing InputFilterAbstractFactory config

InputFilterPluginManager in MVC environment does not create input filter defined in config.
Code to reproduce the issue
$config = [
    'input_filter_specs' => [
        MyInput::class => [
            //...
        ],
    ],
];

$inputFilter = $container->get(InputFilter\InputFilterPluginManager::class)->get(MyInput::class);

Expected results
InputFilterPluginManager creates defined InputFilter
Actual results
Exception thrown

Plugin of type MyInput is invalid; must implement Zend\InputFilter\InputFilterInterface or Zend\InputFilter\InputInterface

Imho this happens because Module.php provide incomplete config.
    public function getConfig()
    {
        $provider = new ConfigProvider();

        return [
            'service_manager' => $provider->getDependencyConfig(),
            'input_filters' => $provider->getInputFilterConfig(), // this line is missing
        ];
    }

@weierophinney do you think it is a bug? Should I create PR?

@vaclavvanik
Please look at:
https://github.com/zendframework/zend-inputfilter/blob/a23e67d41de09bbc325543acb756ba448f182c20/src/Module.php#L30-L42
...and you will find input_filters.

Or do you try to add the entire specification as array in the configuration and not the factories?

Doesn't it say the problem right here:

Plugin of type MyInput is invalid; must implement Zend\InputFilter\InputFilterInterface or Zend\InputFilter\InputInterface

https://github.com/zendframework/zend-inputfilter/blob/a23e67d41de09bbc325543acb756ba448f182c20/src/InputFilterPluginManager.php#L125-L143
your MyInput class does not implement those interfaces or extend other class that does

@Xerkus
I think @vaclavvanik wants to insert the input-filter specification as an array into the configuration and for this the InputFilterAbstractFactory must be added manually as described in the documentation:

Setup
When using zend-mvc version 2 releases, this functionality is disabled by default. To enable it, you must add the Zend\InputFilter\InputFilterAbstractServiceFactory abstract factory to the Zend\InputFilter\InputFilterPluginManager configuration, which is under the input_filters configuration key.

https://docs.zendframework.com/zend-inputfilter/specs/#setup

@froschdesign I see, $autoAddInvokableClass = true masked the problem.

@froschdesign as I wrote above I think, that it is a bug, that in Module.php is missing config line with input_filters. Which causes that InputFilterAbstractFactory is not registered in InputFilterPluginManager.
In ConfigProvider is InputFilterAbstractFactory registered.

@vaclavvanik
Did you see the hint in the documentation?

By the way, this is the same behaviour as in zend-form. The abstract factory FormAbstractServiceFactory is  not registered by default. You must add the factory to your configuration and then you can use the configuration key forms..

In the docs is:
For Expressive when using the configuration manager, and for zend-mvc v3 releases, the functionality is enabled by default, assuming you are using the component installer.
I am using mvc v3 and InputFilterAbstractFactory is not registered... :-/

Just checked, docs are indeed wrong. It is not registered for any mvc version by default.

@vaclavvanik
I'm confused, unfortunately. If you use version v3 then you should have also the last version of zend-inputfilter! And the latest of version of zend-inputfilter contains the InputFilterAbstractFactory!

See: https://github.com/zendframework/zend-inputfilter/releases/tag/release-2.8.2

@vaclavvanik
I will create a pull request when I'm back on my computer and will ping you for testing.

@froschdesign #162 fixed InputFilterAbstractFactory registration in ConfigProvider (Expressive). MVC v3 uses Module and in this class has not 'input_filters' config key in getConfig() which causes that InputFilterAbstractFactory is not registered... (really confusing)

@vaclavvanik

really confusing

Right, because in zend-form is the behaviour different. :confused:


correct printf verb

Noticed while testing a projects that uses structs:
...
vendor/github.com/fatih/structs/structs_test.go:402:
    arg name for printf verb %s of wrong type: []int
...

Coverage remained the same at 100.0% when pulling 4ee1ba06c39b26e415b0ba153588134ef8f20a36 on miku:printf-wrong-verb into 74a29b9fac7397d933f47e33eba94d2d83a464a2 on fatih:master.

Coverage remained the same at 100.0% when pulling 4ee1ba06c39b26e415b0ba153588134ef8f20a36 on miku:printf-wrong-verb into 74a29b9fac7397d933f47e33eba94d2d83a464a2 on fatih:master.

Thanks @miku


Error 32 ( Authentication Error ) on  $cordovaOauth.twitter

I have been using ng-cordova-oauth for about 2 months without issue.  However now,  I the token request always returns error 32.  I have verified the client key and secret.  I have looked at what is encoded for the signature.  I have used the same client key/secret using twitter's oauth tool.  Works succesfully with Twitter's generated headers but not the ones from this library.  I am at a bit of loss how to continue to debug this.  I have played with app permissions on twitter.  Nothing seems to get this to return.

Hi @emgould
Did you happen to follow this great tutorial by @saimon24?:
http://ionicframework.com/blog/displaying-the-twitter-feed-within-your-ionic-app/
I've not heard any other reports of this error.  Can you do a console.log and tell me what the promise rejection response says?
I'm sure Saimon or myself can help you get to the bottom of this.
Regards,

Thanks for the help!! I did review the post originally.  Keep in mind.  This is not really new development.  Meaning this has been working without fail for two months in user test.  The log doesn't help much.  Here is what happens when I step through it.  My function calls  $cordovaOauth.twitter(clientId, clientSecret) ... with a valid clientId and clientSecret.  However the initial $http request for a token is what fails authorization:
$http({method: "post", url: "https://api.twitter.com/oauth/request_token", data: "oauth_callback=http://localhost.com/callback" })
triggering the:  error(function(error) {
deferred.reject(error);
});
With the error being error 32 could not authenticate from twitter.
How can I help you help me??

I recently made some changes to Twitter (rumored for the best):
https://github.com/nraboy/ng-cordova-oauth/commit/63109642649438bd4bcc7b48fc9f45cefed5f70f
Instead of using url-encoded parameters, I switched it to standard parameters.  I also changed the header to be local instead of global throughout the application which prevents overlap.
When I tested it had worked fine.
When I'm home I will try to authenticate again just in case the Twitter API changed between now and the last time I tested (17 days ago).
Regards,

Appreciate your help.  This really has perplexed me and actually my code and Saimon code should be the same because the issue is inside $cordovaOauth.twitter  which we are both calling.  So ignore the above stated differences.  As I was comparing the code where a token is already restored from localStorage.

Additionally,  I noticed those changes and I believe I tested it both ways.   Both gave me the same error.  Happy to share my client secret/key in private message.

Let me first test on my setup tonight which I've confirmed working in the past and then I'll circle back.  I'll be testing with the latest version of Ionic and the latest version of this library.
Regards,

Just fyi:  this is output of console:
Failed to load resource: the server responded with a status of 401 (Authorization Required)
The error Object is :  { code: 32, message: "Could not authenticate you" }

I used POSTMan and sent the request by hand and compared the headers generated by Twitter's oauth tool vs ng-cordova-oauth.  The difference seems to be the repetition of "Authorization" in the header parameter name and body.  Unfortunately I can't test more from where I am but by prepending "Authorization:" to the parameter body did result in Postman returning status=200.  Although  I could need verify if it would return the token.   Hope that helps.

This is very odd.
My code which I don't change and was previously working, is now not working.  So I'm wondering what the heck changed in the Twitter API.  Maybe they fixed a bug that was allowing lenient behavior?
I am going to do a bit of digging.  I am definitely stumped though because the authorization header matches what Postman creates and I confirmed Postman is working fine.

I built the todo app with an attempt to authenticate.  So very basic app.  Same problem.
Code:
angular.module('starter', [
'ionic',
'ng-cordova',
'ngCordovaOauth'])
.run(function($ionicPlatform,$cordovaOauth) {
$ionicPlatform.ready(function() {
// Hide the accessory bar by default (remove this to show the accessory bar above the keyboard
// for form inputs)
if(window.cordova && window.cordova.plugins.Keyboard) {
cordova.plugins.Keyboard.hideKeyboardAccessoryBar(true);
}
if(window.StatusBar) {
StatusBar.styleDefault();
}
var clientId =
var clientSecret =
console.log( "Attempting to connect to twitter...");
if (window.cordova && $cordovaOauth) {
$cordovaOauth.twitter(clientId, clientSecret).then(function(result) {
window.alert( " Succesfull got token: ");
console.log(result);
},function(err){
console.error("Unable to connect to twitter");
});
};
})
});

Yeah...crazy.

The problem is definitely in the following:
$http({
    method: "post",
    url: "https://api.twitter.com/oauth/request_token",
    headers: {
        "Authorization": signatureObj.authorization_header
    },
    params: {
        "oauth_callback": "http://localhost/callback"
    }
})

But like you, I did compare the authorization header of ngCordovaOauth with the authorization header generated by Postman and they are the same.  In fact, when I add a print statement to the ngCordovaOauth library to print the header and then paste it into Postman it works fine.
You have any more ideas?  A solution would be so much easier if we could figure out what exactly changed between now and a few weeks ago.

I have the same problem!!
A week ago my application login perfectly with twitter and now not working.
I'm investigating for find of solution!

The three of us are smart and I know we can come up with a solution.  The more great minds on this problem the quicker we can beat it.
Let us know what you find @vsanmaster

I will continue to look at it but I have been debugging this for a couple of days. Pretty stumped.  It is almost like Twitter doesn't want to allow the particular flavor of the  angular  $http post request.

Yea I was wondering if Twitter was blocking AngularJS requests, but I don't know how that would even make sense.  What makes the AngularJS post different than the one that Postman is doing?
When I look at the requests they look pretty much the same.
Anyone happen to have a contact at Twitter?  I haven't seen any news on the internet about changes.

Opened a ticket in the Twitter forums:
https://twittercommunity.com/t/oauth-endpoint-request-token-stopped-working-all-of-a-sudden/33604

Got it fixed!
$http({
    method: "post",
    url: "https://api.twitter.com/oauth/request_token",
    headers: {
        "Authorization": signatureObj.authorization_header,
        "Content-Type": "application/x-www-form-urlencoded"
    },
    data: "oauth_callback=" + encodeURIComponent("http://localhost/callback")
})

Twitter must have changed something that requires the oauth_callback to be passed as a body param, not a query param.
Everything seems to be working.   I will update the Ionic ngCordova module in the coming days.  In the mean time use my ngCordovaOauth module.
Regards,

Awesome.  Thanks!  This did force me to embrace a  hybrid model.  I know check to see if there is native Twitter connection available,  if so then I gen the oauth_token from that and store it.  If not I fall back to this libraries approach.

There is absolutely nothing wrong with that approach :-)

I'm trying to get twitter login work..
In $cordovaOauthUtility factory you have a createSignature method.

Ok  VERY IMPORTANT. Make sure to download  version 1 and not the master branch of sha library....

Yea it is stated in the readme.

Hi @nraboy ,
When i use this API: https://api.twitter.com/1.1/statuses/home_timeline.json, it works fine, but when I change API to: https://api.twitter.com/1.1/trends/place.json?id=1, I got same error: "Failed to load resource: the server responded with a status of 401 (Authorization Required)". It's confusing,

My assumption is you're using the API wrong.  I offer no support when it comes to provider APIs.  As long as you're receiving an access token, my job is done.
I might recommend you posting to the Twitter community forums for more specific API help.
Best,

@nraboy which is your library version? i'm this week using the latest and i am getting  the same error:
My code:
$cordovaOauth.twitter(TWITTER_API_SECRET, TWITTER_CONSUMER_KEY).then(function(s){
  window.alert("S");
},function(e){
  if (!e.errors){
    return;
  }
  var e = e.errors;
  for (var i =  0; i < e.length; i++) {
      var error = e[i];
      window.alert(error.code + ":" + error.number + ":" + error.message);
  }
});

Response erro: 32 Could not Authenticate you.
should i manually change the code? or is it a new version that fix this?

Oauth features have been removed from ng-cordova.  You'll have to use ng-cordova-oauth if you wish to use them.

Ah ok... I've using it...
But in android is happening something weird. In my browser it saids "Can not authenticat in a web browser": Ok, but in Android it produces an error, that doesn't have any clue.
My code:
module.exports = [
'$scope',
'$cordovaOauth',
'TWITTER_CONSUMER_KEY',
'TWITTER_CONSUMER_SECRET',
function ($scope, $cordovaOauth, TWITTER_CONSUMER_KEY, TWITTER_CONSUMER_SECRET) {
window.alert(TWITTER_CONSUMER_KEY);
window.alert(TWITTER_CONSUMER_SECRET);
window.alert(typeof $cordovaOauth);
window.alert(typeof $cordovaOauth.twitter);
var twitter = $cordovaOauth.twitter(TWITTER_CONSUMER_KEY,TWITTER_CONSUMER_SECRET, {});
window.alert(typeof twitter);
twitter.then(function(s){
  window.alert("success");
}, function(e){
  window.alert("error");
  window.alert(e);
});
window.alert("t controller2");

}
];
The code stops in the creation of the PROMISE, do you any clue? (please)

Per my documentation, the library will not work with Ionic Serve, Ionic Live-Reload, Ionic View, or in a web browser.
How many of those categories do you fall into?

None. I'm testing in the browser with live-reload, in there it said "Can not authenticate in a web browser" this i do for testing the library availability.
But the real test is in my android phone. In there, once the create promise code executes, the execution gets stopped. I do not know why

None. I'm testing in the browser with live-reload, in there it said "Can not authenticate in a web browser" this i do for testing the library availability.

Don't do that.  Like I said none of that will work with this library.
In regards to the Android phone, what do the ADB logs say?

I'm testing directly in my phone. Where do i see ADB log?

Like this:
https://www.thepolyglotdeveloper.com/2014/12/debugging-android-source-code-adb/
Best,

:O
I/chromium(27231): [INFO:CONSOLE(2)] "Error: Chosen SHA variant is not supported
I/chromium(27231):     at Error (native)
I/chromium(27231):     at new t (file:///android_asset/www/vendor-1c5b48aac5.js:23:13796)
I/chromium(27231):     at Object.n [as createSignature] (file:///android_asset/www/vendor-1c5b48aac5.js:23:11374)
I/chromium(27231):     at Object.r [as twitter] (file:///android_asset/www/vendor-1c5b48aac5.js:22:29817)
I/chromium(27231):     at new t.exports (file:///android_asset/www/scripts/app-c555e48f9b.js:1:6661)
I/chromium(27231):     at i (file:///android_asset/www/vendor-1c5b48aac5.js:1:19716)
I/chromium(27231):     at Object.o [as instantiate] (file:///android_asset/www/vendor-1c5b48aac5.js:1:19808)
I/chromium(27231):     at file:///android_asset/www/vendor-1c5b48aac5.js:2:9976
I/chromium(27231):     at k.appendViewElement (file:///android_asset/www/vendor-1c5b48aac5.js:18:205)
I/chromium(27231):     at Object.V.render (file:///android_asset/www/vendor-1c5b48aac5.js:17:13326)", source: file:///android_asset/www/vendor-1c5b48aac5.js (2)
I think is the JSSHA version

Are you using version 1.6.0 like it says in the README?

No i didn't tell the bower a version, so it install 2.0.0 let me try with the 1.6.0

Great it did work.
Now i'm stuck on geetting the token from the url. the redirect_uri does not allow file://*  and only allows http://* types URL but i don not know how to capture this
PD: Sorry to botter, this is my first ionic app

Done! ...
Is there is a way to hide the PAGE NOTE FOUND ERROR?

Since explicit grants such as Twitter were never meant to be run client side, this error will always exist due to a race condition.  The only way around this would be to host your own callback page remotely so that way it does exist during the other asynchronous requests.

Ok i got it. As this is a web site integration it occurs to me use a page that they host as a callback URL.

I still got this issue. I'm running it on IOS and I've gotten Google and Facebook to work, but sending the post request to https://api.twitter.com/oauth/request_token always fails with 32 error code.
Don't really know what other information I can provide. The twitter callback url is set to http://<IP_ADDRESS>, but from what I can tell that doesn't make a difference.
Spring social works with the same credentials / app settings.


Keyboard Toolbar present even if it is turned off in settings

As title, the keyboard toolbar is present even if it is turned off in settings (tried turning it back on->reload app->turning it off->reload app and it didn’t help)

Also an unrelated question, while on the left of the phone there is the notch, can we remove the border on the right and get a tiny bit of more screen space? Its not a huge deal but since phone have limited screen size it would sure help.
Thanks a lot as always for your amazing app!
(I’m running version 1.7.2)

Thank for the report. I can confirm it is a bug introduced in 1.7.2 and I will release a fix soon.

This is fixed in 1.7.3, which is now available on the App Store.

Thanks a lot!
Closing the issue since, i have updated on both iPhone and iPad and can confirm the fixes is live and working correctly