HBASE-24235 Wrap creation of NettyHBaseSaslRpcClient with ugi.doAs

When Java HBase client is run in IBM JDK, sasl connections fails
to find the Kerberos ticket. The call needs to be wrapped in
ugi.doAs

:broken_heart: -1 overall

Vote
Subsystem
Runtime
Comment

+0 :ok:
reexec
0m  0s
Docker mode activated.

-1 :x:
docker
0m 14s
Docker failed to build yetus/hbase:6d4e15a7ac.

_ Prechecks _

+1 :green_heart:
dupname
0m  0s
No case conflicting files found.

+1 :green_heart:
hbaseanti
0m  0s
Patch does not have any anti-patterns.

+1 :green_heart:
@author
0m  0s
The patch does not contain any @author tags.

_ master Compile Tests _

+1 :green_heart:
mvninstall
4m  0s
master passed

+1 :green_heart:
checkstyle
0m 30s
master passed

+1 :green_heart:
spotbugs
1m  3s
master passed

_ Patch Compile Tests _

+1 :green_heart:
mvninstall
3m 39s
the patch passed

-0 :warning:
checkstyle
0m 28s
hbase-client: The patch generated 1 new + 6 unchanged - 0 fixed = 7 total (was 6)

+1 :green_heart:
whitespace
0m  0s
The patch has no whitespace issues.

+1 :green_heart:
hadoopcheck
12m  0s
Patch does not cause any errors with Hadoop 3.1.2 3.2.1.

+1 :green_heart:
spotbugs
1m  9s
the patch passed

_ Other Tests _

+1 :green_heart:
asflicense
0m 12s
The patch does not generate ASF License warnings.

31m 46s

Subsystem
Report/Notes

Docker
Client=19.03.8 Server=19.03.8 base: https://builds.apache.org/job/HBase-PreCommit-GitHub-PR/job/PR-1565/1/artifact/yetus-general-check/output/Dockerfile

GITHUB PR
https://github.com/apache/hbase/pull/1565

Optional Tests
dupname asflicense spotbugs hadoopcheck hbaseanti checkstyle

uname
Linux e0321f44108b 4.15.0-74-generic #84-Ubuntu SMP Thu Dec 19 08:06:28 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux

Build tool
maven

Personality
dev-support/hbase-personality.sh

git revision
master / 4ed15e51d9

checkstyle
https://builds.apache.org/job/HBase-PreCommit-GitHub-PR/job/PR-1565/1/artifact/yetus-general-check/output/diff-checkstyle-hbase-client.txt

Max. process+thread count
84 (vs. ulimit of 12500)

modules
C: hbase-client U: hbase-client

Console output
https://builds.apache.org/job/HBase-PreCommit-GitHub-PR/job/PR-1565/1/console

versions
git=2.17.1 maven=(cecedd343002696d0abb50b32b541b8a6ba2883f) spotbugs=3.1.12

Powered by
Apache Yetus 0.11.1 https://yetus.apache.org

This message was automatically generated.

I am -1 until an actual explanation can be given as to why this change is required for IBM which extends beyond "Hive did it this way".

So I took the Sasl sample code from here https://docs.oracle.com/javase/8/docs/technotes/guides/security/jgss/lab/src/SaslTestClient.java and ran with both IBM and Oracle JDK. It ran successfully. Notice that Sasl.createSaslClient is called within Jaas.loginAndAction which wraps everything in Subject.doAs. Next I modified the class as below where I moved Sasl.createSaslClient outside of Jaas.loginAndAction. The code ran successfully in Oracle JDK but failed in IBM JDK. The stack has some commonality with stacktrace I have in jira.
Is this explanation good enough to change your -1 to +1?
Stack trace:
Connected to address nightly6x-1.nightly6x.root.hwx.site/<IP_ADDRESS>
Got connection from client /<IP_ADDRESS>
IBMJGSSProvider Build-Level: -20200127
[JGSS_DBG_PROV]  main IBMJGSSProvider (version 8.0) loaded
[JGSS_DBG_PROV]  main Number of system providers=9
[JGSS_DBG_PROV]  main getMechOidFromProperty: mech oid string = <IP_ADDRESS>.5.5.2
[JGSS_DBG_PROV]  main getMechOidFromProperty: mech oid string = 1.2.840.1135<IP_ADDRESS>
[JGSS_DBG_PROV]  main getMechOidFromProperty: mech oid string = <IP_ADDRESS>.5.5.2
[JGSS_DBG_PROV]  main 3 system providers found/added
[JGSS_DBG_PROV]  main getMechOidFromProperty: mech oid string = <IP_ADDRESS>.5.5.2
[JGSS_DBG_PROV]  main getMechOidFromProperty: mech oid string = 1.2.840.1135<IP_ADDRESS>
[JGSS_DBG_PROV]  main getMechs: Mechanism(s) supported by provider IBMJGSSProvider
[JGSS_DBG_PROV]  main   <IP_ADDRESS>.5.5.2
[JGSS_DBG_PROV]  main getMechOidFromProperty: mech oid string = <IP_ADDRESS>.5.5.2
[JGSS_DBG_PROV]  main getMechOidFromProperty: mech oid string = 1.2.840.1135<IP_ADDRESS>
[JGSS_DBG_PROV]  main getMechs: Mechanism(s) supported by provider IBMJGSSProvider
[JGSS_DBG_PROV]  main   1.2.840.1135<IP_ADDRESS>
[JGSS_DBG_PROV]  main getMechOidFromProperty: mech oid string = <IP_ADDRESS>.5.5.2
[JGSS_DBG_PROV]  main getMechs: Mechanism(s) supported by provider IBMSPNEGO
[JGSS_DBG_PROV]  main   <IP_ADDRESS>.5.5.2
[JGSS_DBG_PROV]  main getMechs: 2 unique mechanism(s) found
[JGSS_DBG_PROV]  main   [0]: <IP_ADDRESS>.5.5.2
[JGSS_DBG_PROV]  main   [1]: 1.2.840.1135<IP_ADDRESS>
[JGSS_DBG_CRED]  main MN not found; creating one
[JGSS_DBG_PROV]  main Provider Entry: provider: IBMJGSSProvider, mechanism: <IP_ADDRESS>.5.5.2 get Factory for mech: 1.2.840.1135<IP_ADDRESS> GSSCaller:
[JGSS_DBG_PROV]  main Provider Entry: provider: IBMJGSSProvider, mechanism: 1.2.840.1135<IP_ADDRESS> get Factory for mech: 1.2.840.1135<IP_ADDRESS> GSSCaller:
[JGSS_DBG_PROV]  main Created new (empty) factory list (size=1) for provider IBMJGSSProvider version 8.0
[JGSS_DBG_PROV]  main Loading factory
[JGSS_DBG_PROV]  main Factory class name for provider IBMJGSSProvider version 8.0 is com.ibm.security.jgss.mech.krb5.Krb5MechFactory
[JGSS_DBG_PROV]  main IBMJGSSProvider (version 8.0) loaded
[JGSS_DBG_PROV]  main Prior to load
[JGSS_DBG_PROV]  main Done to load
[JGSS_DBG_PROV]  main Loaded factory for provider IBMJGSSProvider version 8.0
[JGSS_DBG_PROV]  main Loaded factory ok
[JGSS_DBG_PROV]  main getFactory: index = 1 found factory caller = GSSCaller{UNKNOWN}
[JGSS_DBG_CRED]  main Before Cannonicalizing hostbased service name<EMAIL_ADDRESS>[KRB_DBG_CFG] Config:main:   readKrb5Properties: defaultRealm = null
[KRB_DBG_CFG] Config:main:   readKrb5Properties: defaultKDC   = null
[KRB_DBG_CFG] Config:main:   Java config file: /etc/krb5.conf
[KRB_DBG_CFG] Config:main:   loadConfigFile: configFile = [logging = {, default = FILE:/var/log/krb5libs.log, kdc = FILE:/var/log/krb5kdc.log, admin_server = FILE:/var/log/kadmind.log, }, libdefaults = {, renew_lifetime = 90m, default_realm = ROOT.HWX.SITE, dns_lookup_realm = false, dns_lookup_kdc = false, ticket_lifetime = 25m, forwardable = yes, allow_weak_crypto = true, }, realms = {, ROOT.HWX.SITE = {, kdc = nightly6x-1.nightly6x.root.hwx.site:88, admin_server = nightly6x-1.nightly6x.root.hwx.site:749, default_domain = nightly6x.root.hwx.site, }, }, domain_realm = {, .nightly6x.root.hwx.site = ROOT.HWX.SITE, nightly6x.root.hwx.site = ROOT.HWX.SITE, }]
[KRB_DBG_CFG] Config:main:   Loaded from Java config
[KRB_DBG_CFG] Config:main:   Config: stanzaTable = {libdefaults={allow_weak_crypto=[true], ticket_lifetime=[25m], default_realm=[ROOT.HWX.SITE], forwardable=[yes], dns_lookup_kdc=[false], renew_lifetime=[90m], dns_lookup_realm=[false]}, domain_realm={.nightly6x.root.hwx.site=[ROOT.HWX.SITE], nightly6x.root.hwx.site=[ROOT.HWX.SITE]}, logging={kdc=[FILE:/var/log/krb5kdc.log], default=[FILE:/var/log/krb5libs.log], admin_server=[FILE:/var/log/kadmind.log]}, realms={ROOT.HWX.SITE={default_domain=[nightly6x.root.hwx.site], kdc=[nightly6x-1.nightly6x.root.hwx.site:88], admin_server=[nightly6x-1.nightly6x.root.hwx.site:749]}}}
[KRB_DBG_CFG] Config:main:   get: section     = libdefaults
[KRB_DBG_CFG] Config:main:   get: name        = dns_lookup_realm
[KRB_DBG_CFG] Config:main:   get: result      = false
[JGSS_DBG_CRED]  main Cannonicalizing hostbased service name<EMAIL_ADDRESS>[JGSS_DBG_CRED]  main Hostname nightly6x-1.nightly6x.root.hwx.site
[KRB_DBG_CFG] Config:main:   get: section     = domain_realm
[KRB_DBG_CFG] Config:main:   get: name        = .nightly6x.root.hwx.site
[KRB_DBG_CFG] Config:main:   get: result      = ROOT.HWX.SITE
[KRB_DBG_CFG] Config:main:   get: section     = domain_realm
[KRB_DBG_CFG] Config:main:   get: name        = .nightly6x.root.hwx.site
[KRB_DBG_CFG] Config:main:   get: result      = ROOT.HWX.SITE
[JGSS_DBG_CRED]  main Name cannonicalization complete, resulting name<EMAIL_ADDRESS>[JGSS_DBG_CTX]  main Creating context, initiator = yes, input cred = null
[JGSS_DBG_CTX]  main Creating default initiator creds
[JGSS_DBG_CRED]  main Creating mech cred for null, mech 1.2.840.1135<IP_ADDRESS>, usage initiate only
[JGSS_DBG_PROV]  main Provider Entry: provider: IBMJGSSProvider, mechanism: <IP_ADDRESS>.5.5.2 get Factory for mech: 1.2.840.1135<IP_ADDRESS> GSSCaller:
[JGSS_DBG_PROV]  main Provider Entry: provider: IBMJGSSProvider, mechanism: 1.2.840.1135<IP_ADDRESS> get Factory for mech: 1.2.840.1135<IP_ADDRESS> GSSCaller:
[JGSS_DBG_PROV]  main getFactory: index = 1 found factory caller = GSSCaller{UNKNOWN}
[JGSS_DBG_CRED]  main Search Subject for Kerberos V5 INIT cred (<<DEF>>, com.ibm.security.jgss.mech.krb5.s)
[JGSS_DBG_CRED]  main No Subject
[JGSS_DBG_CRED]  main Creating credentials for name null, servName null, usage 1
[JGSS_DBG_CRED]  main Trying to get credentials for null
[JGSS_DBG_CRED]  main usage: initiator only, check subject, useAllCred : false
[JGSS_DBG_CRED]  main Obtaining Subject creds for default principal
[JGSS_DBG_CRED]  main SubjectCredFinder: client=null, server=null
Exception in thread "main" javax.security.sasl.SaslException: Failure to initialize security context [Caused by org.ietf.jgss.GSSException, major code: 13, minor code: 0
        major string: Invalid credentials
        minor string: SubjectCredFinder: no JAAS Subject]
        at com.ibm.security.sasl.gsskerb.GssKrb5Client.<init>(GssKrb5Client.java:161)
        at com.ibm.security.sasl.gsskerb.FactoryImpl.createSaslClient(FactoryImpl.java:79)
        at javax.security.sasl.Sasl.createSaslClient(Sasl.java:400)
        at SaslTestClient2.main(SaslTestClient2.java:108)
