IStringLocalizerFactory.Create(type) Invocation Strangeness - n + 1 times, then never again

If an IStringLocalizerFactory is registered and an action returns a view (return new View(new SomeModel());) where the view's cshtml sets its model class (@model SomeModel) then uses a field from that model in a form:

The first time the view is returned, IStringLocalizerFactory.Create(typeof(SomeModel)) is invoked at least n + 1 times, where n is the number of properties in the model. For example, if SomeModel has 3 properties, then Create(typeof(SomeModel)) will be called 4+ times.
After this initial round of invocations, IStringLocalizerFactory.Create(typeof(SomeModel)) is never invoked again. When the site processes future requests that involve return new View(new SomeModel());, the IStringLocalizer previously returned by Create(typeof(SomeModel)) is used.

This behavior is puzzling. :-)
The first time the view is returned, it seems like Create(typeof(SomeModel)) should be called one time, regardless of the number of fields in SomeModel. Creating n + 1 or more instances seems wasteful.
Then, each subsequent time the view is returned, it seems advantageous for Create(typeof(SomeModel)) to be invoked one time to get the IStringLocalizer to use for that request (that is, don't cache the IStringLocalizer used for the previous request; instead, use the factory to create a new one just for this request). This would enable the factory to create a string localizer that's appropriate for the request (for example, if the localizer is database-powered, maybe the localizer should be loaded fresh from the database on each request) and avoid the need to keep every string localizer that's ever been used cached in memory.
To sum it up, it seems like the IStringLocalizer for SomeModel isn't cached when it should be (the initial return) but then is cached when maybe it shouldn't be (subsequent returns). :-)
Is this behavior expected/intended? Is there a chance it could be changed to 'use Create() to create one instance per action invocation' instead of 'use Create() to create a lot of instances then cache one forever'?
Demo - https://github.com/bgribaudo/StringLocalizerFactoryInvocationDemo

Thanks for contacting us, @bgribaudo.
@kichalla, can you please look into this? Thanks!

This is my design as far as I can tell. We construct metadata of the model (the container type) + individual properties (which are themselves considered models too) and this is cached for further use.

Hi @kichalla, thank you for looking into this. Is there any chance this behavior could be changed?
If I have a class that has 15 properties, it seems strange/wasteful for 16+ instances of the localizer to be created when one instance should work just fine. :-)
It would also be really neat if the factory were invoked for each request. This would align its behavior with how IViewLocaizer calls the factory once per request (or, more accurately, probably once per view per request).
On the second item: I'm working with a custom localizer factory that factors in the current request when it builds the localizer. This works fine for localizing text on pages, because IViewLocalizer doesn't cache localizers across requests. However, localization of field validation error messages doesn't work because of the caching (the request-specific localizer is cached across requests). If this behavior were changed to invoking the factory once per request, the localizer setup I'm using would work and ASP.Net Core would avoid keeping potentially every localizer used by the site cached for the lifetime of site's hosting processes.

@bgribaudo, can you please describe the scenario you're having trouble with current behavior? We would like to understand the main problem, as there may be some other approach you should take.

Hi @mkArtakMSFT! Sure thing!
Context: I'm working with a custom JSON-powered string localizer and localizer factory.
Scenarios:

ASP.Net Core allows views to be edited without requiring a site restart. That is, changes made to a view are reflected as soon as the view's cshtml file is saved and the page is reloaded. This is handy for rapid development.
The same 'change live as soon as the edit is saved' also applies to localizer string edits pertaining to view localization (e.g. a cshtml file containing @inject IViewLocalizer). Since a fresh instance of the localizer is created via the localizer factory for each request, if I edit the JSON file used to provide localized strings to a given view, those edits are reflected as soon as I refresh the view. Again, the fact that no restart is required is handy for rapid development.
However, 'save changes -> immediately live (no restart required)' does not hold true for the translation of DataAnnotation strings. Since the localizer used to translate a given view model's DataAnnotations is cached during the first request then reused for subsequent requests, the site must be restarted (to clear the cache) in order for translation file edits to be noticed by the system.

The fact that IStringLocalizers are cached and reused across requests means that the localizer instance needs to both know how to translate strings for a given language and also how to load and cache the translation strings for any supported language (because future requests handled by the localizer could be for any of those languages).
If the factory created a new instance of the localizer per request, this could be simplified. The factory would have the option factor in the request's current UI culture when building the localizer instance used for that request. Since that localizer wouldn't be used across requests, it wouldn't need to be built to load and cache the various translations.
This is the approach our custom localizer uses. It seemed to work fine until we discovered that DataAnnotation translations are cached. :-/ We could rework it to handle caching but this would make the localizer responsible for multiple concerns. The relevant unit tests illustrate this: the localizer factory's tests verify that it returns a correctly initialized localizer, given the context of the current request; the localizer's tests verify that it returns the correct strings, given the single language it was initialized to handle. However, when both sets of responsibilities are merged into the localizer, its tests need to cover that correct strings are returned times multiple languages. That "times" factor seems to suggest that the class is stepping beyond the Single Responsibility Principle--but since that design is forced upon the localizer by the caching, there doesn't seem to be much I can do about it unless the caching is changed/removed.

Hope this helps! Thank you for being willing to chat about this. Hope you have a great day!

Thanks for all the details, @bgribaudo.
This spun up a good discussion in our team. To assist us with this investigation, could you also provide a minimalistic repro project emphasizing the behavior you're observing?

Hi @mkArtakMSFT! You're most welcome! Are you looking for a demo that shows the caching of the DataAnnotation-related localizers vs. how a fresh view localizer is created for each request or are you looking for something more in-depth than that?

@bgribaudo We are specifically interested in the part where you see the problem of caching of DataAnnotation related localizers and since you are using a custom localizer factory with json file etc.

@kichalla, does https://github.com/bgribaudo/JsonStringLocalizerDemo provide what you're looking for?
It contains a basic (demo-grade) implementation of a JSON-powered string localization setup. The readme file gives instructions for how to observe the seemingly wasteful creation of localizers on the first request and the difference in behavior between how IStringLocalizerFactory's two Create() methods are called. The localizer/localizer factory code + unit tests should give an idea of how creating on a per-request basis (vs. forcing the localizer to handle the extra responsibility of working in a cross-request cached environment) simplifies the work required to implement these classes.

Thanks, @bgribaudo. Sorry for the delay. @ryanbrandenburg, please look into the provided repro so we can discuss it later.

Correct me if I'm wrong but the following are your problems:

Factory.Create is called multiple times for the same type.
You are concerned that re-using localizers causes additional caching concerns, specifically across requests which might have different languages.

My thoughts are as follows:

It is true that Factory.Create is called multiple times, but this needn't be a concern. The "default" IStringLocalizerFactory implementation caches localizers to prevent them from being created needlessly. So, rather than attempting to cache IStringLocalizer's itself, our code just trusts that if the factory wants localizers cached, it will do that itself.
IStringLocalizer implementations should in general return values from this[string] based on the CurrentUICulture at the time this[] is called, not based on the CurrentUICulture when the IStringLocalizer was created. I know that we have some code that might make you think otherwise, but we do not advise that people store the culture in their IStringLocalizer unless they have a specific reason. This issue actually inspired me to file aspnet/Home#3324, which I hope would clarify this position.

Does that address all your concerns? If not let me know where I'm off-base.

I'm going to close this issue as by design, if you still have problems feel free to re-open with more details.

Hi @ryanbrandenburg,
Thanks for looking into this! I was traveling so I'm a bit delayed in responding. :-(
In regards to my caching  concerns, maybe it would help to describe a couple scenarios then contrast them with how ASP.Net Core 2.1 works.
Scenario 1
Factory.Create is called each time a localizer is needed. No caching is provided by ASP.Net Core. If caching is desired, implementing it is the responsibility of the localization developer.
Pro: Developer has full control over caching (yes cache/no cache/cache lifespan).
Con: If caching is desired, developer is responsible to implement.
Scenario 2
Factory.Create is called the first time a particular localizer is needed; the output returned is cached by ASP.Net Core. Any future requests for the same localizer are satisfied by the framework-provided cache; Factory.Create is not invoked.
Pro: Developer doesn't need to implement caching.
Con: Developer has no control over caching (such as disabling it or limiting the lifespan of cached objects). If the framework's caching strategy differs from what the developer wants, tough.
ASP.Net Core 2.1 (real life)
Both of the above scenarios apply. The developer has all of the cons of both but only gets the intersection of their benefits. :-(
During the first client request that triggers the need for a given localizer, Factory.Create may be called multiple times with a request for that localizer. If caching is important, the localizer developer must implement it. However, after that first client request, localizer caching is provided by the framework—whatever caching logic the developer may have put in Factory.Create is bypassed.
The developer needed to put the effort into implementing caching (the con of scenario 1) but because the framework’s caching then takes over the developer is unable to manage/control that caching (the con of scenario 2).

Any chance the current design could be changed? :-)
Maybe when a localizer factory is registered, an argument could be passed specifying the scope of caching to apply to localizer requests.
If this cache setting were respected on both the initial request and all subsequent requests, then we'd have the best of both worlds:

A developer that wants localizers cached until the site is restarted simply needs to register the factory asking for singleton localizer caching. ResourceManager's StringLocalizationFactory, which exhibits this behavior, could probably be simplified because it could rely completely on the framework to provide all caching functionality.
If, instead, the developer wants the localization creation process to somehow or another factor in the current request (for example, to reload translation strings from source on each request to align with Razor's ‘edit -> save -> changes are reflected live without requiring a restart’ behavior), the factory would be registered asking for per request (or transient) caching of localizers.

Related: #7636


Works fine for some time but gives an error afterwards

Hi, the bot works fine for some time (usually about 30 min) and then gives me an error like this-
PS C:\Users\vivek\Desktop\project\spambot> node bot.js --message "hi" --setTime 60000 --prune
Ready to level up!
There was an error! Did you update the config.json file? If you did, let me know what the error message says in an issue on the repo on GitHub.
Error: read ECONNRESET
at TLSWrap.onStreamRead (internal/stream_base_commons.js:209:20) {
errno: -4077,
code: 'ECONNRESET',
syscall: 'read',
request: <ref *1> ClientRequest {
_events: [Object: null prototype] {
abort: [Function],
response: [Function]
},
_eventsCount: 2,
_maxListeners: undefined,
outputData: [],
outputSize: 0,
writable: true,
destroyed: false,
_last: false,
chunkedEncoding: false,
shouldKeepAlive: true,
_defaultKeepAlive: true,
useChunkedEncodingByDefault: true,
sendDate: false,
_removedConnection: false,
_removedContLen: false,
_removedTE: false,
_contentLength: 16,
_hasBody: true,
_trailer: '',
finished: true,
_headerSent: true,
socket: TLSSocket {
_tlsOptions: [Object],
_secureEstablished: false,
_securePending: false,
_newSessionPending: false,
_controlReleased: true,
secureConnecting: true,
_SNICallback: null,
servername: null,
alpnProtocol: null,
authorized: false,
authorizationError: null,
encrypted: true,
_events: [Object: null prototype],
_eventsCount: 10,
connecting: false,
_hadError: true,
_parent: null,
_host: 'discordapp.com',
_readableState: [ReadableState],
_maxListeners: undefined,
_writableState: [WritableState],
allowHalfOpen: false,
_sockname: null,
_pendingData: null,
_pendingEncoding: '',
server: undefined,
_server: null,
ssl: null,
_requestCert: true,
_rejectUnauthorized: true,
parser: null,
_httpMessage: [Circular *1],
[Symbol(res)]: [TLSWrap],
[Symbol(verified)]: false,
[Symbol(pendingSession)]: null,
[Symbol(async_id_symbol)]: 39281,
[Symbol(kHandle)]: null,
[Symbol(kSetNoDelay)]: true,
[Symbol(lastWriteQueueSize)]: 375,
[Symbol(timeout)]: null,
[Symbol(kBuffer)]: null,
[Symbol(kBufferCb)]: null,
[Symbol(kBufferGen)]: null,
[Symbol(kCapture)]: false,
[Symbol(kBytesRead)]: 0,
[Symbol(kBytesWritten)]: 375,
[Symbol(connect-options)]: [Object]
},
_header: 'POST /api/v7/channels/769900561943625738/messages HTTP/1.1\r\n' +
'Host: discordapp.com\r\n' +
'Authorization: (my user token is here)\r\n' +
'User-Agent: DiscordBot (https://github.com/discordjs/discord.js, 11.6.4) Node.js/v14.15.1\r\n' +
'Content-Type: application/json\r\n' +
'Accept-Encoding: gzip, deflate\r\n' +
'Connection: keep-alive\r\n' +
'Content-Length: 16\r\n' +
'\r\n',
_keepAliveTimeout: 0,
_onPendingData: [Function: noopPendingOutput],
agent: Agent {
_events: [Object: null prototype],
_eventsCount: 2,
_maxListeners: undefined,
defaultPort: 443,
protocol: 'https:',
options: [Object],
requests: {},
sockets: [Object],
freeSockets: {},
keepAliveMsecs: 1000,
keepAlive: true,
maxSockets: Infinity,
maxFreeSockets: 256,
scheduling: 'fifo',
maxTotalSockets: Infinity,
totalSocketCount: 1,
maxCachedSessions: 100,
_sessionCache: [Object],
[Symbol(kCapture)]: false
},
socketPath: undefined,
method: 'POST',
maxHeaderSize: undefined,
insecureHTTPParser: undefined,
path: '/api/v7/channels/769900561943625738/messages',
_ended: false,
res: null,
aborted: false,
timeoutCb: null,
upgradeOrConnect: false,
parser: null,
maxHeadersCount: null,
reusedSocket: false,
host: 'discordapp.com',
protocol: 'https:',
[Symbol(kCapture)]: false,
[Symbol(kNeedDrain)]: false,
[Symbol(corked)]: 0,
[Symbol(kOutHeaders)]: [Object: null prototype] {
host: [Array],
authorization: [Array],
'user-agent': [Array],
'content-type': [Array],
'accept-encoding': [Array]
}
}
}
PS C:\Users\vivek\Desktop\project\spambot>

Hey man, sorry I completely missed this until now. The issue is the client for Discord.js expires in that time frame, so you'll need to use something like a cronjob to reinitialize the client then send a message and kill the client every x amount of minutes/hours/whatever.
Let me know if that doesn't make any sense and I can try to upload a code example.

Oh ok. Makes sense.


Mount options  to mount filesystem as network drive

Context
I have written a custom HDFS (hadoop) filesystem using fs_spec and used winfspy to mount the filesystem in Windows. I have adapted the memfs-exmple from this repository accordingly. But I had to realize that Windows sends a lot of  get_security_by_name open ans close calls to the file system, which makes the mounted filesystem really slow. As suggested and discussed here, mounting a remote filesystem as a network drive (via VolumePrefix) should improve the mounting performance.
To my understanding in winfspy the VolumePrefix can be set via the **volume_params ->prefix argument of the FileSystem-constructor https://github.com/Scille/winfspy/blob/a786d8e28f06bc21a1accd4dd8ce16ac5b4364c0/src/winfspy/file_system.py#L105-L106
prefix gets mapped to FSP_FSCTL_VOLUME_PARAMS->Prefix[] in: https://github.com/Scille/winfspy/blob/a786d8e28f06bc21a1accd4dd8ce16ac5b4364c0/src/_cffi_src/build_bindings.py#L173
Problem
Mounting my filesystem with setting prefix="\\server\hdfs" or prefix="/server/hdfs" like:
fs = FileSystem(
        str(mountpoint),
        operations,
        ...
        prefix="\\server\\hdfs"
)

does not have any effect and it is mounted as normal drive under the mountpoint.
Question
Is this a bug? Or am I'm doing something wrong? How can I use winfspy to mount my filesystem as a network drive?

Hi @jslorrma  and thanks for your report!

Is this a bug?

It is! PR #33 should fix your issue, could you confirm that?
I tested using python -m winfspy.memfs X: -p \Server\Share and it seems to work fine.

Hey @vxgmichel,
that was quick 👍 Thanks!!
I successfully tested the proposed fix of #33 with the 'memfs' example as well as with my 'HDFS filesystem' implementation. And in fact, as presumed and discussed in https://github.com/winfsp/winfsp/issues/247, mounting the filesystem as a network drive significantly enhances the performance.
Thanks once again.

Alright, here's the release: v0.8.3 :tada:


Renaming columns according to the new names

Change(s):

OperationName => OperationNameValue
Category => CategoryValue

Reason for Change(s):

Renaming columns according to the new names

Testing Completed:

Yes

@maayan-microsoft , This branch has conflicts that must be resolved, thanks.

Already fixed in another PR.


Archaius 0.x to Archaius 2 migration help request

Hi,
We've been working with Archaius 0.x for over 3 years now and have always been very pleased with it.
We're starting a new project so I wanted to update archaius to the latest 2.x version.
However, the API seems to have changed ALOT and i'm really not sure how to adapt to this. First, I haven't been able to understand the new Archaius 2 approach for now. Second, I'm not sure if we can reproduce the same behavior we had with archaius 0.7.5.
Here's what we used:

An empty config.properties file that was just there so that Archaius finds it when we initialize it.
The following app-specific config files:

app.properties
app-user.properties
app-dev.properties

Would contain @next=app-user.properties

app-prod.properties

At runtime we would use
java \
  -Darchaius.deployment.environment=dev \
  -Darchaius.configurationSource.additionalUrls=http://myhost/override.properties \
  -Darchaius.fixedDelayPollingScheduler.initialDelayMills=5000 \
  -Darchaius.fixedDelayPollingScheduler.delayMills=10000 \
  -jar my.jar

The code would the look like this:
private static DynamicPropertyFactory	I = DynamicPropertyFactory.getInstance();

static {
	try {
		ConfigurationManager.loadAppOverrideProperties("app");
	} catch (IOException e) {
		logger.error(e.getMessage(), e);
		throw new RuntimeException(e);
	}
	String env = ConfigurationManager.getDeploymentContext().getDeploymentEnvironment();
	if (env == null) {
		String err = "You need to define -Darchaius.deployment.environment=env";
		logger.error(err);
		throw new RuntimeException(err);
	}
	else {
		logger.info("Environnement: " + env);
	}
}

public final DynamicStringProperty		name;

private MyConfig(String prefix, IConfig defaultConfig) {
	this.name = F.getStringProperty(prefix + "name", defaultConfig.getName());
}

We only use override properties cause that's what works for us. When we pull various project, we also initialized the override with the config from the new project (e.g. ConfigurationManager.loadAppOverrideProperties("app2") to load app2.properties)
What we would like to keep is:

Dynamic properties reloaded at runtime
Possibility to easily override any conf through a couple external URLs (file:// and http://)
Environment-specific configuration files

Can anyone help me with this migration and point me in the right direction ?
I'm also interested in the guice intergration as we're also using it but that's secondary.
Thanks

Same problem here. Any comment?


Include Foretold import

May need just few changes to output series.
Do not store the whole distribution (1000 samples) but rather mean, variance and ~10-20 quantiles.

Resolved.


⚠ AGEG website (prod) has degraded performance

In 8a1dffe, AGEG website (prod) (https://www.ageg.ca/) experienced degraded performance:

HTTP code: 200
Response time: 3470 ms

Resolved: AGEG website (prod) performance has improved in 05c55fe.


harness hangs in case server is crashed while it was restarted

Not every server crash is causing harness hang. This particular issue is reproducible after server is restarted and NullPointerException is thrown in PassiveServerEntity.loadExisting() API.

The hanging is coming from the IClusterControl.waitForActive() . Here is original code:
control.restartActive();
control.waitForActive();
and once restartActive() fails waitForActive() is waiting forever.

Is this problem still present or was it fixed along with #16?

Verified. It is not reproducible after latest galvan release.


Eliminate compiler error triggered by newer boost (1.63) or newer gcc (7.1).

@baldersheim, please review

Works fine also with gcc 6.4 and boost 1.59.


Appstudio update test-custom-default-branch-fiku

Pipelines as Code configuration proposal
To start the PipelineRun, add a new comment with content /ok-to-test
For more detailed information about running a PipelineRun, please refer to Pipelines as Code documentation Running the PipelineRun
To customize the proposed PipelineRuns after merge, please refer to Build Pipeline customization

Pipelines as Code CI has failed.There was an error creating the PipelineRun: test-simple-build-imul-on-pull-request-
creating pipelinerun test-simple-build-imul-on-pull-request- in namespace build-e2e-amzo-tenant has failed.
Tekton Controller has reported this error: the namespace of the provided object does not match the namespace sent on the request

Pipelines as Code CI has failed.There was an error creating the PipelineRun: test-simple-build-wadk-on-pull-request-
creating pipelinerun test-simple-build-wadk-on-pull-request- in namespace build-e2e-amzo-tenant has failed.
Tekton Controller has reported this error: the namespace of the provided object does not match the namespace sent on the request

Pipelines as Code CI has failed.There was an error creating the PipelineRun: test-simple-build-lqle-on-pull-request-
creating pipelinerun test-simple-build-lqle-on-pull-request- in namespace build-e2e-amzo-tenant has failed.
Tekton Controller has reported this error: the namespace of the provided object does not match the namespace sent on the request

Pipelines as Code CI has failed.There was an error creating the PipelineRun: test-simple-build-ufgi-on-pull-request-
creating pipelinerun test-simple-build-ufgi-on-pull-request- in namespace build-e2e-amzo-tenant has failed.
Tekton Controller has reported this error: the namespace of the provided object does not match the namespace sent on the request

Pipelines as Code CI has failed.There was an error creating the PipelineRun: test-simple-build-nwtb-on-pull-request-
creating pipelinerun test-simple-build-nwtb-on-pull-request- in namespace build-e2e-amzo-tenant has failed.
Tekton Controller has reported this error: the namespace of the provided object does not match the namespace sent on the request

Pipelines as Code CI has failed.There was an error creating the PipelineRun: test-annotations-mijr-on-pull-request-
creating pipelinerun test-annotations-mijr-on-pull-request- in namespace build-e2e-amzo-tenant has failed.
Tekton Controller has reported this error: the namespace of the provided object does not match the namespace sent on the request

Pipelines as Code CI has failed.There was an error creating the PipelineRun: test-simple-build-uqzm-on-pull-request-
creating pipelinerun test-simple-build-uqzm-on-pull-request- in namespace build-e2e-amzo-tenant has failed.
Tekton Controller has reported this error: the namespace of the provided object does not match the namespace sent on the request

Pipelines as Code CI has failed.There was an error creating the PipelineRun: test-simple-build-mcmm-on-pull-request-
creating pipelinerun test-simple-build-mcmm-on-pull-request- in namespace build-e2e-amzo-tenant has failed.
Tekton Controller has reported this error: the namespace of the provided object does not match the namespace sent on the request

Pipelines as Code CI has failed.There was an error creating the PipelineRun: test-simple-build-nyrh-on-pull-request-
creating pipelinerun test-simple-build-nyrh-on-pull-request- in namespace build-e2e-amzo-tenant has failed.
Tekton Controller has reported this error: the namespace of the provided object does not match the namespace sent on the request


Remove and change the sample address everywhere

I like pink, everything should be pink. Pink makes the world go around. Sporklin found the edit button.
OY! -langerhans

ACK totes merge you'd better have tested this.


Various things and such, Closes #4

Switches name of Hot Spike to Flaming Spike
Switches concept of Extra Sharp Spike to Withering Spike (it was already
on the wither effect)
Fixes the North state bounding box being backwards
Fixes spike tips not damaging by reducing their maximum size by 0.05 of
a pixel.
Cleans up looting spike texture
A few grammar things to Config
Capitalize final field names in SpikeBlocks
Update forge/mappings
Flaming spike could use a better texture, tbh, magma doesnt work well on
the model.

Only issue with this is I changed the registry name of the extra sharp spike into the withering spike, which may be a valid change now, but it will delete (any existing) of that spike (Granted, there might not be any at all that anyone is using, but still).
Imo, the extra sharp spike should be reimplemented as the Bleeding spike later with its own potion effect that does more than just Wither II.

Well now, i might be able to get this potion thing working.  That was easier than expected.

There we go.


Polygon amoy config update

Update PolygonScan explorer URL
Add API URL

Problem solved
This commit adds the latest Polygon Amoy network config to the polygon-amoy.ts file.
Changes made
This commit:

Updates the PolygonScan explorer URL
Adds the explorer API URL

PR-Codex overview
This PR updates the URLs for the PolygonScan API in the polygon-amoy.ts file.
Detailed summary

Updated the URL for PolygonScan from "https://www.oklink.com/amoy" to "https://amoy.polygonscan.com"
Updated the API URL to "https://api-amoy.polygonscan.com/api"

✨ Ask PR-Codex anything about this PR by commenting with /codex {your question}

thank you @hsutaiyu !


Replace deprecated request

Hi,
request is deprecated, you should replace it by node-fetch, axios,...

Duplicate of https://github.com/nodejs/node-gyp/issues/2047.


[BUG] SAML endpoint still using _opendistro instead of _plugins

Describe the bug
Opensearch-Desktop does not operate as expected using saml authentication. It is still referring to the _opendistro endpoint instead of the _plugins endpoint.
The documentation link explains to use the /_plugins/_security/saml/acs endpoint to whitelist / configure sp metadata in the idp. This does not work at the moment. Dashboards produces a saml request using opendistro endpoints instead: https://dashboards.domain.com/_plugins/_security/saml/acs
This causes a browser error:
{ statusCode: 400, error: "Bad Request", message: "Request must contain a osd-xsrf header." }
The idp logs an error since the opendistro endpoint does not exist in it's configuration:
auth request:AssertionConsumerServiceURL="https://dashboards.domain.com/_opendistro/_security/saml/acs"
However, configuring everything the opendistro way somewhat works. It causes 401 errors when trying to refresh the cookie at times but initial authentication works.
To Reproduce
Migrate from latest opendistro  to opensearch 1.0.1 (In this case using the the official docker containers).
Configure saml integration as per new plugin documentation.
Check saml assertion in browser using the "SAML message decoder" extension.
Notice that it referrers to the _opendistro endpoint and not the _plugins endpoint.
Expected behavior
SAML to use the  /_plugins/_security/saml/acs endpoint instead of the  /_opendistro/_security/saml/acs one as described in the documentation.
OpenSearch Version
docker 1.0.1
Dashboards Version
docker 1.0.1
Plugins
as per docker 1.0.1
Please list all plugins currently enabled.
default docker setup
Host/Environment (please complete the following information):

OS: docker image
Browser and version: Chrome 94

Additional context
We have a discussion in the forum about this and saml related issues
https://discuss.opendistrocommunity.dev/t/saml-cookie-refresh-sso-redirect-issue-worked-before-upgrade

Still in 1.2.0

Found a way to avoid this issue:
server.xsrf.whitelist: ["/_plugins/_security/saml/acs", "/_plugins/_security/saml/logout", "/_opendistro/_security/saml/acs", "/_opendistro/_security/saml/logout"]
You should add both enpoints to the whitelist and it will work. Though it is still a way around.

@yagosalva i have both endpoints added but still seeing the issue
server.xsrf.whitelist: ["/_plugins/_security/api/authtoken", "/_opendistro/_security/api/authtoken", "/_opendistro/_security/saml/acs/idpinitiated", "/_opendistro/_security/saml/acs", "/_opendistro/_security/saml/logout", "/_plugins/_security/saml/acs/idpinitiated", "/_plugins/_security/saml/acs", "/_plugins/_security/saml/logout"]

Issue come from here: https://github.com/opensearch-project/security-dashboards-plugin/blob/main/server/auth/types/saml/routes.ts#L87
I think either it should be changed in the routes.ts or the documentation needs to be adapted.
@kefaaaz You also have to then change the POST URL in your IdP to <dashboards-url>/_opendistro/_security/saml/acs.

Seems like after version 2.1.0 both enpoints: /_opendistro/_security/saml/acs and /_plugins/_security/saml/acs not working.
If using first-one as IDP acs URL getting:  {"statusCode":404,"error":"Not Found","message":"Not Found"} - probbably expected after #895
But if switching to 2nd one getting 500 error
Rolling back Kibana to version 2.0.1 but leaving Opensearch version: 2.1.0 helps the issue a bit as /_opendistro/_security/saml/acs starts to work again (ofc /_plugins/_security/saml/acs not working as expected with this setup)

@JustinasKO , I am having the same issue. v2.1.0 sets the acsendpoints with /_opendistro/_security/saml/acs. Even though the team says they have updated routes.ts in the 2.1.0 to point /_plugin/_security/saml/acs. Somewhere in the code, the acsendpoints is set with _opendistro.
I have created a bug ticket here https://github.com/opensearch-project/security-dashboards-plugin/issues/1031

@JustinasKO , I have observed the same issue , cannot upgrade to opensearch-dashboards v2.1.0 with saml auth. Had to revert back to v2.0.1

News on this? @axl8652 could you upgrade?

Yes I was able to upgrade and use saml in 2.2.0 and now it's working in 2.3.0 as well.

Confirming version 2.3.0 works with the /_opendistro/_security/saml/acs endpoint, was expecting the _plugin one but this is fair enough

Getting 401 despite running 2.3 on Amazon OpenSearch
{"statusCode":401,"error":"Unauthorized","message":"Unauthorized"}

on /_dashboards/_opendistro/_security/saml/acs, which makes me think it is not necessarily version related.

opensearch-2.8.0   2.4.0
opensearch-dashboards-2.6.0   2.4.0

Just tried _opendistro/_security/saml/acs , _opendistro/_security/saml/acs/idpinitiated
Using helm versions:
CHART                                           APP VERSION
opensearch-2.8.0                         2.4.0
opensearch-dashboards-2.6.0   2.4.0
And got the following error:
{"statusCode":400,"error":"Bad Request","message":"Request must contain a osd-xsrf header."}
Trying /_plugins/_security/saml/acs ,_plugins/_security/saml/acs/idpinitiated
And got the following error:
{"statusCode":404,"error":"Not Found","message":"Not Found"}

I'm running version 2.4.0 and i am similar problems
https://forum.opensearch.org/t/unable-to-configure-saml-with-azure-ad/11659
what's the current endpoint? configuration guide shows /_opendistro/ , troubleshooting is using /_plugins/

@anubisg1 The route to use is / _opendistro/. Thank you for pointing out the discrepancy on the documentation website.

I'm running version 2.4.0 and i am similar problems
https://forum.opensearch.org/t/unable-to-configure-saml-with-azure-ad/11659
what's the current endpoint? configuration guide shows /_opendistro/ , troubleshooting is using /_plugins/

thanks , i changed that ... i still can't figure out why it's not working though .. i must have something wrong sice i get  message":"Failed to get saml header: Error: Invalid SAML configuration."} but i don't seem to be able to find what it is that is invalid

@anubisg1 In my experience setting up SAML in docker with SimpleSAML I received that error when the kibana_url was incorrect. The other items I would check is to make sure the entity_id for the idp matches what is in the metadata.

@anubisg1 In my experience setting up SAML in docker with SimpleSAML I received that error when the kibana_url was incorrect. The other items I would check is to make sure the entity_id for the idp matches what is in the metadata.

Thanks. the entity_id indeed matches (btw, why don't we just read it from the metadata instead of asking to configure it? :)
the only thing then it could be the kibana_url.. this is a pod running in kubernetes behing nginx ingress... i tried both the ingress  url and the internal kubernetes service url ... in both cases i had the same issue and no joy ...
any way, this might not be the best place for this kind of troubleshooting...


Not supported in current VS Code version?

Trying to install extension and getting this error:
Can't install 'lisoveliy.starcoderex' extension because it is not compatible with the current version of Visual Studio Code (version 1.77.3).

Same issue

Package VS Code version downgraded to 1.67.0.
P.S: last version is 1.78.0, so anyway update your VS Code


JUnit test concurrency flag

Do we use this anywhere now that all our tests are scala tests?
https://github.com/apache/incubator-openwhisk/blob/37ce9b86048dafb0f369a5a5b05caa0136a26ef4/tests/src/test/scala/common/WhiskProperties.java#L53
@dubee @jasonpet @drcariel can we remove this flag?

I think we can - I see one single lingering java test file upstream that still uses this but might be stale as well. Attempting to confirm with the team right now

Thanks - if it's dead, would you mind sending a PR to remove it and its related slice.

Once I get some confirmation will be sure to open a PR - feel free to assign this to me


[BUG] pkg_resources does not use dist-info from site-packages.zip

setuptools version
setuptools==60.10.0
Python version
Python 3.10
OS
macOS
Additional environment information
The context for this is py2app: Py2app bundles an application on macOS into a ".app" bundle.
Description
As part of the bundling of an application into an .app by py2app the python modules/packages used by the script are copied into a ZIP file that's added on sys.path.
The class pkg_resources.WorkingSet does not use the dist-info information that's included in that zipfile because pkg_resources.WorkingSet.add_entry asks the Finder (in this case find_apps_in_zip) to not look for subitems (the only argument is set to True).
Because of that pkg_resources.iter_entrypoints does not find the entry points of distributions copied into the zipfile.
Related issue in py2app: https://github.com/ronaldoussoren/py2app/issues/413
Expected behavior
I'd expect that the dist-info information that's included in the zipfile is used by pkg_resources.
How to Reproduce
On a macOS system:

Create a venv and activate it
Install setuptools and humanfriendly
Clone the py2app repository (https://github.com/ronaldoussoren/py2app) and install: pip install ./py2app
Change directory to examples/Tkinter/hello_tk
Open hello.py and replace the last two lines (creating the app object and running the mainloop)  by the code below

import humanfriendly
import pkg_resources
for ep in pkg_resources.iter_entry_points("console_scripts"):
    if ep.dist.project_name == "humanfriendly":
        break
else:
    raise RuntimeError("EP for humanfriendly not found")

Build the app bundle using python setup.py py2app
Start the application using dist/hello.app/Contents/MacOS/hello

What you'll see:

The app fails to launch and prints in the Terminal that the EP for humanfriendly is not found.

Expected behaviour:

Application starts and immediately stops

Output
See description in the previous step.

One way to fix this is to patch find_eggs_in_zip:

Don't check for only before the call to metadata.resource_listdir
Do check for only before checking if the subitem is an egg, e.g. if not only and _is_egg_path(subitem):


Implement From for Complex

Right now, this crate lets us convert real types like i32 to Complex<i32> by implementing From<T> for Complex<T> (source). Awesome!
Would you consider adding mixed-type conversions, i.e., implement From<U> for Complex<T>? Ideally all the implementors from std::convert::From would be available so one could convert, e.g., 3i16 to Complex64, etc.
I think this could be relevant to #4 but also help more issues in that vein. (I ran into it when attempting to create mixed-domain/mixed-precision vector-addition, and couldn't implement this in my own library because of the orphan rule.)
I can take a shot at a pull request, if you think this is worthwhile and has some possibility of being done correctly by a Rust noob?

I don't think it's possible, because of the core impl From<T> for T.  At least, when I try to replace the current implementations of From with:
impl<T: Clone + Num + From<U>, U> From<U> for Complex<T> {
    #[inline]
    fn from(re: U) -> Complex<T> {
        Complex { re: T::from(re), im: T::zero() }
    }
}

I get:
error[E0119]: conflicting implementations of trait `std::convert::From<Complex<_>>` for type `Complex<_>`:
   --> src/lib.rs:403:1
    |
403 | / impl<T: Clone + Num + From<U>, U> From<U> for Complex<T> {
404 | |     #[inline]
405 | |     fn from(re: U) -> Complex<T> {
406 | |         Complex { re: T::from(re), im: T::zero() }
407 | |     }
408 | | }
    | |_^
    |
    = note: conflicting implementation in crate `core`

But if you can figure out how to make that work, I'll consider it!

Ah, I see, very interesting! I found a reasonably lucid explanation of the problem in this blog post (search for 'conflicting implementations of trait', and the links therein), though in a slightly different context.
If I understand, Rust has to allow for the possibility that, when we say impl<T, U> From<U> for Complex<T>, hypothetically U == Complex<T>, in which case the new implementation is a redefinition of impl<T> From<T> for T from core.
How frustrating!
The solution in that blog post, however, is to implement not From<U> but From<&U>, a reference to the "smaller" type. You already have impl<'a, T: Clone + Num> From<&'a T> for Complex<T> (source), which you could replace with a impl<'a, U, T> version, without any loss of generality (I think):
impl<'a, U, T> From<&'a U> for Complex<T>
where
    U: Clone + Num,
    T: Num + From<U>,
{
    #[inline]
    fn from(re: &'a U) -> Complex<T> {
        Complex {
            re: T::from(re.clone()),
            im: T::zero(),
        }
    }
}

Then, the following test passes:
    #[test]
    fn test_from() {
        let n = 3i16;
        let c: Complex64 = Complex::from(&n);
        let d = Complex { re: 3., im: 0. };
        assert_eq!(c.re, d.re);
        assert_eq!(c.im, d.im);

        let e = Complex64::from(&2.2f64);
        assert_eq!(e.re, 2.2f64);
        assert_eq!(e.im, 0.0);
    }

The downside is that you'd have to remove both From for Complex implementations that you have currently, including the impl<T: Clone + Num> From<T> for Complex<T>, because this latter conflicts with the one above. That is, you wouldn't be able to call Complex::from on values, only references.
Do you think this is too high a price to pay? The reward would be mixed-precision/mixed-domain capability, so you can add Complex64 to i16, etc.

Note that scheme hurts type inference, as you had to force it to Complex64 in both of your examples.

let c: Complex64 = Complex::from(&n);
let e = Complex64::from(&2.2f64);

The partner trait Into is also less ergonomic when you add the & indirection.  Imagine you had a trait Foo: Into<Complex64>.  Now you'd have to write trait Foo where for<'a> &'a Self: Into<Complex64>.  Per rust-lang/rust#20671, that where clause also can't be implied by Foo, but has to be repeated everywhere Foo is used.
Do you need this to use a direct From?  You should already be able to do the two-layer conversion yourself, Complex::from(f64::from(n)).  It would also be easy to add a plain method along these lines, avoiding a breaking change to From altogether, something like:
impl<T: Clone + Num> Complex<T> {
   pub fn from_real<R: Into<T>>(re: R) -> Self {
      Complex::from(re.into())
   }
}

Ahh, you are absolutely right—and there we see the difference between the noob and the guru 😅!
Let me press on with implementing more of my library (a BLIS port to Rust) with your crate as it is now, and think a bit harder about how to do mixed-precision and mixed-mode. I think that the right place to tweak num-complex would be in the implementations of Add, Sub, etc., so that we could add real+complex, complex+real, and complex+complex with different types, as long as From is available between the underlying real types—but let me think about it a bit more to see if I'm right. Thanks for your thoughtfulness and advice!

No need to worry about noobs and gurus -- we'll come to agreement either way. :smile:

I think that the right place to tweak num-complex would be in the implementations of Add, Sub, etc., so that we could add real+complex, complex+real, and complex+complex with different types, as long as From is available between the underlying real types

That would be atypical for Rust -- note that the operators for primitive integers and floats don't do From conversions either.  Idiomatic Rust generally prefers explicit numeric conversions.
You might then ask why we should bother with real OP complex and complex OP real at all, but there's at least some argument that the operation can be implemented more simply or more accurately than complex OP complex.  (Even if we don't do that yet, as noted in #4.)

I understand better now how Rust asking you to do explicit conversion is an important precedent. My concern would be in dealing with vectors (or matrixes or tensors) where speed is paramount, e.g., when I have a billion Complex<f32> and a billion i16s and want to add the latter into the former quickly, I don't want to convert before handing them off to my linear algebra addv routine. Also, I'd love it if that addv function not need to know about the types of its two inputs, just that lower-level they can be Fromed/Intod.
(Perhaps some useless background—right now, BLIS is a C99 library and does not yet do mixed-mode/mixed-precision arithmetic. Its addv can only add the exact same types. With Rust and your crate, my addv can at least do mixed-mode! That is, I can add Complex<f64> and f64 vectors, with my noob-level skill with generics/traits. Mixed-precision would be the next desideratum.)
Again, many thanks for being so generous with your time!


Update NavUI, theme image & footer(Navbar UI #1769)

Hello PA,
##Update NavUI, theme image & footer(Navbar UI #1769)
Closes: #1769
Description
1)The height of the navbar is too much. So, fixed that.
2)Theme image of buddha previously collapse with the navbar. So, I added new theme image & color of text adjusted according to new theme image.
3)At the footer section, the input email box has not given top left and bottom border-radius and also extra 10px margin is removed by me that is of no use.
Screenshots
1)Nav----------------------------------
---old----

---new--

2)Theme Image----------------------------------------
---old----

---new--

Footer (Email input box)----------------------------------------
---old----

---new---

@akshitagupta15june please merge my PR with Gssoc label

hi this is very nice bg, it would be better if om is a little down in plain area so that it is visible

okay, I will do this.

hi this is very nice bg, it would be better if om is a little down in plain area so that it is visible

Please see my changes and if you want any other details in theme look, you can tell me.
This is my first open source Gssoc contribution. Please pull my request if you like it @akshitagupta15june.


Display endpoint changes

Close #57
Demo:

This uses OpenAPI-diff to interpret the endpoint changes from the OpenAPI files, and an ng-bootstrap Tabset to display the tables.
I could add an additional string metadata field to serve as a changelog when uploading a specification, which the uploader fills with a human readable summary of the changes / release notes. Idea being this would be displayed alongside the tables. Would this be useful?

NB openapi-diff only supports swagger 3.x


Multiple probability labels appearing sometimes

I moved the mouse around the right edge of the ellipse and the label got dissociated from the mouse so additional labels appeared to track the mouse. I'm not exactly sure what the necessary condition is. Screenshot below.
http://<IP_ADDRESS>/rollcall/RH1150030

I can replicate this and will fix it.

This is fixed.

Okay, I also figured out what it was -- duplicated tooltip spawning code in the heat map and the decorate.


Tomighty 1.2 on OS/X Sierra doesn't open a window

A process is started, but no window comes up.

It's a menu bar item: a little tomato icon should appear next to the Wi-Fi status, Clock, Spotlight, etc. Clicking on the icon will display the app controls and settings.
It works fine here on macOS 10.13.2.


Add script to verify boilerplate header

This is required to make sure that all files contain the correct Kubernetes copyright boilerplate header. It is a prerequisite for migrating the repo to upstream: https://github.com/kubermatic/cluster-api-provider-digitalocean/issues/105.
Release note:

NONE

(Will fix the verify error, wanted to check if it fails on ci)

@xmudrii Ptal. Updated, now all tests are green. :sparkles:

Merging. Also, marked the verify job as "required".


kubectl explain is broken for kcp api-resources

Describe the bug
kubectl explain is broken for kcp api-resources, e.g. locations, clusterworkspaces, workspaces et al. Works well for other k8s traditional resources, though, clusterroles.
To Reproduce
Steps to reproduce the behavior:

Login to kcp "stable" service as of this issue is filed
Show current ws:
$ kubectl kcp ws
Current workspace is "root:rh-sso-158xxxx".
$ kubectl api-resources

NAME                              SHORTNAMES   APIVERSION                             NAMESPACED   KIND
...
clusterroles                                   rbac.authorization.k8s.io/v1           false        ClusterRole
...
locations                                      scheduling.kcp.dev/v1alpha1            false        Location
clusterworkspaces                              tenancy.kcp.dev/v1alpha1               false        ClusterWorkspace
...
workspaces                                     tenancy.kcp.dev/v1beta1                false        Workspace

Run kubectl explain for kcp resources to know the description of them
$ kubectl explain locations
error: couldn't find resource for "scheduling.kcp.dev/v1alpha1, Kind=Location"
Checking if verbose output returns more clues:
$ kubectl explain locations --v 6

I0705 16:21:06.184336    9707 loader.go:372] Config loaded from file:  /home/xxia/my/env/kcp/kubeconfig
I0705 16:21:08.049208    9707 round_trippers.go:553] GET https://kcp-stable.apps.../clusters/root:rh-sso-158xxxx/openapi/v2?timeout=32s 200 OK in 1864 milliseconds
error: couldn't find resource for "scheduling.kcp.dev/v1alpha1, Kind=Location"

