text:
Tests for Mandala Health

Currently in order to answer the question "is mandala healthy", it takes 10min to do some manual testing/inspecting, we can write some tests to automate this process, so it will take 1 command line run to check mandala health.

indexer (most important, other things never failed so far if this is healthy):net_indexer()

compare lastProcessedHeight, targetHeight with current block height
compare lastProcessedTimestamp to current time.

graphql: make graphql query to https://tc7-graphql.aca-dev.network directly, check if:

earliest txReceipt and logs exist.
middle txReceipt and logs exist.
latest txReceipt and logs exist.

rpc: make some example calls:

net_cacheInfo and check cachedBlocks and latest block
eth_getLogs (earliest, middle, latest logs)
eth_getTxByHash, eth_getTxReceipt (earliest, middle, latest txs)
eth_call
eth_getCode

A better version will be some sort of UI that integrates these checks, which keeps checking indexer every 10 min, checks graph and rpc every hour, and display the result/error. Maybe have a button to manually re-run the checks.

related to #249

we can have a health check endpoint and configure datadog to call the endpoint every 10 mins. we could setup alerts and see historical results from datadog.

sounds good, we can prioritize #249 over this one. For the health check endpoint, I think checking indexer health should be enough, since as along as indexer is healthy, other services work as expected (so far). If in the future we found other services failed while indexer is healthy, we can then make some other tests to cover it.

already have health monitoring endpoint with datadog

authors: shunjizhan xlc


text:
Dynamic nginx configuration (PoC)

This PR allows automatic configuration of nginx. This is done with interlock - an application which listens to docker events (e.g. a container is created, destroyed, etc.) and modifies the nginx conf appropriately.
Main changes are:

Added an interlock container to docker-compose.yml. The image is built from this repository. This is the original interlock image + a custom template for nginx.
Added etc/labels/interlock/default.yml to specify the labels required by interlock.
Binded tools' ports to the host adop instance. This is required by interlock.
Removed execution of Load_Platform on ADOP startup. The job creates a new config file inside sites-enabled which breaks the conf generated by interlock.
Removed static configuration and for loop from adop-nginx. The image is built from this repo.
Disabled syslog for development purposes

Interlock is generating /etc/nginx/sites-enabled/tools-context.conf. It is using the custom template and listening to the docker socket. The /etc/nginx/nginx.conf is kept because it contains the ldap authentication settings.
For some reason interlock is generating the nginx configuration as expected but not reloading nginx. Once adop has spun up this command needs to be executed manually:
docker exec -it proxy nginx -s reload
This is odd as it is working on swarm but can be looked further into and get fixed.
The following tools are configured and can be accessed: jenkins, gerrit, sonar, nexus, ldap-ltb, ldap-phpadmin
Not yet configured: kibana, selenium-hub, sensu.

Made changes to the adop-nginx image to have the nginx process as PID 1. Interlock can now automatically reload the configuration.
Modified the template file that interlock uses to generate the nginx configuration to include the extra configuration for the tools.
adop-interlock repo: https://github.com/mihail-dev/adop-interlock
adop-nginx repo: https://github.com/mihail-dev/adop-nginx

Abandoning PR

source: gharchive/pull-request

repo: Accenture/adop-docker-compose

license_type: permissive

license_source: bigquery


text:
[🐛 Bug]: Unable to Drag And Drop on DesktopLibrary

What happened?
Hey everyone,
First of all congratulations for your work so far! It's quite an accomplishment!
If anyone would be kind enough to investigate why I'm unable to drag and drop an ui component within the same window.
Currently we have a WPF application that renders a node graph. Manually we can drag and drop the nodes around.

On my automation, I have tried the following:
    ${node_text_1}        Set Variable            Text[@ClassName="TextBlock"][@Name="Something"]
    ${node_text_2}        Set Variable            Text[@ClassName="TextBlock"][@Name="Something else"]
    Click Element          xpath=//${node_text_1}
    Drag And Drop       xpath=//${node_text_1}      xpath=//${node_text_2}

    ${node_text_1}        Set Variable            Text[@ClassName="TextBlock"][@Name="Something"]
    ${node_text_2}        Set Variable            Text[@ClassName="TextBlock"][@Name="Something else"]
    Drag And Drop       xpath=//${node_text_1}      xpath=//${node_text_2}

Unfortunately, while running the automation, seems the action never happened in the first place. It only place the mouse over the target.
Any advice that could be the problem?
Relevant log output
<kw name="Drag Node Under Another"">
  <arg>${node_1.Properties.Name}</arg>
  <arg>${node_2.Properties.Name}</arg>
  <kw name="Click Element" library="Zoomba.DesktopLibrary">
    <arg>xpath=//${node_text_1}</arg>
    <doc>Click element identified by `locator`.</doc>
    <msg timestamp="20220329 14:12:41.214" level="INFO">Clicking element 'xpath=//Text[@ClassName="TextBlock"][@Name="Something"]'.</msg>
    <status status="PASS" starttime="20220329 14:12:41.212" endtime="20220329 14:12:44.007" />
  </kw>
  <kw name="Drag And Drop" library="Zoomba.DesktopLibrary">
    <arg>xpath=//${node_text_1}</arg>
    <arg>xpath=//${node_text_2}</arg>
    <doc>Drags the element found with the locator ``source`` to the element found with the
locator ``target``.</doc>
    <msg timestamp="20220329 14:12:49.079" level="INFO">Dragging source element "xpath=//Text[@ClassName="TextBlock"][@Name="Something"]" to target element "xpath=//Text[@ClassName="TextBlock"][@Name="Something else"]".</msg>
    <status status="PASS" starttime="20220329 14:12:44.007" endtime="20220329 14:12:49.311" />
  </kw>
</kw>

Operating System
Windows 10 - WPF-based app
RobotFramework-Zoomba version (tag)
2.14.1

Hey @jsperafico,
I am wondering if we may just have an issue with the locators. Could you use https://accessibilityinsights.io/ and post what the properties for one of those squares looks like?

I am just wondering if there is an easier path here than xpath. Otherwise what are you using to get that Xpath? If it is the WinAppDriver UI Recorder could you give me the full xpath it gives you when you select that item?
https://github.com/microsoft/WinAppDriver/releases/tag/UIR-v1.1

Hey @Wolfe1,
Hopefully this can help...
WinAppDriver UI Recorder:
"/Pane[@ClassName=\"#32769\"][@Name=\"Desktop 1\"]/Window[@Name=\"-------------------\"][@AutomationId=\"mainPageOrganiser\"]/Window[@Name=\"-------------------\"][@AutomationId=\"-------------------\"]/Text[@ClassName=\"TextBlock\"][@Name=\"East\"]"

Windows Inspect Tool:

Accessibility Tool:

I have tried to click on both elements and works fine. Just the Drag & Drop isn't.
Anything else that I can provide you with?
Thanks a lot for the help!

"I have tried to click on both elements and works fine. Just the Drag & Drop isn't.
Anything else that I can provide you with?"
Ah understood, in that case, I guess now I just need some kind of a demo application where I can replicate this issue. I am assuming that since you redacted the window name that this is an internal application?
Also provided your blocks all have unique names I assume you could just use something like this rather than xpath (should work faster as well):
Click Element    name=East

Any update @jsperafico ?

Hey @Wolfe1,
Unfortunately:

our dev team won't be able to create a simple app that represents this test case.
also the team decided to stay with my work-around when it comes to scrollable content (by click on the down arrow every now and then).
Sorry not being able to help you more to keep improving this library.
I will make sure whenever I have time, I will circle back to those topics and if a solution is implemented to share the code with you all.
Thanks you for your support and once again sorry not being helpful.

Code moved to https://github.com/Accruent/robotframework-applicationlibrary so losing this issue.

source: gharchive/issue

repo: Accruent/robotframework-zoomba

license_source: github-api


text:
Spring Boot random "SSLException: Connection Reset" with Java 8

Hello,
We have an app that is utilizing this app to make an api call to get message details from the postmark email that is giving us an SSLException: Connection Reset. Upon doing more digging it looks like there is a potential we are using all of our "Pools" and it is causing these api calls to fail.
This is a article on stack I found that seems to be relevant to this issue.
https://stackoverflow.com/questions/64810671/spring-boot-random-sslexception-connection-reset-in-kubernetes-with-jdk11
Here is the link provided in the answer from Jude Niroshan, https://howtodoinjava.com/spring-boot2/resttemplate/resttemplate-httpclient-java-config/
Here is a stack trace for what we are seeing on our end up until we blow up in our application.
Exception:
javax.net.ssl.SSLException
Message:
Connection reset
Stacktrace:
sun.security.ssl.Alert.createSSLException(Alert.java:127)
sun.security.ssl.TransportContext.fatal(TransportContext.java:331)
sun.security.ssl.TransportContext.fatal(TransportContext.java:274)
sun.security.ssl.TransportContext.fatal(TransportContext.java:269)
sun.security.ssl.SSLTransport.decode(SSLTransport.java:138)
sun.security.ssl.SSLSocketImpl.decode(SSLSocketImpl.java:1401)
sun.security.ssl.SSLSocketImpl.readHandshakeRecord(SSLSocketImpl.java:1309)
sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:440)
org.apache.hc.client5.http.ssl.SSLConnectionSocketFactory.executeHandshake(SSLConnectionSocketFactory.java:303)
org.apache.hc.client5.http.ssl.SSLConnectionSocketFactory.createLayeredSocket(SSLConnectionSocketFactory.java:275)
org.apache.hc.client5.http.ssl.SSLConnectionSocketFactory.connectSocket(SSLConnectionSocketFactory.java:251)
org.apache.hc.client5.http.impl.io.DefaultHttpClientConnectionOperator.connect(DefaultHttpClientConnectionOperator.java:181)
org.apache.hc.client5.http.impl.io.PoolingHttpClientConnectionManager.connect(PoolingHttpClientConnectionManager.java:447)
org.apache.hc.client5.http.impl.classic.InternalExecRuntime.connectEndpoint(InternalExecRuntime.java:162)
org.apache.hc.client5.http.impl.classic.InternalExecRuntime.connectEndpoint(InternalExecRuntime.java:172)
org.apache.hc.client5.http.impl.classic.ConnectExec.execute(ConnectExec.java:142)
org.apache.hc.client5.http.impl.classic.ExecChainElement.execute(ExecChainElement.java:51)
org.apache.hc.client5.http.impl.classic.ProtocolExec.execute(ProtocolExec.java:192)
org.apache.hc.client5.http.impl.classic.ExecChainElement.execute(ExecChainElement.java:51)
org.apache.hc.client5.http.impl.classic.HttpRequestRetryExec.execute(HttpRequestRetryExec.java:96)
org.apache.hc.client5.http.impl.classic.ExecChainElement.execute(ExecChainElement.java:51)
org.apache.hc.client5.http.impl.classic.ContentCompressionExec.execute(ContentCompressionExec.java:152)
org.apache.hc.client5.http.impl.classic.ExecChainElement.execute(ExecChainElement.java:51)
org.apache.hc.client5.http.impl.classic.RedirectExec.execute(RedirectExec.java:115)
org.apache.hc.client5.http.impl.classic.ExecChainElement.execute(ExecChainElement.java:51)
org.apache.hc.client5.http.impl.classic.InternalHttpClient.doExecute(InternalHttpClient.java:170)
org.apache.hc.client5.http.impl.classic.CloseableHttpClient.execute(CloseableHttpClient.java:245)
org.apache.hc.client5.http.impl.classic.CloseableHttpClient.execute(CloseableHttpClient.java:188)
org.apache.hc.client5.http.impl.classic.CloseableHttpClient.execute(CloseableHttpClient.java:162)
com.postmarkapp.postmark.client.HttpClient.execute(HttpClient.java:90)
com.postmarkapp.postmark.client.HttpClientHandler.execute(HttpClientHandler.java:61)
com.postmarkapp.postmark.client.HttpClientHandler.execute(HttpClientHandler.java:44)
com.postmarkapp.postmark.client.ApiClient.getTemplate(ApiClient.java:114)
Any help is much appreciated! I look forward to working with y'all to help debug this.
Allan