Caused by: org.ietf.jgss.GSSException, major code: 13, minor code: 0
        major string: Invalid credentials
        minor string: SubjectCredFinder: no JAAS Subject
        at com.ibm.security.jgss.i18n.I18NException.throwGSSException(Unknown Source)
        at com.ibm.security.jgss.mech.krb5.v.run(Unknown Source)
        at java.security.AccessController.doPrivileged(AccessController.java:734)
        at com.ibm.security.jgss.mech.krb5.s.c(Unknown Source)
        at com.ibm.security.jgss.mech.krb5.s.a(Unknown Source)
        at com.ibm.security.jgss.mech.krb5.s.a(Unknown Source)
        at com.ibm.security.jgss.mech.krb5.s.<init>(Unknown Source)
        at com.ibm.security.jgss.mech.krb5.Krb5MechFactory.getCredentialElement(Unknown Source)
        at com.ibm.security.jgss.GSSManagerImpl.createMechCredential(Unknown Source)
        at com.ibm.security.jgss.GSSCredentialImpl.add(Unknown Source)
        at com.ibm.security.jgss.GSSCredentialImpl.<init>(Unknown Source)
        at com.ibm.security.jgss.GSSManagerImpl.createCredential(Unknown Source)
        at com.ibm.security.jgss.GSSContextImpl.a(Unknown Source)
        at com.ibm.security.jgss.GSSContextImpl.<init>(Unknown Source)
        at com.ibm.security.jgss.GSSManagerImpl.createContext(Unknown Source)
        at com.ibm.security.sasl.gsskerb.GssKrb5Client.<init>(GssKrb5Client.java:135)
        ... 3 more

Modified code:
import javax.security.sasl.*;
import javax.security.auth.callback.*;
import java.security.*;
import javax.security.auth.Subject;
import javax.security.auth.login.*;
import com.sun.security.auth.callback.*;
import java.util.HashMap;

public class SaslTestClient2 {
    private static final String MECH = "GSSAPI"; // SASL name for GSS-API/Kerberos
    private static final int PORT = 4568;

    private static final byte[] EMPTY = new byte[0];

    public static void main(String[] args) throws Exception {
        // Obtain the command-line arguments and parse the server's principal

        if (args.length < 2) {
            System.err.println(
                "Usage: java <options> SaslTestClient2 <service> <serverName>");
            System.exit(-1);
        }

       // Create application-level connection
       AppConnection conn = new AppConnection(args[1], PORT);

       HashMap<String,Object> props = new HashMap<String,Object>();
       // Request confidentiality
       props.put(Sasl.QOP, "auth-conf");

        CallbackHandler cbh = null; // Don't need handler for GSSAPI
       // Create SaslClient to perform authentication
       SaslClient clnt = Sasl.createSaslClient(
           new String[]{MECH}, null, args[0], args[1], props, cbh);

       if (clnt == null) {
           throw new Exception(
               "Unable to find client implementation for " + MECH);
       }

        PrivilegedExceptionAction action =
            new SaslClientAction(conn, clnt);

        Jaas.loginAndAction("client", action);
    }

    static class SaslClientAction implements PrivilegedExceptionAction {
        private AppConnection conn;
        private SaslClient clnt;

        SaslClientAction(AppConnection conn, SaslClient clnt) {
            this.conn = conn;
            this.clnt = clnt;
        }

        public Object run() throws Exception {
            byte[] response;
            byte[] challenge;

            // Get initial response for authentication
            response = clnt.hasInitialResponse() ?
                clnt.evaluateChallenge(EMPTY) : EMPTY;

            // Send initial response to server
            AppConnection.AppReply reply =
                conn.send(AppConnection.AUTH_CMD, response);

            // Repeat until authentication terminates
            while (!clnt.isComplete() &&
                (reply.getStatus() == AppConnection.AUTH_INPROGRESS ||
                 reply.getStatus() == AppConnection.SUCCESS)) {

                // Evaluate challenge to generate response
                challenge = reply.getBytes();
                response = clnt.evaluateChallenge(challenge);

                if (reply.getStatus() == AppConnection.SUCCESS) {
                    if (response != null) {
                        throw new Exception("Protocol error interacting with SASL");
                    }
                    break;
                }

                // Send response to server and read server's next challenge
                reply = conn.send(AppConnection.AUTH_CMD, response);
            }

            // Check status of authentication
            if (clnt.isComplete() && reply.getStatus() == AppConnection.SUCCESS) {
                System.out.println("Client authenticated.");
            } else {
                throw new Exception("Authentication failed: " +
                    " connection status? " + reply.getStatus());
            }

            String qop = (String) clnt.getNegotiatedProperty(Sasl.QOP);
            System.out.println("Negotiated QOP: " + qop);

            // Try out security layer
            boolean sl = (qop.equals("auth-conf") || qop.equals("auth-int"));

            byte[] msg = "Hello There!".getBytes("UTF-8");
            System.out.println("Sending: " + new String(msg, "UTF-8"));

            byte[] encrypted = (sl ? clnt.wrap(msg, 0, msg.length) : msg);

            reply = conn.send(AppConnection.DATA_CMD, encrypted);

            if (reply.getStatus() == AppConnection.SUCCESS) {
                byte[] encryptedReply = reply.getBytes();

                byte[] clearReply = (sl ? clnt.unwrap(encryptedReply,
                    0, encryptedReply.length) : encryptedReply);

                System.out.println("Received: " + new String(clearReply, "UTF-8"));
            } else {
                System.out.println("Failed exchange: " + reply.getStatus());
            }

            conn.close();

            return null;
        }
    }
}

Another reference here https://github.com/apache/hadoop/blob/trunk/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/ipc/Client.java#L817-L824 that shows that creating SaslClient should be wrapped in doAs.

HBase already does doAs calls. I was trying to encourage you to read the code to find this yourself.
https://github.com/apache/hbase/blob/e96ad0ac1e69dd2a273365a7ae089a4a39fa0e0c/hbase-client/src/main/java/org/apache/hadoop/hbase/security/NettyHBaseSaslRpcClientHandler.java
The question I asked is why IBM Java is ineffective, because we already know that HBase is doing the correct thing given automated tests against OpenJDK (which is what Apache HBase expressly tests against).

@joshelser thanks for looking into this.
The code path for creating the SaslClient (NettyHBaseSaslRpcClient) is not wrapped in the doAs. You can see from the stack trace that is given in the initial jira. In the Class you mentioned, doAs is wrapped for saslRpcClient.getInitialResponse() and saslRpcClient.evaluateChallenge(challenge). I have shown from the example/test code, while Oracle/Open JDK does not require the creation of SaslClient to be wrapped in doAs, IBM JDK requires it. And this is all this PR does, wrapping the creation of SaslClient creation in doAs.
If this is still not clear or if there is a point you are making that I'm not following, please let me know.

I have shown from the example/test code, while Oracle/Open JDK does not require the creation of SaslClient to be wrapped in doAs, IBM JDK requires it

I'm trying to understand what the fundamental difference is here between other JVMs and IBM Java. You are providing anecdotal evidence, not something which gives me any confidence in your solution.
For example: why is IBM java different? Is this a known or conscious decision by IBM Java to be different? What is the creation of the SaslClient object doing that requires a privileged execution context? Why doesn't Oracle/Open JDK require this?
Simply showing that one test passes in isolation does not give me any confidence in this solution you've shown here as being correct.

@joshelser Thanks for your continued indulgence in this.
So far from IBM I have managed to find this example

The mechanism expects the calling threads Subject to contain the clients Kerberos credentials or that the credentials could be obtained by implicitly logging in to Kerberos. To obtain the clients Kerberos credentials, use the Java™ Authentication and Authorization Service (JAAS) to log in using the Kerberos login module. See the Java GSS-API and JAAS Tutorials for Use with Kerberos for details and examples. After using JAAS authentication to obtain the Kerberos credentials, you put the code that uses the SASL GSSAPI mechanism within doAs or doAsPrivileged.

The example that follows shows the Sasl.createSaslClient wrapped in doAs. You can find it all here:
https://www.ibm.com/support/knowledgecenter/SSYKE2_8.0.0/com.ibm.java.security.component.80.doc/security-component/saslDocs/clientmechanisms.html?view=embed#clientmechanisms__gssapi
The reason why OpenJDK does not need this for creating SaslClient is because it does not call secCtx.initSecContext() in the constructor of class com.sun.security.sasl.gsskerb.GssKrb5Client which is what gets called when Sasl.createSaslClient gets called with GSSAPI mech. Since OpenJDK uses SunSASL and IBM uses IBMSASL, I would imagine they are both different implementations and IBM SASL is possibly calling secCtx.initSecContext(). The stack trace show it is calling com.ibm.security.jgss.GSSManagerImpl.createContext which I would assume is something similar to  secCtx.initSecContext()
In the absence of IBM JDK source code or proper documentation that shows what the differences are between JDKs, I can only show you by experimentation or by finding precedences. So far I have:

Used  a bare bone standalone SaslClient code and demonstrated that while the code runs in Oracle/Open JDK it fails in IBM JDK when the SaslClient creation is not wrapped in doAs. I have also shown that wrapping SaslClient creation in doAs works for all 3 JDKs for this example.
By way of precedence I have shown that the SaslClient creation code in HDFS client is wrapped in doAs.
By way of precedence I have shown that the SaslClient creation code in Hive jdbc client is wrapped in doAs.
The application of this patch itself fixes the issue in HBase client for IBM JDK and does not break anything for other JDKs.

I hope I have answered the questions to your satisfaction.

The reason why OpenJDK does not need this for creating SaslClient is because it does not call secCtx.initSecContext() in the constructor of class com.sun.security.sasl.gsskerb.GssKrb5Client which is what gets called when Sasl.createSaslClient gets called with GSSAPI mech. Since OpenJDK uses SunSASL and IBM uses IBMSASL, I would imagine they are both different implementations and IBM SASL is possibly calling secCtx.initSecContext(). The stack trace show it is calling com.ibm.security.jgss.GSSManagerImpl.createContext which I would assume is something similar to secCtx.initSecContext()

I think Josh is exactly asking why OpenJDK and IBMJDK use different implementations here. It's 'why', not 'how'...
Thanks.

Thanks @Apache9 for looking into this PR

I think Josh is exactly asking why OpenJDK and IBMJDK use different implementations here. It's 'why', not 'how'...

I'm not from IBM and I don't know the historical reasons why IBMJDK has it own SASL implementation. I would speculate that IBMSASL existed before OpenJDK ever existed. And I would speculate that IBM continues to use IBMSASL and not OpenJDK SASL(SunSASL) because of backward compatibility and licensing issues. INAL, IBM JDK is closed source product and I presume, using components from Copyleft products could cause licensing issues.

This is essentially what we're trying to get to the bottom of. We are not in the habit of making changes because of speculation or "seems to be".
The more leg work you can do to explain why IBM Java is the way it is will give some clout to your suggested change. Right now, you are pushing all of the burden onto someone from HBase to validate your speculations.

Right now, you are pushing all of the burden onto someone from HBase to validate your speculations.

I'm not pushing anything on anyone to validate my speculations. I would like to understand what would you do technically different if any of the things I speculated was true or false? Other than hinting to go make IBM JDK work like OpenJDK what would you do to fix the problem? How can I help in this regard other than bringing a IBM JDK engineer to answer your questions? What is your concern with the proposed change?

Closing this PR as there does not seem to be interest in getting this implemented and I will not be available to work on this anymore.