$ kubectl explain clusterworkspaces
error: couldn't find resource for "tenancy.kcp.dev/v1alpha1, Kind=ClusterWorkspace"
$ kubectl explain workspaces
error: couldn't find resource for "tenancy.kcp.dev/v1beta1, Kind=Workspace"
Above commands fail to return description for kcp resources. It works well for k8s traditional resources, though, clusterroles:
$ kubectl explain clusterroles
KIND:     ClusterRole
VERSION:  rbac.authorization.k8s.io/v1

DESCRIPTION:
     ClusterRole is a cluster level, logical grouping of PolicyRules that can be

Expected behavior
kubectl explain should work well to return description for kcp resources like for k8s traditional resources.
Additional context

Is there an plan to work on this?

/remove-lifecycle rotten

This should work now since #3118 got merged. @gmrodgers sorry for the late reply. Any chance you can give it a spin and confirm please?
This is how it looks like for me on latest main:
$ kubectl explain workspace
GROUP:      tenancy.kcp.io
KIND:       Workspace
VERSION:    v1alpha1

DESCRIPTION:
    Workspace defines a generic Kubernetes-cluster-like endpoint, with standard
    Kubernetes discovery APIs, OpenAPI and resource API endpoints.
     A workspace can be backed by different concrete types of workspace
    implementation, depending on access pattern. All workspace implementations
    share the characteristic that the URL that serves a given workspace can be
    used with standard Kubernetes API machinery and client libraries and command
    line tools.