Hi @amwakefield-olson
thank you for reporting this, I will see to check it out. Could you share maybe more information how this happens? Do you run many Postmark http client requests when it does, and how many, etc?
The more details you could share, the more we can help out.
Thanks

@ibalosh - thanks for responding, apologies it took me a minute to get back. When we send or have sent email's, we go grab that information from your API and populate a message to a queue. We are calling your API (this is approximate apologies) 11,000 times a day to get Information from email transactions. I unfortunately do not have a guess on how many times as this is handled by a listener. If you have time I'd be more than happy to connect with you to give you a better understanding.
Thanks,
Allan

Hi @amwakefield-olson
I did not get a chance yet to take a look at this, but will see to investigate it bit more in week or so. Meanwhile if you get any additional details before that, please share them here.
Igor

Apologies - I am still looking to work with y'all at some point on this. I unfortunately don't have anymore details that I can share as far as amount of failures. It looks like we've had 308 failures in the last 90 days, we also have it built where we re-try to send the email 5 times before we send it to a log. If we could touch base at some point to go over this that would be great!
Thanks again,
Allan

Hi @amwakefield-olson
we have released a new version of the library 1.11.1 , which contains newer version of http client and some configuration tune ups. Let us know if it helps with using the client.

@ibalosh
Thank you! I will pull them into my services and monitor!
Allan

Hello!
We are still experiencing Connection Reset issues with the Pooling Manager as it stands today. I was wondering if y'all would be able to make an update to allow us to be able to set custom max total and default routes per connection within the HttpClient constructor.
Here is an example.
`  public HttpClient(Map<String, Object> headers, int connectTimeoutSeconds, int readTimeoutSeconds, int totalMaxConnections, int defaultConnectionMaxPerRoute) {
this.headers = headers;
this.clientConfigBuilder = RequestConfig
.custom()
.setConnectTimeout(Timeout.ofSeconds(connectTimeoutSeconds))
.setConnectionRequestTimeout(Timeout.ofSeconds(connectTimeoutSeconds))
.setConnectionKeepAlive(Timeout.ofSeconds(connectTimeoutSeconds))
.setResponseTimeout(Timeout.ofSeconds(readTimeoutSeconds));
    this.connectionManager = new PoolingHttpClientConnectionManager();
    connectionManager.setMaxTotal(totalMaxConnections);
    connectionManager.setDefaultMaxPerRoute(defaultConnectionMaxPerRoute);

    this.client = HttpClients.custom().setConnectionManager(connectionManager).build();

}`
Thanks!
Allan

authors: amwakefield-olson ibalosh

repo: ActiveCampaign/postmark-java

license: MIT


text:
Update peerDependencies to support Grunt 1.0

Update peerDependencies to support Grunt 1.0
Hello,
This is an automated issue request to update the peerDependencies for your Grunt plugin.
We ask you to merge this and publish a new release on npm to get your plugin working in Grunt 1.0!
Read more here: http://gruntjs.com/blog/2016-02-11-grunt-1.0.0-rc1-released#peer-dependencies
Also on Twitter: https://twitter.com/gruntjs/status/700819604155707392
If you have any questions or you no longer have time to maintain this plugin, then please let us know in this thread.
Thanks for creating and working on this plugin!
(P.S. Close this PR if it is a mistake, sorry)

@jehna do you plan to merge this? 😃

@KurtWagner sure, thanks for the reminder 😺

authors: KurtWagner gruntjs-updater jehna

repo: ActivearkJWT/grunt-size-report

license: mit


text:
fix(versions): update Activiti/activiti-cloud-modeling-dependencies versions into develop

UpdateBot pushed maven dependency: org.activiti.cloud.modeling:activiti-cloud-org-dependencies to: 7.1.107

UpdateBot commands:
updatebot push-version --kind maven org.activiti.cloud.modeling:activiti-cloud-org-dependencies 7.1.107


text:
fix(versions): update Activiti/activiti-cloud-query-service versions into develop

UpdateBot pushed maven dependency: org.activiti.dependencies:activiti-dependencies to: 7.1.108

UpdateBot commands:
updatebot push-version --kind maven org.activiti.dependencies:activiti-dependencies 7.1.108 org.activiti.api:activiti-api-dependencies 7.1.54 org.activiti.core.common:activiti-core-common-dependencies 7.1.61 org.activiti.build:activiti-parent 7.1.28

repo: Activiti/activiti-cloud-query-service


text:
fix(versions): update Activiti/activiti-cloud-runtime-bundle-service versions into develop

UpdateBot pushed maven dependency: org.activiti.cloud.common:activiti-cloud-service-common-dependencies to: 7.1.100

UpdateBot commands:
updatebot push-version --kind maven org.activiti.cloud.common:activiti-cloud-service-common-dependencies 7.1.100


text:
update org.activiti.cloud.dependencies:activiti-cloud-dependencies to 7.1.144

UpdateBot pushed maven dependency: org.activiti.cloud.dependencies:activiti-cloud-dependencies to: 7.1.144

UpdateBot commands:
updatebot push-version --kind maven org.activiti.cloud.dependencies:activiti-cloud-dependencies 7.1.144 --merge false

repo: Activiti/example-cloud-connector


text:
[FEATURE] Use custom SearchWindow to create new atoms

Is your feature request related to a problem? Please describe.
By default Unity Atoms adds many new asset "categories" (Events, Variables, Constants, Actions, etc.) with even more asset types (bool, int, string, Collider, etc.). Even with only the base types the regular Assets/Create context menu can become quite annoying to navigate due to the number of sub menus and menu items available when creating a new atom.
Describe the solution you'd like
Use Unity's SearchWindow from the experimental GraphView API to provide an alternative way to create new atoms:

Describe alternatives you've considered
Create a custom "Create Atom" window or wizard that does not depend on Unity's experimental API.
Additional context
I quickly put something together (see the gif above) and I could prepare a PR if requested. Also this does use a custom API to simplify the usage of the SearchWindow API which I still want to publish as an UPM package.

Thanks for submitting this issue! I think this sounds like a neat idea. If you are up for it a PR would be really appreciated. Since it's a new and experimental feature I would suggest to add Platform dependent compilation to the specific versions of Unity that supports it (also an upper limit since Unity is likely to remove the experimental namespace in future releases). Make sure also to read the contribution guidelines before submitting the PR.

this is fully solveable without the GraphView API, using: https://docs.unity3d.com/ScriptReference/IMGUI.Controls.AdvancedDropdown.html
I ran a quick test, with it:
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using UnityAtoms.Editor;
using UnityEditor;
using UnityEditor.IMGUI.Controls;
using UnityEditor.PackageManager.UI;
using UnityEngine;

public class TestScript : EditorWindow
{
   [ MenuItem("Assets/Create/MyAsset" ) ] //Adds to the project window's create menu
   public static void FOo()
   {
      var types = AppDomain.CurrentDomain.GetAssemblies()
         .SelectMany(assembly => assembly.GetExportedTypes())
         .Where(x => x                                            != null)
         .Where(x => (x.Attributes & TypeAttributes.Serializable) != 0)
         // .Where(t => !(t.Namespace?.Contains("System") ?? false))
         .Where(t => !(t.Namespace?.Contains("Microsoft")   ?? false))
         .Where(t => !(t.Namespace?.Contains("UnityEditor") ?? false))
         .GroupBy(t => t.Namespace.Split('.')[0]);

      var dropdown = new AtomGeneratorEditor.SearchTypeDropdown(new AdvancedDropdownState(), types, (s) =>
      {
         Debug.Log(s);
      });

      Debug.Log(EditorWindow.focusedWindow.GetType().Name);
      Debug.Log(EditorWindow.focusedWindow.position);
      EditorWindow.focusedWindow.BeginWindows();
      dropdown.Show(new Rect(0, -EditorWindow.focusedWindow.position.height+40, EditorWindow.focusedWindow.position.width, EditorWindow.focusedWindow.position.height));
      EditorWindow.focusedWindow.EndWindows();
   }
}

and the result:

I didn't know about AdvancedDropdown, thanks for pointing that out! I guess the main difference is that GraphView.SearchWindow uses UIElements. Tbh, I found that the hard part is to actually build the list of entries from the MenuItemAttribute.itemName and get the right icon to show up.
I could look into AdvancedDropdown and see if I can port my existing code.

AdvancedDropdown is sadly a dropdown, so it is rly awkward to get it to the correct position.
For the list i was using:
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Runtime.InteropServices.WindowsRuntime;
using UnityAtoms.Editor;
using UnityEditor;
using UnityEditor.IMGUI.Controls;
using UnityEditor.PackageManager.UI;
using UnityEngine;

public class TestScript
{
   class StringTree<T>
   {
      public Dictionary<string, StringTree<T>> subTrees { get; } = new Dictionary<string,StringTree<T>>();
      public T Value { get; private set; }

      public void Insert(string path, T value, int idx = 0)
      {
         Internal_Insert(path.Split('/'), idx, value);
      }

      private void Internal_Insert(string[] path, int idx, T value)
      {
         if (idx >= path.Length)
         {
            Value = value;
            return;
         }
         if(! subTrees.ContainsKey(path[idx])) subTrees.Add(path[idx], new StringTree<T>());
         subTrees[path[idx]].Internal_Insert(path, idx+1, value);
      }

   }

   [ MenuItem("Assets/Create/MyAsset &#Q" ) ] //Adds to the project window's create menu
   public static void Foo()
   {
      StringTree<Type> typeTree = new StringTree<Type>();

      foreach (var type in TypeCache.GetTypesWithAttribute<CreateAssetMenuAttribute>().Where(t => t.Namespace.Contains("Atom")))
      {
         typeTree.Insert(type.GetCustomAttribute<CreateAssetMenuAttribute>().menuName, type, 1);
      }
      var dropdown = new SearchTypeDropdown(new AdvancedDropdownState(), typeTree, (s) =>
      {
         EditorApplication.ExecuteMenuItem("Assets/Create/" + s.GetCustomAttribute<CreateAssetMenuAttribute>().menuName);
      });

      Debug.Log(EditorWindow.focusedWindow.GetType().Name);
      Debug.Log(EditorWindow.focusedWindow.position);
      EditorWindow.focusedWindow.BeginWindows();
      dropdown.Show(new Rect(0, -EditorWindow.focusedWindow.position.height+40, EditorWindow.focusedWindow.position.width, EditorWindow.focusedWindow.position.height));
      var window = typeof(SearchTypeDropdown).GetField
         ("m_WindowInstance", BindingFlags.Instance | BindingFlags.NonPublic).GetValue(dropdown) as EditorWindow;
      window.position = EditorWindow.focusedWindow.position;
      EditorWindow.focusedWindow.EndWindows();
   }

