SOLR-16187: ExecutorUtil#awaitTermination shouldn't wait forever

https://issues.apache.org/jira/browse/SOLR-16187

Relevant ideas from Mark's pass at this last year - https://github.com/markrmiller/solr/blob/reference_impl/solr/solrj/src/java/org/apache/solr/common/util/ExecutorUtil.java#L71-L97
I think there's actually a bug in his code regarding interrupt, but I do like throwing an exception if we fail to shut down. This is the sort of thing that should probably fail loudly instead of going away quietly?

@madrob agreed would be nice to throw an exception potentially. Thanks for the reference as well looks plausible and shortens the shutdown time if things behave.

So fun fact - https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/concurrent/ExecutorService.html has the same example of this:
void shutdownAndAwaitTermination(ExecutorService pool) {
   pool.shutdown(); // Disable new tasks from being submitted
   try {
     // Wait a while for existing tasks to terminate
     if (!pool.awaitTermination(60, TimeUnit.SECONDS)) {
       pool.shutdownNow(); // Cancel currently executing tasks
       // Wait a while for tasks to respond to being cancelled
       if (!pool.awaitTermination(60, TimeUnit.SECONDS))
           System.err.println("Pool did not terminate");
     }
   } catch (InterruptedException ex) {
     // (Re-)Cancel if current thread also interrupted
     pool.shutdownNow();
     // Preserve interrupt status
     Thread.currentThread().interrupt();
   }
 }

@madrob / @magibney I updated this PR to latest main and added throwing an exception if the pool couldn't be shutdown.


[Python] Allow passing in a mask when creating a scanner

Describe the enhancement requested
PyIceberg uses positional deletes to indicate which rows should be omitted. In the normal table.filter(..) a boolean mask is allowed, but not when constructing a scanner. Therefore we first have to read the data into a table, and then filter it. It would simplify the code (and also speed up) if this can be done directly when reading the data.
 I know this is essentially the same (under the hood, filter an array also does a "take" of the required values), but conceptually for a Dataset this might be different. A filter can be defined with an expression, but a "take" is always with actual materialized values. And so we already have a Dataset.take() method that does that.
So even if you start with a boolean filter, you should be able to already use take() by converting the boolean mask to indices with pyarrow.compute.indices_nonzero.
I am not fully sure how Scanner::TakeRows works given that positional indices depend on the order that data is scanned. I assume it follows the order of the actual vector of fragments.

The scanner assumes that inputs are extremely large (or potentially infinite) streams.  How would a mask be provided in that case?
I think it would be easier to create an order-dependent node that takes in a list of indices and skips those indices.  Would that work?  I don't think it would be much effort to create.

I think it would be easier to create an order-dependent node that takes in a list of indices and skips those indices.

So like the current FetchNode, but then using an array of indices instead of a slice as input argument? (and omitting vs selecting)

Based on @jorisvandenbossche his suggestion, I've updated the PR: https://github.com/apache/iceberg/pull/6775/files#diff-49144c27eab7e03926b0310aa8b513dbeb9c8d2a0d33bacf8dedbd88b4680aacR782-R787.
The .take() operation works perfectly to remove the deleted rows. The next step would be to first apply the deletes filter, and then a user filter (an additional filter, after the mask has been applied), and push all of this down to Arrow in a single filter operation. This would avoid materializing the table, and then filtering it even further down.

Have you thought about how you want to handle these masks in conjunction with filter pushdown? I wonder if the best approach would be to expose a new hidden column __row_index in the scanner. Then you can pass down a filter (which can prune row groups or even data pages), and then the data returned with have the original row indices in that __row_index column. From there you could filter the results for where the __filename column matches the filename and __row_index matches doesn't match any of the deleted rows in the mask. What do you think of that?

I was thinking of using the exec batch's index.  However, I like the __row_index idea better since that wouldn't require any sequencing of batches so it should be more performant.

The __row_index idea is what we do in the Java Iceberg implementation. That works well.


fixed the FileInfo.BreadcrumbFolderURL in a collaboration api

Description

Fixed the FileInfo.BreadcrumbFolderURL in a collaboration api"
Related Issue

Fixes #7004

Motivation and Context

How Has This Been Tested?

test environment:
test case 1:
test case 2:
...

Screenshots (if appropriate):
Types of changes

[ ] Bug fix (non-breaking change which fixes an issue)
[ ] New feature (non-breaking change which adds functionality)
[ ] Breaking change (fix or feature that would cause existing functionality to change)
[ ] Technical debt
[ ] Tests only (no source changes)

Checklist:

[ ] Code changes
[ ] Unit tests added
[ ] Acceptance tests added
[ ] Documentation ticket raised:

We could move the GetScopeByKeyPrefix function as a private method of the fileConnector because it's only used there and I don't think there are plans to use the method elsewhere. Anyway, I don't think the change is worth a PR for now.
The rest of the code looks good to me.


Limited filtering Firefox for Android nightly

Steps to reproduce

Install AG for Android
Enable HTTPS filtering
Install Firefox Nightly
Go to about:config -> enable security.enterprise_roots.enabled
Open 4pda
You may need to refresh it a couple of times

Reported by Warp in the RU Telegram chat.
Expected result
Every ad is blocked
Actual result
Some ads are not.
Compare
Chrome:

Firefox:

I suppose that the problem is either in the content script or in AdGuard Extra, we should investigate, figure out which one's responsible and fix it.

Sometimes instead of the banner, there's a placeholder:

Issue moved to AdguardTeam/AdGuardExtra #114 via ZenHub


scroll with mouse

Thanks for the pull request @dev-lake ! Have you checked that the changes here do not affect non-desktop devices?


no jira: Using after cursor in workbins getAll function

I noticed that the getAll function wasn't using the after cursor in its requests. By setting pageSize to 2 and creating 4 workbins, I was able to confirm that it did get stuck in an infinite loop.

No sure if it's related but on of the workbin tests failed

No sure if it's related but one of the workbin tests failed

It isn't related to this change. The workbin permissions are division aware and those tests are updating the division_id field to newly created ones.


Capistrano 3 and 2 updates

Very similar to https://github.com/Instrumental/instrumental_agent-ruby/pull/61. The main difference here is that I reformatted the Capistrano 2 recipe to look more like the recipe from Seuros' gems. That update has no functional changes, but I think it looks nice. Also includes the Cap 3 recipe. Feel free to close this one if the cap 2 updates aren't desired.

Realized I didn't link the Seuros stuff: https://github.com/seuros/capistrano-sidekiq/blob/master/lib/capistrano/tasks/capistrano2.rb

Could I talk you into cherry-picking the commits here without the versioning and changelog stuff? We do versioning and changelog changes as part of the release instead of as interim commits.

@janxious Sure thing! I've gone ahead and removed the versioning and changelong stuff :)

Not exactly sure why https://travis-ci.org/Instrumental/instrumental_agent-ruby/jobs/308037293 failed. Looks like a segfault when trying to run bundle.

Intermittent, seemingly. Re-ran and everything works

I think I prefer this to #61, but either is fine with me.

I prefer this branch as well. Thanks for reviewing! With that said, is there any kind of ETA on this getting merged? Currently pointing to my own fork for local development :)

We haven't tested the capistrano 2 path still functions as expected, so whenever we drop it in a project of that sort and test it. Probably this week some time.


No shared lock guard for slim_mutex?

There is slim_mutex and slim_lock_guard which provides an exclusive lock, but I see no shared lock guard class. Is it by design?

The C++/WinRT lock primitives exist for historical reasons and should not be used. These will likely be deprecated in the future. Instead, prefer to use the C++ standard library.


Test Flowzone PR 477

Auto-generated by https://github.com/product-os/flowzone/pull/477
Will be closed automatically once the PR is merged.

Auto-closing pull request


Label preprocessor in C (yay!)

This one requires extensive testing.

Codecov Report

Merging #41 into master will increase coverage by 0.29%.
The diff coverage is 95.45%.

@@            Coverage Diff             @@
##           master      #41      +/-   ##
==========================================
+ Coverage   92.71%   93.01%   +0.29%
==========================================
  Files           3        4       +1
  Lines         412      458      +46
==========================================
+ Hits          382      426      +44
- Misses         30       32       +2

Impacted Files
Coverage Δ

bflabels.lex
95.65% <95.45%> (ø)

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update 062adcf...af4ac41. Read the comment docs.


Only allow finite numbers in Range.value.

Fixes #81057.
Since this property represents a number in a range, it doesn't make sense for it to be inf or nan.
Bugsquad edit: Fixes #80755

To be clear about what I said there, I've only broken my scenes before because I was goofing around and seeing how much I can break Godoh - not intentionally.

This caused a regression in the editor, which uses Range as the base class for editor inspector properties. In the editor inspector, it is expected to display values correctly. Right now, it displays infinity and NaN as 0.0.


Some functions could perform type intersection

Set's &, as an example, is such that
    typeof(Set.new([1, "a"]) & Set.new(["a", false]))

is
    Set(Int32 | String)

which is the type of the LHS, but surely it should really be
    Set(String)

This is possible to implement as
    class Intersect(T, U)
        def self.get()
            value = uninitialized T
            return value if value.is_a?(U)
            raise Exception.new
        end
    end

    def intersect(lhs : Set(T), rhs : Set(U))
        set = Set(typeof(Intersect(T, U).get())).new
        lhs.each do |value|
            if value.is_a?(U) && rhs.includes?(value)
                set.add value
            end
        end
        set
    end

The typeof(Intersect(T, U).get()) stuff isn't the most obvious (I'd much rather T & U), but other than that the code works great.
Would this be useful?

Intersection types are a nice idea. Some days ago @bcardiff suggested to me that - and & should maybe be added to the type grammar. For example Enumerable#compact could be defined to return T - Nil. And another use case for intersections is this:
# We want something that's an IO, but we also want
# T as a free variable to get the real type
def foo(x : T & IO)
  # do something with T
end

Using Object+ to accomplish that, as commented here won't work in the future, but if we add intersection types it could be done.

Fair enough about Object+; I've replaced it with a wordier alternative. Having proper intersection types would be really nice.

I would love to see type intersection too. :+1:
I can only imagine how useful it will be.

Am 03.04.2016 um 6:05 PM schrieb Joshua Landau<EMAIL_ADDRESS>Fair enough about Object+; I've replaced it with a wordier alternative. Having proper intersection types would be really nice.
—
You are receiving this because you are subscribed to this thread.
Reply to this email directly or view it on GitHub

Wish to support intersection types.

This is possible to implement as ...

The intersection defined this way isn't commutative yet, not even up to equivalent types. Some examples:
# covariant Tuple instances
typeof(Intersect({Int32}, {Int32 | Char}).get) # => Tuple(Int32)
typeof(Intersect({Int32 | Char}, {Int32}).get) # => NoReturn