FIELDS:
[...]

The PR mentioned above was included in v0.24.0 and if I didn't misunderstand the issue it should work fine. Closing this.


Adding hidden fields to responses

The user now can ask to receive the hidden fields and the metadata as
part of the answers.

Thanks for improvement


SocketAddress params are "resolved" when Metrics callback are invoked

Currently, when Metrics SPI callbacks are invoked, the io.vertx.core.net.SocketAddress#host values are "resolved".
For example, if you connect a NetClient to www.google.com, io.vertx.core.spi.metrics.TCPMetrics#connected is invoked with host <IP_ADDRESS>. This is because io.vertx.core.net.impl.NetClientImpl#connected creates the SocketAddress object from the result of invoking #remoteAddress on the Netty Channel:
private void connected(ContextImpl context, Channel ch, Handler<AsyncResult<NetSocket>> connectHandler) {
  // Need to set context before constructor is called as writehandler registration needs this
  ContextImpl.setContext(context);
  NetSocketImpl sock = new NetSocketImpl(vertx, ch, context, sslHelper, true, metrics, null);
  socketMap.put(ch, sock);
  context.executeFromIO(() -> {
    sock.setMetric(metrics.connected(sock.remoteAddress()));
    connectHandler.handle(Future.succeededFuture(sock));
  });
}