   private class SearchTypeDropdown : AdvancedDropdown
   {
      private readonly StringTree<Type> _list;
      private readonly Action<Type>   _func;

      private readonly List<Type> _lookup = new List<Type>();

      public SearchTypeDropdown(AdvancedDropdownState state, StringTree<Type> list, Action<Type> func) : base(state)
      {
         _list = list;
         _func = func;
      }

      protected override void ItemSelected(AdvancedDropdownItem item)
      {
         base.ItemSelected(item);
         _func?.Invoke(_lookup[item.id]);
      }

      private void Render(StringTree<Type> tree, string key, AdvancedDropdownItem parentGroup)
      {
         if (tree.Value != null)
         {
            _lookup.Add(tree.Value);
            parentGroup.AddChild(new AdvancedDropdownItem(key){id = _lookup.Count-1});
         }
         else
         {
            var self = new AdvancedDropdownItem(key);
            foreach (var subtree in tree.subTrees)
            {
               Render(subtree.Value, subtree.Key, self);
            }
            parentGroup.AddChild(self);
         }
      }

      protected override AdvancedDropdownItem BuildRoot()
      {
         var root = new AdvancedDropdownItem("UnityAtoms");

         foreach (var subtree in _list.subTrees)
         {
            Render(subtree.Value, subtree.Key, root);
         }

         return root;
      }
   }

}

have not got to the icon yet, but that would be Type -> GetAttribute to  get the icon attribute and use the value of the attribute to get the icon

Looks like you've got most of it figured out. I am going to leave my implementation here in case it is helpful. BetterSearchWindow is just a base class that simplifies showing the GraphView.SearchWindow and BetterSearchTree just helps parse the CreateAssetMenu path into a tree and convert it to a list of SearchTreeEntrys.
public class CreateAtomWindow : BetterSearchWindow<CreateAtomWindow, Type>
{
    // A list containing a cached version of the entries shown in the search window.
    // This is returned instead of creating a new list every time the window opens.
    private List<SearchTreeEntry> cachedEntries;

    private void OnEnable()
    {
        cachedEntries = CreateEntries();
    }

    private List<SearchTreeEntry> CreateEntries()
    {
        // Start by creating a new BetterSearchWindowTree with a Syste.Type payload
        var tree =  new BetterSearchTree<Type>();

        // Fancy LINQ query to get all of the atoms
        var atoms =
            from a in AppDomain.CurrentDomain.GetAssemblies().AsParallel()
            from t in a.GetTypes()
            // Get types that inherit from BaseAtom and can be instanced
            where t.IsSubclassOf(typeof(BaseAtom)) && !t.IsGenericTypeDefinition && !t.IsAbstract
            // Get the CreateAssetMenu attribute which contains the "path"
            let createAssetAttrs = t.GetCustomAttributes(typeof(CreateAssetMenuAttribute), false)
            where createAssetAttrs.Length == 1
            // Get the EditorIcon attribute to display the icon in the search window
            let iconAttrs = t.GetCustomAttributes(typeof(EditorIcon), true)
            select new
            {
                type = t,
                path = createAssetAttrs.Cast<CreateAssetMenuAttribute>().First().menuName,
                icon = iconAttrs.Cast<EditorIcon>().FirstOrDefault()?.Name
            };

        // Icon lookup dictionary to cache icons that are already looked up
        var iconLookup = new Dictionary<string, Texture2D>();

        // Add all atoms to the tree
        foreach (var atom in atoms)
        {
            // Remove "Unity Atoms/" from the path
            var path = atom.path.Substring(atom.path.IndexOf('/'));
            var content = new GUIContent(path);

            // Try to get the icon
            if (!string.IsNullOrEmpty(atom.icon))
            {
                if (iconLookup.ContainsKey(atom.icon)) content.image = iconLookup[atom.icon];
                else
                {
                    var icon = GetIcon(atom.icon);
                    iconLookup.Add(atom.icon, icon);
                    content.image = icon;
                }
            }

            // Add the atom to the tree
            tree.AddLeaf(content, atom.type);
        }

        // Convert the tree to a list of search tree entries
        return tree.ToSearchTreeEntries("Create Atom");
    }

    // Get an icon by name from the project
    private Texture2D GetIcon(string iconName)
    {
        // Try to find the icon GUID
        var iconGuids = AssetDatabase.FindAssets($"{iconName} t:texture2D");
        var iconGuidsList = iconGuids.ToList();
        var guid = iconGuidsList.FirstOrDefault();

        // Resolve the GUID to an actual texture
        if (!string.IsNullOrEmpty(guid))
            return AssetDatabase.LoadAssetAtPath<Texture2D>(AssetDatabase.GUIDToAssetPath(guid));
        return null;
    }

    // Return the search tree entries for the search window
    public override List<SearchTreeEntry> CreateSearchTree(SearchWindowContext context)
    {
        return cachedEntries;
    }

    [MenuItem("Assets/Create/Unity Atoms/Create...", priority = -1)]
    public static void ShowWindow()
    {
        // Event.current returns null in the MenuItem context so we can not use the mouse position
        // for the position of the search window. Instead we use the rough center of the currently focused window
        Rect win = EditorWindow.focusedWindow.position;
        Vector2 pos = win.position + new Vector2(win.width / 2, 50);
        Show(CreateScriptableObjectAsset, pos);
    }

    // Creates a scriptable object of the given type and saves it as an asset at the current position
    // in the project window
    public static void CreateScriptableObjectAsset(Type type)
    {
        var scriptableObject = CreateInstance(type);
        AssetDatabase.GetAssetPath(Selection.activeObject);

        // Get the currently "selected" path
        string path = "Assets";
        foreach (Object obj in Selection.GetFiltered(typeof(Object), SelectionMode.Assets))
        {
            path = AssetDatabase.GetAssetPath(obj);
            if (File.Exists(path))
            {
                path = Path.GetDirectoryName(path);
            }
            break;
        }

        // Create and save the asset
        AssetDatabase.CreateAsset(scriptableObject, path + "/new" + type.Name + ".asset");
        AssetDatabase.SaveAssets();
        AssetDatabase.Refresh();
    }
}

@soraphis or @FreshlyBrewedCode is anyone of you planning to do a PR on this? I'm planning to release v4.2 sometime soon, but might wait if there is an incoming PR.

I was going to leave that to @soraphis as it looked like he got most of it already working with AdvancedDropdown and my time is currently very limited.

authors: AdamRamberg FreshlyBrewedCode soraphis

repo: AdamRamberg/unity-atoms


text:
Error when importing two fonts of the same family

Following the conversation here, I made a couple tests and I found that if you import a font inside Duality, remove the font, then try to import the same font or even another in the same family, Duality will refuse to import the file with a generic "file type not supported" error message.
(for this test I have used 'Arial Black' and 'Arial Italic' from the Windows' Font directory)
How to reproduce:

Open a fresh copy of Duality
Import (drag and drop) Arial Black in the project. The font will be imported.
Remove Arial Black from the project.
Import Arial Italic in the project. It won't work and you will get the error.

Restarting the editor fixes the issue, until you do it again :)

Yep, this is "expected" behavior, although not really the one that is preferable. There should be done something about it, but I am not sure how to handle this.

Duality uses an internal cache for Font families. This is provided by .Net and there's nothing Duality actually does with it, except adding Font data.
It doesn't support adding the same Font family multiple times and I'm not even sure that this should be supported either.
The error is caused by the fact that each imported Font remains in that cache and it won't allow to add the same family multiple times.

One way to handle this would be to keep a PrivateFontCollection for each Font, or instantiate it temporarily and get rid of it again later.
Will need to investigate whether this is a good solution.

Hmm.. I understand where this is coming from.
I agree that it shouldn't be that big of a deal.. I only noticed that because I imported the wrong font style and wanted to import another one (a quite rare case I think)
Maybe it could be enough to put an appropriate warning message if the PrivateFontCollection already contains the Family of the new font. Something like "Cannot import this font now, please restart to rebuild font cache."

I'm sure there must be a way to do this properly - I'm just not sure, which one it is yet. In any case, thanks for pointing this out. :) It's bad usability and it needs to be addressed.

This should be addressed in the course of getting rid of System.Drawing in v2.0 and making Duality Fonts full bitmap fonts.

This has been fixed in the course of the above mentioned issue. Closing this.

authors: AdamsLair SirePi

repo: AdamsLair/duality


text:
Check if gameobjects going to be removed in OnShutdown-Method

Summary
The engine throws an exception when you remove gameobjects in the OnShutdown-Method.
How to reproduce [Bugs]
Here is my code:
private List<GameObject> enemies = new List<GameObject>();

public void OnInit(InitContext context)
{
    if (context == InitContext.Activate)
    {
        // add some gameobjects and put them into the list.
    }
}

public void OnShutdown(ShutdownContext context)
{
    if (context == ShutdownContext.Saving)
    {
        foreach (var enemy in enemies)
        {
            Scene.Current.RemoveObject(enemy);
        }
    }
}

What's my plan?
I like to keep track of "enemies" and I want to remove them after exiting the sandbox-mode.
Attachments
The Exception:
[Core] Error:   OnSaving() of Scene "Data\Scenes\TestLevel" failed: InvalidOperationException: Collection was modified; enumeration operation may not execute.
CallStack:
   at System.Collections.Generic.HashSet`1.Enumerator.MoveNext()
   at System.Linq.Enumerable.WhereEnumerableIterator`1.MoveNext()
   at Duality.Resources.Scene.OnSaving(String saveAsPath) in c:\projects\duality\Duality\Resources\Scene.cs:line 942
   at Duality.Resource.CheckedOnSaving(String saveAsPath) in c:\projects\duality\Duality\Resource.cs:line 215

Jeah, I know that I try to remove gameobjects when the engine wants to save them.

I just realized that I needn't keep track of them... :see_no_evil: I had a logic error in my code... so.. jeah..
Nevertheless, the bug should be fixed, shouldn't he? :)

I just realized that I needn't keep track of them... :see_no_evil: I had a logic error in my code... so.. jeah..

Yep, sandbox does that already by reloading the Scene :)

Nevertheless, the bug should be fixed, shouldn't he? :)

Yep.

I don't think this can be categorized as a bug, and honestly I don't see how else you are supposed to fix it. Removing objects from a collection that is being enumerated is an error in and by itself (the Exception itself is coming from System, not from Duality). Even if you do that in basic c# you will get the same error, and there's nothing else to do besides review your code :)

Now that you're commenting on the issue, I think it has been solved inadvertently by implementing the deterministic component update order in issue #303, since all ICmpInitializable calls are now performed on a (sorted) copy of the actual data storage.
It wouldn't hurt to write a unit test for this issue though to verify it and guard against regressions. A complete test should check for this "self-modifying scene graph" behavior to be valid for all init and shutdown contexts, as well as all situations in which they can occur.
The existing ICmpInitializableTest class covers them all and it would make sense to extend that class to perform all relevant once more in a different form where the component removes its own object from the scene when the tested event is received. Instead of checking whether the event was received (existing tests already cover this), simply assert that the removal was successful at the end.

authors: ChristianGreiner SirePi ilexp


text:
Cadastro e envio de e-mail

O servidor foi configurado para o envio de e-mail.
Precisava testar a solução no site php
para o envio de email para fora