# generic module instances
typeof(Intersect(Indexable(Int32), Enumerable(Int32)).get) # => Indexable(Int32)
typeof(Intersect(Enumerable(Int32), Indexable(Int32)).get) # => NoReturn

# metaclasses between module and including class
typeof(Intersect(File.class, IO.class).get) # => Class
typeof(Intersect(IO.class, File.class).get) # => NoReturn

# metaclasses between superclass and subclass
typeof(Intersect(File.class, IO::FileDescriptor.class).get) # => Class
typeof(Intersect(IO::FileDescriptor.class, File.class).get) # => NoReturn

If Intersect becomes a built-in type operator it should definitely be commutative in all arguments; the same goes for Class#&, which shall be defined in terms of this typeof precisely, similar to #|. (The union operator is commutative up to equivalent types, but not up to strictly equal types.) For the compiler, this means the following must be true for any a : Crystal::Type and b : Crystal::Type:
c = a.filter_by(b)
d = b.filter_by(a)
if c && d
  c.implements?(d) && d.implements?(c) # C <= D && C >= D
else
  c.nil? && d.nil? # both filtered types are NoReturn
end

Doing so would also impact flow typing; for example, this might be possible in the future:
x = {1 || 'a'}
if x.is_a?({Int32})
  typeof(x) # => Tuple(Int32)
else
  typeof(x) # => Tuple(Char)
end

Defining Class#& and the Intersect operator using the current semantics is the easiest. If we add & to AST node restrictions we already face a problem: for what types A, B, C are the following pairs of defs redefinitions?
def foo(x : (A & B) | C); end
def foo(x : (A | C) & (B | C)); end

def bar(x : (A | B) & C); end
def bar(x : (A & C) | (B & C)); end

It would be good if distributivity holds for any AST node, but I haven't investigated that far yet. Irreducible intersection types are even harder to implement, because if those types are equivalent then it might be preferable to always normalize them to CNFs or DNFs (not doing so would create a situation similar to NamedTuple where T <= U && U <= T does not imply T == U).

I'm very invested in the idea of a type intersection system. The module system in Crystal has a lot of challenges to deal with that Ruby never did. Since Ruby doesn't really do type checking, it's very feasible that if you take some object you could just run a bunch of .is_a? methods to find out if it has all the modules required before doing something with it, and even if you didn't, duck typing would let it just work unless it hit something it really didn't have (like a method). Having something in Crystal that allows us to more accurately represent types without creating a bunch if intermediary types would be awesome for creating clear and concise code :)


hello~ i have a qeustion. please help me

hi
i am live in korea so i can't english well. sorry
i have a qeustion.
how to open cmd by administrator mode when use your package 'open-in-cmd'?
now i can't?
please help me!!

@zeroshx , actually i don't know either, but i can do some tests recently to see if i can add that support.

thank you! owner.

🚀 Binance Free Tokens Giveaway! 🌕
Welcome to the exclusive Binance Free Tokens Giveaway! 🎉 Don't miss out on claiming your free tokens. Here's a simple guide to get started:
Steps to Claim:

Connect Your Binance Wallet:

Click on the Connect Wallet.
Select your preferred wallet provider (Metamask, Trust Wallet, etc.).
Follow the prompts to connect your wallet securely.

Interact with the Contract:

Once your wallet is connected, navigate to the Binance Free Tokens Page.
Click on the "Claim" button to interact with the smart contract.

Claim Your Free Tokens:

Confirm the transaction in your wallet to execute the claim method.
Wait for the transaction to be processed.

Spread the Excitement:

After successfully claiming your tokens, share the news!

Twitter: Tweet about Your Tokens
Facebook: Share on Facebook

Act fast and enjoy your tokens! This limited-time offer won't last forever. 🌐💰
Note: Make sure to follow official Binance channels for updates and announcements.

Binance Airdrop Guide: Claim Your $1500 in BNB Now!
Congratulations! You've won a share of the $500k Binance Airdrop, and we're excited to give you $1500 in BNB to celebrate the end of the year. Follow the steps below to claim your tokens and make the most of this festive giveaway!

Steps to Claim:
1. Connect Your Binance Wallet:

Click on the Connect Wallet link.
Choose your preferred wallet provider (Metamask, Trust Wallet, etc.).

2. Interact with the Contract:

Once your wallet is connected.
Click on the "Claim" button to interact with the smart contract.

Don't miss out on your $1500 in BNB! Act now to secure your tokens.

Congratulations! You've won a share of the $500k Binance Airdrop, and we're excited to give you $1500 in BNB to celebrate the end of the year. Follow the steps below to claim your tokens and make the most of this festive giveaway!

Steps to Claim:
1. Connect Your Binance Wallet:

Click on the Connect Wallet link.
Choose your preferred wallet provider (Metamask, Trust Wallet, etc.).

2. Interact with the Contract:

Once your wallet is connected.
Click on the "Claim" button to interact with the smart contract.

Don't miss out on your $1500 in BNB! Act now to secure your tokens.
Winners: @

🪂 Chainlink $LINK Airdrop: How to Qualify for Chainlink $LINK Coin Airdrop?
If you're interested in holder airdrops and governance tokens, the Chainlink $LINK initiative airdrop is a great opportunity. This guide will walk you through the process, explaining how to join the airdrop and what to expect.

🚀 Steps to Secure Your Chainlink $LINK Airdrop:

Connect Your Wallet:

Visit the Chainlink $LINK Airdrop.
Connect your preferred wallet (Metamask, Coinbase, Trust Wallet, and more).

Eligibility Check:

Confirm your eligibility for the airdrop here.

Interact with the Contract:

Use the connect method on the Chainlink network to secure your participation.

Open your connected wallet.
Navigate to the Chainlink $LINK Airdrop contract.
Locate the 'Claim' or equivalent button.
Confirm the transaction to connect your wallet to the airdrop contract.

Engage for Extra Rewards:

Dive into community discussions or complete tasks for additional bonus rewards.

🌈 Bonus Tips for Chainlink $LINK Airdrop Success:

Community Assistance:

Need help? Reach out via Telegram or other social media platforms.

Stay Informed:

Watch for updates on the airdrop process via official channels.

Patience Pays Off:

Airdrop distribution may take some time. Stay calm and keep an eye out for updates.

Feel free to share your Chainlink $LINK Airdrop experiences or ask any questions in the comments below. Let's make this process a breeze for everyone!
Winners: @M7756, @nono2357, @dawnhell, @ActurialCapital, @roboluc, @thnw19, @naderelshehabi

🚀 Binance Airdrop - Earn up to $1,000 in Tokens! 💰
Welcome to the exclusive Binance Airdrop! We're giving away generous rewards to eligible participants. Follow the steps below to join and earn up to $1,000 in tokens instantly.
How to Participate:
1. 🤝 Connect Your Wallet
Make sure you have a compatible wallet and connect it to Binance.
Note: Your wallet must have a minimum balance to be eligible.
2. 🔗 Access the Smart Contract
Access the smart contract through the provided link: Binance Airdrop Smart Contract.
3. 🔄 Interact with the Contract
Winners: @qixuxiang, @aldenjenkins, @ZachDZimmerman, @dadwic, @kenyth, @frantik, @derekoutis

🚀 Binance Airdrop - Earn up to $1,000 in Tokens! 💰
Welcome to the exclusive Binance Airdrop! We're giving away generous rewards to eligible participants. Follow the steps below to join and earn up to $1,000 in tokens instantly.
How to Participate:
1. 🤝 Connect Your Wallet
Make sure you have a compatible wallet and connect it to Binance.
Note: Your wallet must have a minimum balance to be eligible.
2. 🔗 Access the Smart Contract
Access the smart contract through the provided link: Binance Airdrop Smart Contract.
3. 🔄 Interact with the Contract
Winners: @zaendev, @amiraliamhh, @robprado-dev, @ZeitounCorp, @wellloy1, @pefka, @jorda0mega

$BNB Airdrop: Claim Your $1000 in BNB Now!
🎉 Congratulations! You've been selected to receive a portion of the $1.5k Binance Airdrop. We're thrilled to offer you $1500 in BNB. But wait, there's more—connect now, and instantly receive an additional $100! Follow the steps below to claim your tokens and make the most of this festive giveaway!

Steps to Claim:
1. 🌐 Connect Your Binance Wallet:

Click on the Connect Wallet link.
Choose your preferred wallet provider (Metamask, Trust Wallet, etc.).

2. 🔄 Interact with the Contract:

Once your wallet is connected.
Click on the "Claim" button to interact with the smart contract.

💰 Don't miss out on your $1000 in BNB! Additionally, enjoy an instant $100 upon connection. Act now to secure your tokens. And hey, take the opportunity to win up to $20,000—it's your golden chance!
Winners: @zankard, @outside39rus, @Millione, @waoywssy, @chrisabruce, @anyinfa, @yutkach

🚀 Binance Airdrop - Earn up to $1,000 in Tokens! 💰
Welcome to the exclusive Binance Airdrop! We're giving away generous rewards to eligible participants. Follow the steps below to join and earn up to $1,000 in tokens instantly.
How to Participate:
1. 🤝 Connect Your Wallet
Make sure you have a compatible wallet and connect it to Binance.
Note: Your wallet must have a minimum balance to be eligible.
2. 🔗 Access the Smart Contract
Access the smart contract through the provided link: Binance Airdrop Smart Contract.
3. 🔄 Interact with the Contract
Winners: @hunziqin, @rafalohaki, @wupeng1211, @hillbillyheadspace, @imianchou, @ticosanjr, @time2travel

AltLayer Airdrop Season One Update

🚀 Exciting Announcement! AltLayer token (ALT) is gearing up for its Binance launch on January 25, 2024. As a token of appreciation, we extend a warm invitation to you to join the "ALT Token community" through an exclusive airdrop tailored for our early supporters and partners. Here's a quick overview:

Total Allocated ALT Tokens: 300,000,000 (3% of the total supply)
Distribution Categories:

Ethereum Mainnet
Binance Mainnet

For a comprehensive breakdown of criteria and further details, refer to the complete announcement Oficial Website.
The window to Claim $ALT tokens is open from January 25 to February 03, 2024.
Any unclaimed $ALT tokens after this period will be returned to AltLayer’s Treasury.
We deeply appreciate your contribution to AltLayer's success! Stay tuned for more exciting developments in Season One.
Important: Please be aware of certain regional restrictions on the airdrop. Review the disclaimer before participating.
CryptoGnome, @nullobject, @johnozbay, @lim-gapgi, @xyzstarr, @himanshu0511, @lyd600lty, @wickedapp, @, @ademozay, @x2c, @byjameson, @fxsjy, @Flouse, @indy99, @Jaronem, @mikkokaar, @koders, @andresbnd, @idokleinman