datadog-agent hostname does not get the hostname of the current status.

Output of the info page (if this is a bug)
root@396533a8d6f2:/# datadog-agent hostname
Error: ValidHostname: hogefuga_hoge is not RFC1123 compliant
396533a8d6f2
root@396533a8d6f2:/# datadog-agent status
Getting the status from the agent.

===============
Agent (v7.21.0)
===============

  Status date: 2020-07-28 04:42:52.543859 UTC
  Agent start: 2020-07-22 06:20:30.668805 UTC
  Pid: 3630
  Go Version: go1.13.11
  Python Version: 3.8.1
  Build arch: amd64
  Agent flavor: agent
  Check Runners: 4
  Log Level: info

  Paths
  =====
    Config File: /etc/datadog-agent/datadog.yaml
    conf.d: /etc/datadog-agent/conf.d
    checks.d: /etc/datadog-agent/checks.d

  Clocks
  ======
    NTP offset: -36.289ms
    System UTC time: 2020-07-28 04:42:52.543859 UTC

  Host Info
  =========
    bootTime: 2020-07-17 11:13:20.000000 UTC
    kernelArch: x86_64
    kernelVersion: 4.19.76-linuxkit
    os: linux
    platform: ubuntu
    platformFamily: debian
    platformVersion: 20.04
    procs: 2
    uptime: 115h7m15s
    virtualizationRole: guest
    virtualizationSystem: docker

  Hostnames
  =========
    hostname: 396533a8d6f2
    socket-fqdn: 396533a8d6f2
    socket-hostname: 396533a8d6f2
    hostname provider: os
    unused hostname providers:
      aws: not retrieving hostname from AWS: the host is not an ECS instance and other providers already retrieve non-default hostnames
      configuration/environment: hostname is empty
      gce: unable to retrieve hostname from GCE: Get http://<IP_ADDRESS>/computeMetadata/v1/instance/hostname: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)

  Metadata
  ========
    hostname_source: os

=========
Collector
=========

  Running Checks
  ==============

    cpu
    ---
      Instance ID: cpu [OK]
      Configuration Source: file:/etc/datadog-agent/conf.d/cpu.d/conf.yaml.default
      Total Runs: 4,970
      Metric Samples: Last Run: 6, Total: 29,814
      Events: Last Run: 0, Total: 0
      Service Checks: Last Run: 0, Total: 0
      Average Execution Time : 0s
      Last Execution Date : 2020-07-28 04:42:38.000000 UTC
      Last Successful Execution Date : 2020-07-28 04:42:38.000000 UTC

    disk (2.10.1)
    -------------
      Instance ID: disk:e5dffb8bef24336f [OK]
      Configuration Source: file:/etc/datadog-agent/conf.d/disk.d/conf.yaml.default
      Total Runs: 4,970
      Metric Samples: Last Run: 194, Total: 964,180
      Events: Last Run: 0, Total: 0
      Service Checks: Last Run: 0, Total: 0
      Average Execution Time : 42ms
      Last Execution Date : 2020-07-28 04:42:45.000000 UTC
      Last Successful Execution Date : 2020-07-28 04:42:45.000000 UTC

    file_handle
    -----------
      Instance ID: file_handle [OK]
      Configuration Source: file:/etc/datadog-agent/conf.d/file_handle.d/conf.yaml.default
      Total Runs: 4,970
      Metric Samples: Last Run: 5, Total: 24,850
      Events: Last Run: 0, Total: 0
      Service Checks: Last Run: 0, Total: 0
      Average Execution Time : 0s
      Last Execution Date : 2020-07-28 04:42:52.000000 UTC
      Last Successful Execution Date : 2020-07-28 04:42:52.000000 UTC

    io
    --
      Instance ID: io [OK]
      Configuration Source: file:/etc/datadog-agent/conf.d/io.d/conf.yaml.default
      Total Runs: 4,970
      Metric Samples: Last Run: 65, Total: 323,005
      Events: Last Run: 0, Total: 0
      Service Checks: Last Run: 0, Total: 0
      Average Execution Time : 3ms
      Last Execution Date : 2020-07-28 04:42:44.000000 UTC
      Last Successful Execution Date : 2020-07-28 04:42:44.000000 UTC

    load
    ----
      Instance ID: load [OK]
      Configuration Source: file:/etc/datadog-agent/conf.d/load.d/conf.yaml.default
      Total Runs: 4,970
      Metric Samples: Last Run: 6, Total: 29,820
      Events: Last Run: 0, Total: 0
      Service Checks: Last Run: 0, Total: 0
      Average Execution Time : 0s
      Last Execution Date : 2020-07-28 04:42:51.000000 UTC
      Last Successful Execution Date : 2020-07-28 04:42:51.000000 UTC

    memory
    ------
      Instance ID: memory [OK]
      Configuration Source: file:/etc/datadog-agent/conf.d/memory.d/conf.yaml.default
      Total Runs: 4,970
      Metric Samples: Last Run: 17, Total: 84,490
      Events: Last Run: 0, Total: 0
      Service Checks: Last Run: 0, Total: 0
      Average Execution Time : 1ms
      Last Execution Date : 2020-07-28 04:42:43.000000 UTC
      Last Successful Execution Date : 2020-07-28 04:42:43.000000 UTC

    network (1.17.0)
    ----------------
      Instance ID: network:5c571333f400457d [OK]
      Configuration Source: file:/etc/datadog-agent/conf.d/network.d/conf.yaml.default
      Total Runs: 4,970
      Metric Samples: Last Run: 31, Total: 154,070
      Events: Last Run: 0, Total: 0
      Service Checks: Last Run: 0, Total: 0
      Average Execution Time : 6ms
      Last Execution Date : 2020-07-28 04:42:50.000000 UTC
      Last Successful Execution Date : 2020-07-28 04:42:50.000000 UTC

    ntp
    ---
      Instance ID: ntp:d884b5186b651429 [OK]
      Configuration Source: file:/etc/datadog-agent/conf.d/ntp.d/conf.yaml.default
      Total Runs: 83
      Metric Samples: Last Run: 1, Total: 83
      Events: Last Run: 0, Total: 0
      Service Checks: Last Run: 1, Total: 83
      Average Execution Time : 707ms
      Last Execution Date : 2020-07-28 04:30:24.000000 UTC
      Last Successful Execution Date : 2020-07-28 04:30:24.000000 UTC

    uptime
    ------
      Instance ID: uptime [OK]
      Configuration Source: file:/etc/datadog-agent/conf.d/uptime.d/conf.yaml.default
      Total Runs: 4,970
      Metric Samples: Last Run: 1, Total: 4,970
      Events: Last Run: 0, Total: 0
      Service Checks: Last Run: 0, Total: 0
      Average Execution Time : 0s
      Last Execution Date : 2020-07-28 04:42:42.000000 UTC
      Last Successful Execution Date : 2020-07-28 04:42:42.000000 UTC

========
JMXFetch
========

  Initialized checks
  ==================
    no checks

  Failed checks
  =============
    no checks

=========
Forwarder
=========

  Transactions
  ============
    CheckRunsV1: 4,975
    Connections: 0
    Containers: 0
    Dropped: 10,453
    DroppedOnInput: 0
    Events: 0
    HostMetadata: 0
    IntakeV1: 541
    Metadata: 0
    Pods: 0
    Processes: 0
    RTContainers: 0
    RTProcesses: 0
    Requeued: 341,389
    Retried: 26,780
    RetryQueueSize: 4
    Series: 0
    ServiceChecks: 0
    SketchSeries: 0
    Success: 0
    TimeseriesV1: 4,975

  Transaction Errors
  ==================
    Total number: 2503
    Errors By Type:
      ConnectionErrors: 151
      DNSErrors: 9

  API Keys status
  ===============
    API key ending with hoge: API Key invalid

==========
Endpoints
==========
  https://app.datadoghq.com - API Key ending with:
      - hoge

==========
Logs Agent
==========

  Logs Agent is not running

=========
APM Agent
=========
  Status: Not running or unreachable on localhost:8126.
  Error: Get http://localhost:8126/debug/vars: dial tcp <IP_ADDRESS>:8126: connect: connection refused

=========
Aggregator
=========
  Checks Metric Sample: 1,694,967
  Dogstatsd Metric Sample: 1
  Event: 1
  Events Flushed: 1
  Number Of Flushes: 4,975
  Series Flushed: 1,271,985
  Service Check: 39,926
  Service Checks Flushed: 44,894

=========
DogStatsD
=========
  Event Packets: 0
  Event Parse Errors: 0
  Metric Packets: 0
  Metric Parse Errors: 0
  Service Check Packets: 0
  Service Check Parse Errors: 0
  Udp Bytes: 0
  Udp Packet Reading Errors: 0
  Udp Packets: 1
  Uds Bytes: 0
  Uds Origin Detection Errors: 0
  Uds Packet Reading Errors: 0
  Uds Packets: 0

root@396533a8d6f2:/# datadog-agent hostname
Error: ValidHostname: hogefuga_hoge is not RFC1123 compliant
396533a8d6f2
root@396533a8d6f2:/# sed -ie 's/hogefuga_hoge/hogefuga.hoge/' /etc/datadog-agent/datadog.yaml
root@396533a8d6f2:/# cat /etc/datadog-agent/datadog.yaml|grep hostname
hostname: hogefuga.hoge
root@396533a8d6f2:/# datadog-agent hostname
hogefuga.hoge
root@396533a8d6f2:/# datadog-agent status
Getting the status from the agent.

===============
Agent (v7.21.0)
===============

  Status date: 2020-07-28 04:44:03.598117 UTC
  Agent start: 2020-07-22 06:20:30.668805 UTC
  Pid: 3630
  Go Version: go1.13.11
  Python Version: 3.8.1
  Build arch: amd64
  Agent flavor: agent
  Check Runners: 4
  Log Level: info

  Paths
  =====
    Config File: /etc/datadog-agent/datadog.yaml
    conf.d: /etc/datadog-agent/conf.d
    checks.d: /etc/datadog-agent/checks.d

  Clocks
  ======
    NTP offset: -36.289ms
    System UTC time: 2020-07-28 04:44:03.598117 UTC

  Host Info
  =========
    bootTime: 2020-07-17 11:13:20.000000 UTC
    kernelArch: x86_64
    kernelVersion: 4.19.76-linuxkit
    os: linux
    platform: ubuntu
    platformFamily: debian
    platformVersion: 20.04
    procs: 2
    uptime: 115h7m15s
    virtualizationRole: guest
    virtualizationSystem: docker

  Hostnames
  =========
    hostname: 396533a8d6f2
    socket-fqdn: 396533a8d6f2
    socket-hostname: 396533a8d6f2
    hostname provider: os
    unused hostname providers:
      aws: not retrieving hostname from AWS: the host is not an ECS instance and other providers already retrieve non-default hostnames
      configuration/environment: hostname is empty
      gce: unable to retrieve hostname from GCE: Get http://<IP_ADDRESS>/computeMetadata/v1/instance/hostname: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)

  Metadata
  ========
    hostname_source: os