@venezianluis  arrumar index.php e cia para que formulario de cadastro de email e disparo de email (ex. via crontab) comecem a funcinar. Ideal que o PostgreSQL dispare, mas pode ser via PHP.  No ato do cadastro precisa ser enviado email pedindo confirmacao.
Acertar testes e primeiros exemplos com @crebollobr

@crebollobr
Necessitamos das especificações abaixo de smtp para poder desenvolver o script de disparo:

User
Password
Port

Foram criados dois novos objetos na base dt03t_main:

optim.st_newsletter: Tabela que armazena registros dos e-mails que solicitaram assinatura de newsletter.
api.add_st_newsletter: Function que insere na tabela acima.

É possível fazer a chamada do rpc via POST em ambiente local:
$.post('http://localhost:3103/rpc/add_st_newsletter', { email: "email@email" } ); -> Êxito.
Alguma ideia para como disparar esse post em Produção? Os objetos também foram criados em ambiente de produção.

Está configurado no localhost:25
ou no comando mail
sem autenticação
Em seg., 26 de out. de 2020 às 20:38, Luis Venezian <
notifications@github.com> escreveu:

@crebollobr https://github.com/crebollobr
Necessitamos das especificações abaixo de smtp para poder desenvolver o
script de disparo:

User
Password
Port

—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
https://github.com/AddressForAll/site/issues/19#issuecomment-716883657,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AFMDZ73J7OU22PSSLY7HK5TSMYB77ANCNFSM4SYWMRIA
.

Já que eu estou marcado como "assignee", eu tenho que fazer algo a respeito desta issue?

Boa noite,
Durante a semana podemos ver isso juntos, a noite.
Abraço,
Carlos Rebollo
Em sáb., 31 de out. de 2020 às 23:44, Igor Eliezer notifications@github.com
escreveu:

Já que eu estou marcado como "assignee", eu tenho que fazer algo a
respeito desta issue?
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
https://github.com/AddressForAll/site/issues/19#issuecomment-720017796,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AFMDZ76CH5FWZSDAXVN2QJ3SNTDSTANCNFSM4SYWMRIA
.

Por favor registrarem o andamento desta task aqui nos comentarios.

Uma vez instanciado um objeto da classe PHPMailer é necessário atribuir as seguintes configurações para efetuar algum disparo, eu preciso identificar como preencher esses, você pode ajudar por gentileza? @crebollobr
    $mail->SMTPDebug = SMTP::DEBUG_SERVER;                      // Enable verbose debug output
    $mail->isSMTP();                                            // Send using SMTP
    $mail->Host       = 'localhost';                            // Set the SMTP server to send through
    $mail->SMTPAuth   = true;                                   // Enable SMTP authentication
    $mail->Username   = 'user@example.com';                     // SMTP username
    $mail->Password   = 'secret';                               // SMTP password
    $mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS;         // Enable TLS encryption; `PHPMailer::ENCRYPTION_SMTPS` encouraged
    $mail->Port       = 25;                                     // TCP port to connect to, use 465 for `PHPMailer::ENCRYPTION_SMTPS` above

    //Recipients
    $mail->setFrom('from@example.com', 'Mailer');

Configurado em /addresforall.org/default/email_enviar.inc.php a url de disparo está retornando um erro ao conectar-se com smtp: SMTP Error: Could not connect to SMTP host.
Quando retirada a opção $mail->isSMTP(); o erro também desaparece e é retornado uma mensagem de êxito, entretanto, o e-mail não é entregue, estou procurando algo na documentação

Alguma ideia?

Olá,
O Servidor da microsoft não aceita "from" fora do nosso domínio, mas aceita "replay to".
Essa ultima versão da biblioteca precisa colocar explicitamente que não quer autenticação e nem criptografia ( comunicação localhost )

Deu certo o teste, vou fechar

authors: IgorEliezer crebollobr ppKrauss venezianluis

repo: AddressForAll/site


text:
Parental control module (Windows 10) does not block adult sites

На Windows 10 порносайты не блокируются c включённым родительским режимом (настроено всё правильно): есть и в выдаче всех поддерживаемых поисковиков, некоторые не блокируются при заходе по адресу в строке браузера. Проблема решается только включением семейного DNS сервера. Установлен DrWeb, отключение ничего не меняет
Время в логах, 8.09 15.12-15.16
adg_logs_7.9.3869.0_0908_1517.zip

Logs show that @@||yandex.ru$document applies to the search request. Hence, all filtering is forefeited, including parental control (and safebrowsing, too).
@ameshkov Is this correct behaviour? It's been like this for years.

It is, but where does this rule come from?

New logs came in.

HTTPS filtering enabled: False
User error :)

Enabling HTTPS filtering in the app solved the problem

authors: PavelParkhomenko ameshkov ngorskikh

repo: AdguardTeam/CoreLibs


text:
Implement VirtualSocket

https://trello.com/c/sceucPlf/4-virtual-socket

TestJavaVirtualSocket fails on MacOS X


text:
Please Add Specificity for Daily, Weekly, and Monthly Refresh Timing

Issue in ./help/components/audiences/publish.md
Hello,
For daily, weekly, and monthly...

What time of day do daily, weekly, and monthly refreshes occur?
Can the daily, weekly, and monthly time of day refresh be configured by users, possibly by controlling settings at the CJA admin level?
What day of the week do weekly refreshes occur, and can this also be configured, possibly by controlling settings at the CJA admin level?

Hoping that these details can be added to the FAQ

@jtwood426 - the answers to your questions have been added to the bottom of the FAQ section. Thanks.
https://experienceleague.adobe.com/docs/analytics-platform/using/cja-components/audiences/publish.html#faq


text:
Added UI documentation for RainFocus Connector

Added tutorial for new RainFocus Source Connector to Experience Platform.
@adobe-documentation-team please review.

Hey @mgmilcher just following up on this PR. The way the images are set up in the doc is making the PR un-reviewable on Git. Do you mind changing the way they are formatted and uploading the images instead? Here are some additional guides on our authoring best practices as well:

https://experienceleague.adobe.com/docs/contributor/contributor-guide/writing-essentials/general-writing-guidance.html?lang=en
https://experienceleague.adobe.com/docs/experience-platform/destinations/destination-sdk/document-destination/authoring-best-practices.html?lang=en

Thanks!

Thank you @mgmilcher ! Will have feedback/suggestions by end of day

Hi @carlojavier - Happy Friday! Appreciate the quick turnaround and detailed feedback earlier this week. Please review the requested changes, which have now been pushed.

Thanks @mgmilcher ! I've brought this PR over to our internal repo. Also thanks for the feedback, I'll update the guides to make the template more discoverable

authors: carlojavier mgmilcher


text:
Failed to verify Freemarker signature in build repo PR checks

When creating a build repo PR, the Linux checks fail due to something going wrong with the asc file download, and then everything seems to domino from there.
Example PR: https://github.com/AdoptOpenJDK/openjdk-build/pull/2146
Error:
--2020-10-15 11:47:34--  https://www.apache.org/dist/freemarker/engine/2.3.30/binaries/apache-freemarker-2.3.30-bin.tar.gz.asc
Resolving www.apache.org (www.apache.org)... 95.216.24.32, 95.216.26.30, 40.79.78.1, ...
Connecting to www.apache.org (www.apache.org)|95.216.24.32|:443... connected.
Unable to establish SSL connection.
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed

  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
100   286  100   286    0     0   1228      0 --:--:-- --:--:-- --:--:--  1227
rm: cannot remove '/__w/openjdk-build/openjdk-build/workspace/./build//public_key.gpg': No such file or directory
gpg: no valid OpenPGP data found. gpg: the signature could not be verified. Please remember that the signature file (.sig or .asc) should be the first file given on the command line.
Failed to verify signature of apache-freemarker-2.3.30-bin.tar.gz
expected "13AC2213964ABE1D1C147C0E1939A2520BAB1D90" got ""
Error: Process completed with exit code 1.

I can access that file via my browser, so we know the file exists.
Re-running the checks to see if it's intermittent.

Ok, all the Linux check re-runs passed. Could have been a transitory glitch. Will close this.

repo: AdoptOpenJDK/openjdk-build


text:
Release versions aren't always actually official releases