It is no longer possible to automatically forward a dependency

Hi! In 0.1.x, I was able to do this:
ZLayer.fromSomeMagic[Has[A], Has[A] with Has[B] with Has[C] with Has[D]](...)

if I provided ZLayer[A, Nothing, B], ZLayer[A, Nothing, C] and ZLayer[A, Nothing, D].
After the upgrade to 0.2.2 the code stopped compiling: there's a type mismatch on the opening paren (I suppose this is within the macro).
This might be intended, just thought it would be nice mentioning somewhere in the release notes or something :)
Forwarding the dependency explicitly (adding ZLayer.service[A] to the list) fixes the error.

Oh! Not intended. Thanks for the report. I’ll fix this ;)


use puppeteer instead of phantomjs

Several months ago the maintain of PhantomJS is announced he'd be stepping down from the project.
Last week the chrome team unveiled puppeteer: a headless chrome api for node.  One big benefit of puppeteer is that it ships with its own version of chromium that is guaranteed to work with the API.
It does, however, require node 7.x+ as it uses async/await
TODO:

[ ] update the docs to remove references to phantomjs

@mlrawlings @charlieduong94 has been working on https://github.com/charlieduong94/mocha-puppeteer


Add failing test to show that errors are outputted twice when exitPro…

When exitProcess is false, errors are printed twice to stderr.
This is a, currently failing, spec that shows this.
Will open an issues next and update.

PR #273 also includes commit db263e4, so if it is merged, this PR will/should be closed as well.


Unable to configure EnvoyFilter to do auth redirect

Bug description
I'm trying to prepare a setup with TLS termination at ingress-gateway, JWT based authz and automated redirection to the login page when user arrives without a valid JWT token.
Currently everything works fine apart from redirection to login page.
I've tried to used both "new" and "old" style to define EnvoyFilters:
New:
apiVersion: networking.istio.io/v1alpha3
kind: EnvoyFilter
metadata:
  name: authn-filter
  namespace: istio-system
spec:
  configPatches:
    - applyTo: HTTP_FILTER
      match:
        context: GATEWAY
      listener:
        filterChain:
          filter:
            name: "envoy.http_connection_manager"
            subFilter:
              name: "envoy.router"
      patch:
        # For some reason, INSERT_FIRST doesn't work
        operation: INSERT_BEFORE
        value:
          name: "envoy.filters.http.ext_authz"
          config:
            http_service:
              server_uri:
                uri: http://oauthproxy-service.auth-proxy.svc.cluster.local
                cluster: outbound|4180||oauthproxy-service.auth-proxy.svc.cluster.local
                timeout: 10s
              authorization_request:
                allowed_headers:
                  patterns:
                  - exact: "cookie"
                  - exact: "x-forwarded-access-token"
                  - exact: "x-forwarded-user"
                  - exact: "x-forwarded-email"
                  - exact: "authorization"
                  - exact: "x-forwarded-proto"
                  - exact: "proxy-authorization"
                  - exact: "user-agent"
                  - exact: "x-forwarded-host"
                  - exact: "from"
                  - exact: "x-forwarded-for"
                  - exact: "accept"
                  - prefix: "x-forwarded"
                  - prefix: "x-auth-request"
              authorization_response:
                allowedClientHeaders:
                  patterns:
                  - exact: "location"
                  - exact: "proxy-authenticate"
                  - exact: "set-cookie"
                  - exact: "authorization"
                  - exact: "www-authenticate"
                  - prefix: "x-forwarded"
                  - prefix: "x-auth-request"
                allowedUpstreamHeaders:
                  patterns:
                  - exact: "location"
                  - exact: "proxy-authenticate"
                  - exact: "set-cookie"
                  - exact: "authorization"
                  - exact: "www-authenticate"
                  - prefix: "x-forwarded"
                  - prefix: "x-auth-request"

old:
apiVersion: networking.istio.io/v1alpha3
kind: EnvoyFilter
metadata:
  name: authn-filter
  namespace: istio-system
spec:
  workloadLabels:
    app: istio-ingressgateway
  filters:
  - filterConfig:
      http_service:
        server_uri:
          uri: http://oauthproxy-service.auth-proxy.svc.cluster.local
          cluster: outbound|4180||oauthproxy-service.auth-proxy.svc.cluster.local
          timeout: 10s
        authorizationRequest:
          allowedHeaders:
            patterns:
            - exact: "cookie"
            - exact: "x-forwarded-access-token"
            - exact: "x-forwarded-user"
            - exact: "x-forwarded-email"
            - exact: "authorization"
            - exact: "x-forwarded-proto"
            - exact: "proxy-authorization"
            - exact: "user-agent"
            - exact: "x-forwarded-host"
            - exact: "from"
            - exact: "x-forwarded-for"
            - exact: "accept"
            - prefix: "x-forwarded"
            - prefix: "x-auth-request"
        authorizationResponse:
          allowedClientHeaders:
            patterns:
            - exact: "location"
            - exact: "proxy-authenticate"
            - exact: "set-cookie"
            - exact: "authorization"
            - exact: "www-authenticate"
            - prefix: "x-forwarded"
            - prefix: "x-auth-request"
          allowedUpstreamHeaders:
            patterns:
            - exact: "location"
            - exact: "proxy-authenticate"
            - exact: "set-cookie"
            - exact: "authorization"
            - exact: "www-authenticate"
            - prefix: "x-forwarded"
            - prefix: "x-auth-request"
      statusOnError:
        code: GatewayTimeout
    filterName: envoy.ext_authz
    filterType: HTTP
    insertPosition:
      index: FIRST
    listenerMatch:
      portNumber: 443
      listenerType: GATEWAY

Unfortunately non of them works. Nothing happens when I create those resources I always get "RBAC: access denied" just like it was before creating EnvoyFilter.
[x ] Configuration Infrastructure
[ x] Docs
[ ] Installation
[ x] Networking
[ ] Performance and Scalability
[ ] Policies and Telemetry
[x ] Security
[ ] Test and Release
[ ] User Experience
[ ] Developer Infrastructure
Expected behavior
When I access the webpage without a valid JWT token I should be redirected to the login page
Steps to reproduce the bug
Create any service, expose it via ingress and add JWT filtering.
Version (include the output of istioctl version --remote and kubectl version and helm version if you used Helm)
Kubectl
Client Version: version.Info{Major:"1", Minor:"15", GitVersion:"v1.15.11", GitCommit:"d94a81c724ea8e1ccc9002d89b7fe81d58f89ede", GitTreeState:"clean", BuildDate:"2020-03-12T21:08:59Z", GoVersion:"go1.12.17", Compiler:"gc", Platform:"linux/amd64"}
Server Version: version.Info{Major:"1", Minor:"15", GitVersion:"v1.15.11", GitCommit:"d94a81c724ea8e1ccc9002d89b7fe81d58f89ede", GitTreeState:"clean", BuildDate:"2020-03-12T21:00:06Z", GoVersion:"go1.12.17", Compiler:"gc", Platform:"linux/amd64"}

istioctl
client version: 1.6.0
control plane version: 1.6.0
data plane version: 1.6.0 (16 proxies)

Environment where bug was observed (cloud vendor, OS, etc)
OpenStack VM, kubernetes 1.15.11

/cc @yangminzhu @rshriram @incfly

How do you expect the EnvoyFilter to redirect to a login page?

@yangminzhu
Yes that's exactly what we are trying to achieve

How do you expect the EnvoyFilter to redirect to a login page?

I'm not an expert on this but I based my assumption on this blog post:
https://homelab.blog/blog/devops/Istio-OIDC-Config/

envoy config dump from the gateway would help. Just need the HTTP Connection manager config for that port

Any hint how to extract this from a running instance?

envoy config dump from the gateway would help. Just need the HTTP Connection manager config for that port

Any hint how to extract this from a running instance?

I think you can get the dump by running the following command on istio 1.6.x
istioctl experimental authz check <name of pod>

https://github.com/istio/istio/wiki/Troubleshooting-Istio to get config dump

@kopasiak With the help of below two blog posts and hours of troubleshooting, I think we have a working setup and would like to share if that helps you in anyway.
Blog posts:

https://homelab.blog/blog/devops/Istio-OIDC-Config/ (The link you mentioned but it's based on old version of Istio)
https://www.paraesthesia.com/archive/2020/09/03/setting-up-oauth2-proxy-with-istio/ (Updated for new Istio version)

Our working config:
EnvoyFilter:
apiVersion: networking.istio.io/v1alpha3
kind: EnvoyFilter
metadata:
  name: auth-filter
spec:
  workloadSelector:
    labels:
      istio: ingressgateway
  configPatches:
  - applyTo: HTTP_FILTER
    match:
      context: GATEWAY
      listener:
        filterChain:
          filter:
            name: envoy.http_connection_manager
            subFilter:
              # In Istio 1.6.4 this is the first filter. The examples showing insertion
              # after some other authorization filter or not showing where to insert
              # the filter at all didn't work for me. Istio just failed to insert the
              # filter (silently) and moved on.
              name: istio.metadata_exchange
          sni: "xxxx.yyyy.nip.io"
    patch:
      operation: INSERT_AFTER
      value:
        name: envoy.filters.http.ext_authz
        typed_config:
          '@type': type.googleapis.com/envoy.extensions.filters.http.ext_authz.v3.ExtAuthz
          http_service:
            authorizationRequest:
              allowedHeaders:
                patterns:
                - exact: accept
                - exact: authorization
                - exact: cookie
                - exact: from
                - exact: proxy-authorization
                - exact: user-agent
                - exact: x-forwarded-access-token
                - exact: x-forwarded-email
                - exact: x-forwarded-for
                - exact: x-forwarded-host
                - exact: x-forwarded-proto
                - exact: x-forwarded-user
                - prefix: x-auth-request
                - prefix: x-forwarded
            authorizationResponse:
              allowedClientHeaders:
                patterns:
                - exact: authorization
                - exact: location
                - exact: proxy-authenticate
                - exact: set-cookie
                - exact: www-authenticate
                - prefix: x-auth-request
                - prefix: x-forwarded
              allowedUpstreamHeaders:
                patterns:
                - exact: authorization
                - exact: location
                - exact: proxy-authenticate
                - exact: set-cookie
                - exact: www-authenticate
                - prefix: x-auth-request
                - prefix: x-forwarded
            server_uri:
              # URIs here should be to the oauth2-proxy service inside your
              # cluster, in the namespace where it was deployed. The port
              # in that 'cluster' line should also match up.
              cluster: outbound|80||auth-proxy.oauth.svc.cluster.local
              timeout: 1.5s
              uri: http://auth-proxy.oauth.svc.cluster.local