=========
Collector
=========

  Running Checks
  ==============

    cpu
    ---
      Instance ID: cpu [OK]
      Configuration Source: file:/etc/datadog-agent/conf.d/cpu.d/conf.yaml.default
      Total Runs: 4,975
      Metric Samples: Last Run: 6, Total: 29,844
      Events: Last Run: 0, Total: 0
      Service Checks: Last Run: 0, Total: 0
      Average Execution Time : 0s
      Last Execution Date : 2020-07-28 04:43:53.000000 UTC
      Last Successful Execution Date : 2020-07-28 04:43:53.000000 UTC

    disk (2.10.1)
    -------------
      Instance ID: disk:e5dffb8bef24336f [OK]
      Configuration Source: file:/etc/datadog-agent/conf.d/disk.d/conf.yaml.default
      Total Runs: 4,975
      Metric Samples: Last Run: 194, Total: 965,150
      Events: Last Run: 0, Total: 0
      Service Checks: Last Run: 0, Total: 0
      Average Execution Time : 44ms
      Last Execution Date : 2020-07-28 04:44:00.000000 UTC
      Last Successful Execution Date : 2020-07-28 04:44:00.000000 UTC

    file_handle
    -----------
      Instance ID: file_handle [OK]
      Configuration Source: file:/etc/datadog-agent/conf.d/file_handle.d/conf.yaml.default
      Total Runs: 4,974
      Metric Samples: Last Run: 5, Total: 24,870
      Events: Last Run: 0, Total: 0
      Service Checks: Last Run: 0, Total: 0
      Average Execution Time : 0s
      Last Execution Date : 2020-07-28 04:43:52.000000 UTC
      Last Successful Execution Date : 2020-07-28 04:43:52.000000 UTC

    io
    --
      Instance ID: io [OK]
      Configuration Source: file:/etc/datadog-agent/conf.d/io.d/conf.yaml.default
      Total Runs: 4,975
      Metric Samples: Last Run: 65, Total: 323,330
      Events: Last Run: 0, Total: 0
      Service Checks: Last Run: 0, Total: 0
      Average Execution Time : 3ms
      Last Execution Date : 2020-07-28 04:43:59.000000 UTC
      Last Successful Execution Date : 2020-07-28 04:43:59.000000 UTC

    load
    ----
      Instance ID: load [OK]
      Configuration Source: file:/etc/datadog-agent/conf.d/load.d/conf.yaml.default
      Total Runs: 4,974
      Metric Samples: Last Run: 6, Total: 29,844
      Events: Last Run: 0, Total: 0
      Service Checks: Last Run: 0, Total: 0
      Average Execution Time : 0s
      Last Execution Date : 2020-07-28 04:43:51.000000 UTC
      Last Successful Execution Date : 2020-07-28 04:43:51.000000 UTC

    memory
    ------
      Instance ID: memory [OK]
      Configuration Source: file:/etc/datadog-agent/conf.d/memory.d/conf.yaml.default
      Total Runs: 4,975
      Metric Samples: Last Run: 17, Total: 84,575
      Events: Last Run: 0, Total: 0
      Service Checks: Last Run: 0, Total: 0
      Average Execution Time : 1ms
      Last Execution Date : 2020-07-28 04:43:58.000000 UTC
      Last Successful Execution Date : 2020-07-28 04:43:58.000000 UTC

    network (1.17.0)
    ----------------
      Instance ID: network:5c571333f400457d [OK]
      Configuration Source: file:/etc/datadog-agent/conf.d/network.d/conf.yaml.default
      Total Runs: 4,974
      Metric Samples: Last Run: 31, Total: 154,194
      Events: Last Run: 0, Total: 0
      Service Checks: Last Run: 0, Total: 0
      Average Execution Time : 6ms
      Last Execution Date : 2020-07-28 04:43:50.000000 UTC
      Last Successful Execution Date : 2020-07-28 04:43:50.000000 UTC

    ntp
    ---
      Instance ID: ntp:d884b5186b651429 [OK]
      Configuration Source: file:/etc/datadog-agent/conf.d/ntp.d/conf.yaml.default
      Total Runs: 83
      Metric Samples: Last Run: 1, Total: 83
      Events: Last Run: 0, Total: 0
      Service Checks: Last Run: 1, Total: 83
      Average Execution Time : 707ms
      Last Execution Date : 2020-07-28 04:30:24.000000 UTC
      Last Successful Execution Date : 2020-07-28 04:30:24.000000 UTC

    uptime
    ------
      Instance ID: uptime [OK]
      Configuration Source: file:/etc/datadog-agent/conf.d/uptime.d/conf.yaml.default
      Total Runs: 4,975
      Metric Samples: Last Run: 1, Total: 4,975
      Events: Last Run: 0, Total: 0
      Service Checks: Last Run: 0, Total: 0
      Average Execution Time : 0s
      Last Execution Date : 2020-07-28 04:43:57.000000 UTC
      Last Successful Execution Date : 2020-07-28 04:43:57.000000 UTC

========
JMXFetch
========

  Initialized checks
  ==================
    no checks

  Failed checks
  =============
    no checks

=========
Forwarder
=========

  Transactions
  ============
    CheckRunsV1: 4,980
    Connections: 0
    Containers: 0
    Dropped: 10,467
    DroppedOnInput: 0
    Events: 0
    HostMetadata: 0
    IntakeV1: 541
    Metadata: 0
    Pods: 0
    Processes: 0
    RTContainers: 0
    RTProcesses: 0
    Requeued: 341,721
    Retried: 26,797
    RetryQueueSize: 30
    Series: 0
    ServiceChecks: 0
    SketchSeries: 0
    Success: 0
    TimeseriesV1: 4,980

  Transaction Errors
  ==================
    Total number: 2505
    Errors By Type:
      ConnectionErrors: 151
      DNSErrors: 9

  API Keys status
  ===============
    API key ending with hoge: API Key invalid

==========
Endpoints
==========
  https://app.datadoghq.com - API Key ending with:
      - hoge

==========
Logs Agent
==========

  Logs Agent is not running

=========
APM Agent
=========
  Status: Not running or unreachable on localhost:8126.
  Error: Get http://localhost:8126/debug/vars: dial tcp <IP_ADDRESS>:8126: connect: connection refused

=========
Aggregator
=========
  Checks Metric Sample: 1,696,624
  Dogstatsd Metric Sample: 1
  Event: 1
  Events Flushed: 1
  Number Of Flushes: 4,980
  Series Flushed: 1,273,265
  Service Check: 39,963
  Service Checks Flushed: 44,939

=========
DogStatsD
=========
  Event Packets: 0
  Event Parse Errors: 0
  Metric Packets: 0
  Metric Parse Errors: 0
  Service Check Packets: 0
  Service Check Parse Errors: 0
  Udp Bytes: 0
  Udp Packet Reading Errors: 0
  Udp Packets: 1
  Uds Bytes: 0
  Uds Origin Detection Errors: 0
  Uds Packet Reading Errors: 0
  Uds Packets: 0

root@396533a8d6f2:/#

Describe what happened:
The datadog-agent status command shows the currently running configuration, but the datadog-agent hostname appears to pick up the hostname of datadog.yaml instead of the currently running configuration.
Describe what you expected:
I want you to get the current setting by using datadog-agent hostname command.
Steps to reproduce the issue:
show the output.

install datadog-agent
start datadog-agent
edit datadog.yaml and set the hostname
hit datadog-agent status and datadog-agent hostname
check each hostname

Additional environment details (Operating System, Cloud provider, etc):

@2357gi have you been able to solve this issue?


dbs-util: add metric public components

Should this crate be named as dbs-utils?

Should this crate be named as dbs-utils?

@jiangliu Sure, fixed.


SNOW-717136: Extract resources from python module

Please answer these questions before submitting your issue. Thanks!

What version of Python are you using?
3.8.15

What operating system and processor architecture are you using?

Linux-5.4.219-126.411.amzn2.x86_64-x86_64-with-glibc2.10

What are the component versions in the environment (pip freeze)?

Snowflake connector: 2.8.3
Snowpark:1.0.0

What did you do?
Access files/resources inside a python package.  I imported MLFlow inside a Snowflake Stored procedure, and it errors here: https://github.com/mlflow/mlflow/blob/master/mlflow/utils/autologging_utils/versioning.py#L73.

No such file or directory: 'tmp/tmp_te6g509'
The directory path the error is referencing is created here: https://github.com/mlflow/mlflow/blob/master/mlflow/utils/autologging_utils/versioning.py#L70-L72.
My hypothesis is that the MLFlow library, which is zipped and sent to the Snowpark stage, is extracted into tmp.  What I don't understand is why the resource doesn't seem to exist there.

What did you expect to see?

It correctly identifying where the resource is in the library and giving me the correct path to that resource.

Can you set logging to DEBUG and collect the logs?
import logging

for logger_name in ('snowflake.snowpark', 'snowflake.connector'):
    logger = logging.getLogger(logger_name)
    logger.setLevel(logging.DEBUG)
    ch = logging.StreamHandler()
    ch.setLevel(logging.DEBUG)
    ch.setFormatter(logging.Formatter('%(asctime)s - %(threadName)s %(filename)s:%(lineno)d - %(funcName)s() - %(levelname)s - %(message)s'))
    logger.addHandler(ch)

What's your use case for using MLFlow?
My understanding is that the files are zipped and snowflake directly uses zipimport to import the files, and as a result, I don't think files are extracted. Though you could extract the files by doing the following in your stored proc, but I'm not confident that MLFlow can just run as is because it might require external internet access:
    import os
    import sys
    import zipfile

    IMPORT_DIRECTORY_NAME = "snowflake_import_directory"
    import_dir = sys._xoptions[IMPORT_DIRECTORY_NAME]

    input_file = import_dir + 'mlflow.zip'
    output_dir = '/tmp/mlflow'

    with zipfile.ZipFile(input_file, 'r') as zip_ref:
        zip_ref.extractall(output_dir)

Wow, that worked!  I added sys.path.insert(0, output_dir) to your code and then ran import mlflow with no issue.  Just wish there was a less janky way to do it but at least it works.

@danielhstahl Stay tuned :) MLFlow support is definitely on our roadmap.

For posterity:
MLFlow now packages the yaml into Python code at build time; circumventing the entire issue: https://github.com/mlflow/mlflow/pull/7577


swri_roscpp changelog cannot have future versions in it

debian packaging takes the highest changelog. Thus debian's buildpackage is tagging your package with 0.1.0 not 0.0.6
https://github.com/swri-robotics/marti_common/blob/indigo-devel/swri_roscpp/CHANGELOG.rst#010-2015-09-29
See the console output here: http://jenkins.ros.org/view/Isrc/job/ros-indigo-swri-roscpp_sourcedeb/41/console which means that this job is continuously triggering and rebuilding trying to get the version declared in the rosdistro.
Our nextgen buildfarm is more strict and it's failing every cycle: http://<IP_ADDRESS>:8080/view/Isrc_uT/job/Isrc_uT__swri_roscpp__ubuntu_trusty__source/73/console

Ahh. It was autogenerated by catkin_generate_changelog, and I didn't catch it.

@tfoote I assume the best way to fix this is to bloom an 0.0.7 release with the changelog fixed?

yes, that will be the best. If you can do that soon, I'll try to get it into the next sync.

0.0.7 is bloomed with the changelog fixed. PR pending: https://github.com/ros/rosdistro/pull/9841


Add a section to the FAQ about getting package release notifications

Closes #98

You're the best @jonparrott!

\o/


fields.flat

(node:121108) UnhandledPromiseRejectionWarning: TypeError: fields.flat is not a function
at Function.normalizeFields (/home/Disbot/node_modules/discord.js/src/structures/MessageEmbed.js:450:8)
at MessageEmbed.addFields (/home/Disbot/node_modules/discord.js/src/structures/MessageEmbed.js:266:42)
at MessageEmbed.addField (/home/Disbot/node_modules/discord.js/src/structures/MessageEmbed.js:257:17)
at UpdateEmbed (/home/Disbot/bot.js:142:6)
at offline (/home/Disbot/bot.js:154:17)
at process._tickCallback (internal/process/next_tick.js:68:7)
(node:121108) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 1)

Update your node version

Update your node version

Update your node version

how i update i`m lost.

Update your node version

how i update i`m lost.

https://phoenixnap.com/kb/update-node-js-version
Google works wonders as well..


Blazor lifecycle diagram and coverage

Fixes #16287
Internal Review Topic
Suggestions for the images are below. Call out by Image Number and Item Number with your remarks to help me keep track of change requests ...
I can't get the PPT file using the link. Can someone send it to me via email?
General

Center the text in the boxes.
Just by convention, docs use ellipses, not parentheses, so I recommend that we stick with that in the images. OnInitialized(Async) :point_right: OnInitialized{Async}

Image 1

Connect arrows from "Parent renders" and "OnParametersSet" boxes to the dashed box, not to the "OnInitialized(Async)" box within it.
"Do property injection" :point_right: "Property injection (SetParametersAsync)"
Rebuild the image so that its long physical dimension is vertical. This will work better for users on narrow devices reading the doc (e.g., phone).