For example, jdk8u152-b04 is a tag in the mercurial forest (which we've carried over to the GitHub clone), which we are treating as an official release.  However, jdk8u152 has not been officially released release by OpenJDK (confusing I know!).
Unfortunately this is made worse as there is no actual tag which represents the version which is the official release version (it's just the last one of that series, e.g. jdk8u131-b11).
Needs further discussion on how we'll manage this.
NOTE Our Nightly builds cover the use case for the 'top of the tree / latest HEAD' for those who want to test those releases

This feels like a valid issue to raise in the OpenJDK project -- how to identify the source code accompanying real releases.
Of course, their answer may well be that they, OpenJDK, don't have the concept of releases - it just so happens that the Oracle release is taken from the latest bXXX, and that source stream is abandoned at OpenJDK; but it is a fair ask.

https://bugs.openjdk.java.net/browse/JDK-8180946 has been raised to provide an automated tag based solution.
In the mean time we'll either have to do one of the following:

Check the Oracle download site manually (or screen scrape?) to see if an update has gone GA.

Still release based on earlier (non Oracle GA) builds and make sure that users are informed as to why there is a difference between our OpenJDK binary version and that of what Oracle produces.

How about we do this manually for now?  We should not be pushing "releases" that are not recognized as such in the OpenJDK community.

@gdams - Can we stop the automatic release and just release manually for now?

we are already doing that, just the nightly builds are run on the latest tag

OK, this goes to the Icebox then

Actually I'll just close it for now.

Actually nope - we're showing u160-00 which is not an official release

yeah I built u160-00 the other day

Sorry to be clear what I mean is that Oracle hasn't released u160 yet - that will likely happen on a later build number.  We're going to try to match the Oracle release train to minimise the friction.
@tellison Unless we decide that we can leapfrog Oracle if our earlier builds are of the right quality?

Anything what have zero changes after the tag is release candidate.
There one more hidden issue, that  and that is when you pull the merge. or several merges after longer silence:
o  changeset:   2000:c6c15bd2fa20
|  tag:         tip
|
o    changeset:   1999:af980289e0df
|\   tag:         jdk8u162-b02
| |
| o  changeset:   1998:01c1e35a6ade
| |
| o  changeset:   1997:7a25d12cd94f
| |  tag:         jdk8u152-b16
| o    changeset:   1996:d680e12deacb
| |\   tag:         jdk8u152-b15
....

tip is u162-b02+X changeset,
u152-b16+1 changesets is there too (01c1e35a6ade)
u152-b16+0 changesets is there too (release candidate)
this is easy example. Real life examples are much more tricky
mapping of  forest to single repo may even lead to lost of real tags

Imho you can not release automatically  never - Anything built is  candidate. Only once tested, it can be considered as release able binary.  If the testing is done here. If you rely on heaving it tested  in oracle or anywhere else, you can be sure that they are (probably) testing theirs own binaries. So if they say uXYZ.bAB is released, that means that theirs binaries based on this tag are good enough. Not our builds based on this

@judovana So the plan is to only put out a release once it's been tested - we still need to hook up that work flow.

Yup. And that is long way to do.  Up to that moment, following oracle is probably the best what can be done.

Does it make sense to release from non-tagged revision? I think it does not. So complexity with mercurial history is just for naming internal/nightly builds, which are never release candidates.
Once revision is properly tagged upstream, build can be done on that revision and published after proper testing. The process seems pretty straight-forward, or do I miss something?

no it does not. Thats why I write release candidate have 0 changesets after
tag.
All the compelxity is for automation purposes. You do not need to care if it
is release candidate or nightly build. You pull, you ta ke tip and tag,
snapshot and test it all equally.
To make different approach for random snapshot and for builds from tags,
would be useful ionly if there is not enough HW to test more granular pulls
--
Mgr. Jiri Vanek
judovana@email.cz
---------- Původní e-mail ----------
Od: Michal Vala notifications@github.com
Komu: AdoptOpenJDK/openjdk-build openjdk-build@noreply.github.com
Datum: 15. 11. 2017 10:02:18
Předmět: Re: [AdoptOpenJDK/openjdk-build] Release versions aren't always
actually official releases (#98)
"
Does it make sense to release from non-tagged revision? I think it does not.
So complexity with mercurial history is just for naming internal/nightly
builds, which are never release candidates.
Once revision is properly tagged upstream, build can be done on that
revision and published after proper testing. The process seems pretty
straight-forward, or do I miss something?
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
(https://github.com/AdoptOpenJDK/openjdk-build/issues/98#issuecomment-344528449)
, or mute the thread
(https://github.com/notifications/unsubscribe-auth/ACxRS8H2cwZ38Fv_l0ITCnFYGHkOGFYQks5s2qiSgaJpZM4NeDl6)
.
"

Upstream has landed, not backported.  We'll just suffer along but make adjustments in the API project.

authors: gdams judovana karianna sparkoo tellison


text:
Update freemarker version and 256sum

Fixes #2472
Signed-off-by: Adam Brousseau adam.brousseau88@gmail.com

I have not tested

Thanks Adam, didn't see this, we've already updated: https://github.com/AdoptOpenJDK/openjdk-build/pull/2475

authors: AdamBrousseau andrew-m-leonard


text:
Maven variants adoptopenjdk/maven-*-openj9 images old

Good! Standard OpenJ9 images (openj9 0.12.1, 19 hours old):
# docker run --rm adoptopenjdk/openjdk8-openj9 java -version
openjdk version "1.8.0_202"
OpenJDK Runtime Environment (build 1.8.0_202-b08)
Eclipse OpenJ9 VM (build openj9-0.12.1, JRE 1.8.0 Linux amd64-64-Bit Compressed References 20190205_213 (JIT enabled, AOT enabled)
OpenJ9   - 90dd8cb40
OMR      - d2f4534b
JCL      - d002501a90 based on jdk8u202-b08)

# docker run --rm adoptopenjdk/openjdk11-openj9 java -version
openjdk version "11.0.2" 2019-01-15
OpenJDK Runtime Environment AdoptOpenJDK (build 11.0.2+9)
Eclipse OpenJ9 VM AdoptOpenJDK (build openj9-0.12.1, JRE 11 Linux amd64-64-Bit Compressed References 20190204_127 (JIT enabled, AOT enabled)
OpenJ9   - 90dd8cb40
OMR      - d2f4534b
JCL      - 289c70b6844 based on jdk-11.0.2+9)

Bad! Maven variant OpenJ9 images (openj9 0.12.0, 2 months old):
# docker run --rm adoptopenjdk/maven-openjdk8-openj9 java -version
openjdk version "1.8.0_202"
OpenJDK Runtime Environment (build 1.8.0_202-b08)
Eclipse OpenJ9 VM (build openj9-0.12.0, JRE 1.8.0 Linux amd64-64-Bit Compressed References 20190130_202 (JIT enabled, AOT enabled)
OpenJ9   - 04890c300
OMR      - d2f4534b
JCL      - 6501440d7a based on jdk8u202-b08)

# docker run --rm adoptopenjdk/maven-openjdk11-openj9 java -version
openjdk version "11.0.2" 2019-01-15
OpenJDK Runtime Environment AdoptOpenJDK (build 11.0.2+9)
Eclipse OpenJ9 VM AdoptOpenJDK (build openj9-0.12.0, JRE 11 Linux amd64-64-Bit Compressed References 20190130_118 (JIT enabled, AOT enabled)
OpenJ9   - 04890c300
OMR      - d2f4534b
JCL      - 50b45cd160 based on jdk-11.0.2+8)

Fixed now. Updated builds for 8, 11 and 12 for both HotSpot and OpenJ9. Thanks

repo: AdoptOpenJDK/openjdk-docker-build-tools


text:
Rename MSI product names to allow JDK/JRE

Need to rename some names so it is clear we are installing JDK or JRE.
Thought first we will have OpenJRE and OpenJDK, but I might me wrong. Waiting for feedback on OpenJRE name.

OpenJRE would be incorrect in this case.

Unfortunately, that's not how it works with the Trademarks / legal names around OpenJDK.

Well we need self speaking names.
Oracle names it „Java 8 Update 181 (x64)“ and „Java 8 Development Kit“. I was thinking of naming it 100% the same like Oracle, but I guess we are not allowed to name it „Java“ as Java is a trademark of Oracle isn’t it? The vendor will be AdoptOpenJDK... so the source is clear. We are not using the Java logo, too. Just the name of the programming language. Are we allowed to name the product „Java“?
Naming it „OpenJDK Java Runtime Environment“ for JRE and „OpenJDK Java Development Kit“ for JDK may work, but looks tooo long for setup dialogs. Naming it „OpenJDK JRE“ looks very confusing.
Aside can I leave the „Eclipse“ out and just name the main feature „JDK/JRE with OpenJ9“? Space is really limited...

Hi @alexhass - great questions!
For our hotspot based builds I think we can use "OpenJDK 8 Update 181 (x64)“ and "OpenJDK 8 Development Kit".  The vendor, as you say, is us so that's OK.
I think naming it "OpenJDK Java Runtime Environment“ for JRE and "OpenJDK Java Development Kit“ for JDK is actually OK.
There would be a strong preference to include Eclipse as the prefix (actually a legal requirement from Eclipse I'm afraid).
Hope that helps?  Appreciate this all makes your life more difficult, but we do have to be legally correct/accurate, especially as your good work will be used by a few 100,000 Java developers / users :-)

Let's go with this pull for now... I have not fully compiled all versions yet. Need to wait until tomorrow as it takes 2-3 hours. Will upload them to my website in ~24 hours.

authors: alexhass karianna

repo: AdoptOpenJDK/openjdk-installer


text:
Add RISC-V support to the system test in OpenJDK

Signed-off-by: Cheng Jin jincheng@ca.ibm.com

Reviewer: @Mesbah-Alam , @llxia
FYI: @smlambert

repo: AdoptOpenJDK/openjdk-systemtest


text:
Add sleep & retry logic around the curl on the SDK

In the even we have a network blip while trying to curl an SDK, we should introduce a sleep and retry in an attempt to recover before failing outright. I can think of 2 options of where to add the fix.

In JenkinsfileBase around this if/else block
https://github.com/AdoptOpenJDK/openjdk-tests/blob/master/buildenv/jenkins/JenkinsfileBase#L249
In the get.sh script around the curl
https://github.com/AdoptOpenJDK/openjdk-tests/blob/master/get.sh#L159
The bash may be more difficult but it would wrap only the curl command we are addressing with this issue (which has pros and cons itself). It would also work for users running the get.sh directly (not on Jenkins).

Thoughts @llxia ?

I would prefer option 2 In the get.sh script around the curl. As you mentioned, it would also help local runs.
fyi @ShelleyLambert @sophia-guo

Set sleep 30 second and retry 5 times. If not enough we can increase the setup.

authors: AdamBrousseau llxia sophia-guo

repo: AdoptOpenJDK/openjdk-tests


text:
External Tests failing due to no JVM_VERSION being supplied to the build

Overview
The recent change in TestKitGen makefile means that there is no JVM_VERSION being supplied to build_test.xml build file, and subsequently to the build.xml of the third party app tests-- where it is being used to determine the name of the sdk docker image.
Example job
https://ci.adoptopenjdk.net/view/External tests/job/openjdk8_j9_externaltest_x86-64_linux/20/console
Proposed solution
We can construct the value of JVM_VERSION as it is constructed in openjdk_regression/openjdk_regression.mk:
ifneq (, $(findstring openj9, $(JAVA_IMPL)))
	JVM_VERSION = $(JDKVERSION)-openj9
else
	JVM_VERSION = $(JDKVERSION)
endif

Something similar can be done in thirdparty_containers/build.xml

sap is one more case to include for your proposed solution (though less likely to be needed in third party container tests, as many 3rd party applications do not yet support Java10):
examples:
openjdk8
openjdk9-openj9
openjdk10-sap  (Note: sap implementation is only for Java10 linux-x86-64 but your case statement can be general)

The JVM_VERSION is being constructed based on JAVA_VERSION, which assumes the values; {SE80, SE90, SE100}. Is there a value for JAVA_VERSION for openjdk10-sap?

SE100 is the JAVA_VERSION for openjdk10-sap

@sophia-guo : How do you distinguish between openjdk10-sap and openjdk10, if they both hava JAVA_VERSION=SE100?
Referring to openjdk_regression.mk:
ifeq ($(JAVA_VERSION), SE80)
	JDKVERSION = openjdk8
else
	ifeq ($(JAVA_VERSION), SE90)
		JDKVERSION = openjdk9
	else
		ifeq ($(JAVA_VERSION), SE100)
			JDKVERSION = openjdk10
		endif
	endif
endif

ifeq ($(JAVA_IMPL), openj9)
JVM_VERSION = $(JDKVERSION)-openj9
else
ifeq ($(JAVA_IMPL), sap)
JVM_VERSION = $(JDKVERSION)-sap
else
ifeq ($(JAVA_IMPL), hotspot)
JVM_VERSION = $(JDKVERSION)
endif
endif
endif

@sophia-guo : I have created a PR for fixing this issue and asked for you to review, here: https://github.com/AdoptOpenJDK/openjdk-tests/pull/249

Just realized that JAVA_IMPL is used for generating makefile, which is not passed to build compile job.

This enhancement should fix this issue: https://github.com/AdoptOpenJDK/openjdk-tests/issues/251

authors: Mesbah-Alam smlambert sophia-guo


text:
⭐ Update card selection algorithm

Is your feature request related to a problem? Please describe.
Cards are selected purely at random, you could find on a very hard card even if you are still super bad.
Describe the solution you'd like
Make sure to consider the level of the player when selecting a card (kind of a "max level stuff"). There shouldn't be need to use a random probability as it's already a weighted pick per level as there are more level 1 than level 3. So the number of card available tells you their rarety (if only 5Star over 100 card, you have 1/100 chance to get it)
But to be adjusted with a "maximum level you can get" based on you latest performances. Maybe update according to the latest game (so if the player has a good strike right now, increase the chance to get a better card, I don't know, maybe not, keep it simple)

That's kind of important. Had some testing with real users, they jump from a 1Star to a 70 Required, that was though, need to find a better way.

repo: AdrKacz/scaling-broccoli


text:
SIGABRT: -[OS_dispatch_data _streamEventTrigger]: unrecognized selector sent to instance 0x2831a7600

Describe the bug
We are receiving some crash reports from our application that integrates the Adyen Barcode SDK with the e355 terminal.
This is the crash message that we sometimes get SIGABRT: -[OS_dispatch_data _streamEventTrigger]: unrecognized selector sent to instance 0x2831a7600
To Reproduce
Unknown. Haven't been able to reproduce
Expected behavior
Adyen Barcode SDK doesn't crash application
Screenshots
N/A
Desktop (please complete the following information):

OS: iOS 13+

Smartphone (please complete the following information):

Device: iPad Mini

Additional context
N/A

This is another exception that we see that I believe is also coming from Adyen Barcode SDK.
SIGSEGV: Selector name found in current argument registers: _streamEventTrigger

repo: Adyen/adyen-barcoder-ios


text:
CSE support for alternative checkout modules

On some alternative checkout modules, the javascript payment object does not exists and this causes CSE javascript library to fail and not generate the encrypted_data field.
The following error message was presented:
"Missing the encrypted data value. Make sure the Client Side Encryption(CSE) script did encrypt the Credit Card details"

Is 2.8.1 or (2.8.0.1) to be officially released soon so we can apply this fix? Or would it be safe to apply the development branch?

Hi @tieroom ,
We plan to release 2.8.1 and include this fix to it on the upcoming days.
I wouldn't recommend to apply the development branch yet.
Best Regards,
Giorgos Adam
Adyen

Hi @tieroom
The version 2.8.1 is just released.
Kind Regards,
Giorgos Adam
Adyen

Awesome! Thannks @lancergr, will install tomorrow.

Been running 2.8.1 for a while now and can, unfortunately, confirm the issue still exists. We're on magento 1.9.2.2 and, more importantly, firecheckout 3.10.0 which I'm guessing is what somehow doesn't play well with the encryption code.
The error still occurs intermittently with maybe one in 50-100 orders being affected and most of these going through after a couple of retries.
Let me know if there is any other info you need to debug. Also, I can hook you up with the firecheckout developers who tend to be very cooperative at bug finding and ensuring they integrate with all payment methods.

Hi @tieroom,
If you can contact the developer of firecheckout  to share the module with us we can have a closer look. But if it only happens 50-100 orders it will be diffecult for us to reproduct. You can contact us directly on magento@adyen.com
Regards,
Rik
Adyen

authors: lancergr rikterbeek tieroom

repo: Adyen/adyen-magento


text:
Express buttons do not show in Hyva-based theme (minicart and cart page)

Hi, do you have a compatability module for showing the express buttons on a Hyva theme?   We're missing the buttons for minicart and the cart page.
Thank you

There is this module - https://gitlab.hyva.io/hyva-themes/hyva-compat/magento2-adyen-express-checkout however, it works in Adyen Test mode but not Live mode and Adyen will not explain why.

thank @alicedfisheye - i can see an issue with that module;
view/frontend/layout/default.xml
<block name="adyen-googlepay-script"
                   template="Hyva_AdyenExpressCheckout::googlepay/googlepay-script.phtml"
                   ifconfig="payment/adyen_hpp/show_google_pay_on"/>
            <block name="adyen-applepay-script"
                   template="Hyva_AdyenExpressCheckout::applepay/applepay-script.phtml"
                   ifconfig="payment/adyen_hpp/show_apple_pay_on"/>

its using ifconfig on a non boolean attribute - its multi-select.  ive removed the ifconfig as we will always be using applepay and googlepay anyway.  its still not 100% but is working better

Hey @pixiemediaweb,
Thank you for raising this github issue and bringing it our attention.
Currently, the Adyen Hyvä Compatibility Module does not support Express Checkout. However, we have added this feature to our roadmap, and it will be available in a future release.
Regards!
Khushboo


text:
Please upgrade the package to support lints 3.0.0

Please upgrade the package to support lints 3.0.0

Hi, I was wondering if this issue is beginner-friendly. If so, I would love to contribute with some guidance!

repo: AgoraIO-Community/VideoUIKit-Flutter


text:
cannot override 'release' which has been marked unavailable: not available in automatic reference counting mode

Describe the bug
error: cannot override 'release' which has been marked unavailable: not available in automatic reference counting mode.
To Reproduce
Steps to reproduce the behavior:

agora_rtc_engine: ^4.1.0-alpha.2

Screenshots

Desktop (please complete the following information):

我的flutter项目是默认的OC项目，在继承agora_rtc_engine: ^4.1.0-alpha.2后编译运行报错，release方法有问题，求解！

您是需要macos么？4.1.0这个版本已经过时了，是为了支持desktop的，建议测试dev/flutter2分支

repo: AgoraIO/Agora-Flutter-SDK


text:
Pass Protocol Compliance Test Suite

[ ] Make sure the suite can load in Agregore Desktop (might require re-publishing it)
[ ] Get the suite running on Agregore Mobile with the rc1 release
[ ] See if all the basic tests pass
[ ] Adjust the mutability tests to account for the new way IPNS sites are created.
[ ] Make the mutability tests pass

This process might involve adding fixes to the daemon and to the protocol handlers.

Adjust the mutability tests to account for the new way IPNS sites are created.

Adjusting to match this spec document. Work is happening on the daemon-spec branch.

Made PR that just merges to the default branch of our fork. I figure a PR to the main IPFS can happen after all changes are accumulated.

Running tests
Agregore desktop

Start up Agregore
Load ipfs://ipfs.io to confirm IPFS node is working
Enter test suite directory
export IPFS_PATH=~/.config/agregore-browser/ipfs
./publish-files.js
Visit IPFS URL outputted to confirm test files were loaded into Agregore
Run a web server to serve the test suite HTML: python3 -m http.server
Visit the web server: http://127.0.0.1:8000

Agregore mobile

Follow the above steps, and leave the web server and Agregore desktop running
Open Agregore app
Load ipfs://ipfs.io to confirm IPFS node is working
Open Agregore Mobile
Visit the IPFS URL of the test files, to ensure you have peered with desktop and can load files as needed
Visit the web server, using the IP address of your computer, for example: http://192.168.50.123:8000

We're making additional changes to the protocol handlers so that we can get more of the tests in the test suite passing. Here are some of the things to look into:

Use HttpProtocolHandler to handle ipfs and ipns URLs in net/url_request/url_request_job_factory.cc.
Make changes to URLRequestHttpJob::Create() in net/url_request/url_request_http_job.cc.

Protocol handlers for ipfs and ipns that handle indirect URL requests (e.g. from JavaScript) have been added to ipfs-protocol. This is semi-experimental and additional changes are anticipated. We'll need to build and run the test suite again.

We registered the protocols inside url_request_job_factory.cc as HTTPProtocolHandlers which rewrote ipns and ipfs urls to point to the gateway.
Now we have 29 tests passing, and 15 failing due to the URL scheme not being usable the the Fetch API.
In order to fix this we need to Use the WebSecurityPolicy::RegisterURLSchemeAsSupportingFetchAPI API, which we can add inside RenderThreadImpl::RegisterSchemes
We'll probably also want to add RegisterURLSchemeAsWebUI, RegisterSchemeAsAllowingServiceWorkers, AddSchemeToSecureContextSafelist
Likely we'll also want to add ShouldTreatURLSchemeAsCorsEnabled
Hopefully this will be enough to get most of the other tests passing.

We should generally look at all the RegisterURLScheme related things in this file in Electron to see if we need them: https://github.com/electron/electron/blob/main/shell/renderer/renderer_client_base.cc#L225

We might also want to get rid of that top level redirect thing in favor of just the protocol schemes with the new permissions

We've got 39 tests passing now.
iframes are still a bit iffy, and ServiceWorkers are still not available. But stuff like images and text and scripts is all working now. 🎉
One other weird thing, the web UI doesn't seem to think that ipfs:// is a secure context even though we explicitly set it to be.

Looks like we'll also need to register the service worker schemes here: https://source.chromium.org/chromium/chromium/src/+/main:content/common/url_schemes.cc;l=114;drc=72186360334350c90b9b94515b3c82bea25e27ff
Found this by tracing the Electron API through here: https://github.com/electron/electron/blob/main/shell/browser/api/electron_api_protocol.cc#L96

We will also need to add the secure schemes here: https://source.chromium.org/chromium/chromium/src/+/main:content/common/url_schemes.cc;l=73;drc=72186360334350c90b9b94515b3c82bea25e27ff

We got 36/50 tests passing which is good enough. The last issues are to do with ServiceWorkers and stuff which we don't need to worry so much about.

repo: AgregoreWeb/agregore-mobile


text:
Scroll to end of document when adding items

Allows adding of entities, attributes, and relationships without having
to manually scroll to the bottom of the list once the list is taller
than the view.

Merged
Thanks for your contribution @dcramps

authors: Ahmed-Ali dcramps

repo: Ahmed-Ali/RealmObjectEditor


text:
--no-gui command

Issue
I'm using gui: true in my repository's aider config, because I would like it to be the default
cache-prompts: true
stream: false
gui: true
show-diffs: true
show-model-warnings: false
chat-language: en
subtree-only: true

But sometimes I would want to overwrite this setting and run Aider in CLI, but currently there's no --no-gui option
Version and model info
Aider v0.60.1
Main model: claude-3-5-sonnet-20241022 with diff edit format, prompt cache, infinite output
Weak model: claude-3-haiku-20240307
Git repo: .git with 3,514 files
Warning: For large repos, consider using --subtree-only and .aiderignore
See: https://aider.chat/docs/faq.html#can-i-use-aider-in-a-large-mono-repo
Repo-map: using 1024 tokens, files refresh

Thanks for trying aider and filing this issue.
The change is available in the main branch. You can get it by installing the latest version from github:
aider --install-main-branch

# or...

python -m pip install --upgrade --upgrade-strategy only-if-needed git+https://github.com/Aider-AI/aider.git

If you have a chance to try it, let me know if it works better for you.

I'm going to close this issue for now, but feel free to add a comment here and I will re-open. Or feel free to file a new issue any time.

authors: paul-gauthier shipurjan

repo: Aider-AI/aider


text:
Unordered list showing weirdly

Lovely theme, I truly like it, thank you!
I am experiencing this issue. On edit mode:

As you can see, all looks good. Now, on reader mode:

I have disabled all other plugins, and have nothing on my snippets.css, and the issue persists.

This is strange. The unordered list shows fine in my environment:

I don't know why for now, could you please try it again in a sandbox environment?

Will try on sandbox, and report back.

authors: Akifyss Fastidious

repo: Akifyss/obsidian-border


text:
로그인 및 회원가입 구현 완료했습니다.

로그인 및 회원가입 구현 완료.

로그인 및 회원가입 구현 완료.

repo: Akisigure/seniorInvest


text:
High Latency + Slow to reach peak bandwidth saturation with UCX-py

akvenkatesh@prm-dgx-06:~/ucx-py$ python3 benchmarks/lat-bw.py -a -b -s X.X.X.X -p 13337
[1553779319.122772] [prm-dgx-06:72934:0] parser.c:1369 UCX WARN unused env variables: UCX_HOME, UCX_PATH, UCX_PY_CUDA_PATH,... (set UCX_WARN_UNUSED_ENV_VARS=n to suppress this warning)
Size (bytes) Latency (us) BW (GB/s) Issue (us)
1 172.27 0.00
2 131.92 0.00
4 157.35 0.00
8 171.79 0.00
16 169.85 0.00
32 168.93 0.00
64 165.72 0.00
128 163.10 0.00
256 159.05 0.00
512 134.66 0.00
1024 145.15 0.01
2048 160.13 0.01
4096 162.51 0.03
8192 188.56 0.04
16384 206.67 0.08
32768 1642.30 0.02
65536 1750.97 0.04
131072 1841.53 0.07
262144 1935.85 0.14
524288 2091.98 0.25
1048576 2465.08 0.43
2097152 2855.87 0.73
4194304 4133.87 1.01

# without blind recvs

akvenkatesh@prm-dgx-06:~/ucx-py$ python3 benchmarks/lat-bw.py -a -s X.X.X.X -p 13337
[1553779473.298945] [prm-dgx-06:73294:0] parser.c:1369 UCX WARN unused env variables: UCX_HOME, UCX_PATH, UCX_PY_CUDA_PATH,... (set UCX_WARN_UNUSED_ENV_VARS=n to suppress this warning)
Size (bytes) Latency (us) BW (GB/s) Issue (us)
1 135.65 0.00
2 149.53 0.00
4 139.20 0.00
8 150.10 0.00
16 131.43 0.00
32 127.36 0.00
64 117.91 0.00
128 108.97 0.00
256 129.06 0.00
512 127.63 0.00
1024 155.97 0.01
2048 130.15 0.02
4096 132.82 0.03
8192 122.11 0.07
16384 160.63 0.10
32768 1732.05 0.02
65536 1717.52 0.04
131072 1814.29 0.07
262144 1835.79 0.14
524288 2162.78 0.24
1048576 2418.00 0.43
2097152 2949.80 0.71
4194304 4134.40 1.01

Slow to reach peak bandwidth (compare 10MB and 100MB):
akvenkatesh@dgx15:~/akvenkatesh/ucx-py$ UCX_MEMTYPE_CACHE=n UCX_RNDV_SCHEME=put_zcopy UCX_TLS=rc,cuda_copy UCX_NET_DEVICES=mlx5_0:1 CUDA_VISIBLE_DEVICES=1 python3 benchmarks/recv-into-client.py -s X.X.X.X -p 13337 -o cupy
/home/nfs/akvenkatesh/akvenkatesh/py/lib/python3.7/site-packages/dask/config.py:168: YAMLLoadWarning: calling yaml.load() without Loader=... is deprecated, as the default Loader is unsafe. Please read https://msg.pyyaml.org/load for full details.
  data = yaml.load(f.read()) or {}
/home/nfs/akvenkatesh/akvenkatesh/distributed/distributed/config.py:20: YAMLLoadWarning: calling yaml.load() without Loader=... is deprecated, as the default Loader is unsafe. Please read https://msg.pyyaml.org/load for full details.
  defaults = yaml.load(f)
[1553886254.375036] [dgx15:4210 :0]         parser.c:1369 UCX  WARN  unused env variables: UCX_HOME, UCX_PATH, UCX_PY_CUDA_PATH,... (set UCX_WARN_UNUSED_ENV_VARS=n to suppress this warning)
Roundtrip benchmark
-------------------
n_iter   | 10
n_bytes  | 10.00 MB
recv     | recv_into
object   | cupy
inc      | False

===================
7.40 GB / s
===================

akvenkatesh@dgx15:~/akvenkatesh/ucx-py$ UCX_MEMTYPE_CACHE=n UCX_RNDV_SCHEME=put_zcopy UCX_TLS=rc,cuda_copy UCX_NET_DEVICES=mlx5_0:1 CUDA_VISIBLE_DEVICES=1 python3 benchmarks/recv-into-client.py -s X.X.X.X -p 13337 -o cupy -n 100Mb
/home/nfs/akvenkatesh/akvenkatesh/py/lib/python3.7/site-packages/dask/config.py:168: YAMLLoadWarning: calling yaml.load() without Loader=... is deprecated, as the default Loader is unsafe. Please read https://msg.pyyaml.org/load for full details.
  data = yaml.load(f.read()) or {}
/home/nfs/akvenkatesh/akvenkatesh/distributed/distributed/config.py:20: YAMLLoadWarning: calling yaml.load() without Loader=... is deprecated, as the default Loader is unsafe. Please read https://msg.pyyaml.org/load for full details.
  defaults = yaml.load(f)
[1553887030.152355] [dgx15:4624 :0]         parser.c:1369 UCX  WARN  unused env variables: UCX_HOME, UCX_PATH, UCX_PY_CUDA_PATH,... (set UCX_WARN_UNUSED_ENV_VARS=n to suppress this warning)
Roundtrip benchmark
-------------------
n_iter   | 10
n_bytes  | 100.00 MB
recv     | recv_into
object   | cupy
inc      | False

===================
10.30 GB / s
===================

Early performance analysis is indicating slowness in detection of read events being the culprit. Some details here:
$ UCX_MEMTYPE_CACHE=n UCX_RNDV_SCHEME=put_zcopy python3 benchmarks/lat-bw.py -a
Size (bytes)    Latency (us)    BW (GB/s)       Send Issue (us) Recv Issue (us) Send Comp (us)  Recv Comp (us)
2               153.93          0.00            77.34           41.40           1.11            186.19
SEND STATS
2       16.347494992342863
RECV STATS
2       4.390153017911044
HANDLE_MSG STATS
-1      11.627999219027432
ACTIVITY STATS
-1      81.38841476993284

$ UCX_MEMTYPE_CACHE=n UCX_RNDV_SCHEME=put_zcopy python3 benchmarks/lat-bw.py -a
[1555374790.767392] [prm-dgx-04:27695:0]         parser.c:1437 UCX  WARN  unused env variables: UCX_HOME, UCX_PATH, UCX_PY_CUDA_PATH,... (set UCX_WARN_UNUSED_ENV_VARS=n to suppress this warning)
Size (bytes)    Latency (us)    BW (GB/s)       Send Issue (us) Recv Issue (us) Send Comp (us)  Recv Comp (us)
1024            148.40          0.01            72.41           38.64           1.05            183.04
SEND STATS
1024    15.993768518621271
RECV STATS
1024    3.85306098244407
HANDLE_MSG STATS
-1      11.148994619196111
ACTIVITY STATS
-1      92.65736393306567

$ UCX_MEMTYPE_CACHE=n UCX_RNDV_SCHEME=put_zcopy python3 benchmarks/lat-bw.py -a
[1555374821.411977] [prm-dgx-04:27820:0]         parser.c:1437 UCX  WARN  unused env variables: UCX_HOME, UCX_PATH, UCX_PY_CUDA_PATH,... (set UCX_WARN_UNUSED_ENV_VARS=n to suppress this warning)
Size (bytes)    Latency (us)    BW (GB/s)       Send Issue (us) Recv Issue (us) Send Comp (us)  Recv Comp (us)
32768           237.21          0.14            59.49           45.43           138.25          229.55
SEND STATS
32768   14.312267303466797
RECV STATS
32768   5.110393870960582
HANDLE_MSG STATS
-1      10.147853331132369
ACTIVITY STATS
-1      143.58939546527284

$ UCX_MEMTYPE_CACHE=n UCX_RNDV_SCHEME=put_zcopy python3 benchmarks/lat-bw.py -a
[1555374924.880918] [prm-dgx-04:28225:0]         parser.c:1437 UCX  WARN  unused env variables: UCX_HOME, UCX_PATH, UCX_PY_CUDA_PATH,... (set UCX_WARN_UNUSED_ENV_VARS=n to suppress this warning)
Size (bytes)    Latency (us)    BW (GB/s)       Send Issue (us) Recv Issue (us) Send Comp (us)  Recv Comp (us)
8388608         1313.23         6.39            106.01          81.78           1107.50         1327.85
SEND STATS
8388608 18.673376603560015
RECV STATS
8388608 8.2618539983576
HANDLE_MSG STATS
-1      15.219666741111062
ACTIVITY STATS
-1      230.85928546081792

https://gist.githubusercontent.com/Akshay-Venkatesh/368bcfdcf1da00d3b50270f39c2daf12/raw/4ab3b1020807bbe222a0a986c6fa7eee825b6d71/server-hist.log
https://gist.githubusercontent.com/Akshay-Venkatesh/368bcfdcf1da00d3b50270f39c2daf12/raw/4ab3b1020807bbe222a0a986c6fa7eee825b6d71/client-hist.log

I've been able to narrow down on the culprit high latency with ucxpy

for short messages: https://gist.github.com/Akshay-Venkatesh/368bcfdcf1da00d3b50270f39c2daf12/revisions#diff-21189b76dce45b69408917b664a5412f

for large messages: https://gist.github.com/Akshay-Venkatesh/368bcfdcf1da00d3b50270f39c2daf12/revisions#diff-ea22c5ce84c7a98c47eb6ec833c01aab

this two links contains rows of the form [0.0, x, y, z..] where each row represents a message request

0.0 represents the time when it was created

x, y, z represents the time at which the message was checked for completion in reader_loop (the callback called by python event loop when it notices an event on the fd returned by ucx)

what we see for the small messages (recv reqs) is that it's generally of the form [0.0, ~200]

basically, this explains why we have huge latencies in the short message range

for large messages this is of the form [0.0, ~200, ~2000]

so there's an event read (for initial control message) at ~200, and then one at ~2000 (for fin and thus request completion)

Small update on this - @quasiben's uvloop suggestion:
Using uvloop is showing some benefits with almost zero code changes:
# default asyncio

akvenkatesh@prm-dgx-03:~/ucx-py$ UCX_MEMTYPE_CACHE=n UCX_RNDV_SCHEME=put_zcopy UCX_NET_DEVICES=mlx5_0:1 UCX_TLS=rc,cuda_copy CUDA_VISIBLE_DEVICES=1 python3 benchmarks/recv-into-client.py -o cupy -s IP -p 13337
Roundtrip benchmark
-------------------
n_iter   | 10
n_bytes  | 10.00 MB
recv     | recv_into
object   | cupy
inc      | False

===================
5.31 GB / s
===================

# with uvloop

akvenkatesh@prm-dgx-03:~/ucx-py$ UCX_MEMTYPE_CACHE=n UCX_RNDV_SCHEME=put_zcopy UCX_NET_DEVICES=mlx5_0:1 UCX_TLS=rc,cuda_copy CUDA_VISIBLE_DEVICES=1 python3 benchmarks/recv-into-client.py -o cupy -s IP -p 13337 -u
Roundtrip benchmark
-------------------
n_iter   | 10
n_bytes  | 10.00 MB
recv     | recv_into
object   | cupy
inc      | False

===================
6.11 GB / s
===================

Changes needed:
$ git diff benchmarks/recv-into-client.py
diff --git a/benchmarks/recv-into-client.py b/benchmarks/recv-into-client.py
index bba9eb8..a01adf5 100644
--- a/benchmarks/recv-into-client.py
+++ b/benchmarks/recv-into-client.py
@@ -9,6 +9,7 @@ from distributed.utils import format_bytes, parse_bytes
 from time import perf_counter as clock

 import ucp
+import uvloop

 ucp.init()
@@ -31,6 +32,8 @@ def parse_args(args=None):
                         help="In-memory array type.")
     parser.add_argument("-v", "--verbose", default=False, action="store_true",
                         help="Whether to print timings per iteration.")
+    parser.add_argument("-u", "--uvloop", default=False, action="store_true",
+                        help="Whether or not to use uvloop")
     parser.add_argument("-i", "--inc", default=False, action="store_true",
                         help="Whether to increment the array each iteration.")

@@ -144,4 +147,7 @@ async def main(args=None):

 if __name__ == '__main__':
+    args = parse_args()
+    if args.uvloop:
+        uvloop.install()
     asyncio.run(main())

Differences in terms of latency:
# without uvloop

$ UCX_MEMTYPE_CACHE=n UCX_RNDV_SCHEME=put_zcopy UCX_NET_DEVICES=mlx5_0:1 UCX_TLS=rc,cuda_copy CUDA_
VISIBLE_DEVICES=0 python3 benchmarks/lat-bw.py -a
Size (bytes)    Latency (us)    BW (GB/s)       Issue (us)
1               127.90          0.00            58.35           27.53           1.06            166.69
2               125.67          0.00            49.88           24.17           0.84            174.46
4               104.44          0.00            41.20           19.67           0.68            145.78
8               113.98          0.00            51.55           25.18           0.89            148.31
16              133.52          0.00            58.05           27.25           0.99            178.59
32              130.27          0.00            58.69           27.46           0.98            171.24
64              127.61          0.00            55.81           26.18           1.00            170.18
128             129.48          0.00            60.13           28.38           1.07            167.14
256             127.30          0.00            58.60           27.76           1.01            164.99
512             132.47          0.00            60.89           29.38           1.04            171.36
1024            122.50          0.01            57.49           28.61           0.95            155.70
2048            121.17          0.02            67.59           27.49           1.04            144.13
4096            112.61          0.04            70.24           29.24           1.48            121.94
8192            105.97          0.08            63.20           25.11           1.01            120.70
16384           106.47          0.15            62.33           24.12           0.98            123.59
32768           212.51          0.15            51.61           37.70           124.50          208.88
65536           213.18          0.31            55.28           40.47           127.93          200.23
131072          251.69          0.52            57.70           42.35           159.29          241.32
262144          301.16          0.87            63.36           46.50           193.51          296.04
524288          326.32          1.61            66.11           48.54           219.51          315.45
1048576         390.22          2.69            67.24           49.62           279.74          380.80
2097152         639.87          3.28            90.16           59.94           435.05          690.43
4194304         814.66          5.15            79.57           57.53           644.31          844.17

# with uvloop

$ UCX_MEMTYPE_CACHE=n UCX_RNDV_SCHEME=put_zcopy UCX_NET_DEVICES=mlx5_0:1 UCX_TLS=rc,cuda_copy CUDA_VISIBLE_DEVICES=0 python3 benchmarks/lat-bw.py -a
Size (bytes)    Latency (us)    BW (GB/s)       Issue (us)
1               96.44           0.00            56.68           27.37           0.95            105.18
2               90.34           0.00            54.07           26.21           0.88            96.96
4               82.70           0.00            47.02           22.62           0.70            92.82
8               67.31           0.00            39.85           19.21           0.67            73.01
16              90.95           0.00            54.59           26.81           0.84            97.08
32              76.09           0.00            44.54           21.88           0.66            83.01
64              85.40           0.00            54.55           26.91           0.88            85.79
128             73.08           0.00            43.31           20.96           0.69            79.22
256             62.37           0.00            36.64           18.05           0.55            67.77
512             74.07           0.01            39.36           19.39           0.58            86.97
1024            77.43           0.01            41.63           20.40           0.63            90.30
2048            68.42           0.03            50.95           21.05           0.70            62.30
4096            82.66           0.05            64.11           26.70           0.91            71.29
8192            64.72           0.13            50.46           20.59           0.82            55.76
16384           66.50           0.25            52.05           20.80           0.71            57.60
32768           127.55          0.26            42.36           30.89           67.03           112.49
65536           138.30          0.47            49.66           36.12           73.43           114.60
131072          171.45          0.76            54.46           39.33           95.09           151.02
262144          196.76          1.33            55.70           40.50           116.99          177.29
524288          234.88          2.23            61.33           44.94           153.13          206.98
1048576         296.46          3.54            60.82           44.18           207.09          277.31
2097152         478.29          4.38            73.80           49.88           317.96          510.60
4194304         639.91          6.55            66.69           48.55           519.43          641.19

That's really cool to see.
On Fri, Apr 26, 2019 at 6:16 PM Akshay-Venkatesh notifications@github.com
wrote:

Differences in terms of latency:
without uvloop
$ UCX_MEMTYPE_CACHE=n UCX_RNDV_SCHEME=put_zcopy UCX_NET_DEVICES=mlx5_0:1 UCX_TLS=rc,cuda_copy CUDA_
VISIBLE_DEVICES=0 python3 benchmarks/lat-bw.py -a
Size (bytes)    Latency (us)    BW (GB/s)       Issue (us)
1               127.90          0.00            58.35           27.53           1.06            166.69
2               125.67          0.00            49.88           24.17           0.84            174.46
4               104.44          0.00            41.20           19.67           0.68            145.78
8               113.98          0.00            51.55           25.18           0.89            148.31
16              133.52          0.00            58.05           27.25           0.99            178.59
32              130.27          0.00            58.69           27.46           0.98            171.24
64              127.61          0.00            55.81           26.18           1.00            170.18
128             129.48          0.00            60.13           28.38           1.07            167.14
256             127.30          0.00            58.60           27.76           1.01            164.99
512             132.47          0.00            60.89           29.38           1.04            171.36
1024            122.50          0.01            57.49           28.61           0.95            155.70
2048            121.17          0.02            67.59           27.49           1.04            144.13
4096            112.61          0.04            70.24           29.24           1.48            121.94
8192            105.97          0.08            63.20           25.11           1.01            120.70
16384           106.47          0.15            62.33           24.12           0.98            123.59
32768           212.51          0.15            51.61           37.70           124.50          208.88
65536           213.18          0.31            55.28           40.47           127.93          200.23
131072          251.69          0.52            57.70           42.35           159.29          241.32
262144          301.16          0.87            63.36           46.50           193.51          296.04
524288          326.32          1.61            66.11           48.54           219.51          315.45
1048576         390.22          2.69            67.24           49.62           279.74          380.80
2097152         639.87          3.28            90.16           59.94           435.05          690.43
4194304         814.66          5.15            79.57           57.53           644.31          844.17
with uvloop
$ UCX_MEMTYPE_CACHE=n UCX_RNDV_SCHEME=put_zcopy UCX_NET_DEVICES=mlx5_0:1 UCX_TLS=rc,cuda_copy CUDA_VISIBLE_DEVICES=0 python3 benchmarks/lat-bw.py -a
Size (bytes)    Latency (us)    BW (GB/s)       Issue (us)
1               96.44           0.00            56.68           27.37           0.95            105.18
2               90.34           0.00            54.07           26.21           0.88            96.96
4               82.70           0.00            47.02           22.62           0.70            92.82
8               67.31           0.00            39.85           19.21           0.67            73.01
16              90.95           0.00            54.59           26.81           0.84            97.08
32              76.09           0.00            44.54           21.88           0.66            83.01
64              85.40           0.00            54.55           26.91           0.88            85.79
128             73.08           0.00            43.31           20.96           0.69            79.22
256             62.37           0.00            36.64           18.05           0.55            67.77
512             74.07           0.01            39.36           19.39           0.58            86.97
1024            77.43           0.01            41.63           20.40           0.63            90.30
2048            68.42           0.03            50.95           21.05           0.70            62.30
4096            82.66           0.05            64.11           26.70           0.91            71.29
8192            64.72           0.13            50.46           20.59           0.82            55.76
16384           66.50           0.25            52.05           20.80           0.71            57.60
32768           127.55          0.26            42.36           30.89           67.03           112.49
65536           138.30          0.47            49.66           36.12           73.43           114.60
131072          171.45          0.76            54.46           39.33           95.09           151.02
262144          196.76          1.33            55.70           40.50           116.99          177.29
524288          234.88          2.23            61.33           44.94           153.13          206.98
1048576         296.46          3.54            60.82           44.18           207.09          277.31
2097152         478.29          4.38            73.80           49.88           317.96          510.60
4194304         639.91          6.55            66.69           48.55           519.43          641.19
—
You are receiving this because you are subscribed to this thread.
Reply to this email directly, view it on GitHub
https://github.com/Akshay-Venkatesh/ucx-py/issues/73#issuecomment-487229039,
or mute the thread
https://github.com/notifications/unsubscribe-auth/AACKZTFCKNP3MLXSJK2XDWLPSOEL3ANCNFSM4HDFHMLA
.

@mrocklin Another finding - I see that from the time the UCX file descriptor is notified of a communication completion event to the point when asyncio loop.add_reader method sees is separated by about 120 microseconds (90 us with uvloop). If we take out memory allocation out of the picture (supposing we get an efficient memory manager), then this would be the main overhead.

Strictly from an ETL standpoint I'm not too troubled by this.
We care far more about bandwidth than latency, and are often sending around messages that are in the 100MB range.  The tables above tell me that I should be quite happy.
However, expanding to other applications, like parameter servers in deep learning, yes, I do become concerned, but that's fairly far down the line for me personally.
From a RAPIDS standpoint, handling the latency here is a lowish priority.

Still happy to engage here though (I suspect that even if I don't care as much currently, that you do).
At one point I think that you benchmarked asyncio and found that it added a few microseconds.   Reading your comment above more closely it sounds like we might be limited by the file descriptor/non-blocking socket behavior.  Is that correct?  Is this bound by the OS or Python?
One thing that might be interesting to try would be to run things under PyPy, a jit-ed Python interpreter.  I think I've gotten Torando roundtrips down to 60us roundtrip when doing experiments before.
Also, I recall that Torando had a few event loops.  EPoll, KQueue, perhaps others.  I wonder if there might be some other OS technology that we can rely on.

This is also the kind of thing that @pitrou might know about.
@pitrou if you have any interest I think that you might enjoy speaking with @Akshay-Venkatesh at some point.  Akshay works on OpenUCX, a high performance networking library that we're connecting to Python (for Dask at first, but the work is general purpose).  Akshay is mostly a C/C++ performance-oriented developer who is now dealing with Python async frameworks, event loops, networking, and so on.  I suspect that you're busy these days, but you might enjoy the conversation.

At one point I think that you benchmarked asyncio and found that it added a few microseconds. Reading > your comment above more closely it sounds like we might be limited by the file descriptor/non-blocking > socket behavior. Is that correct? Is this bound by the OS or Python?

I think this is an asyncio loop issue. uvloop alleviates the issue a little bit. Having said this, does use of PyPy as opposed to CPython still make a difference?
As long as there's a more efficient event loop that lets us read file descriptor notifications quicker (or express a way to unblock a blocked coroutine), I'm happy to try.

If this involves asyncio and uvloop then @1st1 may be interested to hear about it.

(asyncio involves several layers and has its IO loop implemented in Python, so perhaps a 100 µs latency is expected, though unfortunate)

I think we can close this issue as it relates to the previous version of ucx-py.  For those interested we are profiling/benchmarking and making good progress with workloads which use both cupy and cuDF

authors: Akshay-Venkatesh mrocklin pitrou quasiben

repo: Akshay-Venkatesh/ucx-py


text:
[Feature request] 希望能增加 锚点 平移支持

希望能够支持直接 [锚点](#tiltle) 平移到 title 这个标题。
也就是页内链接。

快速移动到长文某个部分功能我觉得会很实用。

抱歉，我的错误
title

即可，虽然不是平滑移动。
但还是希望作者能在标题自动加上类似 github markdown 的锚点，并且以标题为 锚点。

repo: AlanDecode/Typecho-Theme-VOID