This is just an example and applies to HTTP clients, servers, ... etc.
This process has the following issues:

it's not possible for the user to enable metrics on a remote host basis, because he would have to know remote IP addresses in advance
if, over time, hosts get resolved to different IP addresses, then Metrics SPI implementations will create counters for each remote address even if, from the user perspective, www.google.com is a single destination

can you review @tsegismont https://github.com/eclipse/vert.x/tree/metrics-remote-name ?

https://github.com/eclipse/vert.x/pull/1199

so it is not necessary to do that for datagram socket as the remote host is the bare value without any resolution.

so are we good ?


[Design Changes] Make the mobile layout more compact

Introduction
In the mobile view there is a lot of spacing and padding in the directory list of a repo.

Proposal
FiliusPatris tried to inspect the directory list with the firefox devtools and was able to remove the unnecessary spacing with the following css:
.name {
	display: table-cell;
	max-width: 20%;
}

.message {
	display: table-cell;
	width: 100%;
}

.age {
	display: none;
}

Credits
The main idea and the proposed css changes come from the codeberg user FiliusPatris. For further information have a look at the issue on codeberg: https://codeberg.org/Codeberg/Community/issues/190

#15005 fixes this, but that PR has stalled.

It should have been improved by

#19546
#19515

Great thanks to @Gusted


Fix the useObserverState function

The useObserverState function in the controls file was registering multiple observer set functions for the same action. This meant as the UI reloaded, an increasing amount of events would fire, slowing down interactions with the page.
Fixes #120
I confirm I have signed the Contributor License Agreement.

@mvaligursky I've tested and unfortunately #116 looks unrelated. I'm merging this for now.


Access Token is not regenerated after expiry in implicit flow

Environment

mod_auth_openidc version 2.3.4
Apache version 2.4.6
platform/distro Centos 7

Expected behaviour
Once the issued access token expires, the module should be able to call the authorize api again and get a new access token in implicit flow
Actual behaviour
Access Token is not regenerated after expiry in implicit flow

What do you mean by "call the authorize API again"? Can you give an example?

@zandbelt /authorize endpoint of the Authorization Provider.
So, the issue is, we have the implicit OIDC flow which doesn't have a refresh token.
However we want the access token to be regenerated on expiry!

Firstly, why would you use the Implicit flow in a web server client whereas the more secure code flow is available? Secondly, the module doesn't "know" when the access token is expired, only the application using it knows. So when your application notices it has expired, it could throw away the session cookie and refresh the page so the users browser would be redirected to the Provider.

@zandbelt We have our UI (OPENID) and API (OAUTH) behind the same mod-auth-openidc. If the token expires, all our api call fails. So the workaround would be to delete to delete the cookie.
Or to use the 'authorization code' flow, which will give you the refresh token. Do you recommend any other better way?

For sure using the authorization code flow is the better way. Since you have a refresh token you can then use a module hook to refresh the access token instead of manually deleting the session cooking and generating a redirect, see: https://github.com/zmartzone/mod_auth_openidc/wiki/Access-Tokens-and-Refresh-Tokens


'Create your cluster' missing the step for setting the compute zone.

On the page: http://kubernetes.io/docs/hellonode/, under the section: "Create your cluster".
gcloud container clusters get-credentials hello-world prompts to set compute/zone value.

ERROR: (gcloud.container.clusters.get-credentials) The required property [zone] is not currently set.
It can be set on a per-command basis by re-running your command with the [--zone] flag.
You may set it for your current workspace by running:
$ gcloud config set compute/zone VALUE

It may be more convenient to add that step to the document.

Please refer to: https://github.com/rvowles/kubernetes-codelounge


Move getJtreg into getDependencies

-Moved the getJtreg version download logic into TKG/scripts/getDependencies.xml
resolves : https://github.com/adoptium/aqa-tests/issues/4848

Grinder outputs:
openjdk: https://hyc-runtimes-jenkins.swg-devops.com/job/Grinder/36142/
Crypto test: https://hyc-runtimes-jenkins.swg-devops.com/job/Grinder/36150/
ssl-test:https://hyc-runtimes-jenkins.swg-devops.com/job/Grinder/36151

Made requested changes. Kindly review.
Grinder outputs:
openjdk: https://hyc-runtimes-jenkins.swg-devops.com/job/Grinder/36177/ (36178)
Crypto test: https://hyc-runtimes-jenkins.swg-devops.com/job/Grinder/36180/
ssl-test:https://hyc-runtimes-jenkins.swg-devops.com/job/Grinder/36181

Grinder outputs:
openjdk: https://hyc-runtimes-jenkins.swg-devops.com/job/Grinder/36330/
openjdk with hotspot: https://hyc-runtimes-jenkins.swg-devops.com/job/Grinder/36373/
Crypto test: https://hyc-runtimes-jenkins.swg-devops.com/job/Grinder/36331/
ssl-test:https://hyc-runtimes-jenkins.swg-devops.com/job/Grinder/36332/


electron 1.6.6 got problem!

Hi,Team
  Electron 1.6 cannot run with<EMAIL_ADDRESS>var nodegit = require('nodegit');

  after i insert the code above ,electron cannot be started.I also create a file named .npmrc ,but it doesn't work.The content of .npmrc is shown below:
runtime = electron
target = 1.6.6
target_arch = x64
disturl = https://atom.io/download/atom-shell

  thanks for your time!

Did you create the npmrc before installing nodegit?

@maxkorp a small detail, the .npmrc file content in the web of nodegit is all in one line, I had same error until I see here is different lines and split it in different lines, maybe is possible to fix that in the nodegit website?


Tree viewer won't load when defining both scope and player.

When running lp tree and filling in both scope and player, it just shows what's below.
The data is uploaded correctly to bytebin, yet the tree viewer won't display anything other than this.

If I don't fill in the player field, it loads correctly tho.

What's the exact command you used?

From console: lp tree quests Fefo6644
bytebin and "treeview"

That's the JS error:

Errors are obfuscated in production, I can see what the problem is in the dev version. Should have a fix for it shortly :)


Redundancy?

Hi Stephen,
Thanks for developing this awesome package! These appear to point to the same repo, but have different names and versions. Is there a difference or are they redundant? Wiredep looks newer in grunt, is this the package we should use?
https://www.npmjs.com/package/grunt-bower-install
https://www.npmjs.com/package/grunt-wiredep
Note some devs are confused here: http://stackoverflow.com/questions/18814806/can-bower-automatically-write-script-tags-into-index-html
Thanks!
Cheers,
Dave