Image 2

Looks good
Image 3

The comma can be dropped after "Is first render," and "or" should fit on its own line.
"BuildRenderTree Diff" :point_right: "Build render tree"
"Send renderbatch" :point_right: "Send render batch to DOM"
Rebuild the image so that its long physical dimension is vertical.

Which changes do you want? Any additional changes? I'll make them and update the PR after I hear back. :ear:

@guardrex I think all of the changes you proposed sound good, except the addition of the SetParametersAsync in the first image during the property injection step. I don't think those are really related.
@SteveSandersonMS Component disposal isn't currently included in these diagrams. Other community diagrams that I've seen include it. Should we as well?
I think it's also import that include some mention of how Blazor evaluates whether a child component should be rendered on subsequent renders. High level, if the parameter values can be guaranteed to be the same then the child component won't be rendered. @SteveSandersonMS Do you agree that these details should be included? If yes, could you please provide the specifics?

If I'm to perform the updates that I listed (perhaps after you, @SteveSandersonMS, make further updates :point_up:), can the PPT be emailed as an attachment to me? I can't access the provided link to that file.

@danroth27 ...

Does it make sense to place the events (Parent renders, DOM event, and Render) outside of the flow diagrams?
Spot other changes?

@danroth27 Are the latest versions of the images in good shape? :point_up: https://github.com/dotnet/AspNetCore.Docs/pull/19543#issuecomment-679255776

@danroth27 Do you need more 🕐 time before looking at these other ones? There's this one ... the images for the lifecycle topic ... and ...

Integrate components (Javier never looked AFAIK) on https://github.com/dotnet/AspNetCore.Docs/pull/19887
Overview updates on https://github.com/dotnet/AspNetCore.Docs/pull/20005
Tooling updates on https://github.com/dotnet/AspNetCore.Docs/pull/20026


Free Duplicacy GUI is going to Expire , How can i migrate to Duplicacy Cli and use this ?

I use free Duplicacy GUI and Free Plan on Blackblaze for my small backup needs.

I'm a fan of supporting Duplicacy, even if I'm not using the GUI. I actually have two commercial CLI licenses (more expensive than personal GUI license), just to support the product.
That said: If you want to migrate to the CLI, read the README.md here. It gives detailed instructions on how to do it, and that's what others have done to start using duplicacy-util. If, after trying, you have specific questions, feel free to ask here.
I'll close this issue for now. Feel free to re-open it if you have specific questions, thanks.

My Question is if the util can read the current settings +  backups can continue mostly as is. Or will i have to redo , reupload etc.

You will need to create two configuration files, a global one and a repository-specific one, as documented in the README.md file. After that, what you've uploaded already to the cloud will be fine, you won't need to upload again.
Note that duplicacy-util does not read in the GUI configuration, you need to create the duplicacy-util configuration files yourself. That's not a bad idea, I'd be happy to take a Pull Request to implement that if you felt like contributing.

I don't know Go yet, would be awesome if I could do that. Does GUI even give access to its settings?

I dunno, I don't use the GUI. I quickly learned that the GUI didn't support what I wanted (backing up the same data to multiple cloud locations for redundancy, etc). As a result, I started with the command line and never looked back. At the time, I was interested in the GUI if it ever got the capabilities I wanted. But at this point I'm so accustomed to the CLI, and the flexibility of the CLI, that I'd never look back.
You had to tell the GUI where to back up to (cloud provider, access keys, etc). That's really all you need to know. And hopefully you recorded that anyway so it should be easy for you to just build duplicacy-util configuration files.
I'd suggest that you start with the README.md file and see if you have questions. If you don't know basic answers (cloud providers, access keys, etc), and you don't know how to get it from the GUI, you'd need to post your questions to duplicacy for that. I just don't have familiarity with the GUI to help with that, sorry.
If the README.md file doesn't answer questions on how to use duplicacy-util, though, I can help with that.

Okay, I have the configurations saved (keys, location, File Exclusions ). I am sure I can migrate smoothly.
Bless the 3, 2, 1


Custom Beacon Recipe

Type
No response
Ingredients for the recipe
X. Whatever the rarest mob drop is (im not sure which one it is, probably an orby drop)
Y. Emerald Block
Z. Glass Block
Result
Beacon
Crafting table recipe shape
|ZZZ|
|ZXZ|
|YYY|

Additional info
If possible, emerald blocks not to be made from any Orth Coins, so the emeralds have to be mined
I feel like this will give use to non-Orth Coin emeralds as well as allow players to access beacons
Agreements

[X] I have searched for and ensured there isn't already an open issue regarding this.
[X] I have ensured the recipe I'm requesting isn't already in the server.

fair enough, that definitely does seem better


When try "show my kindle books", it doesn't show UI and only output audio

IMPORTANT: Before you create an issue, please take a look at our Issue Reporting Guide.
Briefly summarize your issue:

For test case Base 520~522 on AVS_Smart_functional_self-test_checklist_v2.9.7, It doesn't show any UI when we try "show my kindle books" as test expected.
Here is log,
show_my_kindle_book_noui_debug9.log
What is the expected behavior?

According test case expected, UI show be show. (as Echo show or FireTV)
What behavior are you observing?

It only audio output which alexa response "You have XXX books...."
Provide the steps to reproduce the issue, if applicable:

Buy some kindle books
Say "Show my kindle books"

Tell us about your environment:

What version of the AVS Device SDK are you using?
  <1.21.0>

Tell us what hardware you're using:

[ ] Desktop / Laptop
[x] Raspberry Pi
[ ] Other - tell us more:

Tell us about your OS (Type & version):

[ ] Linux
[ ] MacOS
[x] Raspbian Stretch
[ ] Raspbian Jessy
[ ] Other - tell us more:

Have you tried the same use case with AVS Device SDK SampleApp?

[ ] The issue is not applicable to the AVS Device SDK SampleApp.
[x] The issue is not reproducible on the AVS Device SDK SampleApp.

Hi @oscar1372 ,
This is the expected behavior and should not be blocking certification. Kindle currently does not support a Template Runtime or APL experience so only a speech response is expected.
If you have any further questions feel free to either re-open this issue or open a new issue.

Hi @oscar1372 ,
This is the expected behavior and should not be blocking certification. Kindle currently does not support a Template Runtime or APL experience so only a speech response is expected.
If you have any further questions feel free to either re-open this issue or open a new issue.


We should consistenly use 'date'  in our StructureDefinitions

I am currently working with the Gazelle team to find out which StructureDefinitions they currently have loaded on the Gazelle EVSClient.
In EVSClient, the user initiating a validation request is presented with a dropdown list of StructureDefinitions (under a pseudonym), but I (as a user) have no idea what validation is being applied.
The opaqueness of Gazelle EVSClient is not the purpose of this issue, but if we (ITI / IHE) put consistently update the 'date' field in our StructureDefintions, I can ask Gazelle EVSClient to use that.   I have not looked at all StructureDefinitions, but I did find at least one with a version and no date, and there is a newly update PMIR StructureDefin9tion that has a 2019 date https://github.com/IHE/fhir/blob/master/StructureDefinition/structuredefinition-IHE.PMIR.RelatedPerson.xml
For reference, I have submitted a separate Jira issue for the Gazelle EVSClient to use this information when they are doing FHIR validations with our StructureDefinitions.  See https://gazelle.ihe.net/jira/browse/EVSCLT-843.

I had not recommended version, as that would have required us to come up with a meaning to our version methodology. I have been recommending that the .date element must be populated with a proper date of when it was released. And that should always be an increasing date, without revisiting history. Can you get them to use the date element?

I think the versioning should be done on the implementation guide level, and the validation request and the response should indicate which StructureDefinition and implementation guide version should be used with the pipe syntax.

I will try to ask for date.

closing due to our move to IG publisher, and consistency driven there.


How should we train the model using tf 2.6.0?

Hi, I tried training the model on tf 2.6.0 and some problems happens. How should i fix this?

Currently we are not planning to create a branch that supports TF 2.6.0.
However, you can check one of our recent works which utilizes TF 2.6.0, where we used similar Coarse and Fine generators, and  Discriminator with a embedding feature-matching loss. The overall training is quite similar, and should be reproducible for RVGAN.
Link
Hope this helps !

I have created a new branch for tf 2.6.0
Link: https://github.com/SharifAmit/RVGAN/tree/tf-2.6
Please open a new issue if have any error.
Thanks!

Thank you!


Add finding projects resources to resource page

@ElijahCaine merge this?  I can also take out everything but the additions to the resources page.

@lucywyman merge it :+1:

That felt good.


[CI] create more screenshots

We only generate 5 screenshots currently in CI.
We should have one screenshot for every relevant screen. This would also help keeping tutorials up to date
for ceremonies:

all roles: bootstrappers, endorsees, reputables, newbies
happy flow plus all side cases: not registered, not assigned
entire meetup flow

All with Leu branding and meaningful values

Closing in favor of #1075


Allow updating non-metrics templates when structure changed

We have template structures changes in #8367 but if we upgrade from an older storage, the non-metrics templates (e.g. service_traffic) won't get updated.

[x] If this pull request closes/resolves/fixes an existing issue, replace the issue number. Closes #.
[x] Update the CHANGES log.

I want to add a notice this although I am totally fine about this change.
This template update was introduced due to metric indices merging, not for forward compatibility. So, even we open this feature to all indices, some break changes are still there, such as v9 upgrade doc described.
This is a nice-to-have thing, but legacy data will still be an issue for newer kernal.


Do not use howdy to unlock system for the first unlock after boot on Deepin

As the title says, if you use howdy instead of password to log in for the first unlock after booting, it may cause some strange problems.
Even if I have passed theface recognition, my Deepin system will still pop up the key ring unlocking window, and the WiFi that has saved the password will also repeatedly ask me to enter the password. In addition, the login status of my Deepin account has also disappeared.
If I manually cover the camera and use the keyboard to enter the password, the above situation will not happen again.
Request:
So can you add an option so that the original password must be used to unlock the first unlock to avoid that annoying bug.
Thank you for your contribution, now Linux can be as suitable for daily use as Windows.

Thanks for the kind words! This issue has been open many, many times, checkout #503


Implement Protocol Encryption (PE/MSE)

torrent-stream will likely want this too, though I'm guessing at a fairly low priority.  Adding a link to https://github.com/feross/webtorrent/issues/69 in order to track progress across torrent-stream and bittorrent-client.  See the webtorrent issue for a thorough breakdown.

:+1: would love this


creates a script to create new  pages

closes #114

Need to figure out how to create script in PowerShell.
CC: @Lorenzo767, I'll let you recreate this work.

Closing this and handling it over to @Lorenzo767 to do the work.
Thanks!


Any plans to add support for assets

Would love to be able to easily see which elements are related to an asset when selecting it

It's a good suggestion and we'll put it on the list.


Improve pom.xml http to https

#1086
Summary:
The pom.xml files in the spring-ai project contain HTTP links in the xsi:schemaLocation attribute, which causes warnings in IntelliJ. These links should be updated to HTTPS to eliminate the warnings and improve security.
Details:
Only the http://maven.apache.org/xsd/maven-4.0.0.xsd part of pom.xml was triggering the warning, so I modified that part.
So I replace http://maven.apache.org/xsd/maven-4.0.0.xsd to https://maven.apache.org/xsd/maven-4.0.0.xsd of all pom.xml file
The following files already have HTTPS links so I not changes:

vector-stores/spring-ai-gemfire-store/pom.xml
vector-stores/spring-ai-qdrant-storee/pom.xml
vector-stores/spring-ai-pinecone-store/pom.xml
vector-stores/spring-ai-weaviate-store/pom.xml

Environment:

IntelliJ IDEA
Project: spring-ai
File: pom.xml

The Maven documentation also uses https. https://maven.apache.org/pom.html


Motherlode Mine - Sack overlay and region check

The following changes have been done:

Added red color to the "Pay-dirt in sack" overlay when the number of pay-dirt in sack exceeds or is equal to the max allowed.
Added "Deposits left" to sack overlay. This shows the number of "inventories" left before the sack will be full. This is colored red when deposits left are 0.
Removed "You are mining" / "You are not mining" as this could not be shown accurately. This showed "You are not mining" when animation stopped, although the character would continue mining straight after.
Added isInMLM (region check) to most functions

Screenshots:

Great additions ypperlig, just be prepared to split this into 2 pull requests since Adam isn't a fan of combining many changes into one merge :)

The "You are mining" is still useful, couldn't you have a timer, and if the animation stopped for more than x milliseconds it would count as not mining? This would prevent the plugin mistakenly showing "You are not mining" for the small animation pauses, would it not?

But then "You are mining" would kind of lose purpose because it will not be accurate anymore, and for inacurrate idle alerts you have idle notifier.

If the animation pauses for 700ms lets say, then it would only be inaccurate when the player stopped mining, only for 700ms, that sounds like a reasonable downside to having the overlay

No, I mean, the purpose of the You are fishing, you are woodcutting, you are mining overlays is to be accurate, more accurate than idle notifier. So current you are mining should either stay as it is now or be removed. I would probably just don't change it.

The general consensus on Discord when I brought it up was that it should be removed as it could not be shown accurately like Fishing/Woodcutting.
If it shouldn't be changed (stay as is) then I think a toggle should be introduced.

Updated PR with the following changes:

Moved region check to onRegionChange and onGameStateChanged. Introduced plugin.inMLM rather than isInMLM() for region check.
Switched to client.getMapRegions() to fetch current regions. Region check loops through all regions and verifies they exist in MOTHERLODE_MAP_REGIONS.
Added 'You are mining' / 'You are currently NOT mining' back. No changes have been done to this. Introduced a toggle that disables this.


Remove dependency on applaunchservices from macOS installer

applaunchservices should only be required for conda and PyPi installations of Spyder.
We should be able to remove this dependency from the macOS standalone application.

[ ] Add conditional statements where applaunchservices is imported
[ ] Add conditional statements where applaunchservices is used
[ ] Add conditional statements where Spyder checks dependencies

This is not a high priority.

Resolved by #18485.


OpenAPI improvements for minimal APIs sample code

Write sample in https://github.com/dotnet/AspNetCore.Docs.Samples/tree/main/fundamentals/minimal-apis/samples/openApi (create folder openApi)
OpenAPI improvements for minimal APIs

Looks like it's already done in OpenAPI support in minimal APIs - ASP.NET Core but we should verify there isn't anything new to add.


Fix crash when loading empty media stats

Fixes a fatal application crash when visiting the about page when the mediainfo table is empty.

Please fix the coding style by npm run format

Done, I am so used to use single quotes in Javascript that I did not even notice it.


Alvr client Error with pics (please help)

my pc is 64 bit and theres a proof pic. (Nothing works even if i click disconnect or start server same error shows up what do i do)

Did you make sure the 64bit version of the Visual C runtime is installed? The link in the instruction page has both.

Do you have steamvr installed?

Also I see your system is a 4200U with 4 GB RAM.  ALVR requires a SteamVR capable system to run.  Run this and see if you can even run SteamVR: https://store.steampowered.com/app/323910/SteamVR_Performance_Test/

@thoughtfix yes i do have it installed 2017 both 64 and 32 bit versions installed and the pc runs some steamvr games i tried with trinus vr and it worked.

@Muhlawor yes it is installed and up to date

@thoughtfix it says:
See the end of this message for details on invoking
just-in-time (JIT) debugging instead of this dialog box.
************** Exception Text **************
System.Exception: Exception of type 'System.Exception' was thrown.
at ALVR.SoundDevice.GetSoundDeviceList()
at ALVR.Launcher.Launcher_Load(Object sender, EventArgs e)
at System.Windows.Forms.Form.OnLoad(EventArgs e)
at MetroFramework.Forms.MetroForm.OnLoad(EventArgs e)
at System.Windows.Forms.Form.OnCreateControl()
at System.Windows.Forms.Control.CreateControl(Boolean fIgnoreVisible)
at System.Windows.Forms.Control.CreateControl()
at System.Windows.Forms.Control.WmShowWindow(Message& m)
at System.Windows.Forms.Control.WndProc(Message& m)
at System.Windows.Forms.Form.WmShowWindow(Message& m)
at MetroFramework.Forms.MetroForm.WndProc(Message& m)
at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
************** Loaded Assemblies **************
mscorlib
Assembly Version: <IP_ADDRESS>
Win32 Version: 4.7.2671.0 built by: NET471REL1LAST
CodeBase: file:///C:/Windows/Microsoft.NET/Framework64/v4.0.30319/mscorlib.dll
ALVR
Assembly Version: <IP_ADDRESS>
Win32 Version: <IP_ADDRESS>
CodeBase: file:///C:/Users/justk/Desktop/ALVR/ALVR.exe
System.Windows.Forms
Assembly Version: <IP_ADDRESS>
Win32 Version: 4.7.2556.0 built by: NET471REL1
CodeBase: file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_MSIL/System.Windows.Forms/v4.0_<IP_ADDRESS>__b77a5c561934e089/System.Windows.Forms.dll
System
Assembly Version: <IP_ADDRESS>
Win32 Version: 4.7.2556.0 built by: NET471REL1
CodeBase: file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_MSIL/System/v4.0_<IP_ADDRESS>__b77a5c561934e089/System.dll
System.Drawing
Assembly Version: <IP_ADDRESS>
Win32 Version: 4.7.2556.0 built by: NET471REL1
CodeBase: file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_MSIL/System.Drawing/v4.0_<IP_ADDRESS>__b03f5f7f11d50a3a/System.Drawing.dll
MetroFramework
Assembly Version: <IP_ADDRESS>
Win32 Version: <IP_ADDRESS>
CodeBase: file:///C:/Users/justk/Desktop/ALVR/MetroFramework.DLL
System.Configuration
Assembly Version: <IP_ADDRESS>
Win32 Version: 4.7.2556.0 built by: NET471REL1
CodeBase: file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_MSIL/System.Configuration/v4.0_<IP_ADDRESS>__b03f5f7f11d50a3a/System.Configuration.dll
System.Core
Assembly Version: <IP_ADDRESS>
Win32 Version: 4.7.2661.0 built by: NET471REL1LAST_C
CodeBase: file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_MSIL/System.Core/v4.0_<IP_ADDRESS>__b77a5c561934e089/System.Core.dll
System.Xml
Assembly Version: <IP_ADDRESS>
Win32 Version: 4.7.2612.0 built by: NET471REL1LAST_B
CodeBase: file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_MSIL/System.Xml/v4.0_<IP_ADDRESS>__b77a5c561934e089/System.Xml.dll
MetroFramework.Fonts
Assembly Version: <IP_ADDRESS>
Win32 Version: <IP_ADDRESS>
CodeBase: file:///C:/Users/justk/Desktop/ALVR/MetroFramework.Fonts.DLL
Accessibility
Assembly Version: <IP_ADDRESS>
Win32 Version: 4.7.2556.0 built by: NET471REL1
CodeBase: file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_MSIL/Accessibility/v4.0_<IP_ADDRESS>__b03f5f7f11d50a3a/Accessibility.dll
************** JIT Debugging **************
To enable just-in-time (JIT) debugging, the .config file for this
application or computer (machine.config) must have the
jitDebugging value set in the system.windows.forms section.
The application must also be compiled with debugging
enabled.
For example:

When JIT debugging is enabled, any unhandled exception
will be sent to the JIT debugger registered on the computer
rather than be handled by this dialog box.

@thoughtfix what do i do?

I don't develop for this project - I was just trying to help. I think you might be wasting your time based on your system specs, however. Follow along the "new user - help" thread in #86 and see if there's any good advice for you in there and good luck!

What GPU do you have?

@vrokolos AMD Radeon HD 8670M it might not be compatible but it does run some steam vr games good

No that doesn't work. ALVR uses nvidias NVENC encoder to stream games. This means only newer nvidia cards work. AMD won't work with this.

@vrokolos but its a .net error doesnt say anything about graphics card

It is trying to load nvidias driver and it can't find it so you're out of luck

Whatever, it will not work with AMD.

@Muhlawor @vrokolos so if i use a computer with an nvidea graphics will it work?

@ICURSEDANGEL  you can contribute to the crowdfunding of the AMD support here: https://www.bountysource.com/issues/59270271-will-we-get-an-amd-compatible-version-in-the-future

You need a nvenc supported nvidia card. https://developer.nvidia.com/video-encode-decode-gpu-support-matrix

@ICURSEDANGEL As other people said, even if you solve this bug, you cannot use ALVR. Because ALVR uses NVIDIA specific function. Sorry.

@polygraphene yes i got that but i atleast want to solve this ".NET" error so if it comes to me when i get my upgraded pc i could solve it immediatly.

I think this error is caused by missing nvidia driver. Becasue ALVR driver depends on dll which is installed by nvidia driver.
If you get NVIDIA GPU and install graphic driver, this error may disappear.

@ICURSEDANGEL  please close this as a duplicate of #33 and subscribe to that one. You'll get an email from github if that issue is updated with AMD support.


FB.init options not applied.

Hi, i have an issue with the component that if i click to logout on refresh is saying again logout. I tried to use the status: false option from https://developers.facebook.com/docs/javascript/reference/FB.init/v6.0 but with no success. Can this be achieved?
code:
<v-facebook-login app-id="******" :options="fbOptions" @connect="afterLogin" @login="tryLogin">
data () {
return {
fbOptions: { status: false }
}
}

I'm sorry, but this issue is really unorganized, I can't read it and I can't follow it. If it's an issue with Facebook API, then you'll have to figure it out from their docs.


Previous progress remains displayed for successive invocation of Invoke-WebRequest

Steps to reproduce
& {
    $uri = 'http://ipv4.download.thinkbroadband.com/5MB.zip'
    Invoke-WebRequest -Uri $uri -OutFile 'data1.dat'
    Invoke-WebRequest -Uri $uri -OutFile 'data2.dat'
    Invoke-WebRequest -Uri $uri -OutFile 'data3.dat'
    Invoke-WebRequest -Uri $uri -OutFile 'data4.dat'
    Invoke-WebRequest -Uri $uri -OutFile 'data5.dat'
}

Expected behavior
Progress of previous Invoke-WebRequest disappears before new one starts and console displays only progress of current Invoke-WebRequest.

Actual behavior
Progresses of all previous Invoke-WebRequest remain in console.

Bisecting the git repository tells me that 8ebff6a2a4ea09c5bf4f3c35e227af16f174f157 is the first bad commit.
Environment data

PS Temp:\> $PSVersionTable

Name                           Value
----                           -----
PSVersion                      7.1.0-preview.2
PSEdition                      Core
GitCommitId                    7.1.0-preview.2
OS                             Microsoft Windows 10.0.18363
Platform                       Win32NT
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0…}
PSRemotingProtocolVersion      2.3
SerializationVersion           <IP_ADDRESS>
WSManStackVersion              3.0

It is by-design. And it is a compromise - if PowerShell removed this at cmdlet finish you would never saw 100% complete message, as result the message is automatically removed at pipeline end.

@iSazonov OK, understood.
But, is there any trick of scripting that mimic previous behavior?

At first look you could try to put the Invoke-WebRequest in nested pipeline.


Check if wallet is not opened before deleting

Signed-off-by: Janko Krstic<EMAIL_ADDRESS>

I will so the error maps to CommonInvalidState.
Although my understanding is that it is error used when there is something wrong with indy sdk's internal state. Something is corrupted or there is bug which created invalid state.
This is more of a user error how I see it, but I will change it

Alright. I removed NotClosed error completely. Although I still am not convinced that this is error that should be considered InvalidState.
I do think that very granular errors like NotClosed is not good approach, since you might end up with hundreds errors in the end. But maybe new generic errors that would indicate error in the sequence of operations/state machine that is not valid can be added.
Or clarify what exactly InvalidState means, since it seems it is overloaded now


Design Solution

Landing/Home Section
Brief Introduction:
Hey there! I am Joshua Hernandez. I am self-taught and aspiring to become a web developer.
About Me Section