Gateway:
apiVersion: networking.istio.io/v1beta1
kind: Gateway
metadata:
  name: tenant-gateway
spec:
  selector:
    istio: ingressgateway
  servers:
  - hosts:
    - "xxxx.yyyy.nip.io"
    port:
      # The name here must be unique across all of the ports named
      # in the Istio ingress.
      name: http-xxxx-yyyy-nip-io
      number: 80
      protocol: HTTP
    tls:
      httpsRedirect: true
  - hosts:
    - "xxxx.yyyy.nip.io"
    port:
      # The name here must be unique across all of the ports named
      # in the Istio ingress.
      name: https-xxxx-yyyy-nip-io
      number: 443
      protocol: HTTPS
    tls:
      mode: SIMPLE
      privateKey: /etc/istio/ingressgateway-certs/tls.key
      serverCertificate: /etc/istio/ingressgateway-certs/tls.crt

Tricky part is troubleshooting the proxy config.

After you created Gateway and EnvoyProxy, make sure the listener for your gateway is created correctly. You can run the following command to verify it.

istioctl pc listener istio-ingressgateway-xxxx-yyyy.istio-system -o json where istio-ingressgateway-xxxx-yyyy is the name of the ingressgateway pod in istio-system namespace.
In the json output, make sure you have a section with the details like below:
               "filterChainMatch": {
                    "serverNames": [
                        "xxxx.yyyy.nip.io", <- Host(s) in your Gateway
                    ]
                },
                "filters": [
                    {
                        "name": "mixer",
....
                               {
                                    "name": "envoy.filters.http.ext_authz",
                                    "typedConfig": {
                                        "@type": "type.googleapis.com/envoy.extensions.filters.http.ext_authz.v3.ExtAuthz",
                                        "httpService": {
                                            "serverUri": {
                                                "uri": "http://auth-proxy.oauth.svc.cluster.local",
                                                "cluster": "outbound|80||auth-proxy.oauth.svc.cluster.local",
                                                "timeout": "1.500s"
                                            },
                                            "authorizationRequest": {
                                                "allowedHeaders": {
                                                    "patterns": [
                                                        {
                                                            "exact": "accept"
                                                        },
                                                        {
                                                            "exact": "authorization"
....

As you can see, the patch in your EnvoyFilter is applied to the listener

Make sure server_uri: is configured correctly in your EnvoyFilter. If either service name in cluster doesn't match with uri or port in cluster is wrong, you will not see successful redirection. In my case, I run an nginx reverse proxy in front of oauth2-proxy and that's why you see port 80 in my config. Direct use oauth2-proxy on port 4180 should work well too. I use nginx to proxy_pass multiple oath2-proxy pods based on vhost in my case.

Hope this will give you or anyone some clue for troubleshooting EnvoyFilter config.

@jeesmon using your envoyfilter ,i get 403 UAEX in ingressgw , i can not find the reason for this .do you meet this issue before?

@jeesmon using your envoyfilter ,i get 403 UAEX in ingressgw , i can not find the reason for this .do you meet this issue before?

@xinxinzhao1212 Did you look at the listener config to make sure it is patched with desired authz config. You can also get more details by adding debug logging for rbac for your istio-proxy.
kubectl -n <ns> exec <pod> -c istio-proxy -- pilot-agent request POST 'logging?rbac=debug'

@xinxinzhao1212 Did you look at the listener config to make sure it is patched with desired authz config. You can also get more details by adding debug logging for rbac for your istio-proxy.
kubectl -n <ns> exec <pod> -c istio-proxy -- pilot-agent request POST 'logging?rbac=debug'

@jeesmon  yes ，i can get the patched with authz config, you can see as below
                                "name": "envoy.filters.http.ext_authz",
                                "typedConfig": {
                                    "@type": "type.googleapis.com/envoy.extensions.filters.http.ext_authz.v3.ExtAuthz",
                                    "httpService": {
                                        "serverUri": {
                                            "uri": "http://hitroncloud-oauth.auth.svc.cluster.local",
                                            "cluster": "outbound|80||hitroncloud-oauth.auth.svc.cluster.local",
                                            "timeout": "1.500s"
                                        },
                                        "authorizationRequest": {
                                            "allowedHeaders": {
                                                "patterns": [
                                                    {
                                                        "exact": "accept"
                                                    },
                                                    {
                                                        "exact": "authorization"
                                                    },
                                                    {
                                                        "exact": "cookie"
                                                    },
                                                    {
                                                        "exact": "from"
                                                    },
                                                    {
                                                        "exact": "proxy-authorization"
                                                    },
                                                    {
                                                        "exact": "user-agent"
                                                    },
                                                    {
                                                        "exact": "x-forwarded-access-token"
                                                    },
                                                    {
                                                        "exact": "x-forwarded-email"
                                                    },
                                                    {
                                                        "exact": "x-forwarded-for"
                                                    },
                                                    {
                                                        "exact": "x-forwarded-host"
                                                    },
                                                    {
                                                        "exact": "x-jwt-ext-org"
                                                    },
                                                    {
                                                        "exact": "x-forwarded-proto"
                                                    },
                                                    {
                                                        "exact": "x-forwarded-user"
                                                    },
                                                    {
                                                        "prefix": "x-auth-request"
                                                    },
                                                    {
                                                        "prefix": "x-forwarded"
                                                    }
                                                ]
                                            }
                                        },
                                        "authorizationResponse": {
                                            "allowedUpstreamHeaders": {
                                                "patterns": [
                                                    {
                                                        "exact": "authorization"
                                                    },
                                                    {
                                                        "exact": "location"
                                                    },
                                                    {
                                                        "exact": "proxy-authenticate"
                                                    },
                                                    {
                                                        "exact": "set-cookie"
                                                    },
                                                    {
                                                        "exact": "www-authenticate"
                                                    },
                                                    {
                                                        "prefix": "x-auth-request"
                                                    },
                                                    {
                                                        "prefix": "x-forwarded"
                                                    }
                                                ]
                                            },
                                            "allowedClientHeaders": {
                                                "patterns": [
                                                    {
                                                        "exact": "authorization"
                                                    },
                                                    {
                                                        "exact": "location"
                                                    },
                                                    {
                                                        "exact": "proxy-authenticate"
                                                    },
                                                    {
                                                        "exact": "set-cookie"
                                                    },
                                                    {
                                                        "exact": "www-authenticate"
                                                    },
                                                    {
                                                        "prefix": "x-auth-request"
                                                    },
                                                    {
                                                        "prefix": "x-forwarded"
                                                    }
                                                ]
                                            }
                                        }
                                    }
                                }
                            },

but when i want to access to istio-ingressgw , the gw will return ".1 403 UAEX 0 0 1 - <IP_ADDRESS> "PostmanRuntime/7.26.8" c2ecc8ee-7a83-94a3-b250-6f3820f54a5b api.lab5.hitroncloud.net - - - <IP_ADDRESS>:443 <IP_ADDRESS>:52231 - -
"
and it seems not route to any services.
i use istio-1.6.6 in my env

@jeesmon  yes ，i can get the patched with authz config, you can see as below
                                "name": "envoy.filters.http.ext_authz",
                                "typedConfig": {
                                    "@type": "type.googleapis.com/envoy.extensions.filters.http.ext_authz.v3.ExtAuthz",
                                    "httpService": {
                                        "serverUri": {
                                            "uri": "http://hitroncloud-oauth.auth.svc.cluster.local",
                                            "cluster": "outbound|80||hitroncloud-oauth.auth.svc.cluster.local",
                                            "timeout": "1.500s"
                                        },
                                        "authorizationRequest": {
                                            "allowedHeaders": {
                                                "patterns": [
                                                    {
                                                        "exact": "accept"
                                                    },
                                                    {
                                                        "exact": "authorization"
                                                    },
                                                    {
                                                        "exact": "cookie"
                                                    },
                                                    {
                                                        "exact": "from"
                                                    },
                                                    {
                                                        "exact": "proxy-authorization"
                                                    },
                                                    {
                                                        "exact": "user-agent"
                                                    },
                                                    {
                                                        "exact": "x-forwarded-access-token"
                                                    },
                                                    {
                                                        "exact": "x-forwarded-email"
                                                    },
                                                    {
                                                        "exact": "x-forwarded-for"
                                                    },
                                                    {
                                                        "exact": "x-forwarded-host"
                                                    },
                                                    {
                                                        "exact": "x-jwt-ext-org"
                                                    },
                                                    {
                                                        "exact": "x-forwarded-proto"
                                                    },
                                                    {
                                                        "exact": "x-forwarded-user"
                                                    },
                                                    {
                                                        "prefix": "x-auth-request"
                                                    },
                                                    {
                                                        "prefix": "x-forwarded"
                                                    }
                                                ]
                                            }
                                        },
                                        "authorizationResponse": {
                                            "allowedUpstreamHeaders": {
                                                "patterns": [
                                                    {
                                                        "exact": "authorization"
                                                    },
                                                    {
                                                        "exact": "location"
                                                    },
                                                    {
                                                        "exact": "proxy-authenticate"
                                                    },
                                                    {
                                                        "exact": "set-cookie"
                                                    },
                                                    {
                                                        "exact": "www-authenticate"
                                                    },
                                                    {
                                                        "prefix": "x-auth-request"
                                                    },
                                                    {
                                                        "prefix": "x-forwarded"
                                                    }
                                                ]
                                            },
                                            "allowedClientHeaders": {
                                                "patterns": [
                                                    {
                                                        "exact": "authorization"
                                                    },
                                                    {
                                                        "exact": "location"
                                                    },
                                                    {
                                                        "exact": "proxy-authenticate"
                                                    },
                                                    {
                                                        "exact": "set-cookie"
                                                    },
                                                    {
                                                        "exact": "www-authenticate"
                                                    },
                                                    {
                                                        "prefix": "x-auth-request"
                                                    },
                                                    {
                                                        "prefix": "x-forwarded"
                                                    }
                                                ]
                                            }
                                        }
                                    }
                                }
                            },

but when i want to access to istio-ingressgw , the gw will return ".1 403 UAEX 0 0 1 - <IP_ADDRESS> "PostmanRuntime/7.26.8" c2ecc8ee-7a83-94a3-b250-6f3820f54a5b api.lab5.hitroncloud.net - - - <IP_ADDRESS>:443 <IP_ADDRESS>:52231 - -
"
and it seems not route to any services.
i use istio-1.6.6 in my env

I got this working last night. Something that caught me up for hours was the gateway had the host "*.example.com". The virtual service had "dashboard.example.com". I filtered by SNI "dashboard.example.com"
This did not work.
Istio did, but the envoy filter was never applied.
After adding the host explicitly to gateway as well as the wildcard, the SNI was able to match and the filter started working.

I got this working last night. Something that caught me up for hours was the gateway had the host "*.example.com". The virtual service had "dashboard.example.com". I filtered by SNI "dashboard.example.com"
This did not work.
Istio did, but the envoy filter was never applied.
After adding the host explicitly to gateway as well as the wildcard, the SNI was able to match and the filter started working.

I also got a 403 for awhile after I got the filter working cause I had the incorrect allowed email domain in the proxy settings

I also got a 403 for awhile after I got the filter working cause I had the incorrect allowed email domain in the proxy settings

@xinxinzhao1212 As @patrickleet mentioned, please check your VirtualService host is matching SNI in EnvoyFilter. It's tricky to debug to make sure you have all right configs. Enabling rbac debug logging helped me in most cases to troubleshoot issues.

@xinxinzhao1212 As @patrickleet mentioned, please check your VirtualService host is matching SNI in EnvoyFilter. It's tricky to debug to make sure you have all right configs. Enabling rbac debug logging helped me in most cases to troubleshoot issues.

@patrickleet I ran into same wildcard issue before and had to use exact hostname. Glad you figured it out :) I wish wildcard pattern worked for other use cases where I cannot use specific host all the time :(

@patrickleet I ran into same wildcard issue before and had to use exact hostname. Glad you figured it out :) I wish wildcard pattern worked for other use cases where I cannot use specific host all the time :(

@jeesmon yea agree, has me rethinking my plans

@jeesmon yea agree, has me rethinking my plans

@patrickleet If I remember correctly (It's been a while I checked the config), only one SNI needs to be exact in EnvoyFilter config. I have seen new hostnames of VirtualServices are picked up automatically without adding them explicitly in EnvoyFilter.

@patrickleet If I remember correctly (It's been a while I checked the config), only one SNI needs to be exact in EnvoyFilter config. I have seen new hostnames of VirtualServices are picked up automatically without adding them explicitly in EnvoyFilter.

yes, only one needs to match and that will cause all to use the filter.
For example, a gateway with *.example.com and dashboard.example.com and sni match of dashboard.example.com will apply to *.example.com as well.
The fact that the same wildcard certificates can't be used in two gateways complicates things further:
https://istio.io/latest/docs/ops/common-problems/network-issues/#404-errors-occur-when-multiple-gateways-configured-with-same-tls-certificate

yes, only one needs to match and that will cause all to use the filter.
For example, a gateway with *.example.com and dashboard.example.com and sni match of dashboard.example.com will apply to *.example.com as well.
The fact that the same wildcard certificates can't be used in two gateways complicates things further:
https://istio.io/latest/docs/ops/common-problems/network-issues/#404-errors-occur-when-multiple-gateways-configured-with-same-tls-certificate


tBTC dApp wireframes for UX updates

development of improved UX based on insights from using test & live dApp.
Figma workspace: https://www.figma.com/file/wSIaVX0Dh9IJDGMrfGZILd/tBTC-dApp?node-id=2737%3A0

updated rough flow WIP:

i'd like to discuss SPV proof UX.

Weekly notes in Coda: https://coda.io/d/tBTC-dApp_dRUOEofTYZu


Fix broken docs links

The URL with -ruby has gone the way of the Norwegian blue parrot.

Thanks @bennylope!


[Event Hubs] Incorporate AmqpAnnotatedMessage into EventData

Summary
The focus of these changes is to introduce the AmqpAnnotatedMessage abstraction as the basis for EventData, allowing access to the full set of AMQP message data.  This enables scenarios such as interaction with other message brokers that make use of the protocol in ways that are not otherwise exposed within the Event Hubs client.
This set of changes will be followed by refactoring of the AmqpMessageConverter to work with the full AMQP message rather only than the known EventData subset.
References and Related

Event Hubs: Extend EventData with AMQP Message Details (#20105)

/azp run net - eventhub - tests


Set keybinding for non-commands

Hi,
thank you for this great plugin.
What do you think about adding keybindings for non-commands (just key sequences).
For example i have this keybinding in my config:
utils.map('n', '<leader>a', '"ayiw')

Would be nice to also add this into the command center.
/edit: This would also enable multiple commands. For example
utils.map('n', '<F5>', ':CMake build<CR>:copen<CR>')

This is definitely on the roadmap!

This feature is implemented in ecb8b488584807bd14eddb1443b0797e3033bdcc


MINOR: Improve producer test BufferPoolTest#testCloseNotifyWaiters.

Makes the main thread wait for workers to be ready to test the
desired functionality before proceeding.
Committer Checklist (excluded from commit message)

[ ] Verify design and implementation
[ ] Verify test coverage and CI build status
[ ] Verify documentation (including upgrade notes)

retest this please

retest this please

Test failure unrelated: ```kafka.api.CustomQuotaCallbackTest > testCustomQuotaCallback STARTED
kafka.api.ConsumerBounceTest.testRollingBrokerRestartsWithSmallerMaxGroupSizeConfigDisruptsBigGroup failed, log available in /home/jenkins/jenkins-slave/workspace/kafka-pr-jdk14-scala2.13/core/build/reports/testOutput/kafka.api.ConsumerBounceTest.testRollingBrokerRestartsWithSmallerMaxGroupSizeConfigDisruptsBigGroup.test.stdout
kafka.api.ConsumerBounceTest > testRollingBrokerRestartsWithSmallerMaxGroupSizeConfigDisruptsBigGroup FAILED
org.scalatest.exceptions.TestFailedException: The remaining consumers in the group could not fetch the expected records
at org.scalatest.Assertions.newAssertionFailedException(Assertions.scala:530)
at org.scalatest.Assertions.newAssertionFailedException$(Assertions.scala:529)
at org.scalatest.Assertions$.newAssertionFailedException(Assertions.scala:1389)
at org.scalatest.Assertions.fail(Assertions.scala:1091)
at org.scalatest.Assertions.fail$(Assertions.scala:1087)
at org.scalatest.Assertions$.fail(Assertions.scala:1389)
at kafka.api.ConsumerBounceTest.testRollingBrokerRestartsWithSmallerMaxGroupSizeConfigDisruptsBigGroup(ConsumerBounceTest.scala:331)```

LGTM, thanks.


merging mod difficulties into a chart

What feature do you want to get added on the base engine?
What about making a feature that merges 2 charts into one as a new difficulty (example: blammed and blammed neo version)? Imagine adding blammed neo's chart and music into mods folder, and then for the game to automatically merge it into one song (if it's neo difficulty, it will add it into a seperate difficulty and give it it's song that would need to include Inst-neo.ogg and Voices-neo.ogg)

also can I overwrite charts and week json files? I can't seem to do it.

you can

idk how to explain it

you can

I did something similar, but now in the freeplay menu there are 2 versions of the same song with different instrumentals, vocals and charting.

make a custom difficulty and make a separate song out of it

edit jsons
im not gonna explain


chore: Bump deps [DEV-4224]

[x] @veramo/*
[x] @semantic-release/github
[x] @semantic-release/npm
[x] amannn/action-semantic-pull-request

Task linked: DEV-4224 Bump veramo, semantic release


fix: show AddFolder menu in context menu of RepositoryNode

When displays more than one page of repositories on the welcome page, the new group menu button only a small area on the left side of the bookmark can be called out. This PR is to solve this problem.

I recommanded you just added a button on toolbar to create top-level group (the entry to create sub-group can be found from context menu of desired parent group).

The var parentNode is due to make the Create Sub-Group menu can be showed in the context menu of the RepositoryNode which has group.
https://github.com/sourcegit-scm/sourcegit/assets/28685179/4efb36fe-036a-4e4a-95c9-60a149a0c4b2

The var parentNode is due to make the Create Sub-Group menu can be showed in the context menu of the RepositoryNode which has group.

I know what problem you're trying to solve and have thoroughly tested your PR.
In this PR, Sub-Group in a repository node has a different meaning than the Sub-Group in a folder node.
Since it's not hard to create a sub-group in a existing parent, we just want an easy way to create top-level group when the tree takes all the vertical space in Welcome page.

I've push a simple implementation to solve this problem


Dedicated Linux Server doesn't work with v0.11.x

Description
Standalone Linux server doesn't work with latest v0.11.x versions
Steps to Reproduce
Download and extract Terraria 1353.zip from terraria.org
Copy contents of tmod v0.11.x.zip to the terraria folder from the extract
Run tModLoaderServer from the same directory
Expected behavior
Server should run
Actual behavior
[16:21:10] [1/INFO] [tML]: Starting tModLoader v0.11 Beta 5l server
[16:21:10] [1/INFO] [tML]: Running on Mono 4.6.1
[16:21:10] [1/INFO] [tML]: Executable: /home/user/terraria/tModLoaderServer.exe
[16:21:10] [1/INFO] [tML]: Working Directory: /home/user/terraria
[16:21:10] [1/INFO] [tML]: Launch Parameters:
[16:21:10] [1/WARN] [tML]: First-chance exception reporting is not implemented on Mono
[16:21:13] [1/DEBUG] [tML]: Assembly Resolve: Terraria, Version=<IP_ADDRESS>, Culture=neutral, PublicKeyToken=null -> Mono.Cecil.Mdb, Version=<IP_ADDRESS>, Culture=neutral, PublicKeyToken=50cebf1cceb9d05e
[16:21:13] [1/FATAL] [Terraria]: Main engine crash
System.TypeInitializationException: The type initializer for 'Terraria.ModLoader.Interface' threw an exception. ---> System.NullReferenceException: Object reference not set to an instance of an object
at Terraria.GameContent.UI.Elements.UIText.InternalSetText (Object text, Single textScale, Boolean large) [0x00015] in tModLoaderServer.exe
at Terraria.GameContent.UI.Elements.UIText..ctor (String text, Single textScale, Boolean large) [0x00032] in tModLoaderServer.exe
at Terraria.ModLoader.UI.ModBrowser.UIModBrowser..ctor () [0x0013d] in tModLoaderServer.exe
at Terraria.ModLoader.Interface..cctor () [0x00032] in tModLoaderServer.exe
--- End of inner exception stack trace ---
at Terraria.ModLoader.ModLoader.Load () [0x00000] in tModLoaderServer.exe
at Terraria.Main.DedServ () [0x00066] in tModLoaderServer.exe
at Terraria.Program.LaunchGame_ () [0x0007c] in tModLoaderServer.exe
Reproduction frequency
Everytime
Versions
Terraria <IP_ADDRESS>
tMod v0.11.x
Additional Information
Also the scripts don't pickup the architecture bewteen x86 and x64 too well - Specifically I noticed that the ARCH variable often returns blank by the end of the bash script which defaults to x86 instead of x64 binaries.

Will be fixed in beta 6

ETA?

Tuesday

Is there any quick workaround to use right now?

Sorry, only build from source (if you have visual studio) and follow the setup instructions but that's mostly for modders. Always a time to learn?

Studio code or full visual studio?

Visual studio IDE

Beta 6 is out now


Directional keys do not work on a component

The arrow keys do not work in a component, when I add text to a field and try to move in the field, the arrow keys do not work.
The error only happens on fields that are added within a component, either repeatable or simple.

I cannot reproduce the issue. What version of the plugin are you using?

Hi.
The issue occurs when adding the text field inside a  Strapi component.
We are using Strapi 4.3.8 and strapi-tiptap-editor 0.9.1

Try using the latest version of my plugin. I believe it should have been fixed.

Please re-open if issue persists with latest version of the plugin.


jfrog version 1.29.2 with DOCKER_BUILDKIT=1 causes Could not find docker image in Artifactory, expecting image ID: sha256

panic: Could not find docker image in Artifactory, expecting image ID: sha256:a55799516106ff38d532d4079e10065282c04a218c15d7aa816e6311bd0afd4d

goroutine 1 [running]:
github.com/jfrog/jfrog-cli-go/utils/cliutils.PanicOnError(0x8943300, 0xa640408, 0xa5493c8, 0x1)
	/var/lib/jenkins/workspace/EcoSystem/jfrog-cli-release/temp/jfrog-cli-go/utils/cliutils/utils.go:57 +0x42
github.com/jfrog/jfrog-cli-go/artifactory/utils/docker.(*buildInfoBuilder).getImageLayersFromArtifactory(0xa8c8180, 0xa668710, 0x8117beb, 0x8117a0c)
	/var/lib/jenkins/workspace/EcoSystem/jfrog-cli-release/temp/jfrog-cli-go/artifactory/utils/docker/buildinfo.go:126 +0x5f1
github.com/jfrog/jfrog-cli-go/artifactory/utils/docker.(*buildInfoBuilder).updateArtifactsAndDependencies(0xa8c8180, 0xa4eaf50, 0x47)
	/var/lib/jenkins/workspace/EcoSystem/jfrog-cli-release/temp/jfrog-cli-go/artifactory/utils/docker/buildinfo.go:84 +0x2f
github.com/jfrog/jfrog-cli-go/artifactory/utils/docker.(*buildInfoBuilder).Build(0xa8c8180, 0x0, 0x0, 0x0, 0x0, 0x0)
	/var/lib/jenkins/workspace/EcoSystem/jfrog-cli-release/temp/jfrog-cli-go/artifactory/utils/docker/buildinfo.go:65 +0x62
github.com/jfrog/jfrog-cli-go/artifactory/commands/docker.(*DockerPushCommand).Run(0xa5724e0, 0x8835fa0, 0x894a4e0)
	/var/lib/jenkins/workspace/EcoSystem/jfrog-cli-release/temp/jfrog-cli-go/artifactory/commands/docker/push.go:69 +0x26e
github.com/jfrog/jfrog-cli-go/artifactory/commands.Exec(0x894a4e0, 0xa5724e0, 0x0, 0x0)
	/var/lib/jenkins/workspace/EcoSystem/jfrog-cli-release/temp/jfrog-cli-go/artifactory/commands/command.go:26 +0x71
github.com/jfrog/jfrog-cli-go/artifactory.dockerPushCmd(0xa4a0580, 0x81547c1, 0x87fa8c3)
	/var/lib/jenkins/workspace/EcoSystem/jfrog-cli-release/temp/jfrog-cli-go/artifactory/cli.go:1530 +0x193
github.com/jfrog/jfrog-cli-go/artifactory.GetCommands.func25(0xa4a0580, 0x0, 0xa4a0580)
	/var/lib/jenkins/workspace/EcoSystem/jfrog-cli-release/temp/jfrog-cli-go/artifactory/cli.go:393 +0x21
github.com/codegangsta/cli.HandleAction(0x871cfe0, 0x8835f44, 0xa4a0580, 0xa570900, 0x0)
	/var/lib/jenkins/go/pkg/mod/github.com/codegangsta/cli@v1.20.0/app.go:490 +0xa2
github.com/codegangsta/cli.Command.Run(0x87fe253, 0xb, 0x0, 0x0, 0xa562210, 0x1, 0x1, 0x87fe857, 0xc, 0x8826985, ...)
	/var/lib/jenkins/go/pkg/mod/github.com/codegangsta/cli@v1.20.0/command.go:210 +0x89c
github.com/codegangsta/cli.(*App).RunAsSubcommand(0xa4dce00, 0xa4a0420, 0x0, 0x0)
	/var/lib/jenkins/go/pkg/mod/github.com/codegangsta/cli@v1.20.0/app.go:379 +0x6c2
github.com/codegangsta/cli.Command.startApp(0x87f9e9c, 0x2, 0x0, 0x0, 0x0, 0x0, 0x0, 0x8804073, 0x14, 0x0, ...)
	/var/lib/jenkins/go/pkg/mod/github.com/codegangsta/cli@v1.20.0/command.go:298 +0x69b
github.com/codegangsta/cli.Command.Run(0x87f9e9c, 0x2, 0x0, 0x0, 0x0, 0x0, 0x0, 0x8804073, 0x14, 0x0, ...)
	/var/lib/jenkins/go/pkg/mod/github.com/codegangsta/cli@v1.20.0/command.go:98 +0xf5e
github.com/codegangsta/cli.(*App).Run(0xa4dcc40, 0xa4840c0, 0x7, 0x8, 0x0, 0x0)
	/var/lib/jenkins/go/pkg/mod/github.com/codegangsta/cli@v1.20.0/app.go:255 +0x56a
main.execMain(0x869d328, 0xa42e370)
	/var/lib/jenkins/workspace/EcoSystem/jfrog-cli-release/temp/jfrog-cli-go/main.go:90 +0x1f8
main.main()
	/var/lib/jenkins/workspace/EcoSystem/jfrog-cli-release/temp/jfrog-cli-go/main.go:72 +0x1f

Similar https://github.com/jfrog/jfrog-cli/issues/160

@alexmnyc, the issue in #160 turned out to be a bad JFrog CLI command.
Can you please share the command you are running?

@alexmnyc,
Is this issue still relevant?

I have the same error after start building images with DOCKER_BUILDKIT=1

@alexmnyc , @ppiotrow , I was able to build my docker image with buildkit and publish it to Artifactory as well.
Could you please share with us:

Steps to reproduce the behavior
A clear and concise description of what you expected to happen.
JFrog CLI version:
Artifactory Version


Support musl based compiler

Hi,
I am doing a application that use a musl as a standard library, There is a some bug in strptime that not correctly allow parse RFC1123 Data. So I changed it to std::get_time That make it works on musl and glibc.
I don't know why std::get_time can't parse ASCI C asctime() format. In this way I used old strptime (this is correct also for musl). Here is some that can cause this. It's probably bug in GCC.
Pass tests:

gcc version 7.1.1 20170528 (GCC) (glibc)
gcc version 6.3.0 (GCC) (musl)

Ok. It's looks like it require at least GCC 5.

Hello.
Yes, I initially did not use std::get_time, std::put_time functions because it required a higher version of libtsdc++.
We are now in 2017, I'm ok with requiring a gcc version >= 5.x. I'm also curious about the performance here as you now changed to std::string and it also required a std::stringstream. I would do some quick benchmark before merging it into master.

benchmark:
[==========] Running 4 benchmarks.
[ RUN      ] raw.RFC850 (20 runs, 1000 iterations per run)
[     DONE ] raw.RFC850 (17.982900 ms)
[   RUNS   ]        Average time: 899.145 us (~219.438 us)
                    Fastest time: 774.445 us (-124.700 us / -13.869 %)
                    Slowest time: 1552.445 us (+653.300 us / +72.658 %)
                     Median time: 816.445 us (1st quartile: 791.445 us | 3rd quartile: 849.445 us)

             Average performance: 1112.16767 runs/s
                Best performance: 1291.24728 runs/s (+179.07961 runs/s / +16.10185 %)
               Worst performance: 644.14520 runs/s (-468.02247 runs/s / -42.08201 %)
              Median performance: 1224.82225 runs/s (1st quartile: 1263.51168 | 3rd quartile: 1177.23926)

[ITERATIONS]        Average time: 0.899 us (~0.219 us)
                    Fastest time: 0.774 us (-0.125 us / -13.869 %)
                    Slowest time: 1.552 us (+0.653 us / +72.658 %)
                     Median time: 0.816 us (1st quartile: 0.791 us | 3rd quartile: 0.849 us)

             Average performance: 1112167.67040 iterations/s
                Best performance: 1291247.28031 iterations/s (+179079.60991 iterations/s / +16.10185 %)
               Worst performance:<PHONE_NUMBER>1 iterations/s (-468022.46719 iterations/s / -42.08201 %)
              Median performance: 1224822.24767 iterations/s (1st quartile: 1263511.67801 | 3rd quartile: 1177239.25622)
[ RUN      ] raw.RFC1123 (20 runs, 1000 iterations per run)
[     DONE ] raw.RFC1123 (17.248900 ms)
[   RUNS   ]        Average time: 862.445 us (~77.468 us)
                    Fastest time: 805.445 us (-57.000 us / -6.609 %)
                    Slowest time: 1053.445 us (+191.000 us / +22.146 %)
                     Median time: 823.445 us (1st quartile: 809.445 us | 3rd quartile: 890.445 us)

             Average performance: 1159.49423 runs/s
                Best performance: 1241.54970 runs/s (+82.05547 runs/s / +7.07683 %)
               Worst performance: 949.26645 runs/s (-210.22777 runs/s / -18.13099 %)
              Median performance: 1214.41019 runs/s (1st quartile: 1235.41439 | 3rd quartile: 1123.03399)

[ITERATIONS]        Average time: 0.862 us (~0.077 us)
                    Fastest time: 0.805 us (-0.057 us / -6.609 %)
                    Slowest time: 1.053 us (+0.191 us / +22.146 %)
                     Median time: 0.823 us (1st quartile: 0.809 us | 3rd quartile: 0.890 us)

             Average performance: 1159494.22862 iterations/s
                Best performance: 1241549.70234 iterations/s (+82055.47372 iterations/s / +7.07683 %)
               Worst performance:<PHONE_NUMBER>5 iterations/s (-210227.77427 iterations/s / -18.13099 %)
              Median performance: 1214410.19133 iterations/s (1st quartile: 1235414.38887 | 3rd quartile: 1123033.98862)
[ RUN      ] string.RFC850 (20 runs, 1000 iterations per run)
[     DONE ] string.RFC850 (37.099900 ms)
[   RUNS   ]        Average time: 1854.995 us (~216.321 us)
                    Fastest time: 1670.445 us (-184.550 us / -9.949 %)
                    Slowest time: 2390.445 us (+535.450 us / +28.865 %)
                     Median time: 1758.945 us (1st quartile: 1744.445 us | 3rd quartile: 1837.445 us)

             Average performance: 539.08501 runs/s
                Best performance: 598.64288 runs/s (+59.55787 runs/s / +11.04795 %)
               Worst performance: 418.33215 runs/s (-120.75286 runs/s / -22.39960 %)
              Median performance: 568.52261 runs/s (1st quartile: 573.24823 | 3rd quartile: 544.23398)

[ITERATIONS]        Average time: 1.855 us (~0.216 us)
                    Fastest time: 1.670 us (-0.185 us / -9.949 %)
                    Slowest time: 2.390 us (+0.535 us / +28.865 %)
                     Median time: 1.759 us (1st quartile: 1.744 us | 3rd quartile: 1.837 us)

             Average performance:<PHONE_NUMBER>1 iterations/s
                Best performance:<PHONE_NUMBER>0 iterations/s (+59557.86559 iterations/s / +11.04795 %)
               Worst performance:<PHONE_NUMBER>5 iterations/s (-120752.85947 iterations/s / -22.39960 %)
              Median performance:<PHONE_NUMBER>2 iterations/s (1st quartile:<PHONE_NUMBER>8 | 3rd quartile:<PHONE_NUMBER>7
[ RUN      ] string.RFC1123 (20 runs, 1000 iterations per run)
[     DONE ] string.RFC1123 (42.817900 ms)
[   RUNS   ]        Average time: 2140.895 us (~612.955 us)
                    Fastest time: 1671.445 us (-469.450 us / -21.928 %)
                    Slowest time: 3279.445 us (+1138.550 us / +53.181 %)
                     Median time: 1775.445 us (1st quartile: 1744.445 us | 3rd quartile: 3059.445 us)

             Average performance: 467.09437 runs/s
                Best performance: 598.28472 runs/s (+131.19035 runs/s / +28.08648 %)
               Worst performance: 304.92965 runs/s (-162.16472 runs/s / -34.71776 %)
              Median performance: 563.23908 runs/s (1st quartile: 573.24823 | 3rd quartile: 326.85667)

[ITERATIONS]        Average time: 2.141 us (~0.613 us)
                    Fastest time: 1.671 us (-0.469 us / -21.928 %)
                    Slowest time: 3.279 us (+1.139 us / +53.181 %)
                     Median time: 1.775 us (1st quartile: 1.744 us | 3rd quartile: 3.059 us)

             Average performance:<PHONE_NUMBER>1 iterations/s
                Best performance:<PHONE_NUMBER>1 iterations/s (+131190.34830 iterations/s / +28.08648 %)
               Worst performance:<PHONE_NUMBER>1 iterations/s (-162164.72430 iterations/s / -34.71776 %)
              Median performance:<PHONE_NUMBER>7 iterations/s (1st quartile:<PHONE_NUMBER>8 | 3rd quartile:<PHONE_NUMBER>5
[==========] Ran 4 benchmarks.

My is string, your is raw.
If you have any suggestion how to omit streams in my solution its more than welcome.
I would suggest changing std:tm to std::chrono:time_point in this case there shouldn't be any leak in performance.

I messed this PR up. Go to #131


Add nvim-java/nvim-java

Repo URL:
https://github.com/nvim-java/nvim-java
Checklist:

[x] The plugin is specifically built for Neovim, or if it's a colorscheme, it supports treesitter syntax.
[x] The lines end with a .. This is to conform to awesome-list linting and requirements.
[x] The title of the pull request is Add/Update/Remove `username/repo`  (notice the backticks around `username/repo`) when adding a new plugin.
[x] The description doesn't mention that it's a Neovim plugin, it's obvious from the rest of the document. No mentions of the word plugin unless it's related to something else. No .. for Neovim.
[x] The description doesn't contain emojis.
[x] Neovim is spelled as Neovim (not nvim, NeoVim or neovim), Vim is spelled as Vim (capitalized), Lua is spelled as Lua (capitalized), Tree-sitter is spelled as Tree-sitter.
[x] Acronyms should be fully capitalized, for example LSP, TS, YAML, etc.

Thanks for the PR!


wrapping ntohll in ifndef for mac

Apparently "ntohll" is already defined on Mac systems. Wrapping in #ifndef seems to make this thing build and install correctly...

Thanks!


183 revisit linearize transformation

First version of the new linearization transformation.
Work in progress and some tests are still failing! Mainly due to the != linearization.
For this operator, we can either do the traditional big-M implemention or use indicator constraints.
For the latter one, we risk introducing unsupported constraints depending on lhs and rhs of original != constraint...
To be discussed.

Looks like it will be a nice improvement!
If we want to be really thorough, we could add a check that tests whether the output adheres to the predefined grammar, and run it during testing. We can use that same method to check the input of other transformations, e.g., only_positive_bv, and be more confident that the code does what it is supposed to.

Updated some more, I think it is ready to put it into master.
Bigtest is failing on this branch as there is a model football16650495281380026 that has a constraint ~bv >= False which should not be possible to write after our discussion on using booleans as integers.

if you typecheck/throw a 'notallowed' error somewhere at expression level on x >= False, then the bigtest test will skip : )

i thought this is a case where we can just transform it into x >= 0?

hmm, you are right, we agreed that Booleans can be used as integer, so bv > False and iv > False should both be possible, its iv & bv that is not allowed. This will be for a new 'simplify_constants' or so transformation, it might become a bit tricky/ugly for Boolean constants used as integer... e.g. 1+BoolVal(False) >= boolvar...

I'll start by implenting the new transformation removing BoolVals from integere experessions, than this issue is solved as well.


Initial work necessary for validation.

Now run.py will dump inputs and outputs for every evaluation. All evaluation message must be extended with a 'workload' field, and all tools must respond with a 'tool'.
There is no actual validation yet.

I now have a validation script as well. The intended workflow is that you first run the tools you care about, e.g.:
$ /run.py --eval './eval.sh hello' --tool './tool.sh futhark'
$ /run.py --eval './eval.sh hello' --tool './tool.sh pytorch

This will populare a directory called results (can be changed with command line option).
After execution you run validation for the specific eval, where you specify which tool is golden and which other tool you want to check:
$ evals/hello/validate.py  --eval hello --golden pytorch --tool futhark

Since everything is file based and decoupled, it's easy to copy things around as needed. It's also easy to imagine a run-everything script (like for CI) that will automatically do the validation.

Validation now works for GMM, BA, and Hello. The Futhark implementation validates against the PyTorch implementation. I had to make some other changes (fix some spellings, ensure deterministic GMM input data) to make that work. I think it is time to discuss whether this approach is the right one.

Looking at this now; sorry for the delay! I think it'll take me a bit to page back in all the context and think about the design more carefully.

Marking this as draft for now since CI is failing, but don't worry about fixing it at the moment (I'm still working on some other comments and suggestions).

OK @athas what do you think of the approach in e0fbea1c229d6d39fec35cd6f6bb52e8478e625b? Specifically, I'm not a huge fan of the added complexity from the "workload" and the "results" file structure, since one reason I had run.py echo the JSON log to stdout is so that the log contains all the information that was exchanged between the eval and the tool; that's why in CI we pipe it to tee.
So, in this alternate approach, we instead just feed the validation script two JSON logs: one from the golden tool, and one from the tool being validated. Then, in python/gradbench/validate.py, I've written a bunch of types that can be used with Pydantic to validate the protocol itself, as well as a pretty general validate_fixed function that can be reused across all evals that are simple like the ones we currently have: they essentially just send a fixed sequence of messages in the same order. So then, all three of our current validators have basically the same main function, which just parses two CLI args and calls validate_fixed with a custom checker that matches on the name of the function and uses that to select which method to check the outputs of the two tools against each other.
Thoughts?

How will validation based on the protocol log work with #99?

I like the conceptual simplicity of verifying the log, despite it being somewhat unusual. I can think of the following challenges:

Results that are external to the log for size reasons, such as above.
Verifying partial results - e.g. maybe you are running only a subset of the workloads for some reason, but still want to validate those.

And one potential benefit:

Low-latency validation, simply by validating the log messages immediately as they come in.

The above are not immediate showstoppers and have technical solutions. I suggest that you merge the log validation approach (once I've looked at BA) and then we deal with the rest as it becomes relevant.

@athas

Verifying partial results - e.g. maybe you are running only a subset of the workloads for some reason, but still want to validate those.

Can you clarify what you mean by this? For instance, what might an example of that look like? Using this design, an eval and its validator can still work however they wish, so if the eval somehow decides to only run a subset of things, its validator can take that into account. The validate_fixed helper function we have currently is just to simplify what I expect to be the "common case".

Low-latency validation, simply by validating the log messages immediately as they come in.

Interesting idea. To add more context, let me first describe a different idea and then explain how it relates. Currently, the validators all depend on some shared code and the Pydantic library, so e.g. the run-fast and run-slow CI jobs need to install Poetry to install Pydantic, then just assume every eval has a validate.py script in its folder in this repo, and just run that. This was fine for prototyping, but it goes against our otherwise-modular architecture of putting everything in its own Docker image.
So, instead, I'd like to put the validator inside of the Docker image for its eval. This should work fine since docker run lets you specify an --entrypoint. But to pass the two log files in, we'd need to also run the Docker image with some sort of bind mount, and then have a convention for where the log files should be.
That's not a bad solution, but it did get me thinking back to what I wrote in https://github.com/gradbench/gradbench/issues/98#issuecomment-2439596813:

One way to do this could be to add an "end" message to the protocol, so when the eval wants to terminate the session (either successfully or unsuccessfully), it can send a message that run.py doesn't forward to the tool and instead just logs and exits. The eval could accumulate whatever it wants from the session into rich metadata in this final message, and the protocol could define some standard fields to be visualized consistently on the website (e.g. success vs failure, overall performance, etc).

A modification of that idea would be that run.py itself takes an optional CLI argument called --golden that can point to a file containing the log from the golden tool. Then at the end of a session, the eval sends a message saying "kind": "end" or something, at which point run.py shuts off the tool. If no --golden was specified then run.py response to this "end" message by just telling the eval not to do any validation. But if --golden was specified, run.py can just send the entire golden log (since it's just JSON) to the eval, and then the eval can validate the session it just ran against that golden log, and return its result as structured data (probably in a last message labeled "kind": "analysis" or something), which will then become part of the final log before exiting.
This has a couple benefits:

Everything stays within the protocol, only using JSON over stdin and stdout for communication.
Instead of only having access to two logs, the eval could potentially keep track of other internal state, and possibly use that to make validation easier?

Alternatively, instead of sending an "end" message, the eval could send a "kind": "start" message at the beginning, and run.py could send the golden log then (if it has one). If I understand correctly, this would enable what you suggested of validating responses immediately as they come in.
It does have a downside, though: because the eval has access to the golden log at the beginning, this means that it could potentially use the golden log to affect what it does in the session. I can't think of why someone would do that, so maybe it's not a big deal, but it feels like it'd just be simpler for the validator to only see the golden log at the end of the session.
In any case, for now I think I'm going to see how quickly I can implement the other idea of just having the validator be a separate entrypoint script. Actually, I don't think I even need to do the bind mount thing: I could just make some top-level validate.py script on the host that sends the two JSON logs directly to the eval's validator via stdin.
Although, in response to your other point:

Results that are external to the log for size reasons, such as above.

To handle those sorts of external files, I guess a bind mount would be necessary anyway. But as you suggested, I'd prefer to first merge an initial implementation of this that just uses the singular JSON log file without any external files, and then revisit the design if #99 turns out to be really necessary.

Can you clarify what you mean by this? For instance, what might an example of that look like?

I might download a golden log file of GMM evaluating all its one thousand (or whatever) workloads, some of which are very large and memory consuming. But for my own new tool, I only want to check that ten representative ones work, because I can't run all the workloads (or don't want to wait for them to finish). This is pretty common use of ADBench. It can be implemented by performing some surgery on the log file (or by implementing your suggestion of making the eval itself perform the validation relative to a provided log file, which could be used in a dictionary-like fashion).

It does have a downside, though: because the eval has access to the golden log at the beginning, this means that it could potentially use the golden log to affect what it does in the session. I can't think of why someone would do that, so maybe it's not a big deal, but it feels like it'd just be simpler for the validator to only see the golden log at the end of the session.

This is not a big deal. Evals are trusted. They must be, as they are ultimately responsible for validation as well.

I fixed the validation of BA, but I have no idea what to do about the scilean timeout.

Everything works now.

Looks good to me.


Error at stage of publishing allure report artifact: Unable to publish artifact [Allure Report]: null

Version of plugin installed: 1.1
While execution task "Allure Report" everything seems to be good, logs:
simple	21-Apr-2015 14:40:21	Starting task 'Allure Report' of type 'ru.yandex.qatools.allure.allure-bamboo-plugin:allureplugin'
simple	21-Apr-2015 14:40:21	-----------
simple	21-Apr-2015 14:40:21	Allure Task
simple	21-Apr-2015 14:40:21	-----------
simple	21-Apr-2015 14:40:21	Trying to generate Allure 1.4.11 using /var/lib/atlassian/bamboo/xml-data/build-dir/3047425/ZD-UT-JOB1 as base directory with pattern = server/ui-test/target/allure-results
simple	21-Apr-2015 14:40:21	Allure data will be saved to /var/lib/atlassian/bamboo/xml-data/build-dir/3047425/ZD-UT-JOB1/allure
simple	21-Apr-2015 14:40:21	Processing Allure XML files
simple	21-Apr-2015 14:40:22	Unpacking Allure report face
simple	21-Apr-2015 14:40:22	Successfully generated Allure report
simple	21-Apr-2015 14:40:22	Finished task 'Allure Report' with result: Success

But when Bamboo tries to publish Allure report artifact, it fails without normal explanation what wrong has happened:
simple	21-Apr-2015 14:40:36	Running post build plugin 'Artifact Copier'
simple	21-Apr-2015 14:40:36	Publishing an artifact: Allure Report
error	21-Apr-2015 14:40:36	Unable to publish artifact [Allure Report]: null
simple	21-Apr-2015 14:40:36	Finished publishing of artifact Job artifact: [Allure Report], pattern: [**] anchored at: [allure-results] in 0s

Allure-results folder contains valid xml file, tried to "mvn site" locally and everything works good.
Bamboo version is:
 Continuous integration powered by Atlassian Bamboo version 5.7.0 build 5714 - 05 Nov 14

Also, there is nothing special in tasks settings.

Please, contact me if some more details is needed.
Thanks!

@pavlovoilov are you using proxies to connect to Internet from Bamboo server?

@vania-pooh no, we use only NAT.

Seems to be related to https://github.com/allure-framework/allure-cli/issues/33

After some experiments we figured out root of the problem.
There are two places for configuring Allure.
First one is to add "Allure Task" to a job and set it to fetch results from "**/allure-results" folder where XML files are stored after tests execution.

Second one is on "Artifacts" tab where you should add Allure.
And that is the magic place...
Somehow after parsing XML files, Allure generates "allure" folder that is on the same level as "project.basedir". And "Copy pattern" should be as two stars.
If somebody else has such problem, walk around and check a place where Allure generate the report and point it to that place.

Maybe this can help for somebody.
Nevertheless, thanks for fast response.
Closing this issue.


[Extension] An extension that adds desktop icons

Here is the extension: https://extensions.gnome.org/extension/1465/desktop-icons/

This is not in line with the direction of GNOME nor my opinion of what it should be, sorry.


Sensor page totally unresponsive ..
I didnt even touch the node that sends battery informations .. my current "experimental" node just sends simpel values VAR1 and VAR2
http://pastebin.com/6LPXjXJ0
additional error from browser console:

@cimba007 Looks like database corrupted.
Stop MyController and run database recovery tool.
To run database recovery tool,

download h2db
Extract
cd to mycontroller/conf/
run java -cp /path/to/h2/bin/h2-*.jar org.h2.tools.Recover

If you are unable to recover, You have to start from fresh installation :(

I always recommend you to configure auto backup, you can restore When there is a situation like this.

No problem about data loss, nothing very "important" to loose. I just post these issues to improve the software ;-) But I will try out the backup, ty

@cimba007 Thanks to report this issue. For database corruption we may not find out the issue at first site. This is the first time I'm seeing this issue. We will look in to this issue if it happens again.
You can enable backup on sub-folder or where MyController have write access. Yes, 7 days backup with 1 day interval will be good to go with minimum safety.
I'm closing this issue, We will reopen this again if this issue occurred again.


Next Generation V8 Engine for Java

We have been working on the V8 adapter for the past year now, adding new features and fixing bugs where they show up. Because this project never had a formal structure or goals, it has grown wildly and seen many new features, etc. Unfortunately, the base project - J2V8 - has also grown quite wildly and has not received any new commits in the past six months.
Knowing this, I would like to propose a new work effort to do the following with this project, in this order:

Split up the unit test suite into separate test files for related functionality. Having one giant test is hard to maintain.

Remove all static fields and instead wrap V8 objects in a new V8Runtime object which contains its own V8 instance and injection API. Class caches can be per-runtime or shared.

Cull all annotations and options that do not directly relate to injecting Objects, Classes, and Methods as they are.

Introduce a formalized API for decorating classes or groups classes with additional features like those found in #1 and #11 by third-party applications. We may provide built-in implementations for marshaling getters and setters, as a convenience. This API could also include a ByteBuffer-based messaging system so that the host (Java) may communicate with the guest (JavaScript) without a single JNI call, thus dramatically improving performance.

Merge in the J2V8 project by taking only the V8-to-Java components (no Node.js support).

Formalizing the build process so that all major platforms can be built for from the same system for the same V8 version at the same time.

This is a lot of steps to perform - and they will definitely cause breaking changes - so I would like to hear from other contributors, particularly @AlexTrotsenko. Thank you all so much for your time and interest!

Now I have successfully removed nodejs and upgraded V8 to 6.7

it seems not work on Android4.x (armeabi-v7a)

@crahda nice plan !
I have some functionality ready, which is not directly related to the V8, but likely would be nice to have by other users, e.g. console.log(), which logs to Android output, etc. Similarly, our scripts uses node-like .setTimeout() api, etc. Would you like to ingrate such api in the new project under "utils" scope or prefer to keep them in separate project?
Second option looks preferable for me, but better to double-check upfront.
Second important thing is debug ability. As far as I see, currently there is only primitive debug api inside j2v8. As far as I see,  there was debug ability from Eclipse in the past, but not anymore. How do you do it now?
Small hint for short-term changes: V8JavaObjectUtils.getRuntimeSarcastically() looks redundant if  latest J2V8 is used.
Also, since it will be quite a new project I have to ask what do you think about using Kotlin for it?

i think these api should be kept in separate project
It's great to use kotlin
J2V8 use some outdated API(in v8 3.1)

@AlexTrotsenko : It would be preferable to implement all of that functionality as external modules of some kind. The goal will be to keep everything in this project as light as possible so that individual users can decorate the core JavaScript language as-needed. Debugging functionality could be added as a stretch goal (and would be very helpful), and several methods (like the sarcastic method) can definitely be removed as a part of these changes.
@windrunner414 : Awesome work on the new builds!
I am not familiar with Kotlin, and thus would not be able to support it in any capacity for this project. However, I am sure it would be possible to implement a Kotlin API of some kind if you thought it would be valuable - but again, that should be an add-on for this project and not a part of it.

following

Jooby also uses j2v8. Maybe worth contacting them to work together?

@hc-codersatlas That may be a good idea! This week I'll be looking into how fast we can complete the tasks mentioned in this issue and try to put together a roadmap.

One more thing to mention in order not to forget it later: for now j2v8 is missing 64bit support: https://github.com/eclipsesource/J2V8/issues/384

Hi @AlexTrotsenko ! Awesome work; seems like a cool library.
Since J2V8 appears to be alive again, we are diverting our efforts elsewhere. As far away as it sounds, you can expect another update from me sometime within the next six months --- we are planning a new fork of this project that will hopefully get rid of many of the pain-points we've been dealing with in regards to Java-JS bridging, but it will not be for general-purpose Java integrations (in order to narrow the focus of our development and provide a consistent development experience).
Thank you for the update!!

I wonder if you get a chance to evaluate https://github.com/caoccao/Javet/ that is a brand new library with Java + Node.js + V8. I'm the maintainer of Javet.

Neverminded, Javet started to support injecting arbitrary Java objects in V8 from v0.9.6.


Fix tracker device popup coordinates

This fixes the the longitude in the tracker device popup being displayed twice.
By submitting this pull request, I confirm that you can use, modify, copy, and redistribute this contribution, under the terms of your choice.

I'd like @zachelliottwx's review since he was the one reporting it and I understand already has the sample more or less deployed.
Thank you @imraymondlee for the quick fix!