grunt-bower-install is an old, deprecated version. It was renamed grunt-wiredep some time back (wiredep is the tool it's based on, and grunt-wiredep is just a grunt wrapper for it).
The grunt-bower-install GitHub repo was forward (if you go to https://github.com/stephenplusplus/grunt-bower-install, you'll note you're forwarded to https://github.com/stephenplusplus/grunt-wiredep), but it appears that the same wasn't done for npm.
@stephenplusplus do you know if there's a way to forward an npm package? I don't think there is, but I do know there is that deprecate thing that we should maybe use to point people to the new and updated package.

When a user installs grunt-bower-install, here's what they get:
npm WARN deprecated<EMAIL_ADDRESS>use grunt-wiredep instead

It's not much, but that's how packages look when they're deprecated. We want users to know there's an alternative, but we can't destroy the code their project depends on. If they prefer grunt-bower-install, or simply don't need any of the upgrades or re-configurations newer versions of grunt-wiredep have made, they don't have to upgrade.
As for the SO issue, it's already cleared up in the comments the project was renamed, and old links redirect to this repo. There's not much left to do, although I added a comment onto my original answer that explains it was renamed.
Thanks for the kind words @dderiso!

@stephenplusplus maybe add a note and link to https://www.npmjs.com/package/grunt-bower-install? I'm surprised there's nothing else there that says it's deprecated (like a badge npm adds on its own when you deprecate).


Members.Logout() will do the trick

Also: Not sure why you're clearing the redirectUrl there?

That clear redirectUrl is for where you have a protected page - the earlier tutorials show how to store the url requested and redirect to login... then it would redirect if that var is set. I found it caused issues in testing for repeated visits so it was best to null it out.


problem with helm installation

Current Behavior
Currently, we install Cilium using helm, but we often face problems while installing.
Expected Behavior
Install Cilium directly from the latest release https://github.com/cilium/cilium-cli/releases/tag/v0.10.2
Screenshots/Logs

kubectl get pods -A
NAMESPACE              NAME                                         READY   STATUS              RESTARTS      AGE
kube-system            cilium-operator-5986db558f-p57xs             0/1     Pending             0             17s
kube-system            cilium-operator-5986db558f-z4qgv             1/1     Running             0             17s
kube-system            cilium-tnv46                                 0/1     Error               1 (9s ago)    17s

@leecalcote apparently there is some problem when installing it using helm

@hershd23, will you have a look at this?
// @Revolyssup @piyushsingariya

@Shreyas220 is this an issue with your environment, with Cilium or with the adapter?

Yes, I'll take a look at it

@Shreyas220 is this an issue with your environment, with Cilium or with the adapter? Share adapter logs, please.

my bad I should have stated this in the issue
The problem is with Cilium while using helm, not with the adapter
The log mentioned above is when installing it directly through helm (not using the adapter), i did mention this in slack once here
suryashankar and i both have faced this so this might not be a problem with my environment
@hershd23  could also test it once just to be sure

Gents, checking in here in case there's progress to report...

Nope @leecalcote, completely forgot about this
@Shreyas220 can you paste what you did and the logs again, not able to view your messages. Can you rather add that to the discuss forum and share the link because I guess Slack will start deleting earlier messages now.
https://discuss.layer5.io/

I tried to reproduce this but I am unable to do so
OS :- MacOS Big Sur 11.6
cilium-test   client-6488dcf5d4-5kggz             1/1     Running   0             7m9s
cilium-test   client2-5998d566b4-hpjtx            1/1     Running   0             7m9s
cilium-test   echo-same-node-745bd5c77-lq94k      1/1     Running   0             7m9s
kube-system   cilium-operator-6d8799bcbb-45kqc    1/1     Running   0             19m
kube-system   cilium-operator-6d8799bcbb-cdmlm    0/1     Pending   0             19m
kube-system   cilium-tnzc9                        1/1     Running   0             19m

cilium status --wait

    /¯¯\
 /¯¯\__/¯¯\    Cilium:         OK
 \__/¯¯\__/    Operator:       1 errors, 1 warnings
 /¯¯\__/¯¯\    Hubble:         disabled
 \__/¯¯\__/    ClusterMesh:    disabled
    \__/

DaemonSet         cilium             Desired: 1, Ready: 1/1, Available: 1/1
Deployment        cilium-operator    Desired: 2, Ready: 1/2, Available: 1/2, Unavailable: 1/2
Containers:       cilium             Running: 1
                  cilium-operator    Running: 1, Pending: 1
Cluster Pods:     0/9 managed by Cilium
Image versions    cilium-operator    quay.io/cilium/operator-generic:v1.11.2@sha256:4c8bea6818ee3e4932f99e9c1d7efa88b8c0f3cd516160caec878406531e45e7: 2
                  cilium             quay.io/cilium/cilium:v1.11.2@sha256:4332428fbb528bda32fffe124454458c9b716c86211266d1a03c4ddf695d7f60: 1
Errors:           cilium-operator    cilium-operator                     1 pods of Deployment cilium-operator are not ready
Warnings:         cilium-operator    cilium-operator-6d8799bcbb-cdmlm    pod is pending

Although it says that there is an error here but actually given this is a single node cluster, only one operator is created the other is not as specified here https://github.com/rancher/rke2/issues/933 .
Here is the connectivity test as well
cilium connectivity test
ℹ  Single-node environment detected, enabling single-node connectivity test
ℹ  Monitor aggregation detected, will skip some flow validation steps
✨ [minikube] Creating namespace for connectivity check...
✨ [minikube] Deploying echo-same-node service...
✨ [minikube] Deploying same-node deployment...
✨ [minikube] Deploying client deployment...
✨ [minikube] Deploying client2 deployment...
⌛ [minikube] Waiting for deployments [client client2 echo-same-node] to become ready...
⌛ [minikube] Waiting for deployments [] to become ready...
⌛ [minikube] Waiting for CiliumEndpoint for pod cilium-test/client-6488dcf5d4-5kggz to appear...

ℹ  Cilium version: 1.11.2
🏃 Running tests...

[=] Test [no-policies]

[=] Test [allow-all-except-world]

[=] Test [client-ingress]

[=] Test [echo-ingress]

[=] Test [client-egress]

[=] Test [to-entities-world]

[=] Test [to-cidr-1111]

[=] Test [echo-ingress-l7]

[=] Test [client-egress-l7]

[=] Test [dns-only]

[=] Test [to-fqdns]

✅ All 11 tests (0 actions) successful, 0 tests skipped, 0 scenarios skipped.

@Shreyas220 if you are using a linux system I can test on the one of the CIL machines as well to see if this issue occurs in Linux. But it would be really helpful if you can post the specifics of your machine and the error trace either here or in discuss forum, because AFAIK we might have lost your earlier message on the Slack channel due to the constraints of the free version :/

https://github.com/cilium/cilium-service-mesh-beta/pull/15 Might be relevant to the convo here.

@jtaleric thank you much. Yes, indeed. // @theBeginner86 @MUzairS15


Fix incorrect status on SIP

he output from csrutil status has a period at the end of enabled/disabled

thnx


Move to using vendored bulma and assets pipeline

Move to using Rails' Assets Pipeline
This has a few benefits:

Uses a self-hosted version of bulma, such that users don't depend on cdn.jsdelivr.net
Because we no longer have any external dependency, we can switch to a 'self' CSP.
We can now rely on the integrity check that we inline using the tag helpers instead of having to maintain them
Makes for a cleaner application layout template
We can now include other vendored assets

Example: https://github.com/Shopify/maintenance_tasks/pull/1031

I'm a bit confused, because sprockets is still in the latest documentation.
It also mentions importmaps, but it says it's only for JS:

❤


Delimiter changed inside statement

Which version and edition of Flyway are you using?
6.4.1
If this is not the latest version, can you reproduce the issue with the latest one as well?
(Many bugs are fixed in newer releases and upgrading will often resolve the issue)
Which client are you using? (Command-line, Java API, Maven plugin, Gradle plugin)
Command-line
Which database are you using (type & version)?
MySQL
Which operating system are you using?
macOS, Linux
What did you do?
(Please include the content causing the issue, any relevant configuration settings, the SQL statement that failed (if relevant) and the command you ran.)
delimiter $$
create procedure p()
begin
select if(1, 2, 3), if(1, 2, 3) from dual;
end$$
What did you expect to see?
Successful migration.
What did you see instead?
Failed migration.

Seeing that error with v6.4.0 but it becomes the following with v6.4.1:
SQL State  : 42000
Error Code : 1064
Message    : You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '$$

Works fine in 6.3.3.  All on linux btw.

I'm having a similar problem, also on macOS with MySQL.  My code example is as follows:
`delimiter $$
-- /=========================================================================/
drop function if exists column_exists $$
create function column_exists
(
table_in	varchar(64),
column_in	varchar(64)
)
returns bool
deterministic
begin
set @column_count =
(
select count(*)
from information_schema.columns
where table_name = table_in
and column_name = column_in
and table_schema = database()
);
return (@column_count > 0);

end $$
`

https://github.com/flyway/flyway/issues/2798#issuecomment-623723125 Creating another issue.


Push down readme updates

these changes make sense and can be further reviewed as part of the existing pr.  i will make other minor changes to the gradle files and code to be consistent with the parameter name changes


[Q] Want to know from which plugin we get all details of transport stream parameter

HI @prashant-09-tech
You may want to use the analyze plugin for this. Please read the TSDuck user's guide for details, references and examples.

HI
could we connect over on Mail ?


pixel-identity-windows: Bad Request - Invalid Hostname

Please try  browsing to http://localhost:44382/pauth

same error. switch browser wont work either.

AllowedHosts configuration seems to be incorrect. Please set it to * or localhost
"AllowedHosts": "localhost"
or
"AllowedHosts": "*"

@Nfactor26 Thanks,It's okay


[FEATURE] Extending current icon pack

It would be great to have an easy way to extend current icon pack or maybe to set by default the pack, that has more icons. For example I would like to express the filter action with icon. In current set there aren't any. I know that there are many issues already made on, that topic, but I hope, that there are some changes coming. Since this is a very low amount of icons IMHO.

So it is inpossible at the moment to get full set, right?

From http://twitter.github.com/bootstrap/base-css.html#icons :
"Glyphicons has granted us use of the Halflings set in our open-source toolkit so long as we provide a link and credit here in the docs. Please consider doing the same in your projects."
So, no. Unless you buy the full pack from them.

The Halflings set only includes 120 icons and the 350 pack cost 25$ (50$ if you want the vector format) and those are twice the size. I'm currently working on a css sheet for those icons. There is a sprite with all 350 icons, but I need to scale down their size to have the same as the Halflings and some icons are not that good looking once resized.
Also, you are supposed to mention that you are using Glyphicon pack on your site if you use the free license. The 25$ and 50$ license grant you the right to use them without restrictions. If you like them, 25$ is nothing to support the guy who made them.

Closing—we only support the existing 120 icons from Glyphicons.


Integration test generated by RoostGPT

Please pull these awesome changes in!
Test Name      - MiniProjects
AI Type        - Open AI
AI Model       - gpt-4-1106-preview
Test Type      - Integration test
Use Type       - cli
Test Framework - Karate

API Specs used: serviceTestManagement-v2.json, and serviceActivationAndConfiguration-v1.json
Gherkin Context:
Feature: WiFi Troubleshooting for Fiber Internet Customers

  Background:
    Given the customer support representative has access to the service activation and configuration API
    And the customer support representative has access to the service test management API

  Scenario: Diagnose and resolve weak WiFi signal
    Given a customer with subscriber ID "SVTAL001" reports a weak WiFi signal
    When the support representative initiates a diagnostic test
    Then the service test API should return a test ID
    And the diagnostic result should indicate low WiFi signal strength
    When the support representative uses the configuration API to change the WiFi channel
    Then the configuration API should return a success response
    And the customer should report improved WiFi signal strength

  Scenario: Reset ONT device to resolve connectivity issues
    Given a customer with subscriber ID "SVTAL002" reports intermittent internet connectivity
    When the support representative initiates a diagnostic test
    Then the service test API should return a test ID
    And the diagnostic result should indicate ONT connectivity issues
    When the support representative uses the configuration API to reset the GPON ONT
    Then the configuration API should return a success response
    And the customer should report stable internet connectivity

  Scenario: Update WiFi password for improved security
    Given a customer with subscriber ID "SVTAL003" requests a WiFi password change
    When the support representative uses the configuration API to set a new WiFi password
    Then the configuration API should return a success response
    And the customer should be able to connect to the WiFi network with the new password

  Scenario: Diagnose and resolve WiFi interference issues
    Given a customer with subscriber ID "SVTAL004" reports slow WiFi speeds
    When the support representative initiates a diagnostic test
    Then the service test API should return a test ID
    And the diagnostic result should indicate WiFi interference on the current channel
    When the support representative uses the configuration API to change the WiFi channel to an less congested one
    Then the configuration API should return a success response
    And the customer should report improved WiFi speeds

  Scenario: Enable WiFi for a new customer
    Given a new customer with subscriber ID "SVTAL005" has just had their fiber service installed
    When the support representative uses the configuration API to enable WiFi
    Then the configuration API should return a success response
    And the customer should be able to see and connect to their new WiFi network

  Scenario: Troubleshoot and resolve a failed configuration change
    Given a customer with subscriber ID "SVTAL006" requests a WiFi configuration change
    When the support representative uses the configuration API to make the requested change
    And the configuration API returns an error response
    Then the support representative should initiate a diagnostic test
    And the service test API should return a test ID
    And the diagnostic result should provide details about the configuration failure
    When the support representative resolves the identified issue and retries the configuration change
    Then the configuration API should return a success response
    And the customer's WiFi should reflect the requested changes

Test Reports:


Add option to disable hotkey

Disable hotkey on a Shotr action.

Is this a duplicate of #19?

Is this a duplicate of #19?

Whoops yes

Whoops yes


Omnimount restarts

omnimount_inspect.txt
Dont know if it is just me, but for some reasons Omnimount restarts quite often, and then all the other containers that depends on Omnimount restarts. For me it often looks like its triggered by load, for it often happens when a download starts. It does fixes itself and everything is running afterwards, but sometimes i causes som failed downloads and Sonarr/Radarr tries do download another version.
Don`t know for sure when it startet, but it might be few months ago, first tought it was related to the server i was running on. But i have now changed the server and problem is the same. By the way, the backup/restore feature is working great i had the new server up running in no time.
Let me know if there is some data i can provide, so you can look into the problem when you have some time.

I think there are some tweaks that still need to occur.  In pre-release versions, we had an issue where OmniMount wouldn't catch failures and the results were less than ideal.  Plex would be "up" but all videos would be missing, for example.  The problem is that in Linux, you create an empty (ideally) directory and then mount a remote on top of it.  The path is the same but the directory no longer looks empty.  When the mount is dropped, the empty directory remains.
With Docker, we're essentially doing the same thing so you have an external directory mounted to something internal to the container.  But since that external directory is actually your Google drive (for example) mounted over that empty directory, the sign of a failure is that the container now sees the empty directory, not a missing directory.  Furthermore, when the mount is re-established (often in seconds or even under a second), Docker still has the empty directory mounted in the container despite the overlaid remote mount.  This causes things like downloads or changes to be written (at best) to the empty directory causing it to a) no longer be empty which could cause mount issues later on and b) files not to be where you expect them to be.
Now, we have a much better process but it's also sort of brute force.  Any failures immediately trigger a container restart.  If only Plex loses its mount, only Plex will restart.  But if OmniMount loses it, all containers dependent on it will also restart when OmniMount restarts.
If you find it is restarting way too frequently there are a few undocumented tweaks we have already setup for purposes like these.  You can change OmniMount's caching, for example, by creating a file called vfs.conf in the root of the OmniMount configs directory.  In it, put any combination of these variables with appropriate settings to see if these changes help (default values are shown here):
VFSMAX=100G
VFSAGE=48h
VFSPOLL=5m
VFSREAD=2G
VFSCACHE=yes

Don't expect a lot of error checking here so be sure to use proper values as documented by Rclone.  But, if disk space is minimal, for example, you'll want to reduce the cache size from 100G to something like 20G or maybe even turn off the caching with VFSCACHE=no.
There's also a variable called TURBOMAX in the configs.  This isn't a menu option but you can edit the raw OmniStream config file with the omni edit command.  Look for the line that says TURBOMAX=20 and change it to something lower.  This represents how many parallel operations TurboSync will attempt when syncing files up to Google.  I ran into similar issues when I was using a slower "less endowed" server for testing purposes and had to reduce it to 10.  Before doing so, things appeared to work OK but if my server decided to add an entire TV series (versus one new episode) I'd find things in a really bad state otherwise.  Honestly, it really won't be that noticeable unless you're sitting around watching it download/upload.

Thanks for the reply, i have been testing out different cache settings without success so far. It does not looks like it makes it a difference. Will try the out the TURBOMAX=10 and se if that makes a difference, because my experiences is that it happens under heavy disk load for example if i try to manual import a TV series like you mentioned. One episode is usually not problem, then it`s just a sporadic restart now and then.
The specification of my server:
CPU:	Intel Xeon E3-1220 v3 - 3.1 GHz - 4 core(s)
RAM:	32GB - DDR3
Hard Drive(s):	2x 1TB (SSD SATA) (Raid 1)
Bandwidth:	Unmetered @ 1Gbps
What do you think about testing out increasing the the intervall and timout on the Omnimount health check? Because from my indication its not related to the rclone sync since it crashes before the sync starts. So its i think the problem is related to that or maybe som problem with MergeFS?
healthcheck:
test: ["CMD-SHELL", "/omnimountcheck"]
interval: 10s
timeout: 5s
retries: 1

Omnimount log during restart:
omnimount  | rclone v1.60.0
omnimount  | - os/version: debian 11.5 (64 bit)
omnimount  | - os/kernel: 4.19.0-22-amd64 (x86_64)
omnimount  | - os/type: linux
omnimount  | - os/arch: amd64
omnimount  | - go/version: go1.19.2
omnimount  | - go/linking: static
omnimount  | - go/tags: none
omnimount  |
omnimount  | mergerfs version: 2.33.5
omnimount  |
omnimount  | Starting vnstat
omnimount  |
omnimount  | Configuration:
omnimount  | MERGEMOUNT=cloud
omnimount  | RCLONESERVICE=gcrypt
omnimount  | RCLONEMOUNT=gcrypt
omnimount  | UNSYNCED=unsynced
omnimount  | UPLOADCACHE=uploadcache
omnimount  | MEDIA=media
omnimount  | TURBOMAX=10
omnimount  | Adding group omniuser' (GID 1000) ... omnimount  | Done. omnimount  | Adding user omniuser' ...
omnimount  | Adding new user omniuser' (1000) with group omniuser' ...
omnimount  | Creating home directory /home/omniuser' ... omnimount  | Copying files from /etc/skel' ...
omnimount  | Starting services
omnimount  | OmniMount Caching: enabled
omnimount  | {
omnimount  |    "jobid": 1
omnimount  | }
omnimount  |
omnimount  | Startup complpete
omnimount  | Received request to shutdown
omnimount  | fusermount: extra arguments after the mountpoint
omnimount  | umount: /mnt/gcrypt: target is busy.
omnimount  | rmdir: failed to remove '/mnt/gcrypt': Device or resource busy
omnimount  | rmdir: failed to remove '/mnt/uploadcache': Directory not empty
omnimount  | rclone v1.60.0
omnimount  | - os/version: debian 11.5 (64 bit)
omnimount  | - os/kernel: 4.19.0-22-amd64 (x86_64)
omnimount  | - os/type: linux
omnimount  | - os/arch: amd64
omnimount  | - go/version: go1.19.2
omnimount  | - go/linking: static
omnimount  | - go/tags: none
omnimount  |
omnimount  | mergerfs version: 2.33.5
omnimount  |
omnimount  | Starting vnstat
omnimount  |
omnimount  | Configuration:
omnimount  | MERGEMOUNT=cloud
omnimount  | RCLONESERVICE=gcrypt
omnimount  | RCLONEMOUNT=gcrypt
omnimount  | UNSYNCED=unsynced
omnimount  | UPLOADCACHE=uploadcache
omnimount  | MEDIA=media
omnimount  | TURBOMAX=10
omnimount  | addgroup: The group omniuser' already exists. omnimount  | adduser: The user omniuser' already exists.
omnimount  | Starting services
omnimount  | OmniMount Caching: enabled
omnimount  | {
omnimount  |    "jobid": 1
omnimount  | }
omnimount  |
omnimount  | Startup complpete
omnimount  | fusermount: extra arguments after the mountpoint
omnimount  | Received request to shutdown
omnimount  | umount: /mnt/gcrypt: target is busy.
omnimount  | rmdir: failed to remove '/mnt/gcrypt': Device or resource busy
omnimount  | rmdir: failed to remove '/mnt/uploadcache': Directory not empty
omnimount exited with code 143
omnimount exited with code 0

Looks like the trick with the healthcheck is working, no restart since the change to the configuration.

@mahogl - Is the only change you made in retries (3 instead of 1) ?

@kelinger Yes, only change is 3 instead of 1, because my theory was that during heavy I/O operations it would fail one healtcheck and then do a restart of the Omnimount and then i got cascading restarts going on other containers that depended on Omnimount.
The results from the testing is still good no restarts since 28.10.22. I have also tried to get it to crash with stress test with heavy I/O operations like downloading and importing whole tv-series

I'm unclear whether Docker's use of the term "retries" includes the initial attempt.  In other words, my logic was that "1 retry" meant that it failed twice in a row (failed on a health check and then failed again on the retry 10 sec later).  Obviously, if "retries = 1" means "one failure" then absolutely... there's no room for any delayed responses or false positives.
I've switched the project over to use 3 for this now so if you want to revert to the "official version" (which is updatable) feel free.  It's possible I may reduce it to 2 but see no reason to do so now (the obvious drawback is that a true failure will now take 30-40 seconds to be "seen" meaning that other containers could be writing to useless directories or that Plex, et al, makes the decision to remove your library since it can't be found anymore and this would be the best reason to decrease the number of attempts)
Anyhow, nice find and it's now part of the official build!

Sounds good. From the documentations that i have read it means, retries specifies the number of consecutive health check failures required to declare the container status as unhealthy. Health check will only try up to the specified retry number. If the server fails consecutively up to the specified times, it is then considered unhealthy.
Default settings from docker is 3 so think it`s fine setting at that, i have not experienced any problems with it. Thank you for including it :)
Source: https://docs.docker.com/engine/reference/builder/#healthcheck


Make a tutorial. Thanks !

Can you make a tutorial on Youtube how to use for your code? Your ideas are so useful. But I can't use it.  C++ is confusing for me. Thanks !

I will do in next few days

https://www.youtube.com/watch?v=Zk4AHBIlEus

I think i will do a new tutorial for this new version


Services: first build: abs added

{package} {version} {:snowflake:}
Destination channel: {Snowflake | defaults}
Links

{ticket_number}
Upstream repository
Upstream changelog/diff
Relevant dependency PRs:

...

Explanation of changes:

...

Linter check found the following problems:
ERROR conda.cli.main_run:execute(124): `conda run conda-lint /tmp/abs_bax1urs798/clone` failed. (See above for error)
The following problems have been found:
===== WARNINGS =====

clone/recipe/meta.yaml:17: avoid_noarch: noarch: python packages should be avoided

===== ERRORS =====

clone/recipe/meta.yaml:17: pip_install_args: pip install should be run with --no-deps and --no-build-isolation.
clone/recipe/meta.yaml:41: missing_license_family: The recipe is missing the about/license_family key.
clone/recipe/meta.yaml:23: missing_wheel: For pypi packages, wheel should be present in the host section
clone/recipe/meta.yaml:29: missing_pip_check: For pypi packages, pip check should be present in the test commands
clone/recipe/meta.yaml:41: http_url: http://bottlepy.org/docs/0.12/ is not https
clone/recipe/meta.yaml:41: http_url: http://bottlepy.org is not https
===== Final Report: =====
6 Errors and 1 Warning were found

Linter check found the following problems:
Traceback (most recent call last):
  File "/opt/conda/envs/linter/lib/python3.11/site-packages/anaconda_linter/lint/__init__.py", line 834, in lint_file
    recipe = _recipe.Recipe.from_file(
             ^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/conda/envs/linter/lib/python3.11/site-packages/percy/render/recipe.py", line 243, in from_file
    raise exc from exc
  File "/opt/conda/envs/linter/lib/python3.11/site-packages/percy/render/recipe.py", line 234, in from_file
    recipe._load_from_string(text.read())
  File "/opt/conda/envs/linter/lib/python3.11/site-packages/percy/render/recipe.py", line 170, in _load_from_string
    self.render()
  File "/opt/conda/envs/linter/lib/python3.11/site-packages/percy/render/recipe.py", line 290, in render
    self.meta = renderer_utils.render(self.recipe_dir, self.dump(), self.selector_dict, self.renderer)
                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/conda/envs/linter/lib/python3.11/site-packages/percy/render/_renderer.py", line 272, in render
    raise YAMLRenderFailure(recipe_dir, line=exc.problem_mark.line) from exc
percy.render.exceptions.YAMLRenderFailure: /tmp/abs_bbxpihs3tp/clone/recipe
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/opt/conda/envs/linter/lib/python3.11/site-packages/anaconda_linter/run.py", line 159, in main
sys.exit(prime())
^^^^^^^
File "/opt/conda/envs/linter/lib/python3.11/site-packages/anaconda_linter/run.py", line 138, in prime
result = linter.lint(recipes, subdir, args.variant_config_files, args.exclusive_config_files, args.fix)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/conda/envs/linter/lib/python3.11/site-packages/anaconda_linter/lint/init.py", line 735, in lint
msgs = self.lint_file(
^^^^^^^^^^^^^^^
File "/opt/conda/envs/linter/lib/python3.11/site-packages/anaconda_linter/lint/init.py", line 851, in lint_file
recipe = _recipe.Recipe(recipe_name)
^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/conda/envs/linter/lib/python3.11/site-packages/percy/render/recipe.py", line 107, in init
self.recipe_dir = recipe_file.parent
^^^^^^^^^^^^^^^^^^
AttributeError: 'str' object has no attribute 'parent'
ERROR conda.cli.main_run:execute(124): conda run conda-lint /tmp/abs_bbxpihs3tp/clone failed. (See above for error)

Linter check found the following problems:
ERROR conda.cli.main_run:execute(124): `conda run conda-lint /tmp/abs_2370tooe0i/clone` failed. (See above for error)
The following problems have been found:
===== WARNINGS =====

clone/recipe/meta.yaml:17: avoid_noarch: noarch: python packages should be avoided

===== ERRORS =====

clone/recipe/meta.yaml:23: missing_wheel: For pypi packages, wheel should be present in the host section
clone/recipe/meta.yaml:41: http_url: http://bottlepy.org is not https
clone/recipe/meta.yaml:29: missing_pip_check: For pypi packages, pip check should be present in the test commands
clone/recipe/meta.yaml:41: http_url: http://bottlepy.org/docs/0.12/ is not https
clone/recipe/meta.yaml:41: missing_license_family: The recipe is missing the about/license_family key.
===== Final Report: =====
5 Errors and 1 Warning were found

Linter check found the following problems:
ERROR conda.cli.main_run:execute(124): `conda run conda-lint /tmp/abs_f9zr_f23a5/clone` failed. (See above for error)
The following problems have been found:
===== WARNINGS =====

clone/recipe/meta.yaml:17: avoid_noarch: noarch: python packages should be avoided

===== ERRORS =====

clone/recipe/meta.yaml:44: missing_license_family: The recipe is missing the about/license_family key.
clone/recipe/meta.yaml:44: http_url: http://bottlepy.org is not https
clone/recipe/meta.yaml:1: missing_test_requirement_pip: pip is required in the test requirements.
clone/recipe/meta.yaml:44: http_url: http://bottlepy.org/docs/0.12/ is not https
===== Final Report: =====
4 Errors and 1 Warning were found


Identifiers validation failed for dataset Computarización de material complementario en la Colección Regional de Invertebrados del Pacífico mexicano, Instituto de Ciencias del Mar y Limnología, Unidad Académica Mazatlán, UNAM

Identifier validation failed for the dataset Computarización de material complementario en la Colección Regional de Invertebrados del Pacífico mexicano, Instituto de Ciencias del Mar y Limnología, Unidad Académica Mazatlán, UNAM:

Crawler attempt: 275
Publishing organization: Comisión nacional para el conocimiento y uso de la biodiversidad
Publishing country: MEXICO
Installation: IPTCONABIO
Number of occurrences indexed for this dataset at the time of the issue: 2728
Cause: GBIF IDs hit maximum allowed - 50%, duplicates - 100%, total records count 2726, absent records count 2726
Pipelines execution steps: http://api.gbif.org/v1/pipelines/history/execution/3073483/step

Publisher email
Hello,
I am contacting you from the GBIF Secretariat about a dataset published by the Computarización de material complementario en la Colección Regional de Invertebrados del Pacífico mexicano, Instituto de Ciencias del Mar y Limnología, Unidad Académica Mazatlán, UNAM : https://doi.org/10.15468/yl5jhd.
We noticed that the occurrenceIDs were changed. We have temporarily paused the ingestions of this dataset.
As you might already know, when an occurrence record has a new occurrenceID for a given dataset, our system considers it to be a new occurrence.
This means that it will be given a new gbifid and a new occurrence URL (like this one: https://www.gbif.org/occurrence/1252968762) and the old gbifid and URL will be deprecated.
In this case, this means that the occurrence URLs would be deprecated when ingesting the newest versions of these datasets.
We would like to check with you if those changes were intentional. Do you know if this is the case?
Please let us know, thanks! We are happy to resume the dataset ingestion.
Note that some users rely on those occurrence URLs and gbifids (like https://bionomia.net for example). In an attempt to improve
the stability of the occurrence URLs and gbifids, we have implemented a warning system to detect these type of changes in datasets (see this news item).
If the data publisher can provide us with a list of old and new occurrenceIDs per record, we can avoid the identifier and URL changes. Could that be an option?
Please let us know if you have any question. Thanks!
All the best,

You can skip/fix identifier validation using the registry UI.

Identifier validation still  failing for the dataset Computarización de material complementario en la Colección Regional de Invertebrados del Pacífico mexicano, Instituto de Ciencias del Mar y Limnología, Unidad Académica Mazatlán, UNAM:

Crawler attempt: 278
Publishing organization: Comisión nacional para el conocimiento y uso de la biodiversidad
Publishing country: MEXICO
Installation: IPTCONABIO
Number of occurrences indexed for this dataset at the time of the issue: 2728
Cause: GBIF IDs hit maximum allowed - 50%, duplicates - 100%, total records count 2726, absent records count 2726
Pipelines execution steps: http://api.gbif.org/v1/pipelines/history/execution/3094477/step

Publisher email
Hello,
I am contacting you from the GBIF Secretariat about a dataset published by the Computarización de material complementario en la Colección Regional de Invertebrados del Pacífico mexicano, Instituto de Ciencias del Mar y Limnología, Unidad Académica Mazatlán, UNAM : https://doi.org/10.15468/yl5jhd.
We noticed that the occurrenceIDs were changed. We have temporarily paused the ingestions of this dataset.
As you might already know, when an occurrence record has a new occurrenceID for a given dataset, our system considers it to be a new occurrence.
This means that it will be given a new gbifid and a new occurrence URL (like this one: https://www.gbif.org/occurrence/1252968762) and the old gbifid and URL will be deprecated.
In this case, this means that the occurrence URLs would be deprecated when ingesting the newest versions of these datasets.
We would like to check with you if those changes were intentional. Do you know if this is the case?
Please let us know, thanks! We are happy to resume the dataset ingestion.
Note that some users rely on those occurrence URLs and gbifids (like https://bionomia.net for example). In an attempt to improve
the stability of the occurrence URLs and gbifids, we have implemented a warning system to detect these type of changes in datasets (see this news item).
If the data publisher can provide us with a list of old and new occurrenceIDs per record, we can avoid the identifier and URL changes. Could that be an option?
Please let us know if you have any question. Thanks!
All the best,

You can skip/fix identifier validation using the registry UI.


Repostory reload button needed?

Love the tool.  App Object Approver should be part of the core product.
Found an issue with App Object Approver... approval changes and other changes in the app (like publishing a sheet) are only refreshed from the repository upon the start of a new user session.  F5 and Shift-F5 did not help.  Only shutting down the browser and opening a new session helped.  Adding a repository reload button might be useful.
Using Sense 3.2.2.

@PAdamsQlik, there is an undocumented bug in 3.0.3 with appObjectApprover.  It will be fixed in 3.1.x hopefully released next week.

Fixed in https://github.com/eapowertools/qmcu-appobject-approver/commit/45978540ade54afa9a18eb12f35f91680da28aad

Related to #78


Create content in markdown

@eltonn,  I noticed that you have been adding the content to the site as HTML in the template.
I think this should be done as markdown files as described here: https://www.mkdocs.org/user-guide/writing-your-docs/#writing-with-markdown to facilitate maintenance.

Pinging @eltonn about this bug.

@fccoelho ,
yesterday I invested more time in this adjustment and the task does not evolve and I do not know if I will be able to evolve. So I already signal you that I won't make it.

Thank you @eltonn  for letting me know about this. I'll have someone else look at this.


[Event Request] CodeUnit 7302 - WMS Management - OnBeforeCheckWhseJnlLineBeforeItemTrackingCode

Hi, would it be possible to get an event OnBeforeCheckWhseJnlLineBeforeItemTrackingCode codeunit 7302, procedure CheckWhseJnlLine, like this :

    procedure CheckWhseJnlLine(var WhseJnlLine: Record "Warehouse Journal Line"; SourceJnl: Option " ",ItemJnl,OutputJnl,ConsumpJnl,WhseJnl; DecreaseQtyBase: Decimal; ToTransfer: Boolean)
    var
        BinContent: Record "Bin Content";
        ItemTrackingCode: Record "Item Tracking Code";
        QtyAbsBase: Decimal;
        IsHandled: Boolean;
    begin
        GetItem(WhseJnlLine."Item No.");
        IsHandled:=false;
        OnBeforeCheckWhseJnlLine(Item, WhseJnlLine, IsHandled);
        if IsHandled then
        exit;
        with WhseJnlLine do begin
            TestField("Location Code");
            GetLocation("Location Code");

            if SourceJnl = SourceJnl::WhseJnl then
                CheckAdjBinCode(WhseJnlLine);

            OnBeforeCheckWhseJnlLineBeforeItemTrackingCode(Location, Item );
            if ItemTrackingCode.Get(Item."Item Tracking Code") then begin
                if ("Serial No." <> '') and
                   ("From Bin Code" <> '') and
                   ItemTrackingCode."SN Specific Tracking" and
                   ("From Bin Code" <> Location."Adjustment Bin Code") and
                   (((Location."Adjustment Bin Code" <> '') and
                     ("Entry Type" = "Entry Type"::Movement)) or
                    (("Entry Type" <> "Entry Type"::Movement) or
                     ("Source Document" = "Source Document"::"Reclass. Jnl.")))

    [IntegrationEvent(false, false)]
    local procedure OnBeforeCheckWhseJnlLineBeforeItemTrackingCode(var Location: Record Location; var Item: Record Item)
    begin
    end;

Thanks

Thanks for reporting this. We agree, and we’ll publish a fix asap, either in an update for the current version or in the next major release. We will update this issue with information about availability. Please do not reply to this, as we do not monitor closed issues. If you have follow-up questions or requests, please create a new issue where you reference this one.