Profile - including your picture
Hobbies
Resume (button) - pdf file opened to next tab

Projects Section

Showcase projects with a screenshot
Include technologies used in each project
Buttons to view live and source code

Contact Section

Name, email, and message inputs.
Button to send message to your email.


Templating

template:'  '
how can I use this function and have the images cascade in default form along with captions, likes ect.? when this method is used images are only displayed inline.
ps the code example will not display here please see screenshot.

thanks,
Rick

Closing as stale.


Application Service spec page still says unstable

On https://matrix.org/docs/spec/application_service/r0.1.0.html

1   Changelog
Version: unstable
No significant changes.
This version of the specification is generated from matrix-doc as of Git commit application_service/release-r0.1.0,4630c067.
For the full historical changelog, see https://github.com/matrix-org/matrix-doc/blob/master/changelogs/application_service.rst

gah, everything is awful. I really want to stop us from having generated output for specs >:(

Please keep generating but only data structures and calls :) Otherwise everything will become even awfuler.

It's off topic for here, but something I'm experimenting with in room versions is to always generate it in the fly. Currently our specs get generated then left in the matrix.org repo to be forgotten.
So far, on the fly generation is working well enough for me to actually push forward on it everywhere.

This just needs someone to update the appservice release branch on matrix-doc such that the changelog generates a real thing. Then update the matrix.org generated output. Blocked on https://github.com/matrix-org/matrix.org/issues/428 if I'm to do it.

Fixed by https://github.com/matrix-org/matrix.org/commit/041fd573a5c0234b64833efaa1a4fe40ddcd3bd4 - the changelog generator had a bug at the time of release, so the changelog was wrong. The changelog itself was literally copy/pasted from the appservice changelog, which is what the script should have done.


Multiple fixes

Fixes PHP8+ issues
Fixes rrdcaced issues
Fixes fping issue with the docker image

Why was "wmrrd_read_from_poller_output" removed from "lib/datasources/WeatherMapDataSource_rrd.php" ?
This function is still referenced in "lib/datasources/WeatherMapDataSource_rrd.php" at line 479:
476         if($use_poller_output == 1) 477         { 478             wm_debug("Going to try poller_output, as requested.\n"); 479             WeatherMapDataSource_rrd::wmrrd_read_from_poller_output($rrdfile,"AVERAGE",$start,$end, $dsnames, $data,$map, $data_time,$item); 480          }
Getting the following error if we don't have this function:
PHP Fatal error:  Uncaught Error: Call to undefined method WeatherMapDataSource_rrd::wmrrd_read_from_poller_output() in /home/librenms/html/plugins/Weathermap/lib/datasources/WeatherMapDataSource_rrd.php:479 Stack trace: #0 /home/librenms/html/plugins/Weathermap/lib/Weathermap.class.php(942): WeatherMapDataSource_rrd->ReadData() #1 /home/librenms/html/plugins/Weathermap/weathermap.php(289): WeatherMap->ReadData() #2 {main}   thrown in /home/librenms/html/plugins/Weathermap/lib/datasources/WeatherMapDataSource_rrd.php on line 479
Added the function back manually and now my maps update again.


Test createVerticesFromHeightMap and createVerticesFromQuantizedTerrainMesh

createVerticesFromHeightMap and createVerticesFromQuantizedTerrainMesh have no unit tests.

Hello, I am part of the JTC Flagship program and would like to work on this issue.

@ChristianToro Sounds good! Our testing guide may help getting starting.

Hey @ggetz , I have been researching the testing guide which has been helpful, but I have a few questions that need clarification:
This issue cites PR #3902, which cited the original issue #3676, referencing a terrain exaggeration sandcastle problem. When checking out tag 1.18 to try a reproduction of the issue resulted in an ES6 error during build. The terrain exaggeration example seems to use createVerticesFromQuantizedTerrainMesh but depends on fairly large set of dependencies. Given this, it would be difficult to make a unit test, rather than an integration test. How should I proceed with this? Are there other unit test examples for other workers within the code base?

@ChristianToro Thanks for review all these materials. These are good questions.
TaskProcessorSpec.js has examples of minimal unit tests which validate workers. Namely providing some input and confirming the expected outputs.
To create these tests, I would set up two new files packages/engine/Specs/Workers/createVerticesFromHeightMapSpec.js and packages/engine/Specs/Workers/createVerticesFromQuantizedTerrainMeshSpec.js. In each of those files, I would create similarly structured unit tests using TaskProcessor to schedule and execute the workers.
For the parameters themselves, I would look at HeightmapTerrainDataSpec.js and QuantizedMeshTerrainDataSpec.js for relevant examples.
Let me know if you have any further questions!


[PluginName] Issue: As of today, tabs channels are not changing anymore, and if I reinstall the plugin, it doesn't work at all

As of today, tabs channels are not changing anymore, and if I reinstall the plugin, it doesn't work at all, all of my friends are having similar issues, any fix for this?

Can confirm this.
I don't have any other plugins that effect tabs, haven't altered the code at all, and for some reason the tabs won't change to the name of the channel their now in.

can confirm it doesn't work anymore

Also can confirm. Not noticing anything interesting or relevant in the logs though.

https://github.com/samfundev/BetterDiscordStuff/pull/14


Fix edge case with reverse network.

reverse_network should be reversible.
Consider:
k = {1: [2], 2: []}
# original version
reverse_network(k)  # {2:[1]}
# fixed version
reverse_network(k) # {1: [], 2: [1]}

@jameshalgren

Thanks.
On Mon, Jul 13, 2020 at 8:02 PM Ryan Grout<EMAIL_ADDRESS>wrote:

reverse_network should be reversible.
Consider:
k = {1: [2], 2: []}
original version
reverse_network(k)  # {2:[1]}
fixed version
reverse_network(k) # {1: [], 2: [1]}
@jameshalgren https://github.com/jameshalgren
You can view, comment on, or merge this pull request online at:
https://github.com/NOAA-OWP/t-route/pull/85
Commit Summary

Fix edge case with reverse network.

File Changes

M src/python_framework_v02/nhd_network.py
https://github.com/NOAA-OWP/t-route/pull/85/files#diff-c9eae5b5fcf857ecdaa19acd2f01b280
(7)

Patch Links:

https://github.com/NOAA-OWP/t-route/pull/85.patch
https://github.com/NOAA-OWP/t-route/pull/85.diff

—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
https://github.com/NOAA-OWP/t-route/pull/85, or unsubscribe
https://github.com/notifications/unsubscribe-auth/AMW7MUFAPKZR6W62DNGFPQTR3OVBPANCNFSM4OZAPRDA
.

--
James Halgren
NOAA National Water Center
205-347-1453
NOAA Affiliate, Lynker http://lynker.com

Testing.
>>> N
{4153018: [], 4153786: [], 4185517: [4185587], 4185527: [4185583], 4185583: [4186253], 4185587: [4186251], 4185607: [4186257], 4185613: [4185667], 4185649: [932040253], 4185661: [4185665], 4185663: [4185665], 4185665: [4186287], 4185667: [4186307], 4185693: [4186297], 4186251: [4186255], 4186253: [4186255], 4186255: [4185607], 4186257: [4185661], 4186287: [4186305], 4186297: [4186305], 4186305: [4186309], 4186307: [4186309], 4186309: [], 4186499: [4185663], 4186503: [4185693], 932040249: [4186503], 932040251: [932040249], 932040253: [932040251]}
>>> M = reverse_network(N)
>>> M
defaultdict(None, {4153018: [], 4153786: [], 4185517: [], 4185587: [4185517], 4185527: [], 4185583: [4185527], 4186253: [4185583], 4186251: [4185587], 4185607: [4186255], 4186257: [4185607], 4185613: [], 4185667: [4185613], 4185649: [], 932040253: [4185649], 4185661: [4186257], 4185665: [4185661, 4185663], 4185663: [4186499], 4186287: [4185665], 4186307: [4185667], 4185693: [4186503], 4186297: [4185693], 4186255: [4186251, 4186253], 4186305: [4186287, 4186297], 4186309: [4186305, 4186307], 4186499: [], 4186503: [932040249], 932040249: [932040251], 932040251: [932040253]})
>>> N2 = reverse_network(M)
>>> N2
defaultdict(None, {4153018: [], 4153786: [], 4185517: [4185587], 4185587: [4186251], 4185527: [4185583], 4185583: [4186253], 4186253: [4186255], 4186251: [4186255], 4185607: [4186257], 4186255: [4185607], 4186257: [4185661], 4185613: [4185667], 4185667: [4186307], 4185649: [932040253], 932040253: [932040251], 4185661: [4185665], 4185665: [4186287], 4185663: [4185665], 4186499: [4185663], 4186287: [4186305], 4186307: [4186309], 4185693: [4186297], 4186503: [4185693], 4186297: [4186305], 4186305: [4186309], 4186309: [], 932040249: [4186503], 932040251: [932040249]})
>>>

Definitely seeing inconsistencies removed with the new way:
(see prior comment for object definition)
>>> print(f'object lengths: orig: {len(N)} reversed new way: {len(M)} reversed old way: {len(MM)} double-reversed new way: {len(N2)} double-reversed old way: {len(NN2)} triple-reversed new way: {len(M2)}; triple-reversed old way: {len(MM2)}')
object lengths: orig: 28 reversed new way: 28 reversed old way: 23 double-reversed new way: 28 double-reversed old way: 27 triple-reversed new way: 28; triple-reversed old way: 23

