Setting maxSize equal to initialSize makes pool use only single connection

Bug Report
The issue was originally reported here https://github.com/micronaut-projects/micronaut-data/issues/2136
I did debug a bit. It looks like some calculations aren't correct when min and max are the same, the pool only allows one connection. The example project has a reproducible example, setting maxSize bigger than initialSize makes the connections in parallel. This also explains some bad performances in TechEmpower/FrameworkBenchmarks because I configured the values with the same value.

It might have the correct size, but it only provides one connection.
You can run the example attached to the Micronaut Data issue and see that the queries are run sequentially.
I changed the code a bit to reproduce it:
     List<Flux<Item>> fluxes = List.of(
                Flux.from(itemsRepository.findAll()).doOnComplete(() -> log.info("all loaded1")),
                Flux.from(itemsRepository.findAll()).doOnComplete(() -> log.info("all loaded2")),
                Flux.from(itemsRepository.findAll()).doOnComplete(() -> log.info("all loaded3")),
                Flux.from(itemsRepository.findAll()).doOnComplete(() -> log.info("all loaded4")),
                Flux.from(itemsRepository.findAll()).doOnComplete(() -> log.info("all loaded5"))
        );
        List<Mono<Long>> next = new ArrayList<>();
        for (Flux<Item> flux : fluxes) {
            next.add(
                    flux.count().doOnNext(number -> log.info("num:" + number))
            );
        }

        Flux.fromIterable(next).flatMap(x -> x).collectList().block();

And this makes totally sense because if connections are co-located on the same event-loop thread, then a single thread can only run things sequentially. If you warmup the pool (ConnectionPool.warmup().block()), then you see a more parallel behavior:
15:45:53.640 [Test worker] DEBUG io.r2dbc.pool.ConnectionPool - Obtaining new connection from the pool
15:45:53.645 [Test worker] DEBUG io.r2dbc.pool.ConnectionPool - Obtaining new connection from the pool
15:45:53.645 [Test worker] DEBUG io.r2dbc.pool.ConnectionPool - Obtaining new connection from the pool
15:45:53.645 [Test worker] DEBUG io.r2dbc.pool.ConnectionPool - Obtaining new connection from the pool
15:45:53.645 [Test worker] DEBUG io.r2dbc.pool.ConnectionPool - Obtaining new connection from the pool
15:45:53.653 [reactor-tcp-nio-1] DEBUG io.r2dbc.pool.PooledConnection - Releasing connection
15:45:53.655 [reactor-tcp-nio-1] INFO  com.example.R2dbctestTest - all loaded3
15:45:53.655 [reactor-tcp-nio-1] INFO  com.example.R2dbctestTest - num:0
15:45:53.656 [reactor-tcp-nio-1] DEBUG io.r2dbc.pool.PooledConnection - Releasing connection
15:45:53.656 [reactor-tcp-nio-1] INFO  com.example.R2dbctestTest - all loaded2

Without warmup:
15:46:49.414 [reactor-tcp-nio-1] DEBUG io.r2dbc.pool.ConnectionPool - Obtaining new connection from the pool
15:46:49.431 [reactor-tcp-nio-1] DEBUG io.r2dbc.pool.PooledConnection - Releasing connection
15:46:49.432 [reactor-tcp-nio-1] INFO  com.example.R2dbctestTest - all loaded1
15:46:49.433 [reactor-tcp-nio-1] INFO  com.example.R2dbctestTest - num:0
15:46:49.433 [reactor-tcp-nio-1] DEBUG io.r2dbc.pool.ConnectionPool - Obtaining new connection from the pool
15:46:49.435 [reactor-tcp-nio-1] DEBUG io.r2dbc.pool.PooledConnection - Releasing connection
15:46:49.435 [reactor-tcp-nio-1] INFO  com.example.R2dbctestTest - all loaded2
15:46:49.435 [reactor-tcp-nio-1] INFO  com.example.R2dbctestTest - num:0

I didn't know that the pool needs to be initialized somehow, there is no mention of warmup in the readme.
Do you suggest that the warmup should be called when the pool is built by the container?

Let me just add a thought here:
Even if warmup helps here, I do not see it as a solution. We still will have more sockets than available threads, so some queries might get congested while other cores are available.
What do you guys think of just creating a slightly modified DefaultLoopResources class, where instead of .colocate on onClient() method we would return a new Nio / Epoll eventLoopGroup with maxThreads = maxSize of connection pool?
Regards

Warmup can be a slight workaround, but as mentioned by @PiotrDuz, it's by no means a fix. In an ideal world, the pool would be event-loop aware and hand out a connection that runs on the same thread.
In reality, we do not have the event loop information being exposed from the connections. Additionally, pools of that size would negatively affect database servers.
Disabling colocation is the only viable solution for long-lived connections. I already reached out to the Reactor Netty team for guidance and will share it once I have more details.

During investigation with a customized LoopResources instance I found that the empty pool still behaves sequentially. I have no idea why this is, allocating a connection or warming the pool leads to the desired concurrency profile.

How does your custom loop resource look like?
Here is the one that works for us:
@Override
    public EventLoopGroup onClient(boolean useNative) {
        return cacheLoops();
    }

EventLoopGroup cacheLoops() {
        EventLoopGroup eventLoopGroup = loops.get();
        if (null == eventLoopGroup) {
            EventLoopGroup newEventLoopGroup = createNewEventLoopGroup();
            if (!loops.compareAndSet(null, newEventLoopGroup)) {
                //"FutureReturnValueIgnored" this is deliberate
                newEventLoopGroup.shutdownGracefully(0, 0, TimeUnit.MILLISECONDS);
            }
            eventLoopGroup = cacheLoops();
        }
        return eventLoopGroup;
    }

    private NioEventLoopGroup createNewEventLoopGroup() {
        return new NioEventLoopGroup(threads, new ThreadPerTaskExecutor(new DefaultThreadFactory(THREAD_PREFIX)));
    }

During investigation with a customized LoopResources instance I found that the empty pool still behaves sequentially. I have no idea why this is, allocating a connection or warming the pool leads to the desired concurrency profile.

@mp911de I found a problem when I calling warmup.subscibe() and findAll().block() in parallel, https://github.com/reactor/reactor-pool/issues/170
Is this the cause of your problem?

@PiotrDuz there's a LoopResources.create(…) method taking a colocate boolean flag, introduced with Reactor Netty 1.0.28., It removes the need to implement LoopResources.
I additionally filed a ticket to reuse the default event loop groups with a LoopResources wrapper that doesn't apply colocation.

What is the best way to inject that LoopResources.create?

@mp911de Is there an agreed fix R2DBC Postgres users can apply to avoid this? I've had a read through this thread but have found it difficult to piece together what exactly is needed.

@dstepanov Big thanks for spotting the area of the cause! I've been struggling a lot (looking down to PG TCP packets) to find it until I noticed R2DBC is really using only a single thread like you said.
@mp911de I confirm to experience the same. This makes R2DBC Postgres driver 3 times slower compared to JDBC blocking driver. Setting different maxSize and initialSize settings makes it faster (very weird effect), however still ~1.6 slower than JDBC. @mp911de This is a serious major issue that makes R2DC drivers basically unusable for any production usage. This needs serious attention. I'm honestly surprised how r2dbc-pool library made it up to 1.0.0.RELEASE over 3 years without this being noticed by maintainers nor users. The benchmarks were even already there on TechEmpower, like @dstepanov mentioned, but it's also very easy to reproduce anyway. I assume it affects not only Postgres driver (which I was testing), since the issue is in the r2dbc-pool/netty.
My Reproduction
I have 4 (8) cores CPU i7-7700K. I do a single request to a WebFlux endpoint. Inside, it executes very simple SELECT (returning 1 record) 40 000 times concurrently. I.e. I create a list of 40 000 Monos of below:
databaseClient.sql("SELECT * FROM companies WHERE company_id = $1")
    .bind(0, currentId)
    .fetch()
    .first()
    .map(stringObjectMap -> ((Number) stringObjectMap.get("company_id")).longValue());

and execute them concurrently, calculating time spent once all Monos finish:
long timeStartNs = System.nanoTime();
return Mono.zip(dbCallMonos, objects -> TimeUnit.NANOSECONDS.toMillis(System.nanoTime() - timeStartNs));

100 maxSize for R2DBC pool.
For JDBC, I do the above in a fixed thread pool, with the same size of 100 (matches the connection pool size in Hikari), with blocking Callable calls, waiting for all Futures to finish at the end.
Results:

Equal maxSize and initialSize - 4000ms. Only a single reactor-tcp-epoll-1 doing all the DB work (look at the 90% percentage value of the thread, on the left).
Different maxSize and initialSize - 2500ms. Better. Now there are 8 TCP threads, but still reactor-tcp-epoll-1 does 31% of the work, while the rest chill at 10%.
JDBC - 1600ms. The fastest. All 100 threads are working evenly, each taking 1% of work.

The above correlates with TPS I see in Postgres dashboard. JVM warmup was done prior. Everything on the latest version (Ubuntu, Spring, drivers, Postgres). Postgres is on a separate machine. The absolute latency values don't matter, since it will be different on each machine, only the relative difference is important.
40 000 calls are done inside the endpoint (as opposed to calling 40 000 times the endpoint), to eliminate any framework/http latencies. However, I have another test with Spring MVC (JDBC) and WebFlux (R2DBC) doing the same SELECT single time during endpoint call, and endpoints are bombarded with a benchmarking tool from another machine on the local network with 1024 concurrency. In this setup, there are 8 Spring threads and 8 reactor-tcp-epoll threads. I observe the same speeds like above (even a bit worse). As for the threads, here is the WebFlux R2DBC graph - reactor-tcp-epoll-1 does 15% of the work, with the rest doing only ~3.5%; Spring HTTP threads are evenly spread:
Setting colocate to false in LoopResources.create(…) didn't have any effect. The warmup() didn't help as well.
I am able to provide the full reproducibles with .jfr's, but it's very easy to reproduce.

@artemik Thanks for your test. In my opinion, one single thread can not support high TPS if one single job(one DB query/update) is heavy. For example, when we using R2dbcRepository, framework help us do some serializations/deserializations or reflections to inject values, and they are heavy works. Setting colocate to false is a necessarily way to improve performance in some circumstances.
Sorry I can't provide any evidence for now.

Hello,
I am the original author of an issue posted on micronaut-data project. It has been escalated from there by libraries mantainers.
Problem explanation is here:
https://github.com/micronaut-projects/micronaut-data/issues/2136
So what is the fix for this problem? Having separate threads per connection socket.
Is colocate = false achieving that? Looking at the source  it is not easy to tell. There is no clear, separate eventLoopGroup created for client. Aso the created loop has some complicated thread factory model.
I have proposed custom, simple solution. During our tests it seemed to fix the issue. A picture is worth more than words, so here is the code:
class NioClientEventLoopResources implements LoopResources {
    public static final String THREAD_PREFIX = "prefix-";
    final int threads;
    final AtomicReference<EventLoopGroup> loops = new AtomicReference<>();
    final AtomicBoolean running;

    NioClientEventLoopResources(int threads) {
        this.running = new AtomicBoolean(true);
        this.threads = threads;
    }