@jameshalgren, I think this function was originally written with a less rigorous representation of the network (ie nodes without outgoing edges weren't required to be in the index). This PR simply ensures that the output conforms to the more rigorous representation that is used now.


POC: Generate a Prisma schema using migration metadata obtained from the sync service

Fixes VAX-1339, #863.
This is a proof-of-concept pull request that demonstrates the ability to obtain a Prisma schema which is later used in the type-safe client generation process without having Prisma connect to the Migrations proxy.
Overview of the included changes:

The SatOpMigrate.Column message gets a new is_nullable field. This information is needed to correctly indicate optional fields in the generated Prisma schema.
The SatOpMigrate message is extended to allow for inclusion of an enum type definition: a CREATE TYPE ... AS ENUM ... SQL statement and associated metadata (relevant commit range. @icehaunter @magnetised, I would love to get your feedback on this.
The introspectDB() function is reimplemented to generate a Prisma schema from the migrations metadata and write it to the temporary schema.prisma file.
The complete implementation of the new approach to generating a Prisma schema can be found in the clients/typescript/src/cli/migrations/migration-to-prisma-models.ts file.

How to proceed from here:

I'd like to have both the backend and the frontend teams look at this POC and point out any gotchas or missing functionality
Once we agree that this is a workable solution, I can open a new pull request that will only include changes to the protocol and the server-side part of the implementation
Someone on the frontend team can then open a pull request (based on the server one) that will take my client-side changes, clean them up and address all the bits that I've missed or implemented poorly due to my lack of TS expertise.

TODO:

deduplicate enum definitions in ddl_commands.

At this point, merging it would do more harm than good. People will need to update both the server and the client at the same time to keep the client-side CLI working correctly with the new username. There are probably other potential breakages that weren't a concern at the time.

as per @alco, so closing for now

👋 we've been working the last month on a rebuild of the Electric server over at a temporary repo https://github.com/electric-sql/electric-next/
You can read more about why we made the decision at https://next.electric-sql.com/about
We're really excited about all the new possibilities the new server brings and we hope you'll check it out soon and give us your feedback.
We're now moving the temporary repo back here. As part of that migration we're closing all the old issues and PRs. We really appreciate you taking the time to investigate and create this improvement!


rawRequest does not support TypedDocumentNode

Thanks for a great library! Love the addition of TypedDocumentNode support for request. In some of our operations, we need to use rawRequest and I'm finding it does not support TypedDocumentNode. Is that a limitation of typescript/TypedDocumentNode or something that could be implemented?

@awinograd did you found a way to convert TypedDocumentNode for raw request?

@ZiiMakc you may get a string back, but you won't get type information from the request anymore. I do not have a better solution, it's something that needs to be fixed in the library

Hi there,
Is there a reason that graphql-request rawRequest is still not supporting TypedDocumentNode ? It seems to be the de facto standard now ?
Thx

bump

Raw request does not work with DocumentNode type so not sure what is expected here.


Getting Next Page Of Search?

I see that search calls are returning the pagination object from Discogs, but since the search call doesn't let me specify a page to return, what's the correct way to page through results?
Thanks!

Discogs API says search accepts pagination https://www.discogs.com/developers/#page:database,header:database-search so just add them in the params when doing a search call.

Ah my bad.  Didn't see that.  Thanks!


Clarify how to run the tests

It wasn't initially obvious to me how to run the tests from the information given - I was attempting to run it with phpunit hello-world.php. The error message that this generates isn't very useful, so this PR helps new users by giving a specific example of how to run the tests.

Long delay, but thanks for this suggestion! 💙


albert launcher license/distribution issues

Describe the bug

https://github.com/albertlauncher/albert/commit/f9a33001e9e2930291e8d1a8669a6c43d1de2269#diff-4673a3aba01813b595de187a7a6e9e63a3491d55821606fecd9f13a10c188a1d

Since v0.21.0, see tag list in the commit, the license is (possibly illegitimately) proprietary freeware.
Additional context
Drive-by reporting since I saw this in my feed.

https://social.treehouse.systems/@mgorny/111708984184055051
https://bugs.gentoo.org/766129
https://web.archive.org/web/20210225183856/https://github.com/albertlauncher/albert/issues/765

Notify maintainers
@MikaelFangel
@ericsagnes @synthetica

Add a :+1: reaction to issues you find important.

Hmm, I'm a bit unsure if this prohibits us from redistributing the package through nix? Or if it's enough to set the license to unfree? 💭

I actually do not know. I'm not sure who to reach out to at this point in time to get opinions about the situation.
Though at the very least a first step would be changing the license information to mirror the information the project advertises, which is unfree and unredistributable [binary].

Since v0.21.0, see tag list in the commit, the license is (possibly illegitimately) proprietary freeware.

This changed years ago in version 0.14.21, it is not new since 0.21.0.

Hmm, I'm a bit unsure if this prohibits us from redistributing the package through nix? Or if it's enough to set the license to unfree? 💭

Is it legal to distribute a package through nix that contains an infringing mixture of nonfree proprietary freeware + GPL code? This is an interesting question that is distinct from whether it is legal to mirror the source code and/or test it in CI, provide cached binary versions, etc.

@eli-schwartz You spreading this all over the web. I see that your personal preference is copyleft, however spreading bad press just because you dont like the licencse is not fair and plain immoral imho. The contributions have all been modularized. Licensing is all fine afaik. No infringement. If you think otherwise please let me know and please stop FUD.

(possibly illegitimately)

~/albert/plugins $ find .  |while read i ; do git blame "$i" | grep -v "Manuel Schneider" ;done 2> /dev/null |wc -l
1349

~/albert $ find src include | while read i ; do git blame "$i" | grep -v "Manuel Schneider" ;done 2> /dev/null| wc -l
0

Eli is right in one point though: Distribution is somewhat cumbersome due to the GPL. IANAL but the GPL licensed plugins probably have to go into a separate package simply because the GPL requires it, because afaik GPL is not compatible with non copyleft licenses.

@ManuelSchneid3r but even if we split the package we would still have a problem right? Because we are not allowed to distribute via Nix and NixOS according to the license. Nix and NixOS are not included in the allowed list (see my issue in the Albert repo).
Am I misunderstanding something or are you planning in extending the license? ☺

Hmm, I'm a bit unsure if this prohibits us from redistributing the package through nix? Or if it's enough to set the license to unfree?

Setting license to unfree will, by the current general policy, automatically stop Hydra builds and pushing versions linked against the up-to-date stdenvs to the binary cache. So we would not be distributing the source or binaries, only the metadata about how to build. I think we do it for a lot of non-redistributable things already.
(The binary cache would still have the old builds with the unfortunately mislabeled license, though)

@eli-schwartz You spread this all over the web. I see that your personal preference is copyleft, however spreading bad press just because you dont like the licencse is not fair and plain immoral imho.

You are factually wrong about my thought processes and personal feelings.
I respect the right of software developers to license or relicense their personal work as they wish -- I have zero respect for software developers who commit copyright infringement against third-party contributions by claiming they are legally permitted to relicense copyleft software that they don't own.

The contributions have all been modularized. Licensing is all fine afaik. No infringement. If you think otherwise please let me know and please stop FUD.

When dealing with other people's property that you are not allowed to use, the ideal scenario if you cannot contact each person and get a copyright assignment or an unlimited personal license (to reuse, copy, distribute as though it were your own) is to hire a copyright lawyer to ensure that you are fulfilling your legal requirements. Failing that, you get to be your own lawyer but without the training in copyright law.
You do need to verify what was contributed and that no traces remain. You also need to reassure potential users that this has been done.
 Deleting the issue sends a very loud and clear message to users, and it's not a polite message.

(possibly illegitimately)

~/albert/plugins $ find .  |while read i ; do git blame "$i" | grep -v "Manuel Schneider" ;done 2> /dev/null |wc -l
1349

~/albert $ find src include | while read i ; do git blame "$i" | grep -v "Manuel Schneider" ;done 2> /dev/null| wc -l
0

I'm not sure what you think git blame is, but it does not tell you what license the code is under.
This is readily apparent to anyone that knows what precisely, git blame actually does.
If you want to know whether the code contains someone else's legally significant GPL contribution, you need to perform a proper review.

Eli is right in one point though: Distribution is somewhat cumbersome due to the GPL. IANAL but the GPL licensed plugins probably have to go into a separate package simply because the GPL requires it, because afaik GPL is not compatible with non copyleft licenses.

The GPl explicitly forbids "combined works" containing code incompatible with the GPL. Combining a GPL licensed plugin with a program that is not GPL compatible (such as a proprietary freeware license) is a combined work. The general rule of thumb is that use of "APIs" or "linking" means it's a combined work. The standard workaround for this is to communicate with software under an incompatible license by invoking the incompatible software as an externally forked disk executable, and only using the standard output stream (which is content that the software produces; much like using Microsoft Word to write a school essay doesn't mean that your school essay belongs to Microsoft).
Note that it also depends what sort of information is actually being communicated via rpc: https://www.gnu.org/licenses/gpl-faq.en.html#MereAggregation
Keep in mind that the GPL was written by "actual for real lawyers" with the explicit intent of treating plugins as a technology which authors of nonfree software often try to use to "nefariously circumvent their obligations when incorporating GPL code into their program.
In short: albert plugins that use the GPL (whether the plugin code is GPL or whether it links to a GPL library) are illegal to distribute in binary form, even in a separate package.
I would like to think that they're illegal to distribute in source form as well, but I'm not sure that's actually legally the case... it's an unethical attempt to violate the spirit of the law anyway, so, boo.
...
Note that the LGPL exists explicitly for the case where authors of software would like to write GPL software but also wish to allow proprietary software to use the GPL stuff. The LGPL solves this use case by permitting linking an LGPL shared library with proprietary (and other non-GPL) software, as long as the user has the right to modify, redistribute, etc. the shared library (and use the proprietary program in combination with the updated version of the shared library).
The authors of the LGPL explicitly note that it is only intended to be used in cases where the Free Software Movement's goals of promulgating Free Software are better served by providing Free Software alternatives to proprietary libraries. e.g. media codecs designed to compete with proprietary alternatives, where wide community adoption is key, even when that means convincing proprietary software to adopt an LGPL dependency.

@eli-schwartz You spread this all over the web. I see that your personal preference is copyleft, however spreading bad press just because you dont like the licencse is not fair and plain immoral imho.

You are factually wrong about my thought processes and personal feelings.
I respect the right of software developers to license or relicense their personal work as they wish -- I have zero respect for software developers who commit copyright infringement against third-party contributions by claiming they are legally permitted to relicense copyleft software that they don't own.

Thats fine. I dont.

You do need to verify what was contributed and that no traces remain. You also need to reassure potential users that this has been done.

Because this is so exhausting to discuss over and over I indeed took the time to review it. Core and plugins are done, python plugins are on the way.

 Deleting the issue sends a very loud and clear message to users, and it's not a polite message.

Because I was (am) not willing to release the code under a copyleft license, people became so upset that the discussion completely escalated and became personal. I only deleted the issue because they completely threw me off balance with demands, insults, and ingratitude, and it was such a low-level discussion that didn't belong on an issue tracker. Moreover, it eventually turned into a general flamewar and had nothing to do with the licensing of Albert in the end.

If you want to know whether the code contains someone else's legally significant GPL contribution, you need to perform a proper review.

There have never been GPL contributions besides a few Python plugins. There license transition to MIT is waiting to be approved, if rejected they will be removed.

The GPl explicitly forbids "combined works" containing code incompatible with the GPL. Combining a GPL licensed plugin with a program that is not GPL compatible (such as a proprietary freeware license) is a combined work. The general rule of thumb is that use of "APIs" or "linking" means it's a combined work. The standard workaround for this is to communicate with software under an incompatible license by invoking the incompatible software as an externally forked disk executable, and only using the standard output stream (which is content that the software produces; much like using Microsoft Word to write a school essay doesn't mean that your school essay belongs to Microsoft).
Note that it also depends what sort of information is actually being communicated via rpc: https://www.gnu.org/licenses/gpl-faq.en.html#MereAggregation
Keep in mind that the GPL was written by "actual for real lawyers" with the explicit intent of treating plugins as a technology which authors of nonfree software often try to use to "nefariously circumvent their obligations when incorporating GPL code into their program.
In short: albert plugins that use the GPL (whether the plugin code is GPL or whether it links to a GPL library) are illegal to distribute in binary form, even in a separate package.
I would like to think that they're illegal to distribute in source form as well, but I'm not sure that's actually legally the case... it's an unethical attempt to violate the spirit of the law anyway, so, boo.

Note that the LGPL exists explicitly for the case where authors of software would like to write GPL software but also wish to allow proprietary software to use the GPL stuff. The LGPL solves this use case by permitting linking an LGPL shared library with proprietary (and other non-GPL) software, as long as the user has the right to modify, redistribute, etc. the shared library (and use the proprietary program in combination with the updated version of the shared library).
The authors of the LGPL explicitly note that it is only intended to be used in cases where the Free Software Movement's goals of promulgating Free Software are better served by providing Free Software alternatives to proprietary libraries. e.g. media codecs designed to compete with proprietary alternatives, where wide community adoption is key, even when that means convincing proprietary software to adopt an LGPL dependency.

Thats right. I think i understand the GPL, although I dont see the point in that "IO is not combined work thing". Thats just a technical aspect. They are functionally equivalent. Sure serialization adds overhead but its possible to emulate using RPCs.

@eli-schwartz: as someone coming from outside of the NixOS community, please do not use our issue tracker as a place to discuss in an inflammatory manner. (And to be fair, people of the NixOS community, please be good and don't.)
@ManuelSchneid3r: feel free to respond in kind when you are directly concerned, but also keep in mind that this is a tracking issue for our distro, for the licensing issue, which should be considered of neutral sentiment here.
(It's not for us to decide, we mainly need to correct the misrepresentation and faithfully represent the reality.)

The debate about whether the project itself is or isn't OSS, is or isn't doing it legitimately, likely should be continued at the project. And all parties, please be good and think of the people in the discussions. It seems in this situation there is a lot of nuance.

I recently changed the license to 1.1. This is basically a BSD-2-Clause without the permission for redistribution of modifications and an explicit exclusion of Microsoft or Apple platforms.


Kotlinx Serialization

Hello there,
may I ask, is Kotlinx Serialization supported with some trick, or not? I tried to use Kotlinx Serialization for ContentNegotiation, but appearently apidoc structures dont have Serializable annotation.
In case there is no way how to make it, would you mind if I send PR?

@Huholoman Do so, please. I dont think anyone would mind:)

In worst case, we will have another fork

I found this one that works with both Ktor 3 and kotlinx serialization
https://github.com/SMILEY4/ktor-swagger-ui