    @Override
    @SuppressWarnings("unchecked")
    public Mono<Void> disposeLater(Duration quietPeriod, Duration timeout) {
        return Mono.defer(() -> {
            long quietPeriodMillis = quietPeriod.toMillis();
            long timeoutMillis = timeout.toMillis();
            EventLoopGroup serverLoopsGroup = loops.get();
            Mono<?> slMono = Mono.empty();
            if (running.compareAndSet(true, false)) {
                if (serverLoopsGroup != null) {
                    slMono = FutureMono.from((Future) serverLoopsGroup.shutdownGracefully(
                            quietPeriodMillis, timeoutMillis, TimeUnit.MILLISECONDS));
                }
            }
            return Mono.when(slMono);
        });
    }

    @Override
    public boolean isDisposed() {
        return !running.get();
    }

    @Override
    public EventLoopGroup onClient(boolean useNative) {
        return cacheLoops();
    }

    @Override
    public EventLoopGroup onServer(boolean useNative) {
        throw new UnsupportedOperationException("This event loop is designed only for client DB calls.");
    }

    @Override
    public EventLoopGroup onServerSelect(boolean useNative) {
        throw new UnsupportedOperationException("This event loop is designed only for client DB calls.");
    }

    @Override
    public <CHANNEL extends Channel> CHANNEL onChannel(Class<CHANNEL> channelType, EventLoopGroup group) {
        if (channelType.equals(SocketChannel.class)) {
            return (CHANNEL) new NioSocketChannel();
        }
        if (channelType.equals(ServerSocketChannel.class)) {
            return (CHANNEL) new NioServerSocketChannel();
        }
        if (channelType.equals(DatagramChannel.class)) {
            return (CHANNEL) new NioDatagramChannel();
        }
        throw new IllegalArgumentException("Unsupported channel type: " + channelType.getSimpleName());
    }

    @Override
    public <CHANNEL extends Channel> Class<? extends CHANNEL> onChannelClass(Class<CHANNEL> channelType,
            EventLoopGroup group) {
        if (channelType.equals(SocketChannel.class)) {
            return (Class<? extends CHANNEL>) NioSocketChannel.class;
        }
        if (channelType.equals(ServerSocketChannel.class)) {
            return (Class<? extends CHANNEL>) NioServerSocketChannel.class;
        }
        if (channelType.equals(DatagramChannel.class)) {
            return (Class<? extends CHANNEL>) NioDatagramChannel.class;
        }
        throw new IllegalArgumentException("Unsupported channel type: " + channelType.getSimpleName());
    }

    @SuppressWarnings("FutureReturnValueIgnored")
    EventLoopGroup cacheLoops() {
        EventLoopGroup eventLoopGroup = loops.get();
        if (null == eventLoopGroup) {
            EventLoopGroup newEventLoopGroup = createNewEventLoopGroup();
            if (!loops.compareAndSet(null, newEventLoopGroup)) {
                //"FutureReturnValueIgnored" this is deliberate
                newEventLoopGroup.shutdownGracefully(0, 0, TimeUnit.MILLISECONDS);
            }
            eventLoopGroup = cacheLoops();
        }
        return eventLoopGroup;
    }

    private NioEventLoopGroup createNewEventLoopGroup() {
        return new NioEventLoopGroup(threads, new ThreadPerTaskExecutor(new DefaultThreadFactory(THREAD_PREFIX)));
    }
}

This class should be used in
ConnectionFactoryOptions.option(PostgresqlConnectionFactoryProvider.LOOP_RESOURCES, new <our_class> )
to replace default eventLoopGroup.
@artemik can you run your tests once again, using above class?
Your tests seem more detailed so I am curious whether this example will work fine here too.
Of course this theoretically is slower than single thread handling many sockets, as we are inducing cpu context switching for each thread. But load balancing the eventLoopGroup seems to be too complicated to implement, and the cost of performance loss in negligible when compared to random slowness introduced by overloaded thread.
Regards

@PiotrDuz Thanks, I've included it in my tests. I didn't check your class in details, but afaik it forces R2DBC to use the specified number of threads?
@mp911de I've cleaned up and prepared the reproducable:  https://github.com/artemik/r2dbc-jdbc-vertx-issue-190
It tests more than just initialSize vs maxSize - it tests JDBC vs R2DBC vs Vertx (as another reactive driver example based on Netty) in standalone and WebFlux environments. Different environments produce different interesting results. Please check readme, it has all the details. I'll duplicate the key parts here.

Benchmark
There are 6 applications doing the same - run 500 000 SELECTs and measure the total time spent. Each SELECT returns the same (for max stability) single record by ID. All SELECTs are executed with concurrency equal to max DB connection pool size:

3 standalone apps (one per R2DBC, JDBC and Vertx DB clients): command line app, prints the duration on each run and repeats it 50 times;
3 web apps (one per R2DBC, JDBC and Vertx DB clients): endpoint /benchmark does a single run and returns duration in response. No automatic repeats - you call it and repeat manually.

Results
Note: In all R2DBC tests below, all 8 setup permutations were tested: with/without custom LoopResources; with/without ConnectionPool.warmup(); equal/non-equal initialSize and maxSize - they're displayed as one shared measurement, only those that differ are displayed separately.
Standalone

App
Duration

JDBC
18 sec (baseline)

R2DBC Connection
18.3 sec (+1.5%)

R2DBC DatabaseClient
19.5 sec (+8.3%)

Vertx
18.1 sec (+0.5%)

Web App

App
Duration

Spring MVC, JDBC
18 sec (baseline)

Spring WebFlux, R2DBC Connection
25.5 sec (+42% = 1.42 times)*  - *41.5 sec (+130% = 2.3 times) (without custom LoopResources; with (!) ConnectionPool.warmup())  - *41.5 sec (+130% = 2.3 times) (without custom LoopResources; without ConnectionPool.warmup(); equal initialSize and maxSize)

Spring WebFlux, R2DBC DatabaseClient
31.5 sec (+75% = 1.75 times)*  -*51 sec (+183% = 2.83 times) (without custom LoopResources; with (!) ConnectionPool.warmup())  -*51 sec (+183% = 2.83 times) (without custom LoopResources; without ConnectionPool.warmup(); equal initialSize and maxSize)

Spring WebFlux, Vertx
19 sec (+5.5%)

Conclusions

First of all, in WebFlux, all R2DBC setups are slower than its standalone counterpart by at least ~40% (25.5 sec vs 18.3 sec).
In WebFlux, without custom LoopResources, you MUST NOT run warmup(), otherwise things are slow.
In WebFlux, the choice of equal vs non-equal initialSize and maxSize matters only when without custom LoopResources and without warmup - must be non-equal, otherwise things are slow. In all other cases, this choice doesn't matter.
In standalone, all R2DBC settings perform the same.
R2DBC is slower than JDBC by at least 42% in WebFlux, and by 1.5% in standalone.
Vertx driver performs great in both WebFlux and standalone environments, and close to JDBC (especially in standalone). It doesn't seem to be affected by WebFlux like R2DBC.

Apparently, because Vertx also uses Netty but doesn't suffer from issues like R2DBC under WebFlux (and doesn't require any tricky settings), there should be a way to fix R2DBC.

@PiotrDuz I used number_of_cores threads for your LoopResources, because otherwise making it equal to max connection pool size breaks the reactive sense, and in theory shouldn't give much more performance. I tried it - same performance as with number_of_cores.
Anyway, to your question - I confirm your LoopResources class forces the number of threads specified, and the utilization is quite even.
However:

Based on the results, as you can see, the presence of LoopResources doesn't make things faster.
In standalone version, R2DBC works fine even with a single thread. Even more so - just all R2DBC cases perform equally good in standalone.
Vertx performs great in both standalone and Webflux, and it used a single thread. (I mean, I think I saw it using multiple threads sometimes, it's probably smart to auto increase them when needed, but even with a single thread it performed fast as in the benchmarks.)

It means that how many threads R2DBC is using doesn't seem to matter - R2DBC is just slow with WebFlux for some unclear reason. And maybe the collocation, which was originally assumed to be the cause in this ticket, is not the issue.

As for initialSize vs maxSize equality, which was also the original issue raised in this ticket - it seems to be true - your default setup is: without custom LoopResources; without ConnectionPool.warmup(); equal initialSize and maxSize - this is exactly the case where R2DBC shows the worst performance, as per benchmarks. The workaround is - use any other setup, for example start calling warmup, or use LoopResources, etc, but only don't use this combination - "without custom LoopResources; with (!) ConnectionPool.warmup()" - because surprisingly it works the worst as well. But let me highlight here - equality of initialSize and maxSize itself doesn't make things slow - for example, the case "without LoopResources, with warmup(), with equal sizes" works fine... And lastly, these all workarounds give you a better performance, but still much slower than JDBC or Vertx.

So two things to be fixed here:

fix that big drop in performance in special cases with WebFlux
fix the overall slow base performance with WebFlux, because based on standalone cases, it seems R2DBC can do better.

I think your benchmarks do not address the original problem of an issue.
You have many small queries which have plenty of time in between to overlap with others. But when you start a heavy query, then other colocated query might be heavily impacted. This can be seen as huge drop of performance while other cores are idling.
This is why I have found thread - per - socket approach to be a solution. I think by using colocation users just must be aware of drawbacks.
Your tests however are also helpful as they show other problems with r2dbc. But at this moment maybe it is worth to split topics in 2, here we could focus on colocation forcing queries on the same thread when other cores could be idle.
Your findings seem to be connected with other causes.
Am I getting it right?
Regards

@PiotrDuz you're right that many small queries don't clearly show how concurrently connections are used. I've added additional tests.
Results (SELECT 100 records)
Standalone
Not tested. WebFlux results show it's not needed.
Web App
Both MVC JDBC and WebFlux Vertx: 51 sec (baseline).
R2DBC results are more diverse, so I provide a table specifically for it with all setups. I only tested DatabaseClient.
Note: for readability, + means with, - means without.

WebFlux R2DBC DatabaseClient Setup
Duration

+ LoopResources, + warmup(), initialSize != maxSize
51 sec

+ LoopResources, + warmup(), initialSize == maxSize
51 sec

+ LoopResources, - warmup(), initialSize != maxSize
51 sec

+ LoopResources, - warmup(), initialSize == maxSize
51 sec

- LoopResources, + warmup(), initialSize != maxSize
111 sec (+117% = 2.17 times)

- LoopResources, - warmup(), initialSize != maxSize
111 sec (+117% = 2.17 times)

- LoopResources, + warmup(), initialSize == maxSize
120 sec (+135% = 2.35 times)

- LoopResources, - warmup(), initialSize == maxSize
120 sec (+135% = 2.35 times)

How to Interpret R2DBC Results

Unlike with fast single-record selects, longer DB processing time of multi-record SELECTs probably makes R2DBC slowness itself unnoticeable, compared to the total processing time. So R2DBC has 4 setups where it performs normally (similarly to JDBC and Vertx) with 51 secs.
Lack of custom LoopResources drops performance ~2.17 times:

and additionally having initialSize == maxSize drops it a bit more: ~2.35 times.

R2DBC performs the worst in the default setup (-LoopResources, -warmup(), initialSize==maxSize).

Results (Connections concurrency / Threading)
In all the tests above, it was visible on DB side monitoring that R2DBC established all maxSize connections just fine, but it wasn't really clear how many of them were concurrently active, because the queries were too fast to build up concurrent processing on DB side.
You saw 4 cases with multi-record SELECTs where R2DBC performed as fast as JDBC and Vertx, but from single-record SELECT tests we know R2DBC is slower, so longer DB processing time of multi-record SELECTs just helps to hide R2DBC slowness itself. Moreover, those multi-record SELECTs were still too fast to simulate some heavy long query.
It all means that we need to make a test specifically for concurrent connections usage. To do that, I just modified the single-record SELECT to select pg_sleep(2) as well, to simulate 2 secs processing time. It means in ideal case, for 100 connections pool size, for example, all 100 sessions should become seen as active, proving that all connections are used. Let's see.
I also included observations on threading usage. It corresponds to what I saw in single/multi record SELECT tests as well.
Standalone and Web App
Vertx - all 100 connections were active in parallel. As for threading, it used only 1 thread, like in all previous benchmarks above as well, but it doesn't seem to cause performance issues.
R2DBC

Threads

with LoopResources: 8 threads (as many as specified, in my case it's CPU_CORES);
without LoopResources:

initialSize !=  maxSize: 2 threads;
initialSize ==  maxSize: 1 thread.

Connections

all 100 connections were active in parallel;
but, without warmup() R2DBC suffered on the first run - before all SELECT Monos were completed, it used only ~40 out of 100 connections (exact number was different on each app launch, but it remained unchanged during the first run), and TPS dropped accordingly. Only on the next run all 100 connections became in use.

How to Interpret R2DBC Results

Because R2DBC underutilizes connections on first runs, it's a problem, for example, for specific cases where you have a cron job starting your app to run a batch of Mono queries in one go, and then shutdown - you'll must use warmup() in this case.
Otherwise, connections usage is fine and I didn't see, for example, R2DBC being stuck with a single connection (regardless of how many threads were used).
Threading - not clear whether it's an issue, because even with LoopResources R2DBC performed slow in single-record SELECTs for example. And also Vertx, for example, was able to perform fine even with 1 thread in all tests.
It's not in the benchmarks, but in addition to triggering SELECTs from the single http request, I also separately tested triggering them from multiple http requests bombarded from a load testing tool, to simulate query calls triggered from different WebFlux threads - R2DBC showed the same threading usage like mentioned above.

Vertx, however, used multiple threads (~ CPU cores) just fine.

So to summarize:

WebFlux usage issue - yes;
threading issue - yes
connections concurrency issue - only first runs without warmup, otherwise no.

@artemik Would you also mind including Micronaut V4 (latest milestone or RC) into the benchmark and see how it does behave vs. WebFlux? We may need some optimization too.

After a few iterations, the best we can do here is using a dedicated thread pool for subscribing (Schedulers.single) to the connection factory to prevent accidental co-location. In combination with the optimized pool warmup, the single-threaded issue should be gone.
There is no good place to solve this issue as Reactor Netty wants to keep their colocated default. R2DBC Pool isn't opinionated about the underlying driver nor its threading model, yet it doesn't make sense to have connections with colocated threads in a pool, so I guess we're the one now compensating for a default that makes only sense in certain client-request scenarios.

@mp911de I think performance results (before/after) need to be provided from you here, before officially closing this issue.
P.S. @dstepanov I'll try checking Micronaut, if I have time.

@mp911de Once we pick up the pool parallelism changes from reactor-pool, does it make sense to add this parallelism as a config property to ConnectionPoolConfiguration?

It makes sense to do something. Can you file a new ticket?

Probably, It is time to replace my custom solution with an out-of-the-box one!
My custom fix was:
`public class PostgresqlConnectionFactoryProvider implements ConnectionFactoryProvider {
private final io.r2dbc.postgresql.PostgresqlConnectionFactoryProvider delegate =
    new io.r2dbc.postgresql.PostgresqlConnectionFactoryProvider();

@Override
public ConnectionFactory create(ConnectionFactoryOptions connectionFactoryOptions) {
    return new DelegatingConnectionFactory(delegate.create(connectionFactoryOptions)) {
        @Override
        public Mono<? extends Connection> create() {
            /* IMPORTANT: We have to create connection on dedicated thread, to ensure that connection
            wouldn't be created on eventLoop's reactor-tcp-<TRANSPORT>-X thread and bound to this
            thread because of this. Without this fix, database connections will be bound to the same
            eventLoop's thread causing performance bottleneck. See details at:
            https://gitter.im/reactor/reactor-netty?at=6145cdac99b7d9752817ad74.
             */
            return super.create().publishOn(Schedulers.single());
        }
    };
}

@Override
public boolean supports(ConnectionFactoryOptions connectionFactoryOptions) {
    return delegate.supports(connectionFactoryOptions);
}

@Override
public String getDriver() {
    return delegate.getDriver();
}

}`

Hi @PiotrDuz , @mp911de , while I understand the low performance cause (or one of them) is threads colocation, any idea why I didn't see any performance degradation in the standalone driver tests (exactly the same tests, but just without WebFlux)? Why does it become slow only when the series of queries is launched from a WebFlux thread? What kind of relation between r2dbc-pool and WebFlux might be causing that?

Colocation takes effect if a connection is obtained from a process that runs on a thread which is part of the colocated event loop.
Since WebFlux and most drivers use the same default event loop, any WebFlux thread requesting a database connection will create a connection that uses the request thread.
Does that make sense?

@mp911de, "any WebFlux thread requesting a database connection will create a connection that uses the request thread" - From what I saw, the threads were created new (reactor-tcp-*) in addition to the WebFlux thread that started the database queries (reactor-http-*).  But if you mean the cause is that all of them were on the same event loop causing the colocation, then it probably makes sense.
Thanks for clarification.

Though @mp911de if colocation is default behaviour, I'm still confused why it doesn't happen in standalone environment, wouldn't we similarly have 8 threads handling all 100 connections?


Uintah reader doesn't properly read "long long int" data.

This bug report is the result of the discussion https://github.com/visit-dav/visit/discussions/17211.
It includes a data file to reproduce the behavior as well as images showing the failure of the Uintah reader. It used to work in 2.13.3 and no longer works in 3.2.1. The fix is also described in general terms in the discussion. Specifically, build_visit would need to be changed to patch the Uintah library to handle long long int data. Currently all the data types are converted to double except for long long int data.

The issue is on the Uinah side in that they changed the type but did not update all of the conversion code. I have done that on the Uintah side. They will need to create a new tarball for the VisIt third-party library builds.


Recursive search for egg-info directories breaks nested projects

Issue description
During locking, when the resolver subprocess looks for a name for a requirement, and the requirement is a local path, then it (via requirementslib) will recursively search for an .egg-info directory and get the name from there. But the .egg-info directory might be unrelated to the package to install. In particular, a pathological case occurs when:

A Pipfile lists multiple packages, one nested inside the other
The inner one is processed first
Processing the inner one generates an .egg-info directory (because setup.py egg_info is invoked)

In this case, the resolver process ends up with the same name for the inner and outer package, and things get badly confused. See "Steps to Reproduce" below.
Expected result
Pipfile.lock has the correct path for each project
Actual result
Pipfile.lock is corrupted and confuses the outer and inner packages
    "default": {
        "french-toast": {
            "editable": true,
            "path": "."
        },
        "scrambled-eggs": {
            "editable": "true",
            "path": "."
        }
    },

Steps to replicate

Clone the repo https://github.com/owtaylor/scrambled_eggs. It has following structure

scrambled_eggs/
   Pipfile
   setup.py
   scrambled_eggs/
      __init__.py
   french_toast/
       setup.py
       french_toast/
            __init__.py

and the following Pipfile
[[source]]
name = "pypi"
url = "https://pypi.org/simple"
verify_ssl = true

[packages]
french_toast = {path = "./french_toast", editable = "true"}
scrambled_eggs = {path = ".", editable = "true"}

Make sure that there are no existing .egg-info directories from previous runs (git clean -dxf)
Run pipenv lock and observe the Pipfile.lock generated

NOTE: the order of requirement processing is arbitrary - it may be necessary to force it by editing https://github.com/pypa/pipenv/blob/main/pipenv/utils/resolver.py#L152
*WORKAROUND: Run python setup.py egg_info at the toplevel before running pipenv lock. This will create an egg_info directory for the outer package, which will be found first.
I'm not really sure what the right fix here is - requirementslib could not scan recursively for .egg-info directories and only look for directo subdirectories of the given path - but there's probably some reason that the recursive search was added?

Pipenv version: '2022.5.2'
Pipenv location: '/var/home/otaylor/.local/share/virtualenvs/scrambled_eggs-mbSpAmTK/lib/python3.10/site-packages/pipenv'
Python location: '/var/home/otaylor/.local/share/virtualenvs/scrambled_eggs-mbSpAmTK/bin/python'
Python installations found:

3.10.4: /var/home/otaylor/.local/share/virtualenvs/scrambled_eggs-mbSpAmTK/bin/python
3.10.4: /var/home/otaylor/.local/share/virtualenvs/scrambled_eggs-mbSpAmTK/bin/python3
3.10.4: /var/home/otaylor/.local/share/virtualenvs/scrambled_eggs-mbSpAmTK/bin/python
3.10.4: /var/home/otaylor/.local/share/virtualenvs/scrambled_eggs-mbSpAmTK/bin/python3
3.10.4: /usr/bin/python3
3.10.4: /bin/python3
3.9.12: /usr/bin/python3.9
3.9.12: /usr/bin/pypy3.9
3.9.12: /usr/bin/pypy3
3.9.12: /bin/python3.9
3.9.12: /bin/pypy3.9
3.9.12: /bin/pypy3
3.8.13: /usr/bin/python3.8
3.8.13: /usr/bin/pypy3.8
3.8.13: /bin/python3.8
3.8.13: /bin/pypy3.8
3.7.13: /usr/bin/python3.7
3.7.13: /usr/bin/python3.7m
3.7.13: /bin/python3.7
3.7.13: /bin/python3.7m
3.6.15: /usr/bin/python3.6
3.6.15: /usr/bin/python3.6m
3.6.15: /bin/python3.6
3.6.15: /bin/python3.6m
2.7.18: /usr/bin/python2
2.7.18: /usr/bin/python2.7
2.7.18: /usr/bin/pypy2
2.7.18: /usr/bin/pypy
2.7.18: /usr/bin/pypy2.7
2.7.18: /bin/python2
2.7.18: /bin/python2.7
2.7.18: /bin/pypy2
2.7.18: /bin/pypy
2.7.18: /bin/pypy2.7

PEP 508 Information:
{'implementation_name': 'cpython',
 'implementation_version': '3.10.4',
 'os_name': 'posix',
 'platform_machine': 'x86_64',
 'platform_python_implementation': 'CPython',
 'platform_release': '5.15.8-200.fc35.x86_64',
 'platform_system': 'Linux',
 'platform_version': '#1 SMP Tue Dec 14 14:26:01 UTC 2021',
 'python_full_version': '3.10.4',
 'python_version': '3.10',
 'sys_platform': 'linux'}

System environment variables:

SHELL
COLORTERM
HISTCONTROL
XDG_MENU_PREFIX
PIPENV_ACTIVE
HOSTNAME
HISTSIZE
SSH_AUTH_SOCK
DISTTAG
DESKTOP_SESSION
EDITOR
NAME
PWD
XDG_SESSION_DESKTOP
LOGNAME
XDG_SESSION_TYPE
TOOLBOX_PATH
GNOME_TERMINAL_FEATURES
XAUTHORITY
container
TOOLBOX_CONTAINER
PIP_PYTHON_PATH
HOME
LANG
LS_COLORS
XDG_CURRENT_DESKTOP
FGC
VIRTUAL_ENV
VTE_VERSION
WAYLAND_DISPLAY
GNOME_TERMINAL_SCREEN
ANSIBLE_NOCOWS
TERM
LESSOPEN
USER
PIP_DISABLE_PIP_VERSION_CHECK
GNOME_TERMINAL_SERVICE
DISPLAY
SHLVL
PYTHONDONTWRITEBYTECODE
XDG_RUNTIME_DIR
PS1
DEBUGINFOD_URLS
which_declare
XDG_DATA_DIRS
PATH
VERSION
DBUS_SESSION_BUS_ADDRESS
MAIL
OLDPWD
BASH_FUNC_which%%
_
PIP_SHIMS_BASE_MODULE
PYTHONFINDER_IGNORE_UNSUPPORTED

Pipenv–specific environment variables:

PIPENV_ACTIVE: 1

Debug–specific environment variables:

PATH: /var/home/otaylor/.local/share/virtualenvs/scrambled_eggs-mbSpAmTK/bin:/var/home/otaylor/.local/bin:/var/home/otaylor/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
SHELL: /bin/bash
EDITOR: /usr/bin/vim
LANG: C.UTF-8
PWD: /var/home/otaylor/Source/scrambled_eggs
VIRTUAL_ENV: /var/home/otaylor/.local/share/virtualenvs/scrambled_eggs-mbSpAmTK

I'm not really sure what the right fix here is - requirementslib could not scan recursively for .egg-info directories and only look for directo subdirectories of the given path - but there's probably some reason that the recursive search was added?

The code you linked to in requirementslib has been that way for 3 years.
I tried the example @owtaylor but it seemed to work fine, no errors:
matteius@matteius-VirtualBox:~/pipenv-triage/pipenv-5118/scrambled_eggs$ git clean -dxf
matteius@matteius-VirtualBox:~/pipenv-triage/pipenv-5118/scrambled_eggs$ pipenv lock
Creating a virtualenv for this project...
Pipfile: /home/matteius/pipenv-triage/pipenv-5118/scrambled_eggs/Pipfile
Using /home/matteius/.pyenv/versions/3.10.2/bin/python3 (3.10.2) to create virtualenv...
⠼ Creating virtual environment...created virtual environment CPython3.10.2.final.0-64 in 557ms
  creator CPython3Posix(dest=/home/matteius/.virtualenvs/scrambled_eggs-tI4FO2ez, clear=False, no_vcs_ignore=False, global=False)
  seeder FromAppData(download=False, pip=bundle, setuptools=bundle, wheel=bundle, via=copy, app_data_dir=/home/matteius/.local/share/virtualenv)
    added seed packages: pip==22.0.4, setuptools==62.1.0, wheel==0.37.1
  activators BashActivator,CShellActivator,FishActivator,NushellActivator,PowerShellActivator,PythonActivator

✔ Successfully created virtual environment!
Virtualenv location: /home/matteius/.virtualenvs/scrambled_eggs-tI4FO2ez
Locking [dev-packages] dependencies...
Locking [packages] dependencies...
Building requirements...
Resolving dependencies...
✔ Success!
Updated Pipfile.lock (c8a99c)!
matteius@matteius-VirtualBox:~/pipenv-triage/pipenv-5118/scrambled_eggs$ git diff
matteius@matteius-VirtualBox:~/pipenv-triage/pipenv-5118/scrambled_eggs$ cat Pipfile.lock
{
    "_meta": {
        "hash": {
            "sha256": "00a46b458d13e0a1bb67bcccae4980309f9e48546306b4a52533e71a7ec8a99c"
        },
        "pipfile-spec": 6,
        "requires": {},
        "sources": [
            {
                "name": "pypi",
                "url": "https://pypi.org/simple",
                "verify_ssl": true
            }
        ]
    },
    "default": {
        "french-toast": {
            "editable": true,
            "path": "./french_toast"
        },
        "scrambled-eggs": {
            "editable": true,
            "path": "."
        }
    },
    "develop": {}
}
matteius@matteius-VirtualBox:~/pipenv-triage/pipenv-5118/scrambled_eggs$ pipenv --version
pipenv, version 2022.5.2
matteius@matteius-VirtualBox:~/pipenv-triage/pipenv-5118/scrambled_eggs$ pipenv sync
Installing dependencies from Pipfile.lock (c8a99c)...
  🐍   ▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉ 2/2 — 00:00:17
To activate this project's virtualenv, run pipenv shell.
Alternatively, run a command inside the virtualenv with pipenv run.
All dependencies are now up-to-date!

@owtaylor Ok weird, on take two I see what you mean about it generating a different Pipfile.lock this time.
matteius@matteius-VirtualBox:~/pipenv-triage/pipenv-5118/scrambled_eggs$ git clean -dxf
Removing Pipfile.lock
Removing build/
Removing french_toast/build/
Removing french_toast/french_toast.egg-info/
Removing scrambled_eggs.egg-info/
matteius@matteius-VirtualBox:~/pipenv-triage/pipenv-5118/scrambled_eggs$ pipenv lock
Locking [dev-packages] dependencies...
Locking [packages] dependencies...
Building requirements...
Resolving dependencies...
✔ Success!
Updated Pipfile.lock (c8a99c)!
matteius@matteius-VirtualBox:~/pipenv-triage/pipenv-5118/scrambled_eggs$ cat Pipfile.lock
{
    "_meta": {
        "hash": {
            "sha256": "00a46b458d13e0a1bb67bcccae4980309f9e48546306b4a52533e71a7ec8a99c"
        },
        "pipfile-spec": 6,
        "requires": {},
        "sources": [
            {
                "name": "pypi",
                "url": "https://pypi.org/simple",
                "verify_ssl": true
            }
        ]
    },
    "default": {
        "french-toast": {
            "editable": true,
            "path": "."
        },
        "scrambled-eggs": {
            "editable": "true",
            "path": "."
        }
    },
    "develop": {}
}

This isn't entirely a recent regression - with 2021.5.29:

The problem occurs if you manually run 'python setup.py egg_info'
But pipenv / requirementslib doesn't end creating up the egg-info directory itself (not quite sure why), while it is created with current pipenv

As you've seen it's quite a heisenbug - if you look at it wrong it goes away (I expect people have hit it, tried again, and ignored it.) The two sources I know of unreproducibility I know of are:

The dependency on what files already exist - you have to not have metadata for the out project
The fact that pipenv iterates the packages from the requirements in undefined order (the constraints = set(deps) code I linked to above)

But there might be something else going on that makes it tricky as well. I had a Dockerfile that reproduced it and spent a good chunk of yesterday patching pipenv in the build environment to add debug-prints until I figured out what was going on ...

As you've seen it's quite a heisenbug

As are many pipenv bugs I have been involved with so far--it can be very time consuming to understand the bug, yet alone fixing it.   This is something that I could use help with and I am willing to collaborate on the fix.  Is this something you have bandwidth to take on (it sounds like you've already started working on an understanding of that code)?   If so, I can mark you as assigned and If not I will tag this item with help wanted.

But pipenv / requirementslib doesn't end creating up the egg-info directory itself (not quite sure why), while it is created with current pipenv

This maybe has to do with some changes to support newer version of setuptools, though I am only speculating based on what I know so far that setuptools has been evolving in the last 6 months.  I helped release the new version of requirementslib, though my changes wouldn't have been specific to this issue, at least I don't think.

@owtaylor Thanks for your excellent analysis.  I may have just figured this out as a logical bug from the outer method that calls _parse_name_from_path Check out my PR of requirementslib here:  https://github.com/sarugaku/requirementslib/pull/319/files
Basically there was a logical boolean error where the name may have already been established but it tried to get the name again when is_remote_url or is_path was true.
elif name is None and self.is_file or self.is_remote_url or self.is_path should become elif name is None and (self.is_file or self.is_remote_url or self.is_path):
I patched it to my local pipenv vendor directory and re-ran your example and it worked to lock and install, so it seemed work.  Here is my output:
matteius@matteius-VirtualBox:~/pipenv-triage/pipenv-5118/scrambled_eggs$ pipenv --rm
Removing virtualenv (/home/matteius/.virtualenvs/scrambled_eggs-tI4FO2ez)...
matteius@matteius-VirtualBox:~/pipenv-triage/pipenv-5118/scrambled_eggs$ pipenv lock
Creating a virtualenv for this project...
Pipfile: /home/matteius/pipenv-triage/pipenv-5118/scrambled_eggs/Pipfile
Using /home/matteius/.pyenv/versions/3.10.2/bin/python3 (3.10.2) to create virtualenv...
⠼ Creating virtual environment...created virtual environment CPython3.10.2.final.0-64 in 474ms
  creator CPython3Posix(dest=/home/matteius/.virtualenvs/scrambled_eggs-tI4FO2ez, clear=False, no_vcs_ignore=False, global=False)
  seeder FromAppData(download=False, pip=bundle, setuptools=bundle, wheel=bundle, via=copy, app_data_dir=/home/matteius/.local/share/virtualenv)
    added seed packages: pip==22.1.2, setuptools==62.3.4, wheel==0.37.1
  activators BashActivator,CShellActivator,FishActivator,NushellActivator,PowerShellActivator,PythonActivator

✔ Successfully created virtual environment!
Virtualenv location: /home/matteius/.virtualenvs/scrambled_eggs-tI4FO2ez
Locking [dev-packages] dependencies...
Locking [packages] dependencies...
Building requirements...
Resolving dependencies...
✔ Success!
Updated Pipfile.lock (c8a99c)!
matteius@matteius-VirtualBox:~/pipenv-triage/pipenv-5118/scrambled_eggs$ cat Pipfile.lock
{
    "_meta": {
        "hash": {
            "sha256": "00a46b458d13e0a1bb67bcccae4980309f9e48546306b4a52533e71a7ec8a99c"
        },
        "pipfile-spec": 6,
        "requires": {},
        "sources": [
            {
                "name": "pypi",
                "url": "https://pypi.org/simple",
                "verify_ssl": true
            }
        ]
    },
    "default": {
        "french-toast": {
            "editable": true,
            "path": "./french_toast"
        },
        "scrambled-eggs": {
            "editable": true,
            "path": "."
        }
    },
    "develop": {}
}
matteius@matteius-VirtualBox:~/pipenv-triage/pipenv-5118/scrambled_eggs$ ls
build  french_toast  Pipfile  Pipfile.lock  pyproject.toml  README.md  scrambled_eggs  scrambled_eggs.egg-info  setup.py
matteius@matteius-VirtualBox:~/pipenv-triage/pipenv-5118/scrambled_eggs$ pipenv install
Installing dependencies from Pipfile.lock (c8a99c)...
  🐍   ▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉ 2/2 — 00:00:20
To activate this project's virtualenv, run pipenv shell.
Alternatively, run a command inside the virtualenv with pipenv run.
matteius@matteius-VirtualBox:~/pipenv-triage/pipenv-5118/scrambled_eggs$ pipenv run pip freeze
-e git+https://github.com/owtaylor/scrambled_eggs@eafd1828e402c5709b311499cfaea766f995bf33#egg=french_toast&subdirectory=french_toast
-e git+https://github.com/owtaylor/scrambled_eggs@eafd1828e402c5709b311499cfaea766f995bf33#egg=scrambled_eggs

Let me know if that also looks correct to you, and I can try to get another patch release of requirementslib out and vendor'd in soon.  Thanks again!


add art to image for space for text from input field details

Added space at bottom of textbox image from another template. This might want to be changed in the future to be a separate selection from the textbox


[GSSOC'21] Find diameter of a tree.

I would like to do this issue using DFS in C++ language.
My solution will have inline comments , short description about the problem as well as the approach to solve it and the
user's input and output .

I am GSSOC'21 participant and I would like to work on this problem. I would like to do this using C++.Please assign me this task.

I would like to work on it. Kindly assign it to me.

hey @tarun26091999 can i work on this issue in python?
Thank you!

I am a gssoc'21 participant.I can implement it in c++/java/python.Please assign it to me

I would like to code this in C++. I m a GSSOC'21 Partcipant .I will assure you that I will provide a commented code with efficient time complexity.@tarun26091999 @dheerajkotwani @anubhavitis @dheerajkotwani @rudrakshi99 @plazzy99 @nakul-19 please assign this to me .
Regards
Madhvi .

I am a gssoc'21 participant. I can implement it in java. Please assign it to me

Issue exists at #291


Timeline fix for IE

Very small fix for the map timeline width in IE 10/11. Parent element requires width: auto, and IE has some issues with that if the children don't explicitly define a width.

:dancer: :dancer:


Soft deletes for torrents

Would be pretty useful: DMCA request comes in, we soft delete it, turns out the request is abusive, nothing is lost.

This depends on using Eloquent models for certain things, and rewriting queries to say and deleted_at is not null. Not insurmountable, just something I have to devote several hours to, e.g., generating UUIDv7 values ahead of time even though the database will insert a default value.


makerst: Print colored output for easier visual grepping

This is automatically enabled on all platforms including Windows 10 and later, whenever a TTY environment is detected.
In non-TTY environments such as CI, this can be forced using the --color command line argument.
This should keep Python 3.5 compatibility, but I can switch to f-strings for better readability if upgrading the baseline to Python 3.6 is OK. (I assume this would be OK for master, but not for a 3.x cherry-pick.)
Preview

Thanks!

This should keep Python 3.5 compatibility, but I can switch to f-strings for better readability if upgrading the baseline to Python 3.6 is OK. (I assume this would be OK for master, but not for a 3.x cherry-pick.)

This is contributor tooling so it's fine if we up the min Python version IMO, even for 3.x.
master already requires 3.6+ (as does SCons 4.3.0). For now 3.x still supports using Python 3.5 for SCons < 4.3, and I guess we don't really need to bother refactoring our buildsystem there to use newer features anyway.


TupleDeserializer fixed #24

Current coverage is 99.49%

Merging #25 into master will decrease coverage by -0.51% as of 78a5c67

@@            master     #25   diff @@
======================================
  Files           14      14
  Stmts          187     198    +11
  Branches        44      47     +3
  Methods          0       0
======================================
+ Hit            187     197    +10
- Partial          0       1     +1
  Missed           0       0

Review entire Coverage Diff as of 78a5c67

Powered by Codecov. Updated on successful CI builds.


creation of cards - order

when you create a card, the card should be always on top of the column, as many times you create a card and then see on the last minute that something was wrong, but you already have submitted it. Then currently you must scroll down to the end of the column to find it. And even use the scrollbeam

added and can be configured at in the create options of the board


PyPi description and long description update

Updated the description for PyPi and added a long description.
This is in response to Issue #39.

Thanks @joshleeb!


100% cpu utilization when i use typescript in vs code.

Type: Bug
100% cpu utilization when i use typescript in vs code.
please optimize it.
or make a different tools for javascript and typescript.
so i can enable or disable according to my need.
80% cases i don't need typescript.
so i need a light weight javascript only instllisense or autocomplete.
thanks.
VS Code version: Code 1.86.0 (05047486b6df5eb8d44b2ecd70ea3bdf775fd937, 2024-01-31T10:27:46.147Z)
OS version: Linux x64 6.5.0-15-generic
Modes:

System Info

Item
Value

CPUs
Intel(R) Core(TM)2 Duo CPU     T5870  @ 2.00GHz (2 x 797)

GPU Status
2d_canvas: enabledcanvas_oop_rasterization: disabled_offdirect_rendering_display_compositor: disabled_off_okgpu_compositing: enabledmultiple_raster_threads: disabled_offopengl: enabled_onrasterization: enabledraw_draw: disabled_off_okskia_graphite: disabled_offvideo_decode: enabledvideo_encode: disabled_softwarevulkan: disabled_offwebgl: enabledwebgl2: enabledwebgpu: disabled_off

Load (avg)
2, 1, 1

Memory (System)
1.90GB (0.69GB free)

Process Argv
--unity-launch --crash-reporter-id 97c3b0ab-0441-451b-bffe-80f4f952fe40

Screen Reader
no

VM
0%

DESKTOP_SESSION
Lubuntu

XDG_CURRENT_DESKTOP
LXQt

XDG_SESSION_DESKTOP
undefined

XDG_SESSION_TYPE
x11

Extensions (1)

Extension
Author (truncated)
Version

es7-react-js-snippets
dsz
4.4.3

Thanks for creating this issue! It looks like you may be using an old version of VS Code, the latest stable release is 1.86.1. Please try upgrading to the latest version and checking whether this issue remains.
Happy Coding!

Please use the Start Extension Bisect command to investigate whether the problem is being caused by an extension.

Patch-@Robledo6

Thanks for creating this issue! We figured it's missing some basic information or in some other way doesn't follow our issue reporting guidelines. Please take the time to review these and update the issue.
Happy Coding!


azure-ark terraform module refactoring

Module refactoring to provide a better interface and decouple the module from implicit resource groups naming.

LGTM


Game tracking

New Commands added
~battle -- battle with 2 people on the server with mentions (mention one or two users, one user uses the author and the mention)
~games -- makes a list of games that people are currently playing on the server and lists them by popularity
Old Commands affected
None
Documentation
Added documentation for the new commands and cleaned up links in the rest of the documentation
Reviewers

[ ] @JessWalters

Note
Seriously tell me if you don't want anything I make. I'll take it personally tho <3.

From a quick look this looks sick! Nice Job, I kind of want to expand on the battle command a little myself.


artwork List - filters

the filters should be select able, and t acts weird when clicking

@aghpr Duplicate


Ios feature 20161208

feature:

Use targetExecuteQueue instead of dispatching queues inside of WXStorage Module.

bugfix:

Resolve isolation problems between WXStorage unit tests.

Current coverage is 88.44% (diff: 100%)

Merging #1745 into ios-feature-20161208 will not change coverage

@@           ios-feature-20161208      #1745   diff @@
======================================================
  Files                        41         41
  Lines                      2233       2233
  Methods                     354        354
  Messages                      0          0
  Branches                    500        500
======================================================
  Hits                       1975       1975
  Misses                      258        258
  Partials                      0          0

Powered by Codecov. Last update 8480427...aa7d16a

[ios] Use targetExecuteQueue instead of dispatching queues inside of WXStorage Module.


Quiz solution sync

This is an isssue to track changes that need manual synchronization in the mooc platforms:

https://gitlab.inria.fr/learninglab/mooc-scikit-learn/mooc-scikit-learn-coordination/-/commit/c960baf1f8ff7d8d67e404a62a25b41e425ce8d8

I also tagged the PRs: https://github.com/INRIA/scikit-learn-mooc/pulls?q=is%3Apr+is%3Aclosed+label%3A"FUN%3Arequires+changes"


Added HTTP 404 to non-existent files in SPA mode

Hello,
I have seen issue #257 and wanted to contribute again. I think it would be better if we return HTTP 404 for non-existent files in SPA mode. Also, I believe that it shouldn't be a problem for SPAs since there is nothing to be crawled regarding to non-existent files by bots.
I am happy to apply any other approach if there is.

Thank you the effort you've put into this, but this doesn't make sense. 😅 All request always need to be routed to the index file, because SPAs will handle them client side.

@leo oh, it's routed to index.html anyway. There is no change about that. The thing is that; we're serving index.html with HTTP 404 if there is no such an actual file. In this case, if served SPA is using a service worker, the service worker can handle replaced assets well. Otherwise, when service worker tries to fetch them, it fetches them as HTTP 200 which seems fine to SW.

But shouldn't it be pathname === '/index.html' instead then? Because right now, you're applying that 404 error if the file is not index.html AND it doesn't exist.

Let me explain it a little bit in detail;
if the end-user;

tries to reach/ or /index.html, index.html is being served with HTTP 200.
tries to reach a file that exists on the folder, the requested file is being served with HTTP 200.
tried to reach a URL that doesn't exist on the folder, index.html is being served with HTTP 404 to notice the browser (or developer) that we're just serving index.html for SPA purpose. Then that non-existent file can be caught by service worker or whatever else.

Not sure if we should really respond with 404. It makes the browser think the resource was not found, although it was actually found (but on the client)...

Service workers are commonly used in SPAs. So I believe that we need to support this 404 approach somehow as it's requested in the issue. But it's up to you. As far as I know, there is nothing wrong in this approach regarding to search engines (since the developers serve their SPA via something like Preprender, and Prerender can decide responding it with HTTP 200 or 404 by a meta tag)

I think 404 associated with an actual response is fine. It'd be up to that response to handle the 404 and render something. What would be weird is sending 404 and actually rendering content.

But we're talking about single page applications here. I couldn't get what is wrong with this approach though. Because on this branch, if you have an SPA, and a route like /profile, we'll serve /profile page with index.html, right? But it would be being served with HTTP 404 since there is no such a profile file on the directory.
Besides that, if anyone wants to render a real 404 view, they should do it on their SPA level.
In my opinion, it shouldn't matter if the browser sees /profile page with HTTP 404, or HTTP 200 actually. Because it's just a network activity that doesn't trigger or affect anything as far as I know for the browser. HTTP Status of the page becomes meaningful when we write a code block regarding that, like service worker case.
I think we should pay attention to service workers as much as we care about SPAs. So I'm still open to any suggestions. I may refactor the code in such a way that responds with index.html and HTTP 404 for non-existent files (with extensions like main.blabla.js, style.lol.css) instead of responding index.html and HTTP 404 for all non-existent URLs if this makes sense to you all.

We're working on deprecating the --single flag because it's basically just a hack and will never cover all the possible configuration ways. In turn, we'll soon provide a config file for it with the superstatic spec that lets you easily route requests around without typing much text.


I don't understand how to combine withStyles and withTheme

I tried the following withTheme(withStyles(styles)(Modal)) but it doesn't work and gives me a warning

Functions are not valid as a React child. This may happen if you return a Component instead of  from render. Or maybe you meant to call this function rather than return it.

@ilyador You have different options:
export default withTheme()(withStyles(styles)(Modal));

export default withStyles(styles, { withTheme: true })(Modal);

import { compose } from 'recompose';

export default compose(
  withTheme(),
  withStyles(styles)
)(Modal);

I am using "withTheme: true" in a specific component like this:-
export default compose(
  connect(mapStateToProps, null),
  withStyles(styles, { withTheme: true }),
  // withStyles(styles),
)(TripAddresses)

So that I can find the theme in props. eg:-
ctx.strokeStyle = this.props.theme.palette.primary.main
But I see that componentDidUpdate gets called a lot. How to fix? (shouldComponetUpdate?)
    Object.entries(this.props).forEach(([key, val]) => // put this code in componentDidUpdate to debug why it fires
      prevProps[key] !== val && console.log(`Prop '${key}' changed`)
    )
    if (this.state) {
      Object.entries(this.state).forEach(([key, val]) =>
        prevState[key] !== val && console.log(`State '${key}' changed`)
      )
    }


Older ipmimonitoring does not support --ignore-unrecognized-events and --output-event-bitmask

Older ipmimonitoring does not support --ignore-unrecognized-events and --output-event-bitmask flags.
ipmimonitoring: unrecognized option '--ignore-unrecognized-events'
ipmimonitoring: unrecognized option '--output-event-bitmask'
ipmimonitoring - 0.8.12
Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC.
Copyright (C) 2006-2007 The Regents of the University of California.
This program is free software; you may redistribute it under the terms of
the GNU General Public License.  This program has absolutely no warranty.

I know it's very old and outdated but it would be nice if it's possibile to skip passing that flags.

Hey there. Sorry to say so, but I don't think adding support for such old versions makes sense. In fact, I am somewhat surprised that the exporter works with those at all.
I'd be curious though: if you are able to deploy the latest version of the exporter, how come you cannot update to a more recent version of FreeIPMI?
And finally, you can actually work around this using a mechanism similar to the one for running as unprivileged user. You can make the exporter call custom scripts that way, in your case they could simply remove the offending parameters and call the actual IPMI binaries.

Thanks @bitfehler . I do not hide that I was a little embarrassed for the request :-)

@sgargel in case you are still interested: you might want to take a look at the 1.4.0 release. It allows to add custom arguments to the collectors (https://github.com/soundcloud/ipmi_exporter/blob/master/ipmi_remote.yml#L64-L66) but it has another (currently undocumented) feature, because it was easy to implement on top: the config also accepts a key default_args (in the same place as custom_args), which override the default arguments that always get used when freeipmi is called. Using this potentially breaks stuff, so you void your warrant :wink: but it might help you.
The following config snippet would basically override the default with the default settings:
custom_args:
  ipmi:
    - "-Q",
    - "--ignore-unrecognized-events"
    - "--comma-separated-output"
    - "--no-header-output"
    - "--sdr-cache-recreate"
    - "--output-event-bitmask"

Hence, you could try the following:
custom_args:
  ipmi:
    - "-Q",
    - "--comma-separated-output"
    - "--no-header-output"
    - "--sdr-cache-recreate"

Note that certain sensors can output events in a way that breaks parsing without output-event-masks, but I guess it's worth a shot. If you give this a try I'd be curious how it turns out :wink:


[Feature] 透视表表格内容支持渲染自定义图片

What problem does this feature solve?

What does the proposed API look like?
{
  "dimensionKey": "xxx",
  "dimensionTitle": "xxx",
  "width": "auto",
  "showSort": false,
  "headerIcon": {
    xxx
  }
}

目前是支持的吧  可以看看 有问题可以在提或者加飞书群提问


Delete unnecessary data for Funding Information task

Context
we have several tasks which have branching logic within them.
E.g. on the funding-source page:
IF I answer personal savings
THEN I am taken to national insurance page
AND I do not see the identification page
or
IF I answer benefits
THEN I am taken to the identification page
If a user returns to the funding-source page and changes their answer
from benefits to personalSavings, then we need to ensure any answers
based on benefits are deleted.
Because of the way the page system works, it's tricky to get each page
to automate or handle this logic themselves. We only know what data
needs to be deleted /after/ the page data has been submitted.
I'm hesitant to introduce yet another controller function as we did with
the custom forms[1], because of the boilerplate overhead and the potential
for more complexity. This commit suggests that this data manipulation is
handled by the save function in the application service.
This save function is called by every standard page, and contains
other logic about how we handle the data. If this change is accepted, we
could go on to add more pages, such as equality and diversity, and
refactor the function to make it easier to add more pages.
[1] doc/architecture/decisions/0002_custom_forms.md
Release checklist
As part of our continuous deployment strategy we must ensure that this work is
ready to be released at any point. Before merging to main we must first
confirm:
Pre merge checklist

[ ] Are any changes required to the e2e tests?
[ ] If you've added a new route, have you added a new
auditEvent? (see server/routes/apply.ts for examples)
[ ] Are there environment variables or other infrastructure configuration which needs to be included in this release?
[ ] Are there any data migrations required. Automatic or manual?
[ ] Does this rely on changes being deployed to the CAS API?

Post merge checklist
Once we've merged it will be auto-deployed to the dev environment.
Find the build-and-deploy job in CircleCI.
Should a release fail at any step, you as the author should now lead the work to
fix it as soon as possible.

https://trello.com/c/hN7fVtbR/594-delete-equality-and-diversity-data-if-application-chooses-not-to-answer-the-questions


enable deletion of Param from ParamSet

Does what it says on the tin: You can now delete items from a ParamSet. Comes with unit tests to make sure it works as advertised.

Looks good to me! You inspired me, I have a subsequent PR that will make this fully implement the interface of MutableSequence, plus some goodies from Set.


global: fix whitespace errors

There are multiple places with broken whitespace formatting as pointed out by git-apply(1). Fix these to make the command happy.

I'm happy to merge this whenever y'all are ready. 🙏

@ethomson I'd propose to just merge this right away. That'd allow me to update the downstream patch series in Git to get rid of the two additional patches.


'${file}' can not be resolved. Please open an editor

Version: 1.39.2 (user setup)
Commit: 6ab598523be7a800d7f3eb4d92d7ab9a66069390
Date: 2019-10-15T15:35:18.241Z
Electron: 4.2.10
Chrome: 69.0.3497.128
Node.js: 10.11.0
V8: 6.9.427.31-electron.0
OS: Windows_NT x64 10.0.14393
Steps to Reproduce:
1.Install Anaconda (conda version - 4.7.12, python version: 3.7.4.final.0)
2.Create an anaconda environment
a. Add jupyter to the environment
3.Install VS Code
4.Launch VS Code from the conda environment
5.Configure launch.json, settings.json and .env
6. Open a new folder under the project
a. Add a jupyter notebook file
7. Debug (F5) the notebook file

Does this issue occur when all extensions are disabled?: No
Since Jupyter is an extension, i was not expecting this to work/ the error to occur. Here is the result of launching code by disabling extensions

Please start by filing this against the python extension


fixed the mobile popup bug and also added scrollable popups now

@Limeiz Wrote the scroll popup bug fix for this PR


Codespaces support (bare minimum)

Simply ignores python virtual envs that get created when using GitHub Codespaces, so they don't gum up the works.

Closing, tucking this into a separate set of changes.


Change DBAdmin to a collection of static functions

Description
Removes the DBAdmin property from the wallet and exposes it instead as a collection of static methods.
It is quite common to follow the pattern of using dbAdmin off the wallet to create or migrate databases:
const wallet = Wallet.create(someConfig);
wallet.dbAdmin().createDB();
wallet.dbAdmin().migrateDB();

However, this is dangerous as the wallet could happen to query the database before we get a chance to create the database. With the changes in #3148 we are now running into that situation.
The solution implemented here is to remove the DBAdmin property from the wallet and expose it separately. This discourages the pattern of manipulating the database before instantiating the wallet.
I have also switched DbAdmin to a collection of static methods instead of an object. This removes any concerns about managing the lifetime of a DBAdmin object.
For each type of operation (like createDatbase), there are two functions.

One takes in a wallet config and uses the database connection for the creation/migration/etc
One takes in a knex instance uses that for the creation/migration/etc

Shortcomings

Currently, I'm exporting DbAdmin as a class with static members instead of a module of functions due to api-generator not working with something like export * as DBAdmin from '../db-admin
For migrating and truncating methods that take in a config create and then destroy a knex instance. This is probably not too performant.

How Has This Been Tested?
These functions are used across our test suites so I am relying on those tests to catch any issues. No new tests have been introduced.
Checklist:

[ ] I have updated the graph repository to work with this change.

Code quality

[x] I have written clear commit messages
[x] I have performed a self-review of my own code
[x] I have scoped this change as narrowly as possible
[x] I have separated logic changes from refactor changes (formatting, renames, etc.)
[x] I have commented my code wherever necessary
[ ] I have added tests that prove my fix is effective or that my feature works

Project management

[x] I have applied the appropriate labels
[x] I have linked to relevant issues
[x] I have added dependent tickets
[x] I have assigned myself to this PR
[x] I have chosen the appropriate pipeline

Shortcomings

Currently, I'm exporting DbAdmin as a class with static members instead of a module of functions due to api-generator not working with something like export * as DBAdmin from '../db-admin

Thanks for working around api-generator's quirks. FWIW I think the class approach is good anyway.

For migrating and truncating methods that take in a config create and then destroy a knex instance. This is probably not too performant.

Are there any data on a possible performance hit? The circle run on efc1373 did seem to be unusually slow, but I don't know whether to attribute that to this set of changes or not.

Shortcomings

Currently, I'm exporting DbAdmin as a class with static members instead of a module of functions due to api-generator not working with something like export * as DBAdmin from '../db-admin

Thanks for working around api-generator's quirks. FWIW I think the class approach is good anyway.

For migrating and truncating methods that take in a config create and then destroy a knex instance. This is probably not too performant.

Are there any data on a possible performance hit? The circle run on efc1373 did seem to be unusually slow, but I don't know whether to attribute that to this set of changes or not.

Are there any data on a possible performance hit? The circle run on efc1373 did seem to be unusually slow, but I don't know whether to attribute that to this set of changes or not.

Most of are test favour the migrateDatabaseFromKnex which uses an existing knex instance to create/migrate/etc.. and shouldn't receive any performance hit.
I've also updated the createDatabase and dropDatabase to avoid creating and destroying a knex instance.
I'll take a look at comparing the latest circle run (with the changes above) against master.

Are there any data on a possible performance hit? The circle run on efc1373 did seem to be unusually slow, but I don't know whether to attribute that to this set of changes or not.

Most of are test favour the migrateDatabaseFromKnex which uses an existing knex instance to create/migrate/etc.. and shouldn't receive any performance hit.
I've also updated the createDatabase and dropDatabase to avoid creating and destroying a knex instance.
I'll take a look at comparing the latest circle run (with the changes above) against master.

Are there any data on a possible performance hit? The circle run on efc1373 did seem to be unusually slow, but I don't know whether to attribute that to this set of changes or not.

Most of are test favour the migrateDatabaseFromKnex which uses an existing knex instance to create/migrate/etc.. and shouldn't receive any performance hit.
I've also updated the createDatabase and dropDatabase to avoid creating and destroying a knex instance.
I'll take a look at comparing the latest circle run (with the changes above) against master.

Comparing master vs this branch performance doesn't look too different.

Are there any data on a possible performance hit? The circle run on efc1373 did seem to be unusually slow, but I don't know whether to attribute that to this set of changes or not.

Most of are test favour the migrateDatabaseFromKnex which uses an existing knex instance to create/migrate/etc.. and shouldn't receive any performance hit.
I've also updated the createDatabase and dropDatabase to avoid creating and destroying a knex instance.
I'll take a look at comparing the latest circle run (with the changes above) against master.

Comparing master vs this branch performance doesn't look too different.

I think I was probably getting confused about the circle data I mentioned, actually (forgot that although master runs a lot more tests than this branch, they run in parallel). Looking again carefully, you're right there doesn't seem to be any change. I think that is expected, too, given these changes.

I think I was probably getting confused about the circle data I mentioned, actually (forgot that although master runs a lot more tests than this branch, they run in parallel). Looking again carefully, you're right there doesn't seem to be any change. I think that is expected, too, given these changes.

For posterity:

This discourages the pattern of manipulating the database before instantiating the wallet.

should read

This discourages the pattern of instantiating the wallet before preparing the database

For posterity:

This discourages the pattern of manipulating the database before instantiating the wallet.

should read

This discourages the pattern of instantiating the wallet before preparing the database


Migration gettingstart

@Saisang,
Thanks for your contribution as a Microsoft full-time employee or intern. You do not need to sign a CLA.
Thanks,
Microsoft Pull Request Bot

:white_check_mark: Validation status: passed

File
Status
Preview URL
Details

biztalk/GettingStarted/checklist-getting-started-with-biztalk-server.md
:white_check_mark:Succeeded
View

For more details, please refer to the build report.
Note: If you changed an existing file name or deleted a file, broken links in other files to the deleted or renamed file are listed only in the full build report.


Add dynamic rules validations to dynamic form

I want to generate a dynamic forms with dynamic validations.
For example : fields description and check rules are stored on a array like this
const sellingFormFieldDescription = [
                {key: 'state',
                 type: 'shared',
                 checkRules: {
                       maxLength: 255,
                       mandatory: true,
                 } },
                {
                key: 'sellingPrice',
                label: 'Price',
                type: 'decimal',
                checkRules: {
                    minValue: 1,
                    maxValue: 10000,
                    maxLength: 10,
                    mandatory: true,
                }]

With this array I want to generate two fields ( state and price ) on a form with validation rules.
For sellingPrice field I need to check if the user has filled the value, and the value between 1 and 10000 and length not > 10)
How I can do this ?
My code :
render() {
   { sellingFormFieldDescription.map((field,i) =>
                    if(field.type === 'shared' ){
                         return <Field name={field.key} key={i} component={renderSelect} />
                    } else if (field.type === 'decimal') {
                          return <Field name={field.key} key={i} component={renderField}  />
                    });
}}

const validate = formProps => {
    const errors = {}
    return errors
}

SellingFormFast = reduxForm({
    form: 'sellling_form_fast',  // a unique identifier for this form
    validate

})(SellingFormFast)

I think Field-level validations might work well for you, given your modular approach. Instead of handling every case in the validate option for reduxForm, this will allow you to selectively validate based on what options you provide from your sellingFormFieldDescription object.
You can read more about this here: http://redux-form.com/6.4.3/examples/fieldLevelValidation/
Basically what you can do is compose an array of validation rules for your field in the validate prop for Field.
So one of your Field's might look like:
const maxValue = max => value =>
  value && value > max && `Must be greater than ${ max }` || undefined;
const maxLength = max => value =>
  value && value.length > max && `Must be longer than ${ max }` || undefined;
//......
return <Field {...otherMainFieldProps} validate={[maxValue(5), maxLength(10)]} />

Another improvement on this for your use case might be instead of explicitly declaring which rules are applied to the field, applying them based on the checkRules object of your items in sellingFormFieldDescription.
Here's an improved example that's slightly more complicated than the simple example in the documentation, but it might suit your needs better:
import React, { Component } from 'react';
import { Field, reduxForm } from 'redux-form';
import { renderSelect, renderField } from 'somewhereElseInYourApp';

const sellingFormFieldDescription = [
// ! Important !
// the checkRules keys will be the same name as the rules functions we define below!
  {
    key: 'state',
    type: 'shared',
    checkRules: {
      maxLength: 255,
      mandatory: true,
    } },
  {
    key: 'sellingPrice',
    label: 'Price',
    type: 'decimal',
    checkRules: {
      minValue: 1,
      maxValue: 10000,
      maxLength: 10,
      mandatory: true,
    }
  }
]

// Compose your field-level validations the way you want to here:
// For a basic example, go to
// http://redux-form.com/6.4.3/examples/fieldLevelValidation/
const minValue = min => value =>
  value && value > min && `Must be greater than ${ min }` || undefined;
const maxValue = max => value =>
  value && value > max && `Must be greater than ${ max }` || undefined;
const maxLength = max => value =>
  value && value.length > max && `Must be longer than ${ max }` || undefined;
const mandatory = isMandatory => value =>
  isMandatory && value && undefined || 'Mandatory';

const rules = { minValue, maxValue, maxLength, mandatory };

const applyRules = checkRules => {
  let validations = [];
  for(let ruleName in checkRules) {
    let ruleFunc = rules[ruleName]
    // check if there is a valid validation function for this rule name
    if(ruleFunc) {
      // Push the generated validation to the field-level validations array
      validations.push(ruleFunc(checkRules[ruleName]))
    }
  }
  return validations;
}

class SellingFormFast extends Component {
  render() {
    { sellingFormFieldDescription.map((field,i) => {
      const validate = applyRules(field.checkRules);
      if(field.type === 'shared' ){
        return <Field name={field.key} key={i} component={renderSelect} validate={validate} />
      } else if (field.type === 'decimal') {
        return <Field name={field.key} key={i} component={renderField} validate={validate}/>
      }});
    }
  }
}

export default reduxForm({form: 'sellling_form_fast'})(SellingFormFast)

Let me know if this helps or if you have any questions @KrifaYounes

@kevinzwhuang have you an idea about my last question ?

@KrifaYounes, you could set a prop using formValueSelector with the redux-connector.  It still works however I'm not able to find it in the selectors-page of the documentation.

@Zombaya, for some reason which I don't know (@erikras perhapas knows), formValueSelector is outside the selectors page :)
https://redux-form.com/6.5.0/docs/api/FormValueSelector.md

@gustavohenke How it can be implemented for version 5.3.4?


Scientific number notation: 1e2, 2.1e-3 etc

Is there any plan to support scientific number notation?
Other not supported things:
2 + .3  // unexpected literal
1 * +2 // unexpected unary
a(b)(c) // calling results of functions

Hi Dmitri! There are no official plans for scientific notation, but this is very easy to add by using the addBinaryOp function. You can define a new binary operator called e, set to (arg1, arg2) => arg1 * Math.pow(10, arg2), and viola! Now you can use 8.14e5 in your expressions :)
As for your other notes:
2 + .3  // unexpected literal - This is because, in Jexl, a leading dot indicates a local identifier. I could see a case for making that functionality dependent upon whether the first character after the dot is a number, but that would be a breaking change. For now, Jexl expects you to do 2 + 0.3.
1 * +2 // unexpected unary - The plus sign isn't a unary operator in Jexl. You can add unary operators as well, but Jexl currently has a limitation where you can't reuse a binary operator symbol as a unary operator, or vice versa. This is planned to be fixed. For a workaround, you can define another symbol to serve the same purpose with addUnaryOp.
a(b)(c) // calling results of functions - Jexl does not allow functions to return callable functions. This is a safety feature that's unlikely to be changed, I'm afraid. All callable functions have to be explicitly registered with addFunction, and no functions can be generated or called dynamically. This prevents a number of severe security exploits.

While here, I have a suggestion.
It's a bit unclear from readme how to use the module or how to just parse an expression.
Mb adding imports would be valuable:
import {Jexl} from 'jexl.min.js'
jexl = new Jexl

...
await const res = jexl.eval('assoc[.first == "Lana"].last', context)
console.log(res) // Output: Kane
...

(arg1, arg2) => arg1 * Math.pow(10, arg2)

That can be done simpler as
(a,b) => parseFloat(''+a+'e'+b)


Removed circular dependency between Frameworks.Core and Frameworks.UWP.

Separated Frameworks.UWP into Frameworks.UWP.Core (for RTObjCInteorp) and Frameworks.UWP (for projections).

Are there 2 changes here?

Remove circular dependency between Frameworks.core and frameworks.UWP
separate rtobjcinterop into uwp.core

If so, the first one looks fine.  But, I thought we weren't going to do the 2nd change and instead move all frameworks to use c++/winrt.

:shipit:

:shipit:


Bug report-AGW backend settings configuration path and rewrite rule space bug

Is there an existing issue for this?

[X] I have searched the existing issues

Community Note

Please vote on this issue by adding a :thumbsup: reaction to the original issue to help the community and maintainers prioritize this request
Please do not leave "+1" or "me too" comments, they generate extra noise for issue followers and do not help prioritize the request
If you are interested in working on this issue or have submitted a pull request, please leave a comment

Version of the module you are using
5.7.11
Rover Version
aztfmod/rover:1.4.6-2306.1405
Terraform Version
No response
AzureRM Provider Version
No response
Affected Resource(s)/Data Source(s)
azurerm_application_gateway
Terraform Configuration Files
# backend settings configuration
    http_settings = {
      test_https_443 = {
        name                        = "test_https_443"
        front_end_port_key          = "443"
        protocol                    = "Https"
        # host_name                   = "test.agw.com"
        probe_key                   = "test_https_443"
        host_name_from_backend_pool = true
        timeout                     = 30
        path                        = "/*"
      }

rewrite_rule_sets = {
      rrs1 = {
        name = "test_rewrite_rule_set"
      }
    }

    rewrite_rules = {
      rr1 = {
        name                 = "test_rr"
        rewrite_rule_set_key = "rrs1"
        request_headers      = "Content-Type=application/json"
        sequence             = "1"
      }
      content-security-policy_set = {
        name                 = "content-security-policy_set"
        rewrite_rule_set_key = "rrs1"
        response_headers     = "Content-Security-Policy=upgrade-insecure-requests, base-uri=self, frame-ancestors=self, form-action=self, object-src=none"
        sequence             = 163
      }

      permission-policy_set = {
        name                 = "permission-policy_set"
        rewrite_rule_set_key = "rrs1"
        response_headers     = "Permissions-Policy=accelerometer=(self), camera=(self), geolocation=(self), gyroscope=(self), magnetometer=(self), microphone=(self), payment=(self), usb=(self)"
        sequence             = 164
      }
    }

Expected Behaviour
In Azure portal backend settings configuration, can use path "/*" but in terraform can only use "/". For rewrite rules seems like terraform does not support spaces while in Azure portal it supports.
Actual Behaviour
Terraform should support path "/*" for backend settings configuration and should support spaces for rewrite rules.
Steps to Reproduce
Please include path "/*" in backend settings configuration:
backend settings configuration
http_settings = {
  test_https_443 = {
    name                        = "test_https_443"
    front_end_port_key          = "443"
    protocol                    = "Https"
    # host_name                   = "test.agw.com"
    probe_key                   = "test_https_443"
    host_name_from_backend_pool = true
    timeout                     = 30
    path                        = "/*"
  }

For rewrite rules, please put spaces as below:
permission-policy_set = {
name                 = "permission-policy_set"
rewrite_rule_set_key = "rrs1"
response_headers     = "Permissions-Policy=accelerometer=(self), camera=(self), geolocation=(self), gyroscope=(self), magnetometer=(self), microphone=(self), payment=(self), usb=(self)"
sequence             = 164
}
}
No issue with plan and apply. Just that the output is wrong
Important Factoids
No response
References
No response

Hi @Najmi96 ,
what type of application gateway are you using?v1 or v2?


poll backend

The opposite of long is short, not fast. Or the opposite of fast is slow, not long.

The goal of the Postgresql backend is not to be slow and the goal of the redis backend not to be short.
Both backend have a different, not related, not opposite, purpose. The name tells, what the advantage is. One is fast and the other can be used for long going polls.


where is  adb option document

what exactly do you mean?

what exactly do you mean?

how did your find these adb command

Most of them are taken from the AOSP source code. check how the developer options work and you can get most of the information from there

Ok. thank you for your code and advice.
Now I use shell to achieve some function. (its no need groovy env).
its my code : https://github.com/pepperer/shelljs/blob/master/src/android.sh


Bump recursion limit for augur in tree builds.

Summary:

What: Bump the augur recursion limit for tree builds per previous discussion.

Demos:
Notes:
Checklist:

[ ] I merged latest <base branch>
[ ] I manually verified the change
[ ] I added labels to my PR
[ ] I tested in multiple browsers
[ ] I added relevant unit tests
[ ] I have notified others of changes they need to make locally (migrations, jobs, package updates, etc)

I'll wrap this into the tree build tests <3


Create helper methods to port TCL based Integration Tests from Redis 7.2.5

Once this gets merged, I would like to work on it of this is still valid, and would like to understand more on the requirement. @arpitbbhayani

HI @JyotinderSingh Can you please assign this to me?

HI @JyotinderSingh Can you please assign this to me?

Assigned

One helper website: https://www.codeconvert.ai/tcl-to-golang-converter

Work done till now:
Changes made in the executeCommand function
    // For running redis tests
    if cmd.Cmd == "SELECT" || cmd.Cmd == "FUNCTION" ||
        cmd.Cmd == "FLUSHALL" || cmd.Cmd == "CONFIG" ||
        cmd.Cmd == "RPUSH" || cmd.Cmd == "HSET" ||
        cmd.Cmd == "LRANGE" || cmd.Cmd == "ACL" ||
        cmd.Cmd == "FLUSHDB" || cmd.Cmd == "SCAN" ||
        cmd.Cmd == "SCARD" || cmd.Cmd == "ZCARD" {
        return RespOK
    }

The above commands are skipped because not implemented in the dice.
Command to run tests from Redis:
$ /runtest --host <IP_ADDRESS> --port 7379 --tags -needs:debug --tags -cluster:skip

It automatically skips those tests that have the tag -external:skip when running on an external server. We will see what to do about those tests.
[just a basic run. Now, I will dig deeper into it 🙂]
redis-tcl-integration-report.txt
Many tests failed, but many passed

Still working on it :)

@AshwinKul28 would like to contribute along the same, please let me know if we can split tasks.

Initial integration test framework has been merged as part of this PR.
Follow up unit tests would be taken care as part of below issues, hence closing this one.
https://github.com/DiceDB/dice/issues/448
https://github.com/DiceDB/dice/issues/449


fix x-spreadsheet demo

https://oss.sheetjs.com/sheetjs/x-spreadsheet.html

Uncaught ReferenceError: x is not defined
at x-spreadsheet.html:54

Hello,
I would like to work on this issue.

Awesome! https://github.com/SheetJS/sheetjs/blob/gh-pages/x-spreadsheet.html the file is x-spreadsheet.html in the gh-pages branch.
The current code:
var xspr = x.spreadsheet(HTMLOUT);

Based on https://github.com/myliang/x-spreadsheet#cdn I think the fix is just
var xspr = x_spreadsheet(HTMLOUT);

To test this, make the change and see if you get an error in the JS console when you open the page.

I'll look into it this weekend. If you don't mind, you can assign me to this task.

428d03a4692e1a96e9e6aa4488de95af397ff77c


fix(frontend): still draft status if there is no tool config added

:tada: This PR is included in version 2.1.0-alpha.5 :tada:
The release is available on npm package (@alpha dist-tag)
Your semantic-release bot :package::rocket:

:tada: This PR is included in version 1.0.2 :tada:
The release is available on npm package (@latest dist-tag)
Your semantic-release bot :package::rocket:

:tada: This PR is included in version 2.1.0 :tada:
The release is available on GitHub release
Your semantic-release bot :package::rocket:


Dev

UI Changes.
App logo was adjusted to allow for a better fit
Footer includes center information
Top bar links are replaced by icons, styling is added, and a menu for the user profile is added
Sidebar links are displayed using a material accordion.
Sidebar links are dynamically generated using the model defined in Models/NavItem
A pipe (FilterPipe) is created to generalize filtering items from a list.

UI Changes.
App logo was adjusted to allow for a better fit
Footer includes center information
Top bar links are replaced by icons, styling is added, and a menu for the user profile is added
Sidebar links are displayed using a material accordion.
Sidebar links are dynamically generated using the model defined in Models/NavItem
A pipe (FilterPipe) is created to generalize filtering items from a list.


Fix/css type

Merge with https://github.com/Temzasse/stitches-native/pull/33#issuecomment-1296695585


Reading position gets lost after device orientation changes

Un-check block 3rd party request in the setting. Then go to any website you will see the reading position gets lost after device rotation 2 times (i.e., from vertical to horizontal then go back).

This does not happen on my device. One possibility is that your device is low on RAM and hence the activity is killed and re-created after a rotation.


Update TutorialView.js

to add the required 'space' between the 'fh' command and it's argument.

@erikquinn This change may be better suited in my fork?  We are trying to keep all the JS updates in one place so they can all be merged as part of a numbered release.

So what are the rules to either contribute to this repo or to yours, @n8rzz ?
I mean people who want to learn from the tutorial right now will get wrong information from there...
Also I read from
https://github.com/zlsa/atc/blob/gh-pages/README.md :

Contributing
Just create a pull request and I'll get to it. Thanks for helping!

Any background information about how this is organized is well appreciated. Thanks.

That is why I defer to Erik here.  This is a super minor change, and would be easy to merge in here.  My point is just that we are doing most, if not all, of the JS work within my fork so we can avoid many small changes to the main repo.
That section of the readme is targeted more towards airport contributors.  Up until recently, most contributions on this project were in the form of Airports or Aircraft changes.
If you would like to contribute to the JS, we'd love to have you!  I do need to put together a JS contributor doc to help here, but in the mean time:

Clone my repo.  you will be contributing via feature branches and making commits directly to my fork
read the readme in the tools directory and the gitflow readme (this also needs updating)
Take a look at the issues in my fork and see if there is anything there you would like to help out on.
Join our slack channel
Ask questions!

and we can take it from there.  I have some very specific (undocumented ☹) procedures that I like contributors to follow, so please reach out if you are planning on contributing.

I realize it is confusing and somewhat disorganized/counterintuitive/etc. It really doesn't matter either way, there will be some sort of reorganization I. The near future that will make the problem moot. But for now, you can just leave it here, and I'll take care of getting the fork up to date with the changes to zlsa/gh-pages. In general though (for the next little bit), it is convenient if js changes can take place on the n8rzz fork, so that they are all merged in at once. That is the current thinking anyway. :)

Thanks for the background information @n8rzz and @erikquinn . Very interesting.
Some days ago I had already successfully tested to run the sim locally, using node.js .
In the next days I will take a closer look to both of the repos to find out if and how I can possibly further contribute.

Additional question: How do you keep track of the issues opened at zlsa/atc and/or n8rzz/atc ?
Do you regularly "scan" each repo and open - after sort of approval - a respective issue at the other repo, too?

For visibility, if it's an issue a user is likely to encounter, I put it up here so they can see we know about it, and they can add comments, etc. And then a parallel issue is created in the fork, referencing the original one here at the main repo. The issue is resolved on the fork, packaged up into a single monthly release, which is done via a pull request merged back into the main repo, with links to all the issues is resolved.
If it is an issue that users wouldn't care about, such as code reorganization, I just put it in the n8rzz/atc fork directly.

We do maintain the a changelog in my fork as well, which contains links to all the changes contained within a release: https://github.com/zlsa/atc/blob/gh-pages/CHANGELOG.md

Understand, thanks for the insight.

The ATC repository is being migrated to it's new home at https://github.com/openscope/openscope, and thus, all pull requests are being closed. If you would still like to see this merged into the simulator, please reopen the pull request at the new repo. Thank you!
Closing this PR.


Release/1.0.3

Changes Unknown when pulling 7e43fb0e2dcffa52952e53ba7242e368f13d7c8c on release/1.0.3 into ** on master**.

Changes Unknown when pulling 7e43fb0e2dcffa52952e53ba7242e368f13d7c8c on release/1.0.3 into ** on master**.


validateIndentation does not work with ES6 class methods

I have been trying out jscs on ES6 codebase with --fix option and I have noticed that validateIndentation rule does not work on ES6 class methods. Meaning it does not indent or throw an error when class methods are wrongly indented.
For example, consider the following code. I have set validateIndentation rule to tab (\t).
class test {
f1() {
  var a;
var b
		var c;
  	var d;
}
	f2() {
  var a;
var b
		var c;
  	var d;
	}
}

After I run jscs on this code with --fix option, it is transformed to the following:
class test {
f1() {
	var a;
	var b
	var c;
	var d;
}
	f2() {
		var a;
		var b
		var c;
		var d;
	}
}

This looks like validateIndentation rule is not being applied to class method declaration line, but it is being applied to the method body relative to the declaration.
Comparing this behavior with a similarly structured function, lets say we have the following code:
function test1() {
function f1() {
  var a;
var b
		var c;
  	var d;
}
	function f2() {
  var a;
var b
		var c;
  	var d;
	}
}

This gets transformed to the following, which is as one would expect:
function test1() {
	function f1() {
		var a;
		var b
		var c;
		var d;
	}
	function f2() {
		var a;
		var b
		var c;
		var d;
	}
}

I have gone through the list of issues reported on esnext and found that this issue is not reported so far, which left me a bit confused as despite what looked like a significant number of people working with jscs on ES6 codebase no body seemed to run into this issue. So, I am wondering if this is a genuine issue or if I am missing something. Can somebody shed some light on this, please?

---
Want to back this issue? **[Post a bounty on it!](https://www.bountysource.com/issues/23283797-validateindentation-does-not-work-with-es6-class-methods?utm_campaign=plugin&utm_content=tracker%2F281640&utm_medium=issues&utm_source=github)** We accept bounties via [Bountysource](https://www.bountysource.com/?utm_campaign=plugin&utm_content=tracker%2F281640&utm_medium=issues&utm_source=github).

/cc @mikesherov

On it.

@mikesherov
Do you need anything from my side to help track down the issue? Happy to help in anyway I can.

+1 but I'm having a different effect - perhaps because of the time passed since the original bug report & newer version?
class test {
    constructor(options) {
        this.options = options
    }
    method() {
        this.doSomething(err, function() {
            if (err) throw err
        })
    }
}

with validateIndentation this gets formatted as:
class test {
    constructor(options) {
    this.options = options
    }
    method() {
    this.doSomething(err, function() {
        if (err) throw err
    })
    }
}

That is, the inner scope of the class method is not accounted for.

I am seeing the same issue that @jamietre is seeing.  Anyone have a fix?

+1, facing the same problem as @danbucholtz -- auto fix keeps flattening our classes requiring manual fixing. Anyone have a solution?

+1 Facing this problem

At this point only major and CST related bugs will be fixed.


[Obsidian] ...extension not working

Extension
https://www.raycast.com/KevinBatdorf/obsidian
Description
Error:
Error: Worker terminated due to reaching memory limit: JS heap out of memory

NodeError:errors:406:5
[kOnExit]:worker:313:26
Worker.<computed>.onexit:worker:229:20

Steps To Reproduce
Mac environnement,
Current Behaviour
not opening Obsidian
Expected Behaviour
Obsidian should open on targettes note

I think I may be having a similar issue https://github.com/raycast/extensions/issues/11741