Migrate Blockstore ShredIndex type to more efficient data structure

Problem
In the Blockstore, we have a column called index. The index column is used for tracking which shreds we have / haven't received for any given slot. The data structure to track this is Index
https://github.com/anza-xyz/agave/blob/7629a152d1c7748ebc3c3a11bf62445eae4c0e02/ledger/src/blockstore_meta.rs#L109-L113
which is a BTreeSet<Slot> for both data shreds and coding shreds:
https://github.com/anza-xyz/agave/blob/7629a152d1c7748ebc3c3a11bf62445eae4c0e02/ledger/src/blockstore_meta.rs#L116-L119
Using the BTreeSet here is expensive due to the allocations, especially in consideration that this type is constantly being serialized & deserialized as we push updates into RocksDb.
Proposed Solution
Instead of a BtreeSet, we can use a simple bit vector of fixed size. This is because we know that a block can have at most 32,768 data and coding shreds:
https://github.com/anza-xyz/agave/blob/7629a152d1c7748ebc3c3a11bf62445eae4c0e02/ledger/src/blockstore.rs#L107
https://github.com/anza-xyz/agave/blob/7629a152d1c7748ebc3c3a11bf62445eae4c0e02/ledger/src/shred/shred_code.rs#L14
Thus, we can instead use a [u8; 4,096] for each data shred and coding shred. Compared to the current BTreeSet, the break even point in disk footprint would be 512 elements (if we ignore the cost of pointers). That is,
4096 bytes == 8 bytes / u64 * 512

Current MNB usage exceeds this so we'll easily break even on disk footprint, but the real winnings will be reduced allocations and time to serialize / deserialize.
One tricky thing will be rolling this change out. We can obviously just start writing to a new column in some new version (say v2.2). However, if an operator has to roll back to v2.1 (which is unaware that the index is being written to new column), we're likely to hit consistency issues. This will probably need more thought, but some possible ideas are:

Write both columns in the version that this change is introduced in

Maybe have CLI flag to disable writing to the old column so that we can avoid the extra I/O once the cluster has fully progressed to new version

Write a "converter" that runs at startup to populate old index column from new index column

This would obviously need to live in the old version (v2.1 in above example)
Workload could be reduced here since the index column is not accessed once a shred is full, but probably more safely once the slot has been rooted / is older than latest root

Previous Attempt
Lastly, here is an attempt I took at this a few years ago: https://github.com/solana-labs/solana/pull/18575
As the PR shows, the actual change to introduce the new column isn't bad at all. I think we just got to discussing the support-upgrade-and-downgrade problem, and then the PR went stale for likely higher importance issues

Also one quick gotcha - if you let serde handle a large array in the default manner, it will do so element by element which is horribly inefficient.

If we use a BitVec crate, we should ensure that it serializes efficiently and upstream a change if it does not
If we just do our own, something like annotating with Bytes instead of default serde impl should do the trick:

the proposed solution would write the new data structure to a new column, continuing to write the existing data structure to its same column for backwards compatibility.

New column could definitely work, and yes, still writing to the existing column would be important to allow someone to downgrade from 2.2 to 2.1 (assuming this lands in 2.2) without issue

Importantly, the serializing and writing of the existing column would be batched and executed outside of the main execution path (in a separate thread, for example).

I don't think this approach will work. If we do the serialization and write to the DB in another thread, this implies that this work would occur in a separate WriteBatch. If it occurs in a separate WriteBatch, we break the atomicity-across-column-families guarantee that is one of the main reasons for using the WriteBatch (in addition to amortizing overhead). So, the following scenario could potentially make the node unrecoverable:

Commit some new shreds with updating new (BitVec) index
Send work for old (BtreeSet) index to some other thread
Node stops for some reason (unrelated panic, operator stopped it, OOM, etc)
Operator restarts node with old version to troubleshoot

In this scenario, the SlotMeta and shreds will have been persisted, but the index in the legacy column will not have.

Write both columns in the version that this change is introduced in

Maybe have CLI flag to disable writing to the old column so that we can avoid the extra I/O once the cluster has fully progressed to new version

Write a "converter" that runs at startup to populate old index column from new index column

This would obviously need to live in the old version (v2.1 in above example)
Workload could be reduced here since the index column is not accessed once a shred is full, but probably more safely once the slot has been rooted / is older than latest root

I still think one of these approaches might be the right idea. Another option could be splitting the PR up a bit and backporting some of it. Namely:

Create a PR that introduces new column and can read from it and BP to v2.1

We'd probably try to read the old column first, but fallback to the trying to read from the new column

Create a subsequent PR that write only the new format; this is NOT BP'd to v2.1

We could swap the order to try to read new column first and then fallback to old column

Operators upgrade to v2.2 eventually and start writing + reading new format
We can then remove the read-from-new-column-and-fallback-to-old-column mechanism in v2.3 or whatever then

This would avoid the extra writing + serialization at the cost of some minimal extra reading in the transient period when we upgrade from v2.1 to v2.2

The idea here is to split the column migration across three releases such that:

Initial release simply adds support for reading the new column as a fallback case, and does no writing of the new column.
This release reads and writes the new column as its primary target, yet still understands the legacy column for fallback reads. It does no writing of the legacy column.
Once the release is considered stable and we don't anticipate a downgrade, we can remove the legacy column and its associated fallback reads.

Yep, what you repeated back is in line with what I suggested.

This ensures release 1/3 doesn't incur the overhead of serializing the new column, but can still understand and use it in the event of a downgrade.
This ensures release 2/3 doesn't incur the overhead of serializing the legacy column, but can still understand and use it, which is necessary during the partial migration period (i.e., blockstore still contains data in the legacy column format).

Correct, these two bullets repeat back the key difference in the scheme I outlined. Instead of eating the overhead of writing both columns for an extended period, we only incur the (much lesser in comparison) overhead of an extra read for a couple slots when an operator toggles version (upgrade or downgrade).


fix: Run onStart only once in EventViewModel

Fixes #589
Checklist:

[x] I have checked for PMD and check-style issues
[x] I have read the Contribution & Best practices Guide and my PR follows them.
[x] My branch is up-to-date with the Upstream development branch.

Changes: Run onStart only once in the EventViewModel and as a result stop dashboard from overriding the fragments.
Screenshots for the change:

But why is it called twice

Because I am calling it from the onStart of the Fragment.

Try onCreateView

AppCompatActivity doesn't have an onCreateView method. When I use it, then the app crashes.
First few lines of the log
07-02 14:49:47.225 9027-9027/org.fossasia.eventyay E/AndroidRuntime: FATAL EXCEPTION: main
    Process: org.fossasia.eventyay, PID: 9027
    android.view.InflateException: Binary XML file line #17: Error inflating class android.support.design.internal.NavigationMenuItemView
        at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:763)
        at android.view.LayoutInflater.inflate(LayoutInflater.java:482)
        at android.view.LayoutInflater.inflate(LayoutInflater.java:414)
        at android.support.design.internal.NavigationMenuPresenter$NormalViewHolder.<init>(NavigationMenuPresenter.java:302)
        at android.support.design.internal.NavigationMenuPresenter$NavigationMenuAdapter.onCreateViewHolder(NavigationMenuPresenter.java:402)
        at android.support.design.internal.NavigationMenuPresenter$NavigationMenuAdapter.onCreateViewHolder(NavigationMenuPresenter.java:352)
        at android.support.v7.widget.RecyclerView$Adapter.createViewHolder(RecyclerView.java:6685)
        at android.support.v7.widget.RecyclerView$Recycler.tryGetViewHolderForPositionByDeadline(RecyclerView.java:5869)
        at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:5752)
        at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:5748)
        at android.support.v7.widget.LinearLayoutManager$LayoutState.next(LinearLayoutManager.java:2232)

Then onCreate should do it

Then onCreate should do it

onCreate is called everytime the activity is created(after rotation also). The requirement is that the onStart function(defined by me) in the ViewModel should be only called once. Two ways to do it is:

call it from the constructor of the ViewModel but it is not the recommended approach.
Have a flag as I am doing.
In almost all the methods of the ViewModel we check if the data is null so that it runs only once.
for eg.

if (speakerLiveData.getValue() != null && !reload)
            return speakerLiveData;

In this case instead of null check, I am just using a boolean flag.

OK


ISS satellite location

| ISS satellite | Shows location of ISS satellite | No | Yes | Yes |

You seem to have ignored the https://github.com/public-apis/public-apis/blob/5a3903216f61708bd92cbd21297a4822783269bf/.github/CONTRIBUTING.md which tells you to squash into a single commit

You seem to have ignored the https://github.com/public-apis/public-apis/blob/5a3903216f61708bd92cbd21297a4822783269bf/.github/CONTRIBUTING.md which tells you to squash into a single commit


Window opened by it gets blocked by the browser.

This could be an Afra only issue, or a general problem for which we might be able to implement / provide a workaround?

This could be an Afra only issue, or a general problem for which we might be able to implement / provide a workaround?

Basically, the new tab can not be opened if the action is not invoked by the user (clicking a button or something) or if it is asynchronous. This is an issue because if the GeneValidator calculation isn't async (it currently works via a promise), it blocks the browser, which is probably worse.
If you want, I don't mind having a look at your implementation in afra and see if I can come up with a work around that works?

Here - https://github.com/wurmlab/afra/commit/7b6bdfd56287cebbde455ac765aaeee560d697bb.
In SequenceServer I avoid the popup problem of opening results in a new page (this stuff is in master - not released yet) by letting the browser handle it: <form method=... target="_blank">. Not sure if and how something like can be done for Afra-GV integration.
Generally reacting to 'onclick' doesn't trigger the popup issue. I wonder if instead of GV opening the new tab myself in the click handler will avoid this problem.

Basically the issue is that GV.sendToGeneValidator() is inside the getRefSeq function - which is asynchronous. As a result, GV.sendToGeneValidator() attempts to open the new tab inside a callback - which means browsers will see it as a potential pop-up. Therefore the new tab needs to be opened before the getRefSeq function.
Thus try the following.

Above the getRefSeq function, open the loading page and assign it to a variable. As this will be directly linked to the user click (i.e. outside the refseq function), and so will (hopefully) open instantly.

Next, Run the getRefSeq function, in which you would call the  GV.sendToGeneValidator() function. Change this slightly, so that you return the url of the results file.

Then change the url of the already open tab to the results page.

var loadingUrl = 'http://genevalidator.sbcs.qmul.ac.uk/GeneValidator/loading.html';
var resultsPage = window.open(loading_url, '_blank');

var finalResultsUrl = '';
this.getRefSeq(function (refSeq) {
    ...
    finalResultsUrl = GV.sendToGeneValidator('http://genevalidator.sbcs.qmul.ac.uk', fasta.join("\n"), 'SwissProt', 'all', 'results_url' );
});

results_page.location.href = finalResultsUrl

I haven’t tried this - so all I can say is that this should work but let me know either way and we can go from there.
Also note, I’ve change the db name to ‘SwissProt’ since we currently don’t host ‘nr' on http://genevalidator.sbcs.qmul.ac.uk - as the BLASt is running on the nuc.
I’ll add this to the documentation when I get a chance.

Thanks. Seems like it will work, but need the promise from gvapi to harvest the result url (#8).
If gvapi returned the promise, I could have done something like: GV.sendToGeneValidator(...).then(function (url) { resultsPage.location.href = url; })


fix(app): fix devtools hidden condition

Overview
This pr removes the inspector from actions and use another option

Changelog

[ ] fix electron-context-menu option

Review requests

[ ] when disable dev tools and doing right-click, context menu doesn't show inspect elements item

Risk assessment
low

This should be fixed by #11232


Scenario Outline results show only one fail in execution details

Given example:
I run one Scenario Outline with 3 examples. I have deliberately put failing examples in 2 of the 3 examples. After the test only 1 screenshot is shown and the 3 examples have status "To do" as shown in the screenshot.

Hey @alexviz7,
thanks for the issue. This will be fixed once #104 is merged and version 4.0.0 is released. I will ping you once it's done.

Hi has the version 4.0.0 fixed the issues?

Hey @alexviz7,
yes, it should have fixed it. I tried summarizing all breaking changes in the [changelog]. Please let me know if something's not working, I had to change a lot of stuff.

check issue #132

Seems fixed as it shows more then one fail (note I have a fast fail set to 2 fails).

Thank you very much! I'm glad it's working now.


lint: Escape backslash separators

This change escapes the backslash separator between ServerName\ShareName and DomainName\UserName. Because this was not escaped, it was causing one of the <i> tags to show, instead of the slash itself.
TODO:

[ ] Escape the same backslashes in the CredUIPromptForCredentialsA doc

@Chris-Johnston : Thanks for your contribution! The author(s) have been notified to review your proposed change.

Thanks for your contribution, I've merged your changes and they should be live soon.

Thanks @lastnameholiu ! I was going to go back and fix this same issue in the CredUIPromptForCredentialsA doc too, I guess I'll just do it in another PR.


[BUG] Azure Cosmos DB Spark connector doesn't work within StreamingQueryListener

Describe the bug
I have the following lines of code:
val cfgCheckpointUpdate = Map("spark.cosmos.accountEndpoint" -> cosmosDbEndpoint,
  "spark.cosmos.accountKey" -> cosmosMasterKey,
  "spark.cosmos.database" -> simpleMessageDataBaseName,
  "spark.cosmos.container" -> simpleMessageCheckpointContainerName,
  "spark.cosmos.write.strategy" -> "ItemOverwrite",
  "spark.cosmos.write.bulk.enabled" -> "false"
)

val endOffsetDF = spark.createDataFrame(List(("1", 1, 1), ("2", 2, 2))).toDF("id", "partition", "sequence")
endOffsetDF.write.format("cosmos.oltp").mode("Append").options(cfgCheckpointUpdate).save()

It works when running independently. However, when I run this code under the onQueryProgress method under StreamingQueryListener class, it always failed with java.lang.ClassNotFoundException:  Failed to find data source: cosmos.oltp.
class CheckpointStreamingQueryListener(sparkSession: SparkSession) extends StreamingQueryListener {
  private val _sparkSession = sparkSession

  override def onQueryStarted(queryStarted: QueryStartedEvent): Unit = {
      log("Query started:" + queryStarted.name + ", " + queryStarted.id)
    }
  override def onQueryTerminated(queryTerminated: QueryTerminatedEvent): Unit = {
    log("Query terminated" + queryTerminated.id)
  }
  override def onQueryProgress(queryProgress: QueryProgressEvent): Unit = {
    log("Query made progress")
    log(queryProgress.progress.name + " Starting offset:" + queryProgress.progress.sources(0).startOffset)
    log(queryProgress.progress.name + " Ending offset:" + queryProgress.progress.sources(0).endOffset)
    log(queryProgress.progress.name + " Source Progress json:" + queryProgress.progress.sources(0).json)

    try {
      val endOffsetDF = spark.createDataFrame(List(("1", 1, 1), ("2", 2, 2))).toDF("id", "partition", "sequence")
      endOffsetDF.write.format("cosmos.oltp").mode("Append").options(cfgCheckpointUpdate).save()

      log("Save checkpoint to CosmosDB successuflly")
    }
    catch {
        case e: Exception => logError(e)
    }

  }
}

val checkpointListener = new CheckpointStreamingQueryListener(spark)
spark.streams.addListener(checkpointListener)

Exception or Stack Trace
When running under StreamingQueryListener , it always throw the following exception
22/11/10 20:06:15 ERROR SimpleMessage: java.lang.ClassNotFoundException:
Failed to find data source: cosmos.oltp. Please find packages at
http://spark.apache.org/third-party-projects.html

	at org.apache.spark.sql.errors.QueryExecutionErrors$.failedToFindDataSourceError(QueryExecutionErrors.scala:557)
	at org.apache.spark.sql.execution.datasources.DataSource$.lookupDataSource(DataSource.scala:758)
	at org.apache.spark.sql.execution.datasources.DataSource$.lookupDataSourceV2(DataSource.scala:808)
	at org.apache.spark.sql.DataFrameWriter.lookupV2Provider(DataFrameWriter.scala:983)
	at org.apache.spark.sql.DataFrameWriter.saveInternal(DataFrameWriter.scala:293)
	at org.apache.spark.sql.DataFrameWriter.save(DataFrameWriter.scala:258)
	at $line30c174df9d51425c8f2cd0b5a64f2da645.$read$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$CheckpointStreamingQueryListener.onQueryProgress(command-2268690423197522:54)
	at org.apache.spark.sql.execution.streaming.StreamingQueryListenerBus.doPostEvent(StreamingQueryListenerBus.scala:138)
	at org.apache.spark.sql.execution.streaming.StreamingQueryListenerBus.doPostEvent(StreamingQueryListenerBus.scala:43)
	at org.apache.spark.util.ListenerBus.postToAll(ListenerBus.scala:118)
	at org.apache.spark.util.ListenerBus.postToAll$(ListenerBus.scala:102)
	at org.apache.spark.sql.execution.streaming.StreamingQueryListenerBus.postToAll(StreamingQueryListenerBus.scala:91)
	at org.apache.spark.sql.execution.streaming.StreamingQueryListenerBus.onOtherEvent(StreamingQueryListenerBus.scala:111)
	at org.apache.spark.scheduler.SparkListenerBus.doPostEvent(SparkListenerBus.scala:102)
	at org.apache.spark.scheduler.SparkListenerBus.doPostEvent$(SparkListenerBus.scala:28)
	at org.apache.spark.scheduler.AsyncEventQueue.doPostEvent(AsyncEventQueue.scala:37)
	at org.apache.spark.scheduler.AsyncEventQueue.doPostEvent(AsyncEventQueue.scala:37)
	at org.apache.spark.util.ListenerBus.postToAll(ListenerBus.scala:118)
	at org.apache.spark.util.ListenerBus.postToAll$(ListenerBus.scala:102)
	at org.apache.spark.scheduler.AsyncEventQueue.super$postToAll(AsyncEventQueue.scala:105)
	at org.apache.spark.scheduler.AsyncEventQueue.$anonfun$dispatch$1(AsyncEventQueue.scala:105)
	at scala.runtime.java8.JFunction0$mcJ$sp.apply(JFunction0$mcJ$sp.java:23)
	at scala.util.DynamicVariable.withValue(DynamicVariable.scala:62)
	at org.apache.spark.scheduler.AsyncEventQueue.org$apache$spark$scheduler$AsyncEventQueue$$dispatch(AsyncEventQueue.scala:100)
	at org.apache.spark.scheduler.AsyncEventQueue$$anon$2.$anonfun$run$1(AsyncEventQueue.scala:96)
	at org.apache.spark.util.Utils$.tryOrStopSparkContext(Utils.scala:1623)
	at org.apache.spark.scheduler.AsyncEventQueue$$anon$2.run(AsyncEventQueue.scala:96)
Caused by: java.lang.ClassNotFoundException: cosmos.oltp.DefaultSource
	at java.net.URLClassLoader.findClass(URLClassLoader.java:382)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:419)
	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:352)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:352)
	at org.apache.spark.sql.execution.datasources.DataSource$.$anonfun$lookupDataSource$5(DataSource.scala:744)
	at scala.util.Try$.apply(Try.scala:213)
	at org.apache.spark.sql.execution.datasources.DataSource$.$anonfun$lookupDataSource$4(DataSource.scala:744)
	at scala.util.Failure.orElse(Try.scala:224)
	at org.apache.spark.sql.execution.datasources.DataSource$.lookupDataSource(DataSource.scala:744)
	... 25 more

To Reproduce
Run the code under StreamingQueryListener
Code Snippet
See above
Expected behavior
The write call should work even within StreamingQueryListener
Screenshots
n/a
Setup (please complete the following information):

OS: Linux
IDE: Azure Databrick Notebook
Library/Libraries: com.microsoft.azure:azure-eventhubs-spark_2.12:2.3.22, com.azure.cosmos.spark:azure-cosmos-spark_3-2_2-12:4.13.1
Java version: 8
App Server/Environment: Databricks 10.4 LTS (includes Apache Spark 3.2.1, Scala 2.12)
Frameworks: Apache Spark

If you suspect a dependency version mismatch (e.g. you see NoClassDefFoundError, NoSuchMethodError or similar), please check out Troubleshoot dependency version conflict article first. If it doesn't provide solution for the problem, please provide:

verbose dependency tree (mvn dependency:tree -Dverbose)
exception message, full stack trace, and any available logs

Additional context
Add any other context about the problem here.
Information Checklist
Kindly make sure that you have added all the following information above and checkoff the required fields otherwise we will treat the issuer as an incomplete report

[x] Bug Description Added
[x] Repro Steps Added
[x] Setup information Added

I expect that it will work when using "com.azure.cosmos.spark.CosmosItemsDataSource" instead of "cosmos.oltp". The "cosmos.oltp" is a shorter alias that is defined in the DataSource - but it looks like Spark is not considering the alias in this case.

I am having similar issue and followed your suggestions Fabian, I am however getting a 404 error from CosmosDB now where it is not able to create the collection.
Caused by: org.apache.spark.SparkException: Job aborted due to stage failure: Task 0 in stage 16.0 failed 4 times, most recent failure: Lost task 0.3 in stage 16.0 (TID 18) (<IP_ADDRESS> executor 0): {"ClassName":"CosmosException","userAgent":"azsdk-java-cosmos/4.40.0 Linux/5.4.0-1090-azure JRE/1.8.0_345","statusCode":404,"resourceAddress":"https://feathrazuretest3-cosmosdb-westus.documents.azure.com:443/dbs/feathr/colls/feathrazure_cijob_materialize__6_56","error":"{"code":"NotFound","message":"Message: {\"Errors\":[\"Resource Not Found. Learn more: https:\\/\\/aka.ms\\/cosmosdb-tsg-not-found\"]}\r\nActivityId: 6ac60bd0-c184-4b9f-9045-f9dda4a7905f, Request URI: /apps/02081c9d-0df4-4ee1-9d2e-1bcb5b53c4fe/services/7ebe558b-1e49-4fff-a896-36b3f6ff5d49/partitions/5b42a7ad-3414-4249-a47b-9db83694a16f/replicas/133040658095713030s, RequestStats: \r\nRequestStartTime: 2023-01-23T19:11:53.1093107Z, RequestEndTime: 2023-01-23T19:11:53.1093107Z,  Number of regions attempted:1\r\n{\"systemHistory\":[{\"dateUtc\":\"2023-01-23T19:10:52.6095777Z\",\"cpu\":1.069,\"memory\":661485364.000,\"threadInfo\":{\"isThreadStarving\":\"False\",\"threadWaitIntervalInMs\":0.0204,\"availableThreads\":32763,\"minThreads\":64,\"maxThreads\":32767},\"numberOfOpenTcpConnection\":330},{\"dateUtc\":\"2023-01-23T19:11:02.6195330Z\",\"cpu\":0.822,\"memory\":661770492.000,\"threadInfo\":{\"isThreadStarving\":\"False\",\"threadWaitIntervalInMs\":0.0174,\"availableThreads\":32764,\"minThreads\":64,\"maxThreads\":32767},\"numberOfOpenTcpConnection\":329},{\"dateUtc\":\"2023-01-23T19:11:12.6294881Z\",\"cpu\":0.908,\"memory\":661762356.000,\"threadInfo\":{\"isThreadStarving\":\"False\",\"threadWaitIntervalInMs\":0.0251,\"availableThreads\":32764,\"minThreads\":64,\"maxThreads\":32767},\"numberOfOpenTcpConnection\":329},{\"dateUtc\":\"2023-01-23T19:11:22.6394436Z\",\"cpu\":0.800,\"memory\":661739688.000,\"threadInfo\":{\"isThreadStarving\":\"False\",\"threadWaitIntervalInMs\":0.0221,\"availableThreads\":32763,\"minThreads\":64,\"maxThreads\":32767},\"numberOfOpenTcpConnection\":330},{\"dateUtc\":\"2023-01-23T19:11:42.6493549Z\",\"cpu\":0.514,\"memory\":661726260.000,\"threadInfo\":{\"isThreadStarving\":\"False\",\"threadWaitIntervalInMs\":0.0229,\"availableThreads\":32764,\"minThreads\":64,\"maxThreads\":32767},\"numberOfOpenTcpConnection\":330},{\"dateUtc\":\"2023-01-23T19:11:52.6593144Z\",\"cpu\":0.791,\"memory\":661710724.000,\"threadInfo\":{\"isThreadStarving\":\"False\",\"threadWaitIntervalInMs\":0.0134,\"availableThreads\":32763,\"minThreads\":64,\"maxThreads\":32767},\"numberOfOpenTcpConnection\":330}]}\r\nRequestStart: 2023-01-23T19:11:53.1093107Z; ResponseTime: 2023-01-23T19:11:53.1093107Z; StoreResult: StorePhysicalAddress: rntbd://<IP_ADDRESS>:11000/apps/02081c9d-0df4-4ee1-9d2e-1bcb5b53c4fe/services/7ebe558b-1e49-4fff-a896-36b3f6ff5d49/partitions/5b42a7ad-3414-4249-a47b-9db83694a16f/replicas/133040658095713030s, LSN: 2933, GlobalCommittedLsn: 2933, PartitionKeyRangeId: , IsValid: True, StatusCode: 404, SubStatusCode: 0, RequestCharge: 1, ItemLSN: -1, SessionToken: -1#2933, UsingLocalLSN: False, TransportException: null, BELatencyMs: 0.217, ActivityId: 6ac60bd0-c184-4b9f-9045-f9dda4a7905f, RetryAfterInMs: , TransportRequestTimeline: {\"requestTimeline\":[{\"event\": \"Created\", \"startTimeUtc\": \"2023-01-23T19:11:53.1093107Z\", \"durationInMs\": 0.0118},{\"event\": \"ChannelAcquisitionStarted\", \"startTimeUtc\": \"2023-01-23T19:11:53.1093225Z\", \"durationInMs\": 0.0024},{\"event\": \"Pipelined\", \"startTimeUtc\": \"2023-01-23T19:11:53.1093249Z\", \"durationInMs\": 0.072},{\"event\": \"Transit Time\", \"startTimeUtc\": \"2023-01-23T19:11:53.1093969Z\", \"durationInMs\": 0.4943},{\"event\": \"Received\", \"startTimeUtc\": \"2023-01-23T19:11:53.1098912Z\", \"durationInMs\": 0.0594},{\"event\": \"Completed\", \"startTimeUtc\": \"2023-01-23T19:11:53.1099506Z\", \"durationInMs\": 0}],\"serviceEndpointStats\":{\"inflightRequests\":1,\"openConnections\":1},\"connectionStats\":{\"waitforConnectionInit\":\"False\",\"callsPendingReceive\":0,\"lastSendAttempt\":\"2023-01-23T19:11:52.9293116Z\",\"lastSend\":\"2023-01-23T19:11:52.9293116Z\",\"lastReceive\":\"2023-01-23T19:11:52.9293116Z\"},\"requestSizeInBytes\":501,\"responseMetadataSizeInBytes\":137,\"responseBodySizeInBytes\":87};\r\n ResourceType: Collection, OperationType: Read\r\nRequestStart: 2023-01-23T19:11:53.1093107Z; ResponseTime: 2023-01-23T19:11:53.1093107Z; StoreResult: StorePhysicalAddress: rntbd://<IP_ADDRESS>:11000/apps/02081c9d-0df4-4ee1-9d2e-1bcb5b53c4fe/services/7ebe558b-1e49-4fff-a896-36b3f6ff5d49/partitions/5b42a7ad-3414-4249-a47b-9db83694a16f/replicas/133040658095713028s, LSN: 2933, GlobalCommittedLsn: 2933, PartitionKeyRangeId: , IsValid: True, StatusCode: 404, SubStatusCode: 0, RequestCharge: 1, ItemLSN: -1, SessionToken: -1#2933, UsingLocalLSN: False, TransportException: null, BELatencyMs: 0.26, ActivityId: 6ac60bd0-c184-4b9f-9045-f9dda4a7905f, RetryAfterInMs: , TransportRequestTimeline: {\"requestTimeline\":[{\"event\": \"Created\", \"startTimeUtc\": \"2023-01-23T19:11:53.1093107Z\", \"durationInMs\": 0.0038},{\"event\": \"ChannelAcquisitionStarted\", \"startTimeUtc\": \"2023-01-23T19:11:53.1093145Z\", \"durationInMs\": 0.0011},{\"event\": \"Pipelined\", \"startTimeUtc\": \"2023-01-23T19:11:53.1093156Z\", \"durationInMs\": 0.0569},{\"event\": \"Transit Time\", \"startTimeUtc\": \"2023-01-23T19:11:53.1093725Z\", \"durationInMs\": 0.5279},{\"event\": \"Received\", \"startTimeUtc\": \"2023-01-23T19:11:53.1099004Z\", \"durationInMs\": 0.0486},{\"event\": \"Completed\", \"startTimeUtc\": \"2023-01-23T19:11:53.1099490Z\", \"durationInMs\": 0}],\"serviceEndpointStats\":{\"inflightRequests\":1,\"openConnections\":1},\"connectionStats\":{\"waitforConnectionInit\":\"False\",\"callsPendingReceive\":0,\"lastSendAttempt\":\"2023-01-23T19:11:52.7493113Z\",\"lastSend\":\"2023-01-23T19:11:52.7493113Z\",\"lastReceive\":\"2023-01-23T19:11:52.7493113Z\"},\"requestSizeInBytes\":501,\"responseMetadataSizeInBytes\":137,\"responseBodySizeInBytes\":87};\r\n ResourceType: Collection, OperationType: Read\r\n, SDK: Microsoft.Azure.Documents.Common/2.14.0, StatusCode: NotFound","additionalErrorInfo":null}","innerErrorMessage":"Message: {"Errors":["Resource Not Found. Learn more: https:\/\/aka.ms\/cosmosdb-tsg-not-found"]}\r\nActivityId: 6ac60bd0-c184-4b9f-9045-f9dda4a7905f, Request URI: /apps/02081c9d-0df4-4ee1-9d2e-1bcb5b53c4fe/services/7ebe558b-1e49-4fff-a896-36b3f6ff5d49/partitions/5b42a7ad-3414-4249-a47b-9db83694a16f/replicas/133040658095713030s, RequestStats: \r\nRequestStartTime: 2023-01-23T19:11:53.1093107Z, RequestEndTime: 2023-01-23T19:11:53.1093107Z,  Number of regions attempted:1\r\n{"systemHistory":[{"dateUtc":"2023-01-23T19:10:52.6095777Z","cpu":1.069,"memory":661485364.000,"threadInfo":{"isThreadStarving":"False","threadWaitIntervalInMs":0.0204,"availableThreads":32763,"minThreads":64,"maxThreads":32767},"numberOfOpenTcpConnection":330},{"dateUtc":"2023-01-23T19:11:02.6195330Z","cpu":0.822,"memory":661770492.000,"threadInfo":{"isThreadStarving":"False","threadWaitIntervalInMs":0.0174,"availableThreads":32764,"minThreads":64,"maxThreads":32767},"numberOfOpenTcpConnection":329},{"dateUtc":"2023-01-23T19:11:12.6294881Z","cpu":0.908,"memory":661762356.000,"threadInfo":{"isThreadStarving":"False","threadWaitIntervalInMs":0.0251,"availableThreads":32764,"minThreads":64,"maxThreads":32767},"numberOfOpenTcpConnection":329},{"dateUtc":"2023-01-23T19:11:22.6394436Z","cpu":0.800,"memory":661739688.000,"threadInfo":{"isThreadStarving":"False","threadWaitIntervalInMs":0.0221,"availableThreads":32763,"minThreads":64,"maxThreads":32767},"numberOfOpenTcpConnection":330},{"dateUtc":"2023-01-23T19:11:42.6493549Z","cpu":0.514,"memory":661726260.000,"threadInfo":{"isThreadStarving":"False","threadWaitIntervalInMs":0.0229,"availableThreads":32764,"minThreads":64,"maxThreads":32767},"numberOfOpenTcpConnection":330},{"dateUtc":"2023-01-23T19:11:52.6593144Z","cpu":0.791,"memory":661710724.000,"threadInfo":{"isThreadStarving":"False","threadWaitIntervalInMs":0.0134,"availableThreads":32763,"minThreads":64,"maxThreads":32767},"numberOfOpenTcpConnection":330}]}\r\nRequestStart: 2023-01-23T19:11:53.1093107Z; ResponseTime: 2023-01-23T19:11:53.1093107Z; StoreResult: StorePhysicalAddress: rntbd://<IP_ADDRESS>:11000/apps/02081c9d-0df4-4ee1-9d2e-1bcb5b53c4fe/services/7ebe558b-1e49-4fff-a896-36b3f6ff5d49/partitions/5b42a7ad-3414-4249-a47b-9db83694a16f/replicas/133040658095713030s, LSN: 2933, GlobalCommittedLsn: 2933, PartitionKeyRangeId: , IsValid: True, StatusCode: 404, SubStatusCode: 0, RequestCharge: 1, ItemLSN: -1, SessionToken: -1#2933, UsingLocalLSN: False, TransportException: null, BELatencyMs: 0.217, ActivityId: 6ac60bd0-c184-4b9f-9045-f9dda4a7905f, RetryAfterInMs: , TransportRequestTimeline: {"requestTimeline":[{"event": "Created", "startTimeUtc": "2023-01-23T19:11:53.1093107Z", "durationInMs": 0.0118},{"event": "ChannelAcquisitionStarted", "startTimeUtc": "2023-01-23T19:11:53.1093225Z", "durationInMs": 0.0024},{"event": "Pipelined", "startTimeUtc": "2023-01-23T19:11:53.1093249Z", "durationInMs": 0.072},{"event": "Transit Time", "startTimeUtc": "2023-01-23T19:11:53.1093969Z", "durationInMs": 0.4943},{"event": "Received", "startTimeUtc": "2023-01-23T19:11:53.1098912Z", "durationInMs": 0.0594},{"event": "Completed", "startTimeUtc": "2023-01-23T19:11:53.1099506Z", "durationInMs": 0}],"serviceEndpointStats":{"inflightRequests":1,"openConnections":1},"connectionStats":{"waitforConnectionInit":"False","callsPendingReceive":0,"lastSendAttempt":"2023-01-23T19:11:52.9293116Z","lastSend":"2023-01-23T19:11:52.9293116Z","lastReceive":"2023-01-23T19:11:52.9293116Z"},"requestSizeInBytes":501,"responseMetadataSizeInBytes":137,"responseBodySizeInBytes":87};\r\n ResourceType: Collection, OperationType: Read\r\nRequestStart: 2023-01-23T19:11:53.1093107Z; ResponseTime: 2023-01-23T19:11:53.1093107Z; StoreResult: StorePhysicalAddress: rntbd://<IP_ADDRESS>:11000/apps/02081c9d-0df4-4ee1-9d2e-1bcb5b53c4fe/services/7ebe558b-1e49-4fff-a896-36b3f6ff5d49/partitions/5b42a7ad-3414-4249-a47b-9db83694a16f/replicas/133040658095713028s, LSN: 2933, GlobalCommittedLsn: 2933, PartitionKeyRangeId: , IsValid: True, StatusCode: 404, SubStatusCode: 0, RequestCharge: 1, ItemLSN: -1, SessionToken: -1#2933, UsingLocalLSN: False, TransportException: null, BELatencyMs: 0.26, ActivityId: 6ac60bd0-c184-4b9f-9045-f9dda4a7905f, RetryAfterInMs: , TransportRequestTimeline: {"requestTimeline":[{"event": "Created", "startTimeUtc": "2023-01-23T19:11:53.1093107Z", "durationInMs": 0.0038},{"event": "ChannelAcquisitionStarted", "startTimeUtc": "2023-01-23T19:11:53.1093145Z", "durationInMs": 0.0011},{"event": "Pipelined", "startTimeUtc": "2023-01-23T19:11:53.1093156Z", "durationInMs": 0.0569},{"event": "Transit Time", "startTimeUtc": "2023-01-23T19:11:53.1093725Z", "durationInMs": 0.5279},{"event": "Received", "startTimeUtc": "2023-01-23T19:11:53.1099004Z", "durationInMs": 0.0486},{"event": "Completed", "startTimeUtc": "2023-01-23T19:11:53.1099490Z", "durationInMs": 0}],"serviceEndpointStats":{"inflightRequests":1,"openConnections":1},"connectionStats":{"waitforConnectionInit":"False","callsPendingReceive":0,"lastSendAttempt":"2023-01-23T19:11:52.7493113Z","lastSend":"2023-01-23T19:11:52.7493113Z","lastReceive":"2023-01-23T19:11:52.7493113Z"},"requestSizeInBytes":501,"responseMetadataSizeInBytes":137,"responseBodySizeInBytes":87};\r\n ResourceType: Collection, OperationType: Read\r\n, SDK: Microsoft.Azure.Documents.Common/2.14.0, StatusCode: NotFound","causeInfo":null,"responseHeaders":"{Transfer-Encoding=chunked, x-ms-last-state-change-utc=Thu, 12 Jan 2023 02:54:46.159 GMT, Server=Microsoft-HTTPAPI/2.0, x-ms-request-duration-ms=0.217, x-ms-session-token=0:-1#2933, lsn=2933, x-ms-request-charge=2, Content-Location=https://feathrazuretest3-cosmosdb-westus.documents.azure.com/dbs/feathr/colls/feathrazure_cijob_materialize__6_56, x-ms-schemaversion=1.15, x-ms-transport-request-id=195568, x-ms-number-of-read-regions=0, Date=Mon, 23 Jan 2023 19:11:52 GMT, x-ms-activity-id=6ac60bd0-c184-4b9f-9045-f9dda4a7905f, Strict-Transport-Security=max-age=31536000, x-ms-xp-role=1, x-ms-global-Committed-lsn=2933, x-ms-cosmos-llsn=2933, x-ms-gatewayversion=version=2.14.0, x-ms-serviceversion=version=<IP_ADDRESS>, Content-Type=application/json}","requestHeaders":"[x-ms-cosmos-sdk-supportedcapabilities=1, Accept=application/json, x-ms-date=Mon, 23 Jan 2023 19:11:53 GMT, x-ms-consistency-level=Eventual]","cosmosDiagnostics":{"userAgent":"azsdk-java-cosmos/4.40.0 Linux/5.4.0-1090-azure JRE/1.8.0_345","activityId":"6ac60bd0-c184-4b9f-9045-f9dda4a7905f","requestLatencyInMs":130,"requestStartTimeUTC":"2023-01-23T19:11:53.080Z","requestEndTimeUTC":"2023-01-23T19:11:53.210Z","responseStatisticsList":[],"supplementalResponseStatisticsList":[],"addressResolutionStatistics":{},"regionsContacted":["west us"],"retryContext":{"statusAndSubStatusCodes":null,"retryCount":0,"retryLatency":0},"metadataDiagnosticsContext":{"metadataDiagnosticList":null},"serializationDiagnosticsContext":{"serializationDiagnosticsList":null},"gatewayStatistics":{"sessionToken":"0:-1#2933","operationType":"Read","resourceType":"DocumentCollection","statusCode":404,"subStatusCode":0,"requestCharge":2.0,"requestTimeline":[{"eventName":"connectionAcquired","startTimeUTC":"2023-01-23T19:11:53.080Z","durationInMilliSecs":1.0},{"eventName":"connectionConfigured","startTimeUTC":"2023-01-23T19:11:53.081Z","durationInMilliSecs":0.0},{"eventName":"requestSent","startTimeUTC":"2023-01-23T19:11:53.081Z","durationInMilliSecs":1.0},{"eventName":"transitTime","startTimeUTC":"2023-01-23T19:11:53.082Z","durationInMilliSecs":66.0},{"eventName":"received","startTimeUTC":"2023-01-23T19:11:53.148Z","durationInMilliSecs":62.0}],"partitionKeyRangeId":null,"exceptionMessage":"Message: {"Errors":["Resource Not Found. Learn more: https:\/\/aka.ms\/cosmosdb-tsg-not-found"]}\r\nActivityId: 6ac60bd0-c184-4b9f-9045-f9dda4a7905f, Request URI: /apps/02081c9d-0df4-4ee1-9d2e-1bcb5b53c4fe/services/7ebe558b-1e49-4fff-a896-36b3f6ff5d49/partitions/5b42a7ad-3414-4249-a47b-9db83694a16f/replicas/133040658095713030s, RequestStats: \r\nRequestStartTime: 2023-01-23T19:11:53.1093107Z, RequestEndTime: 2023-01-23T19:11:53.1093107Z,  Number of regions attempted:1\r\n{"systemHistory":[{"dateUtc":"2023-01-23T19:10:52.6095777Z","cpu":1.069,"memory":661485364.000,"threadInfo":{"isThreadStarving":"False","threadWaitIntervalInMs":0.0204,"availableThreads":32763,"minThreads":64,"maxThreads":32767},"numberOfOpenTcpConnection":330},{"dateUtc":"2023-01-23T19:11:02.6195330Z","cpu":0.822,"memory":661770492.000,"threadInfo":{"isThreadStarving":"False","threadWaitIntervalInMs":0.0174,"availableThreads":32764,"minThreads":64,"maxThreads":32767},"numberOfOpenTcpConnection":329},{"dateUtc":"2023-01-23T19:11:12.6294881Z","cpu":0.908,"memory":661762356.000,"threadInfo":{"isThreadStarving":"False","threadWaitIntervalInMs":0.0251,"availableThreads":32764,"minThreads":64,"maxThreads":32767},"numberOfOpenTcpConnection":329},{"dateUtc":"2023-01-23T19:11:22.6394436Z","cpu":0.800,"memory":661739688.000,"threadInfo":{"isThreadStarving":"False","threadWaitIntervalInMs":0.0221,"availableThreads":32763,"minThreads":64,"maxThreads":32767},"numberOfOpenTcpConnection":330},{"dateUtc":"2023-01-23T19:11:42.6493549Z","cpu":0.514,"memory":661726260.000,"threadInfo":{"isThreadStarving":"False","threadWaitIntervalInMs":0.0229,"availableThreads":32764,"minThreads":64,"maxThreads":32767},"numberOfOpenTcpConnection":330},{"dateUtc":"2023-01-23T19:11:52.6593144Z","cpu":0.791,"memory":661710724.000,"threadInfo":{"isThreadStarving":"False","threadWaitIntervalInMs":0.0134,"availableThreads":32763,"minThreads":64,"maxThreads":32767},"numberOfOpenTcpConnection":330}]}\r\nRequestStart: 2023-01-23T19:11:53.1093107Z; ResponseTime: 2023-01-23T19:11:53.1093107Z; StoreResult: StorePhysicalAddress: rntbd://<IP_ADDRESS>:11000/apps/02081c9d-0df4-4ee1-9d2e-1bcb5b53c4fe/services/7ebe558b-1e49-4fff-a896-36b3f6ff5d49/partitions/5b42a7ad-3414-4249-a47b-9db83694a16f/replicas/133040658095713030s, LSN: 2933, GlobalCommittedLsn: 2933, PartitionKeyRangeId: , IsValid: True, StatusCode: 404, SubStatusCode: 0, RequestCharge: 1, ItemLSN: -1, SessionToken: -1#2933, UsingLocalLSN: False, TransportException: null, BELatencyMs: 0.217, ActivityId: 6ac60bd0-c184-4b9f-9045-f9dda4a7905f, RetryAfterInMs: , TransportRequestTimeline: {"requestTimeline":[{"event": "Created", "startTimeUtc": "2023-01-23T19:11:53.1093107Z", "durationInMs": 0.0118},{"event": "ChannelAcquisitionStarted", "startTimeUtc": "2023-01-23T19:11:53.1093225Z", "durationInMs": 0.0024},{"event": "Pipelined", "startTimeUtc": "2023-01-23T19:11:53.1093249Z", "durationInMs": 0.072},{"event": "Transit Time", "startTimeUtc": "2023-01-23T19:11:53.1093969Z", "durationInMs": 0.4943},{"event": "Received", "startTimeUtc": "2023-01-23T19:11:53.1098912Z", "durationInMs": 0.0594},{"event": "Completed", "startTimeUtc": "2023-01-23T19:11:53.1099506Z", "durationInMs": 0}],"serviceEndpointStats":{"inflightRequests":1,"openConnections":1},"connectionStats":{"waitforConnectionInit":"False","callsPendingReceive":0,"lastSendAttempt":"2023-01-23T19:11:52.9293116Z","lastSend":"2023-01-23T19:11:52.9293116Z","lastReceive":"2023-01-23T19:11:52.9293116Z"},"requestSizeInBytes":501,"responseMetadataSizeInBytes":137,"responseBodySizeInBytes":87};\r\n ResourceType: Collection, OperationType: Read\r\nRequestStart: 2023-01-23T19:11:53.1093107Z; ResponseTime: 2023-01-23T19:11:53.1093107Z; StoreResult: StorePhysicalAddress: rntbd://<IP_ADDRESS>:11000/apps/02081c9d-0df4-4ee1-9d2e-1bcb5b53c4fe/services/7ebe558b-1e49-4fff-a896-36b3f6ff5d49/partitions/5b42a7ad-3414-4249-a47b-9db83694a16f/replicas/133040658095713028s, LSN: 2933, GlobalCommittedLsn: 2933, PartitionKeyRangeId: , IsValid: True, StatusCode: 404, SubStatusCode: 0, RequestCharge: 1, ItemLSN: -1, SessionToken: -1#2933, UsingLocalLSN: False, TransportException: null, BELatencyMs: 0.26, ActivityId: 6ac60bd0-c184-4b9f-9045-f9dda4a7905f, RetryAfterInMs: , TransportRequestTimeline: {"requestTimeline":[{"event": "Created", "startTimeUtc": "2023-01-23T19:11:53.1093107Z", "durationInMs": 0.0038},{"event": "ChannelAcquisitionStarted", "startTimeUtc": "2023-01-23T19:11:53.1093145Z", "durationInMs": 0.0011},{"event": "Pipelined", "startTimeUtc": "2023-01-23T19:11:53.1093156Z", "durationInMs": 0.0569},{"event": "Transit Time", "startTimeUtc": "2023-01-23T19:11:53.1093725Z", "durationInMs": 0.5279},{"event": "Received", "startTimeUtc": "2023-01-23T19:11:53.1099004Z", "durationInMs": 0.0486},{"event": "Completed", "startTimeUtc": "2023-01-23T19:11:53.1099490Z", "durationInMs": 0}],"serviceEndpointStats":{"inflightRequests":1,"openConnections":1},"connectionStats":{"waitforConnectionInit":"False","callsPendingReceive":0,"lastSendAttempt":"2023-01-23T19:11:52.7493113Z","lastSend":"2023-01-23T19:11:52.7493113Z","lastReceive":"2023-01-23T19:11:52.7493113Z"},"requestSizeInBytes":501,"responseMetadataSizeInBytes":137,"responseBodySizeInBytes":87};\r\n ResourceType: Collection, OperationType: Read\r\n, SDK: Microsoft.Azure.Documents.Common/2.14.0, StatusCode: NotFound","exceptionResponseHeaders":"{Transfer-Encoding=chunked, x-ms-last-state-change-utc=Thu, 12 Jan 2023 02:54:46.159 GMT, Server=Microsoft-HTTPAPI/2.0, x-ms-request-duration-ms=0.217, x-ms-session-token=0:-1#2933, lsn=2933, x-ms-request-charge=2, Content-Location=https://feathrazuretest3-cosmosdb-westus.documents.azure.com/dbs/feathr/colls/feathrazure_cijob_materialize__6_56, x-ms-schemaversion=1.15, x-ms-transport-request-id=195568, x-ms-number-of-read-regions=0, Date=Mon, 23 Jan 2023 19:11:52 GMT, x-ms-activity-id=6ac60bd0-c184-4b9f-9045-f9dda4a7905f, Strict-Transport-Security=max-age=31536000, x-ms-xp-role=1, x-ms-global-Committed-lsn=2933, x-ms-cosmos-llsn=2933, x-ms-gatewayversion=version=2.14.0, x-ms-serviceversion=version=<IP_ADDRESS>, Content-Type=application/json}"},"systemInformation":{"usedMemory":"346517 KB","availableMemory":"2528363 KB","systemCpuLoad":"(2023-01-23T19:11:51.149Z 100.0%)","availableProcessors":4},"clientCfgs":{"id":1,"machineId":"vmId_0409d783-f634-40e7-a073-51af6328c066","connectionMode":"DIRECT","numberOfClients":1,"clientEndpoints":{"https://feathrazuretest3-cosmosdb.documents.azure.com:443/":1},"connCfg":{"rntbd":"(cto:PT10S, nrto:PT10S, icto:PT0S, ieto:PT1H, mcpe:130, mrpc:30, cer:true)","gw":"(cps:1000, nrto:PT1M, icto:PT1M, p:false)","other":"(ed: true, cs: false, rv: true)"},"consistencyCfg":"(consistency: Eventual, mm: true, prgns: [])"}}}


Feature/full folder uid handling

Changes

Change all methods from Controller down to Access layer to use versioned_object_ids
Change version_at_time to use Java Instants in UTC
Change all Create and Update methods to use UTC timestamps
Provide Etag header as expected

Related issue
Closes https://github.com/ehrbase/project_management/issues/148
Additional information and checks

[ ] Pull request linked in changelog

@axelsiebert
strage that Github is showing conflicting files. All conflict were resolved. Also tested locally and there is no merge conflict when merging into develop.

@axelsiebert To solve the issue with conflicting files still showing up it may help to close this PR and open a new on.


SOLR-17383: Fix support for deprecated options in 9x

https://issues.apache.org/jira/browse/SOLR-17383
Description
During the migration of the CLI options some situations do not cover both (old and new) options and therefore compatibility is not granted.
Solution
This PR focuses on the options listed in getOptions() and adds missing checks and reads to places where they should be included.
Note that this PR focuses only on deprecated options and is not relevant for main. For main see https://github.com/apache/solr/pull/2725 and future PRs that remove deprecated options.
Tests
No tests modified.
Checklist
Please review the following and check all that apply:

[X] I have reviewed the guidelines for How to Contribute and my code conforms to the standards described there to the best of my ability.
[ ] I have created a Jira issue and added the issue ID to my pull request title.
[X] I have given Solr maintainers access to contribute to my PR branch. (optional but recommended, not available for branches on forks living under an organisation)
[ ] I have developed this patch against the main branch.
[X] I have run ./gradlew check.
[ ] I have added tests for my changes.
[ ] I have added documentation for the Reference Guide

Looks like some tests need some love!

This ticket will also close https://issues.apache.org/jira/browse/SOLR-17409!

This ticket will also close https://issues.apache.org/jira/browse/SOLR-17409!

I avoided applying it in other places as well to keep the changes to the minimum. Should I do that @epugh in this PR?

maybe just get this one in...  honestly, i think SOLR-17409 may not be needed if we are in a stable 9x place, since I want to focus on main and getting us closer to 10!

I was considering backporting this to branch_9_7 but it seems a bit late for fixing. @epugh what do you think? Changes are compatible.

If this is important to a 9.7.1, then yes.  I think what we normally do is communicate in the release thread on dev@ about these things.  Otherwise, being on branch_9x is fine because it'll be picked up in 9.8....


foreach loops not generating unit return value

Seems there are some issues with return values of foreach loops, as this
for zkp in zkps {
    check_valid(zkp);
}

results in the body
check_valid zkp

while
for zkp in zkps {
    check_valid(zkp); ()
}

generates
let _ := check_valid zkp in
tt

there should not be any difference returning unit or having ; on the last line.

Hi @cmester0!
Yeah, that's not looking very nice...
In your example, check_valid is a function that returns (), right? (I guess it might panic or something?)
Though, I think deciding to drop that last tt or not is a bit difficult: the Rust compiler actually differentiates those.
The former is a block with one statement and no expression, the latter is a block with both a statement and a expression.
 But... yeah, it's ugly :sweat_smile:
So idk what we should do.

Yes, check_valid is a function returning () (just a dummy test for now).
My main issue is that the typing of the block changes, as it thinks the expression is the return value, while there should not be any return value because of ;. I am not sure if we should distinguish between no return value and returning (). I can find many ways of returning (), so I think we should not try and remove the expression if present.

Wait, the type of {check_valid(zkp); ()} and check_valid(zkp); are different?

Yes, sorry, the check_valid function actually returns a bool, so the two expressions are not the same type, as the block is interpreted as check_valid() not check_valid();.

(the bug it's probably the desugar of block in thir_import, if you wanna look at it @cmester0)

Was fixed by #228


MediaPipe Holistic Landmarker in Python null_ptr exception

Have I written custom code (as opposed to using a stock example script provided in MediaPipe)
None
OS Platform and Distribution
Ubuntu 22.04
Mobile device if the issue happens on mobile device
No response
Browser and version if the issue happens on browser
No response
Programming Language and version
Python
MediaPipe version
0.10.10
Bazel version
No response
Solution
Holistic
Android Studio, NDK, SDK versions (if issue is related to building in Android environment)
No response
Xcode & Tulsi version (if issue is related to building for iOS)
No response
Describe the actual behavior
Holistic landmarker 0.10.10 breaks with GPU on and off
Describe the expected behaviour
Holistic landmarker works
Standalone code/steps you may have used to try to get what you need
I was using the HandLandmarker(from tasks.vision, not legacy) for extracting the hand landmarks. Since the new version for the HolisticLandmarker was released I tried to use that too. The set up was as follows (similar to the HandLandmarker):
BaseOptions = mp.tasks.BaseOptions
VisionRunningMode = mp.tasks.vision.RunningMode

options = HolisticLandmarkerOptions(
        base_options=BaseOptions(model_asset_path='mp_models/holistic_landmarker.task', delegate=1),
        running_mode=VisionRunningMode.VIDEO)

with HolisticLandmarker.create_from_options(options) as landmarker:
    res = landmarker.detect_for_video(...)

I also couldn't find the relevant documentation for the Holistic Landmarker (0.10.10) online, so this was derived by readin the documentation and other issues.  The output for with GPU delegation is:
ERROR: Following operations are not supported by GPU delegate:
DEQUANTIZE:
DEQUANTIZE: Operation is not supported.
108 operations will run on the GPU, and the remaining 183 operations will run on the CPU.
ERROR: TfLiteGpuDelegate Prepare: Batch size mismatch, expected 1 but got 16
ERROR: Node number 291 (TfLiteGpuDelegate) failed to prepare.
Segmentation fault

When it's off, so just CPU:
F0000 00:00:1709199284.128629    1181 packet.cc:138] Check failed: holder_ != nullptr The packet is empty.
*** Check failure stack trace: ***
    @     0x7fb3d8653d89  absl::log_internal::LogMessageFatal::~LogMessageFatal()
    @     0x7fb3d78e32a6  mediapipe::Packet::GetProtoMessageLite()
    @     0x7fb3d802b712  pybind11::cpp_function::initialize<>()::{lambda()#3}::_FUN()
    @     0x7fb3d792179d  pybind11::cpp_function::dispatcher()
    @     0x5583181be516  cfunction_call
Aborted

I didn't get these errors before when using previous modules from tasks.vision.

Is this a bug inherent to the new implementation or am I missing something in the set-up? If so, could you please update the documentation or point to where I can find it, since I could not find it on the github pages?
Also, I still see some bugs arising from the new Holistic Landmarker (as seen in other recent issues), what would be an estimate on when this module will be more complete?

Thanks in advance!

I am having the same exact issue. +1

Yes, I have the same issue. The strangest thing is the fact that when I work on my local pc I have this issue, but when I use an instance of google colab I can use the new version of holistic, why? Maybe I did something wrong ? But if it happens to more people I don't think it's my fault...

Hello
Thanks for reporting the issue. We have reproduced the problem at our end as well and are working to provide resolution to the problem.
While we are reproducing the issue on Mac Sonoma, @mvazquezgts, a humble request is if you would you please specify the OS you are finding the issue on?
Just a suspicion if the issue is on Windows as well.

Hello @ayushgdev
I'm using ubuntu right now
Distributor ID:	Ubuntu
Description:	Ubuntu 22.04.4 LTS
Release:	22.04
Codename:	jammy

Hello @ayushgdev I'm using ubuntu right now
Distributor ID: Ubuntu Description: Ubuntu 22.04.4 LTS Release: 22.04 Codename: jammy

hello @ayushgdev thanks for investigating this. My specs are exactly the same as @mvazquezgts .
Thanks

@ayushgdev
I am facing the same issue on Windows 11.

I think that this error occurs when in the image from which the keypoints are extracted the hands are visble or not. If there are hands, everything is correct, but if they are not visible, the error occurs.

@ayushgdev Any updates on this? It is not fixed even in today's update(v0.10.11)

@ayushgdev Same here, the issue persists. The only difference is that with or without GPU the output is the same.
INFO: Created TensorFlow Lite XNNPACK delegate for CPU.
F0000 00:00:1709911500.085149    5115 packet.cc:138] Check failed: holder_ != nullptr The packet is empty.

As long as both hands are present in the detection the model seems to work fine, no?
Well, let's hope they solve it or give us a previous solution.

Hi @schmidt-sebastian,
It seems that the issue is specific to macOS and Ubuntu platforms, not affecting other platforms like Windows where GPU support is not available in Python. The Holistic Landmarker is encountering difficulties in detecting the GPU and is producing the reported errors.
Thank you!!

@kuaashish
As noted in my last reply, this problem also exists in Windows 11.

I am facing the same issue on Jetson Orin with python.
There is no problem with another Task like hand, pose or face even using GPU.
Any update here?

+1
I'm facing the same issue on Python + Windows 10 without GPU delegation enabled (since it's still not supported on windows apparently)

I'm facing the same issue on Jetson Orin with python even on version 0.10.14.
Any update here?

I face a same issue when I use GPU for running MediaPipe.
Could you please recommend how to solve it ?
I0000 00:00:1718374127.115017  169037 gl_context_egl.cc:85] Successfully initialized EGL. Major : 1 Minor: 5
I0000 00:00:1718374127.234479  174452 gl_context.cc:357] GL version: 3.2 (OpenGL ES 3.2 NVIDIA 555.42.02), renderer: NVIDIA GeForce RTX 4090/PCIe/SSE2
W0000 00:00:1718374127.416966  174439 inference_feedback_manager.cc:114] Feedback manager requires a model with a single signature inference. Disabling support for feedback tensors.
W0000 00:00:1718374127.448694  174450 inference_feedback_manager.cc:114] Feedback manager requires a model with a single signature inference. Disabling support for feedback tensors.
W0000 00:00:1718374127.467847  174451 inference_feedback_manager.cc:114] Feedback manager requires a model with a single signature inference. Disabling support for feedback tensors.
W0000 00:00:1718374127.467848  174437 inference_feedback_manager.cc:114] Feedback manager requires a model with a single signature inference. Disabling support for feedback tensors.
W0000 00:00:1718374127.467852  174444 inference_feedback_manager.cc:114] Feedback manager requires a model with a single signature inference. Disabling support for feedback tensors.
W0000 00:00:1718374127.491317  174422 inference_feedback_manager.cc:114] Feedback manager requires a model with a single signature inference. Disabling support for feedback tensors.
W0000 00:00:1718374127.508121  174442 inference_feedback_manager.cc:114] Feedback manager requires a model with a single signature inference. Disabling support for feedback tensors.
W0000 00:00:1718374127.586946  174429 inference_feedback_manager.cc:114] Feedback manager requires a model with a single signature inference. Disabling support for feedback tensors.

@kuaashish Could you provide solution how to fix the issue ? and it's really difficult to check the result when warning from using mediapipe notifies .

Have I written custom code (as opposed to using a stock example script provided in MediaPipe)
None
OS Platform and Distribution
Ubuntu 22.04
Mobile device if the issue happens on mobile device
No response
Browser and version if the issue happens on browser
No response
Programming Language and version
Python
MediaPipe version
0.10.10
Bazel version
No response
Solution
Holistic
Android Studio, NDK, SDK versions (if issue is related to building in Android environment)
No response
Xcode & Tulsi version (if issue is related to building for iOS)
No response
Describe the actual behavior
Holistic landmarker 0.10.10 breaks with GPU on and off
Describe the expected behaviour
Holistic landmarker works
Standalone code/steps you may have used to try to get what you need
I was using the HandLandmarker(from tasks.vision, not legacy) for extracting the hand landmarks. Since the new version for the HolisticLandmarker was released I tried to use that too. The set up was as follows (similar to the HandLandmarker):
BaseOptions = mp.tasks.BaseOptions
VisionRunningMode = mp.tasks.vision.RunningMode

options = HolisticLandmarkerOptions(
        base_options=BaseOptions(model_asset_path='mp_models/holistic_landmarker.task', delegate=1),
        running_mode=VisionRunningMode.VIDEO)

with HolisticLandmarker.create_from_options(options) as landmarker:
    res = landmarker.detect_for_video(...)

I also couldn't find the relevant documentation for the Holistic Landmarker (0.10.10) online, so this was derived by readin the documentation and other issues.  The output for with GPU delegation is:
ERROR: Following operations are not supported by GPU delegate:
DEQUANTIZE:
DEQUANTIZE: Operation is not supported.
108 operations will run on the GPU, and the remaining 183 operations will run on the CPU.
ERROR: TfLiteGpuDelegate Prepare: Batch size mismatch, expected 1 but got 16
ERROR: Node number 291 (TfLiteGpuDelegate) failed to prepare.
Segmentation fault

When it's off, so just CPU:
F0000 00:00:1709199284.128629    1181 packet.cc:138] Check failed: holder_ != nullptr The packet is empty.
*** Check failure stack trace: ***
    @     0x7fb3d8653d89  absl::log_internal::LogMessageFatal::~LogMessageFatal()
    @     0x7fb3d78e32a6  mediapipe::Packet::GetProtoMessageLite()
    @     0x7fb3d802b712  pybind11::cpp_function::initialize<>()::{lambda()#3}::_FUN()
    @     0x7fb3d792179d  pybind11::cpp_function::dispatcher()
    @     0x5583181be516  cfunction_call
Aborted

I didn't get these errors before when using previous modules from tasks.vision.
* Is this a bug inherent to the new implementation or am I missing something in the set-up? If so, could you please update the documentation or point to where I can find it, since I could not find it on the github pages?

* Also, I still see some bugs arising from the new Holistic Landmarker (as seen in other recent issues), what would be an estimate on when this module will be more complete?

Thanks in advance!

Hi Victoria, I am having trouble getting the holistic_landmarker.task file, could you please tell me where did you get it?

I face a same issue when I use GPU for running MediaPipe.
Could you please recommend how to solve it ?
I0000 00:00:1718374127.115017  169037 gl_context_egl.cc:85] Successfully initialized EGL. Major : 1 Minor: 5
I0000 00:00:1718374127.234479  174452 gl_context.cc:357] GL version: 3.2 (OpenGL ES 3.2 NVIDIA 555.42.02), renderer: NVIDIA GeForce RTX 4090/PCIe/SSE2
W0000 00:00:1718374127.416966  174439 inference_feedback_manager.cc:114] Feedback manager requires a model with a single signature inference. Disabling support for feedback tensors.
W0000 00:00:1718374127.448694  174450 inference_feedback_manager.cc:114] Feedback manager requires a model with a single signature inference. Disabling support for feedback tensors.
W0000 00:00:1718374127.467847  174451 inference_feedback_manager.cc:114] Feedback manager requires a model with a single signature inference. Disabling support for feedback tensors.
W0000 00:00:1718374127.467848  174437 inference_feedback_manager.cc:114] Feedback manager requires a model with a single signature inference. Disabling support for feedback tensors.
W0000 00:00:1718374127.467852  174444 inference_feedback_manager.cc:114] Feedback manager requires a model with a single signature inference. Disabling support for feedback tensors.
W0000 00:00:1718374127.491317  174422 inference_feedback_manager.cc:114] Feedback manager requires a model with a single signature inference. Disabling support for feedback tensors.
W0000 00:00:1718374127.508121  174442 inference_feedback_manager.cc:114] Feedback manager requires a model with a single signature inference. Disabling support for feedback tensors.
W0000 00:00:1718374127.586946  174429 inference_feedback_manager.cc:114] Feedback manager requires a model with a single signature inference. Disabling support for feedback tensors.

Same issue , can you tell me the solution

@Terrywang2001  So sorry for the late reply!
I don't get a notification unless you tag me :). I checked the download link of the handlandmarker and just changed the URL. In that way, you get to download the holistic landmarker.

This might not be the way they intended it but here is the link:
https://storage.googleapis.com/mediapipe-models/holistic_landmarker/holistic_landmarker/float16/latest/holistic_landmarker.task
@Terrywang2001

I have the same issue on Mac M1 with GPU Delegate
MediaPipe 0.10.14
Python 3.11.8
F0000 00:00:1723644753.286260 2672656 packet.cc:138] Check failed: holder_ != nullptr The packet is empty.
*** Check failure stack trace: ***
    @     0x754dc2b03b49  absl::log_internal::LogMessageFatal::~LogMessageFatal()
    @     0x754dc1b91458  mediapipe::Packet::GetProtoMessageLite()
    @     0x754dc247c532  pybind11::cpp_function::initialize<>()::{lambda()#3}::_FUN()
    @     0x754dc1bd6198  pybind11::cpp_function::dispatcher()
    @           0x54a9f4  cfunction_call
Aborted (core dumped)

Same issue here, it seems to only happen when hand/hands are missing from the frame. 'left_hand_landmarks' is set to be a List of NormalizedLandmark objects, but since the task didn't produce any hand landmarks, the output can't be produced. It's a relatively simple fix to handle a nullptr exception.
I changed holistic_landmarker.py : HolisticLandmarkerResult._build_landmarker_result from this
left_hand_landmarks_proto_list = packet_getter.get_proto(       output_packets[_LEFT_HAND_LANDMARKS_STREAM_NAME]   ) left_hand_landmarks = landmark_pb2.NormalizedLandmarkList()   left_hand_landmarks.MergeFrom(left_hand_landmarks_proto_list)   for hand_landmark in left_hand_landmarks.landmark:     holistic_landmarker_result.left_hand_landmarks.append(         landmark_module.NormalizedLandmark.create_from_pb2(hand_landmark)     )
to this:
if _LEFT_HAND_LANDMARKS_STREAM_NAME in output_packets:   left_hand_landmarks_proto_list = packet_getter.get_proto(       output_packets[_LEFT_HAND_LANDMARKS_STREAM_NAME]   ) left_hand_landmarks = landmark_pb2.NormalizedLandmarkList()   left_hand_landmarks.MergeFrom(left_hand_landmarks_proto_list)   for hand_landmark in left_hand_landmarks.landmark:     holistic_landmarker_result.left_hand_landmarks.append(         landmark_module.NormalizedLandmark.create_from_pb2(hand_landmark)     )
You should also do the same for other pose outputs in case your frames are sometimes missing other features.

Just in case anyone else is willing to change their own local module files until an official fix is made, here's my fixed _build_landmarker_result method for HolisticLandmarkerResult:
def _build_landmarker_result(
    output_packets: Mapping[str, packet_module.Packet]
) -> HolisticLandmarkerResult:
  """Constructs a `HolisticLandmarksDetectionResult` from output packets."""
  holistic_landmarker_result = HolisticLandmarkerResult(
      [], [], [], [], [], [], []
  )

  if _FACE_LANDMARKS_STREAM_NAME in output_packets:
    face_landmarks_proto_list = packet_getter.get_proto(
        output_packets[_FACE_LANDMARKS_STREAM_NAME]
    )
    face_landmarks = landmark_pb2.NormalizedLandmarkList()
    face_landmarks.MergeFrom(face_landmarks_proto_list)
    for face_landmark in face_landmarks.landmark:
      holistic_landmarker_result.face_landmarks.append(
          landmark_module.NormalizedLandmark.create_from_pb2(face_landmark)
      )

  if _POSE_LANDMARKS_STREAM_NAME in output_packets:
    pose_landmarks_proto_list = packet_getter.get_proto(
        output_packets[_POSE_LANDMARKS_STREAM_NAME]
    )
    pose_landmarks = landmark_pb2.NormalizedLandmarkList()
    pose_landmarks.MergeFrom(pose_landmarks_proto_list)
    for pose_landmark in pose_landmarks.landmark:
      holistic_landmarker_result.pose_landmarks.append(
          landmark_module.NormalizedLandmark.create_from_pb2(pose_landmark)
      )

  if _POSE_WORLD_LANDMARKS_STREAM_NAME in output_packets:
    pose_world_landmarks_proto_list = packet_getter.get_proto(
        output_packets[_POSE_WORLD_LANDMARKS_STREAM_NAME]
    )
    pose_world_landmarks = landmark_pb2.LandmarkList()
    pose_world_landmarks.MergeFrom(pose_world_landmarks_proto_list)
    for pose_world_landmark in pose_world_landmarks.landmark:
      holistic_landmarker_result.pose_world_landmarks.append(
          landmark_module.Landmark.create_from_pb2(pose_world_landmark)
      )

  if _LEFT_HAND_LANDMARKS_STREAM_NAME in output_packets:
    left_hand_landmarks_proto_list = packet_getter.get_proto(
        output_packets[_LEFT_HAND_LANDMARKS_STREAM_NAME]
    )
    left_hand_landmarks = landmark_pb2.NormalizedLandmarkList()
    left_hand_landmarks.MergeFrom(left_hand_landmarks_proto_list)
    for hand_landmark in left_hand_landmarks.landmark:
      holistic_landmarker_result.left_hand_landmarks.append(
          landmark_module.NormalizedLandmark.create_from_pb2(hand_landmark)
      )

  if _LEFT_HAND_WORLD_LANDMARKS_STREAM_NAME in output_packets:
    left_hand_world_landmarks_proto_list = packet_getter.get_proto(
        output_packets[_LEFT_HAND_WORLD_LANDMARKS_STREAM_NAME]
    )
    left_hand_world_landmarks = landmark_pb2.LandmarkList()
    left_hand_world_landmarks.MergeFrom(left_hand_world_landmarks_proto_list)
    for left_hand_world_landmark in left_hand_world_landmarks.landmark:
      holistic_landmarker_result.left_hand_world_landmarks.append(
          landmark_module.Landmark.create_from_pb2(left_hand_world_landmark)
      )
  if _RIGHT_HAND_LANDMARKS_STREAM_NAME in output_packets:
    right_hand_landmarks_proto_list = packet_getter.get_proto(
        output_packets[_RIGHT_HAND_LANDMARKS_STREAM_NAME]
    )
    right_hand_landmarks = landmark_pb2.NormalizedLandmarkList()
    right_hand_landmarks.MergeFrom(right_hand_landmarks_proto_list)
    for hand_landmark in right_hand_landmarks.landmark:
      holistic_landmarker_result.right_hand_landmarks.append(
          landmark_module.NormalizedLandmark.create_from_pb2(hand_landmark)
      )

  if _RIGHT_HAND_WORLD_LANDMARKS_STREAM_NAME in output_packets:
    right_hand_world_landmarks_proto_list = packet_getter.get_proto(
        output_packets[_RIGHT_HAND_WORLD_LANDMARKS_STREAM_NAME]
    )
    right_hand_world_landmarks = landmark_pb2.LandmarkList()
    right_hand_world_landmarks.MergeFrom(right_hand_world_landmarks_proto_list)
    for right_hand_world_landmark in right_hand_world_landmarks.landmark:
      holistic_landmarker_result.right_hand_world_landmarks.append(
          landmark_module.Landmark.create_from_pb2(right_hand_world_landmark)
      )

  if _FACE_BLENDSHAPES_STREAM_NAME in output_packets:
    face_blendshapes_proto_list = packet_getter.get_proto(
        output_packets[_FACE_BLENDSHAPES_STREAM_NAME]
    )
    face_blendshapes_classifications = classification_pb2.ClassificationList()
    face_blendshapes_classifications.MergeFrom(face_blendshapes_proto_list)
    holistic_landmarker_result.face_blendshapes = []
    for face_blendshapes in face_blendshapes_classifications.classification:
      holistic_landmarker_result.face_blendshapes.append(
          category_module.Category(
              index=face_blendshapes.index,
              score=face_blendshapes.score,
              display_name=face_blendshapes.display_name,
              category_name=face_blendshapes.label,
          )
      )

  if _POSE_SEGMENTATION_MASK_STREAM_NAME in output_packets:
    holistic_landmarker_result.segmentation_mask = packet_getter.get_image(
        output_packets[_POSE_SEGMENTATION_MASK_STREAM_NAME]
    )

  return holistic_landmarker_result

The issue occurs at various calls to packet_getter.get_proto(output_packets[_XXX_STREAM_NAME]).
This happens because the task outputs no data for objects it didn't detect (like, for example, hands).
I fixed this for myself but handling empty packets for all possible landmark lists in holistic_landmarker.py : HolisticLandmarkerResult:
def _build_landmarker_result(
    output_packets: Mapping[str, packet_module.Packet]
) -> HolisticLandmarkerResult:
  """Constructs a `HolisticLandmarksDetectionResult` from output packets."""
  holistic_landmarker_result = HolisticLandmarkerResult(
      [], [], [], [], [], [], []
  )

  if not output_packets[_FACE_LANDMARKS_STREAM_NAME].is_empty():
    face_landmarks_proto_list = packet_getter.get_proto(
      output_packets[_FACE_LANDMARKS_STREAM_NAME]
    )
    face_landmarks = landmark_pb2.NormalizedLandmarkList()
    face_landmarks.MergeFrom(face_landmarks_proto_list)
    for face_landmark in face_landmarks.landmark:
      holistic_landmarker_result.face_landmarks.append(
          landmark_module.NormalizedLandmark.create_from_pb2(face_landmark)
      )

  if not output_packets[_POSE_LANDMARKS_STREAM_NAME].is_empty():
    pose_landmarks_proto_list = packet_getter.get_proto(
      output_packets[_POSE_LANDMARKS_STREAM_NAME]
    )
    pose_landmarks = landmark_pb2.NormalizedLandmarkList()
    pose_landmarks.MergeFrom(pose_landmarks_proto_list)
    for pose_landmark in pose_landmarks.landmark:
      holistic_landmarker_result.pose_landmarks.append(
          landmark_module.NormalizedLandmark.create_from_pb2(pose_landmark)
      )

  if not output_packets[_POSE_WORLD_LANDMARKS_STREAM_NAME].is_empty():
    pose_world_landmarks_proto_list = packet_getter.get_proto(
      output_packets[_POSE_WORLD_LANDMARKS_STREAM_NAME]
    )
    pose_world_landmarks = landmark_pb2.LandmarkList()
    pose_world_landmarks.MergeFrom(pose_world_landmarks_proto_list)
    for pose_world_landmark in pose_world_landmarks.landmark:
      holistic_landmarker_result.pose_world_landmarks.append(
          landmark_module.Landmark.create_from_pb2(pose_world_landmark)
      )

  if not output_packets[_LEFT_HAND_LANDMARKS_STREAM_NAME].is_empty():
    left_hand_landmarks_proto_list = packet_getter.get_proto(
      output_packets[_LEFT_HAND_LANDMARKS_STREAM_NAME]
    )
    left_hand_landmarks = landmark_pb2.NormalizedLandmarkList()
    left_hand_landmarks.MergeFrom(left_hand_landmarks_proto_list)
    for hand_landmark in left_hand_landmarks.landmark:
      holistic_landmarker_result.left_hand_landmarks.append(
          landmark_module.NormalizedLandmark.create_from_pb2(hand_landmark)
      )

  if not output_packets[_LEFT_HAND_WORLD_LANDMARKS_STREAM_NAME].is_empty():
    left_hand_world_landmarks_proto_list = packet_getter.get_proto(
      output_packets[_LEFT_HAND_WORLD_LANDMARKS_STREAM_NAME]
    )
    left_hand_world_landmarks = landmark_pb2.LandmarkList()
    left_hand_world_landmarks.MergeFrom(left_hand_world_landmarks_proto_list)
    for left_hand_world_landmark in left_hand_world_landmarks.landmark:
      holistic_landmarker_result.left_hand_world_landmarks.append(
          landmark_module.Landmark.create_from_pb2(left_hand_world_landmark)
      )

  if not output_packets[_RIGHT_HAND_LANDMARKS_STREAM_NAME].is_empty():
    right_hand_landmarks_proto_list = packet_getter.get_proto(
      output_packets[_RIGHT_HAND_LANDMARKS_STREAM_NAME]
    )
    right_hand_landmarks = landmark_pb2.NormalizedLandmarkList()
    right_hand_landmarks.MergeFrom(right_hand_landmarks_proto_list)
    for hand_landmark in right_hand_landmarks.landmark:
      holistic_landmarker_result.right_hand_landmarks.append(
          landmark_module.NormalizedLandmark.create_from_pb2(hand_landmark)
      )

  if not output_packets[_RIGHT_HAND_WORLD_LANDMARKS_STREAM_NAME].is_empty():
    right_hand_world_landmarks_proto_list = packet_getter.get_proto(
      output_packets[_RIGHT_HAND_WORLD_LANDMARKS_STREAM_NAME]
    )
    right_hand_world_landmarks = landmark_pb2.LandmarkList()
    right_hand_world_landmarks.MergeFrom(right_hand_world_landmarks_proto_list)
    for right_hand_world_landmark in right_hand_world_landmarks.landmark:
      holistic_landmarker_result.right_hand_world_landmarks.append(
          landmark_module.Landmark.create_from_pb2(right_hand_world_landmark)
      )

  if _FACE_BLENDSHAPES_STREAM_NAME in output_packets:
    face_blendshapes_proto_list = packet_getter.get_proto(
        output_packets[_FACE_BLENDSHAPES_STREAM_NAME]
    )
    face_blendshapes_classifications = classification_pb2.ClassificationList()
    face_blendshapes_classifications.MergeFrom(face_blendshapes_proto_list)
    holistic_landmarker_result.face_blendshapes = []
    for face_blendshapes in face_blendshapes_classifications.classification:
      holistic_landmarker_result.face_blendshapes.append(
          category_module.Category(
              index=face_blendshapes.index,
              score=face_blendshapes.score,
              display_name=face_blendshapes.display_name,
              category_name=face_blendshapes.label,
          )
      )

  if _POSE_SEGMENTATION_MASK_STREAM_NAME in output_packets:
    holistic_landmarker_result.segmentation_mask = packet_getter.get_image(
        output_packets[_POSE_SEGMENTATION_MASK_STREAM_NAME]
    )

  return holistic_landmarker_result

When this fix is applied and the task didn't detect an object, the HolisticLandmarkerResult will have an empty list for that object.


add background video support for sm files.

since stepmania has video support i been wondering if you're able to add background video support for kade engine for sm files. the formats that should be supported would be avi, mp4, mpeg, mpg, and webm but im pretty sure you're only gonna do webm.

i second this

since stepmania has video support i been wondering if you're able to add background video support for kade engine for sm files. the formats that should be supported would be avi, mp4, mpeg, mpg, and webm but im pretty sure you're only gonna do webm.

remember this is not stepmania
coding video support is hard


Pie based on lines of code

It would be nice to be able to draw the pie based on the number of lines of the total number of lines of code written in every language. This way the pie would give more insight about the developer experience/skills.
And if possible it would be even better to also include repositories to which the developer contributed to into account!

I can have a read through what the GitHub API allows me to do and see if either of these ideas are doable but I think they sound really cool!
I still need to add a small options popup giving control over things like how long to cache for and stuff like that but after that we could (hopefully if the API supports it) have settings to change what is displayed!

Having a look around through the API and it doesn't seem like there is a way to do this via the API.
We could set up on a server a script that would clone all a user's repos and count them locally but that goes beyond the scope of this extension so I'm gonna have to sadly close this as a wontfix :(

https://api.github.com/repos/:user/:repo/languages


Error logging and quiet mode

I'm trying to set up rclone in a cron job. I've found it's not easy to make rclone output quiet.
-q flag actually has two flaws:

it suppresses all logging (even error one)
it prints stats after running a command

I think it's better to always print error messages in quiet mode and make stats output optional if no errors encountered.
I do not mind implementing this myself after discussing it with you.

Sounds very sensible, and if you want to have a go I'd be happy to review the pull request.
Thanks
Nick


65 resolve issue in data injest service 1

@athrael-soju there is a typo, it should be named data-ingest

@nicolad where?

the folder name


vertexLighting_DBS_world: fix vertex lighting, use xyz instead of xyx

I FIXED VERTEX LIGHTING

now that's what I call permutation programming
-- @Calinou © 2019

I FIXED VERTEX LIGHTING
blame 4f0a5403621f52fbb2bfdc79f3a3ffdd7cc80304 “Fix vertexlighting world dlights” by @cmf028,
hiding easter eggs for illwieckz since 20th century.
I FIXED VERTEX LIGHTING
\_o< kwaak
kwaak >o_/
_o/* BLAM!

I FIXED VERTEX LIGHTING
I was just bikeshedding, by renaming accross shaders the variables that contains the same information but named with different names, and then… in my diff tool a line popped as different between vertexLighting_DBS_world_fp.glsl and vertexLighting_DBS_world_fp.glsl, a line that MUST not be different because it must uses the same boilerplate:
-	mat3 tangentToWorldMatrix = mat3(var_Tangent.xyz, var_Binormal.xyz, var_Normal.xyz);
+	mat3 tangentToWorldMatrix = mat3(var_Tangent.xyz, var_Binormal.xyz, var_Normal.xyx);

Here:
https://github.com/DaemonEngine/Daemon/blob/a361a503cd8efbc5bd3af4025bb752ddf492a4e3/src/engine/renderer/glsl_source/vertexLighting_DBS_world_fp.glsl#L77
Of course the right way to do it is to use xyz this way:
	mat3 tangentToWorldMatrix = mat3(var_Tangent.xyz, var_Binormal.xyz, var_Normal.xyz);

So, before/after:

It also fixes xonotic mapmodels, which are rendered using vertex lighting glsl shader even when the map is rendered with light mapping glsl shader (before/after):

Note how the light is not anymore curved by the black hole. I uncurved light around a black hole, where is my nobel prize?
I FIXED VERTEX LIGHTING

One-character commits - always the most powerful.
LGTM


Closing bottom sheet by quick double swipe

Hello,
I am able to close the bottom sheet with two swipes right after each other.
Is this the feature/bug of the library, of the underlying dependencies? I would like to know if it's configurable or intentional.
Screen_recording_20241126_172743.webm

The current behavior is not how androidx.compose.material3.ModalBottomSheet, right?
Screen_recording_20241128_150232.webm


Error processing 2.3.7-p2 magento base package

I'm building the repository and see this error during the build:
Packaging Magento Base Package
Versions to process: 2.3.7-p2, 2.3.7-p3, 2.3.7-p4, 2.4.0, 2.4.0-p1, 2.4.1, 2.4.1-p1, 2.4.2, 2.4.2-p1, 2.4.2-p2, 2.4.3, 2.4.3-p1, 2.4.3-p2, 2.4.3-p3, 2.4.4, 2.4.4-p1, 2.4.4-p2, 2.4.4-p3, 2.4.4-p4, 2.4.4-p5, 2.4.5, 2.4.5-p1, 2.4.5-p2, 2.4.5-p3, 2.4.5-p4, 2.4.6, 2.4.6-p1, 2.4.6-p2, 2.4.7-beta1
Processing 2.3.7-p2
Unable find package version in magento/magento2-base composer.json for 2.3.7-p2, skipping

Is this a known problem?

For completeness, here's the full output of that step:
Packaging Magento Base Package
Versions to process: 2.3.7-p2, 2.3.7-p3, 2.3.7-p4, 2.4.0, 2.4.0-p1, 2.4.1, 2.4.1-p1, 2.4.2, 2.4.2-p1, 2.4.2-p2, 2.4.3, 2.4.3-p1, 2.4.3-p2, 2.4.3-p3, 2.4.4, 2.4.4-p1, 2.4.4-p2, 2.4.4-p3, 2.4.4-p4, 2.4.4-p5, 2.4.5, 2.4.5-p1, 2.4.5-p2, 2.4.5-p3, 2.4.5-p4, 2.4.6, 2.4.6-p1, 2.4.6-p2, 2.4.7-beta1
Processing 2.3.7-p2
Unable find package version in magento/magento2-base composer.json for 2.3.7-p2, skipping
Processing 2.3.7-p3
Processing 2.3.7-p4
Processing 2.4.0
Processing 2.4.0-p1
Processing 2.4.1
Processing 2.4.1-p1
Processing 2.4.2
Processing 2.4.2-p1
Processing 2.4.2-p2
Processing 2.4.3
Processing 2.4.3-p1
Processing 2.4.3-p2
Processing 2.4.3-p3
Processing 2.4.4
Processing 2.4.4-p1
Processing 2.4.4-p2
Processing 2.4.4-p3
Processing 2.4.4-p4
Processing 2.4.4-p5
Processing 2.4.5
Processing 2.4.5-p1
Processing 2.4.5-p2
Processing 2.4.5-p3
Processing 2.4.5-p4
Processing 2.4.6
Processing 2.4.6-p1
Processing 2.4.6-p2
Processing 2.4.7-beta1
Unable find package version in magento/magento2-base composer.json for 2.4.7-beta1, skipping
Magento Base Package [
  '2.3.7-p3', '2.3.7-p4', '2.4.0',
  '2.4.0-p1', '2.4.1',    '2.4.1-p1',
  '2.4.2',    '2.4.2-p1', '2.4.2-p2',
  '2.4.3',    '2.4.3-p1', '2.4.3-p2',
  '2.4.3-p3', '2.4.4',    '2.4.4-p1',
  '2.4.4-p2', '2.4.4-p3', '2.4.4-p4',
  '2.4.4-p5', '2.4.5',    '2.4.5-p1',
  '2.4.5-p2', '2.4.5-p3', '2.4.5-p4',
  '2.4.6',    '2.4.6-p1', '2.4.6-p2'
]

Thanks for opening the issue.
This is known and surprisingly even intentional - the first release we support is 2.3.7-p3.
We added build 2.3.7-p2 as a workaround so all the required packages are generated, but I don't think that workaround is still needed.
I'll check and remove it if so.


Mapping deprecated model name vit_huge_patch14_224_clip_laion2b to current vit_huge_patch14_clip_224.laion2b.

Hi Zheng,
python prepare_sketch.py
UserWarning: Mapping deprecated model name vit_huge_patch14_224_clip_laion2b to current vit_huge_patch14_clip_224.laion2b.
RuntimeError: Hugging Face hub model specified but package not installed.
https://github.com/huggingface/pytorch-image-models
Sept 23, 2022
LAION-2B CLIP image towers supported as pretrained backbones for fine-tune or features (no classifier)
vit_base_patch32_224_clip_laion2b
vit_large_patch14_224_clip_laion2b
vit_huge_patch14_224_clip_laion2b
vit_giant_patch14_224_clip_laion2b
maybe timm update the pretrained model to vit_huge_patch14_clip_224.laion2b
https://huggingface.co/timm/vit_huge_patch14_clip_224.laion2b_ft_in12k_in1k/tree/main

are you sure that the updated model is "vit_huge_patch14_clip_224.laion2b_ft_in12k_in1k"? I have encountered the same problem as yours, however, when I used the weight file "pytorch_model.bin" in the link given by you, I got the following error:

RuntimeError: Error(s) in loading state_dict for VisionTransformer:
size mismatch for head.weight: copying a param with shape torch.Size([1000, 1280]) from checkpoint, the shape in current model is torch.Size([1024, 1280]).
size mismatch for head.bias: copying a param with shape torch.Size([1000]) from checkpoint, the shape in current model is torch.Size([1024]).

are you sure that the updated model is "vit_huge_patch14_clip_224.laion2b_ft_in12k_in1k"? I have encountered the same problem as yours, however, when I used the weight file "pytorch_model.bin" in the link given by you, I got the following error:

RuntimeError: Error(s) in loading state_dict for VisionTransformer:
size mismatch for head.weight: copying a param with shape torch.Size([1000, 1280]) from checkpoint, the shape in current model is torch.Size([1024, 1280]).
size mismatch for head.bias: copying a param with shape torch.Size([1000]) from checkpoint, the shape in current model is torch.Size([1024]).

have you soved the problem? i change the num_classes as 1000 and it works.

are you sure that the updated model is "vit_huge_patch14_clip_224.laion2b_ft_in12k_in1k"? I have encountered the same problem as yours, however, when I used the weight file "pytorch_model.bin" in the link given by you, I got the following error:

RuntimeError: Error(s) in loading state_dict for VisionTransformer:
size mismatch for head.weight: copying a param with shape torch.Size([1000, 1280]) from checkpoint, the shape in current model is torch.Size([1024, 1280]).
size mismatch for head.bias: copying a param with shape torch.Size([1000]) from checkpoint, the shape in current model is torch.Size([1024]).

have you soved the problem? i change the num_classes as 1000 and it works.

excuse me, where is the num_classes?


Lock concurrent migrations

If 2 apps starting and running own migrations, need to create some sort of lock table or something like this (maybe postgres provides user locks not sure).
This is all to make sure for each migration table at each moment of time only one migration process is executing.

I thought about locking pgmigrate table, but locks in postgres have to be wrapped in transaction, and this transaction have to span all migrations, but that is not doable as there are some DDL which have to be run outside of transaction.
So it needs some sort of shared variable across sessions. But using table seems like overkill to me. Will investigate...


Ignore state updates for the dom when on node

Should patch https://github.com/yoshuawuyts/choo/issues/388 in conjunction with the recently updated sheet-router. Confirmed by running his example:
> const choo = require('choo')
undefined
> const html = require('choo/html')
undefined
> const app = choo()
undefined
> app.router(['/', () => html`<h1>Hello Tokyo!</h1>`])
undefined
> app.toString('/')
'
Hello Tokyo!
'

Thanks heaps; merged per 6daf2e6; v4.0.4


[PE-D][Tester E] Unable to edit person when I break the program

Output for edit 1 /n hi after the program did not return command result due to invalid command (eg. find /n):

Output for edit 1 /n hi after exit the program and rerun:

Labels: severity.Medium type.FunctionalityBug
original: yiwern5/ped#13

Addressed


Update README examples for defining factory to newer syntax

Update README to change factory examples from def foo_factory do to def factory(:foo) do.  The older syntax no longer works.

Thank you for tackling this! However, the syntax in the README is for the unreleased beta version of ExMachina, and is correct. I tried to add a note to the top that made that clear, but maybe I can add an additional note in the section for defining factories, so people realize this is for master. If you go to the linked docs (https://hexdocs.pm/ex_machina/README.html) you will see that it has the correct README for the currently released version. I'm waiting to publish the latest version of ExMachina when Ecto 2.0 comes out of beta, since ExMachina 1.0 will require Ecto 2.0 to work

Ah, gotcha.  Coolio.


Remove unnecessary v-show that broke exit transitions

v-show on each alert is unnecessary here, and in fact causes issues as it messes with Vue's ability to handle ending transitions. Removing v-show seems to have no downside as v-for handles the hiding and showing.
Issue before:
Trigger a flash message > wait > then it disappears instantly.
Trigger multiple flash messages > wait > then first disappears instantly, others fade out at their time.

I've been wondering about what was breaking the exit transitions for a while now, but haven't had time to really look into it.  I'll check this out and merge it in later today or tomorrow.

@andyleach Great, thanks Andy. I've also spent a couple hours trying to get Vue's move setup working with this, so that when more than one notification comes in, they move around nicely to accommodate each other, and then when one leaves the others shuffle down.
Unfortunately it looks like position: absolute that's required for the -leave-active class messes things up and I've not managed to find a way around it. Only a minor issue really and unrelated to this one, but just mentioning in case useful.
More details: https://forum.vuejs.org/t/list-move-transition/3215/4


Use engagement state colours consistently

In different parts of ANET we use colours to represent the state of an engagement:

[x] in the summary view of reports, in front of the state name
[x] in the calendar view of reports
[x] in the daily rollup
[x] in the report workflow
~- [ ] in the insights~

Right now the colours are not being used consistently.
We should agree on which colour we should use for which state. The states to be used are:

DRAFT
PENDING_APPROVAL
REJECTED
APPROVED
CANCELLED
PUBLISHED
FUTURE (not really a state, but dependent on the engagement date)

We decided not to implement the color scheme to the "insights". Therefor this issue is done.


Adding a repeater field to customFields

Please describe the feature you would like to see implemented.
Adding a repeater field as a customField would be a huge quality of life improvement.
For example: I want to add some additional blocks. Each block contains a title, text and a link.
Product A has 2 of these blocks
Product B has 5 of these blocks
Product C has 1 of these blocks
Currently my only knowing solution for this is to create as many customFields as it could be.
So i have to create
title1, text1, link1
title2, text2, link2
title3, text3, link3
title4, text4, link4
title5, text5, link5

etc.
That is really inefficient. Fields are empty in the backend. Writing that template is just inconvient and could me much more easier with an for each loop.
Overall i think this will give every side (developer & backend user) a much better experience.

Hey, have you tried a JsonField? Or a ListField? CustomFields are free for developers in the data structure.

Hey, have you tried a JsonField? Or a ListField? CustomFields are free for developers in the data structure.

Hey sorry i can't follow here. In the backend i cannot find any of those options.

Can you elaborate further what you mean with a JsonField and a ListField? Appreciate the help.

I was wondering whether any more information is available about the issue above? How would I start creating a custom repeater field with code?

Hello,
Within our company roadmap and work capacity, we try to address each bug or improvement request but admit that not each one will be resolved. To continue our culture of honesty and openness, we are closing this issue to focus on our roadmap on behalf of all Shopware users.
If you feel like this issue is still impacting you, please create a new issue and let us know.
Thank you again for your valuable feedback.


UI compilation errors in master branch

Describe the bug
After merging in PR https://github.com/Hyperfoil/Horreum/pull/1183. the master branch CI builds are failing: https://github.com/Hyperfoil/Horreum/actions/runs/7772390823/job/21194764488#step:6:2499
@barreiro please can you take a look? thanks

@barreiro i have reverted the commit: https://github.com/Hyperfoil/Horreum/pull/1250. until it works with current master, it was blocking CI for other PR's that I am trying to merge


[docs] Fix StickyHeaderTable round borders

fix #23835

[x] I have followed (at least) the PR section of the contributing guide.

@antoniopacheco Great, thanks for the polish


Add more detail to readme.md

Can you add some more details to the readme about getting this working? More specifically, what should we add to PATH and what exactly should we chmod +x.

Hi, Patrick.
Done, thank you.
Also there are instructions inside the update files.
The update file instructs how to use it in Linux.
The update-gam file instructs how to use it in Windows.


installation requires admin privs

Microsoft PowerToys version
0.37.2
Running as admin

[ ] Yes

Area(s) with issue?
General, Installer
Steps to reproduce
just clicking on the exe file
✔ Expected Behavior
i had thought power toys dint require admin privileges
❌ Actual Behavior
it required admin priveleges
(is all this necessary lmao)
Other Software
No response

Wait a second, isn't installing any apps globally requires admin privileges? Haven't seen any that doesn't need admin privileges while installing, except installing for a single user only. Correct me if I am wrong.

@thaynos PowerToys needs admin privileges for installing all features the correct way.
A indtallatioon without isn't possible.

theres really no way without admin privs? i dont mind limited functionality.

Aa far as I know: no.
But maybe @crutkas or @enricogior know it better then I do.
Which sort of PC do you have, that you don't have admin rights? If it's a work computer you can maybe ask your system administrator.

Aa far as I know: no.
But maybe @crutkas or @enricogior know it better then I do.
Which sort of PC do you have, that you don't have admin rights? If it's a work computer you can maybe ask your system administrator.

uh its a school pc and th admins are rather paranoid about downloading apps so portable/pre installed are the only way i can download apps

we touch registry is the primary reason.  PowerToys is not designed currently to be a portable application due to some of the shell integration.


Add music controller and music display info in menu

I'd recommend going commit by commit here, skipping the first one which adds all the font files (There Is A Lot).

thanks github


Base URL for endpoint test UI & Execute calls

I do not see any config for setting the base url that is used in the endpoint testing UI (2nd column). The default behavior appears to be to use the same url that the site is running on. So when developing it attempts to call localhost... and when deployed it calls that url. I tried adding "servers.url" in the swagger json but that does not appear to be used either. Any input you can provide?

Adding urls to servers should give you a dropdown to choose a base url in the testing UI. Here's an example OpenAPI definition that uses servers:
https://github.com/cloud-annotations/docusaurus-plugin-openapi/blob/d39424f3b6150d09a2f0bb4f2349d16508840c43/demo/examples/openapi-cos.json#L175
Do you have a sample OpenAPI definition you feel comfortable sharing that isn't respecting the servers stanza?

Thank you for the fast response!! I had a syntax error in my swagger json (servers was not an array). Works now!


remove old tfsec workflow and add checkov scan

Add reusable tf-scan.yml from .github repo
Remove old tfsec pr commenter (broken anyways)
Add pr.yml, cron.yml, and `push.yml for running jobs on select events
Remove terraform.yml

Looks like Checkov is also in the pocket of Big KMS. Are you going to fix up/ignore those warnings before merging?

@chrisshiplet I thought our plan was going to be creating issues/dismissing out of the security dashboard for each of the repositories. But to answer your question, kind of yes, the self-rolled KMS stuff will be dismissed, not until after I merge this though.


Query Widget, even if operationName is set -> "Must provide operation name if query contains multiple operations"

So I am providing a document with multiple operations, and thus am providing operationName in the QueryOptions like this:
var options = QueryOptions(
      document: gql(GAllQueries.allQueries()),
      operationName: GQueriesNames.kPaginatedComments,
      variables: variables,
      fetchPolicy: FetchPolicy.cacheAndNetwork,
    );

if I try to run the query directly using the client i.e. client.query(options) it works fine
but if I do so using the Query widget, I get an error:
Query(
  options: options,
  builder: (
      QueryResult result, {
        Refetch? refetch,
        FetchMore? fetchMore,
      }) {
    return  _widget;
   }
  )
)

QueryResult(source: QueryResultSource.network, data: null, context: Context({}),  exception: **OperationException**(**linkException**: ServerException(originalException: null, parsedResponse: Response(data: null, errors: [GraphQLError(message: **Must provide operation name if query contains multiple operations., locations**: null, path: null, extensions: {code: INTERNAL_SERVER_ERROR, exception: {stacktrace: [GraphQLError: Must provide operation name if query contains multiple operations.,     at buildExecutionContext....
using
graphql_flutter: ^4.0.1

So in the Query widget class's code, the QueryOptions are converted into WatchQueryOptions, and WatchQueryOptions does not contain operationName field.
Can this be the reason?

I believe this is related to my PR https://github.com/zino-app/graphql-flutter/pull/881
Currently closed but not merged because of null-safety moving to beta. Probably will need to re-open it but will wait an answer to this issue from maintainers first.

#881 has been merged to the beta branch but I don't think it's associated with any release yet.
@D4G4 you might want to test if that fixes your issue.

@ol88 This isn't currently included in any release. I can confirm with the latest beta release.

@kiloreux  It's in 5.0.0-beta.2
You might want to double check your pubspec.lock to make sure both graphql_flutter and graphql are using the 5.0.0-beta.2 release.
I actually had to force a fixed version in pubspec.yaml for it to work, just having graphql_flutter: ^5.0.0-beta.2 kept graphql on the nullsafety branch as a transitive dependency. So I had to force my pubspec.yaml to look like this:
dependencies:
  graphql_flutter: 5.0.0-beta.2
  graphql: 5.0.0-beta.2

Then double check in pubspec.lock that you have:
  graphql:
    dependency: "direct main"
    description:
      name: graphql
      url: "https://pub.dartlang.org"
    source: hosted
    version: "5.0.0-beta.2"
  graphql_flutter:
    dependency: "direct main"
    description:
      name: graphql_flutter
      url: "https://pub.dartlang.org"
    source: hosted
    version: "5.0.0-beta.2"

Somehow I kept on having graphql: 5.0.0.nullsafety.5 as a transitive dependency otherwise. Not sure if that can help...


Rename tests to default convention (Part 1)

Refactoring the integration tests to same convention:

Should_State_When_Action

This is the first part of the integration tests renaming pattern and improvements.

The test failed is regarding an issue with ccm multinode.


keep heading out same issue as no space for the codes

Challenge Name

Issue Description

Browser Information

Browser Name, Version:
Operating System:
Mobile, Desktop, or Tablet:

Your Code

Screenshot

Please add more detail and re-open @Kevin0920


vttablet: update by pk with limit -> DML_SUBQUERY

BUG=70932988
An update by pk that also has a limit clause should fall back to
a subquery plan instead of DML_PK because we can't predict the
rows that will be affected.

@dumbunny

I encountered this on DELETE DMLs, too. Please fix them as well.

Done.

LGTM


Cover 100% of properties & values accurately

Need to improve parsing & the code generator to be able to handle the more complex grammars, such as <color>.

How could I go about trying to tackle this?

I've changed a lot about how this works now, hopefully it's less magical! For color specifically, I think it would be better to have a function that could validate any colour. So, we can start with https://github.com/ben-eb/css-values/blob/90a8116494cc8e35cdc672e32462f2faa1385fde/data/data.json#L6584 as a reference point; we need to be able to validate each of these value types (except the deprecated system colours, not bothered about supporting those).
So once we have an isColor validator, we'll need to have a special case in the property generator, as currently each of the validators accept a value rather than a node from postcss-value-parser. Perhaps that warrants changing first?
https://github.com/ben-eb/css-values/issues/8 is a good starting point if you want to get stuck in.

https://github.com/ben-eb/css-values/commit/ac7a06c70ae5b1c095e0f44af274b79dceb55562 adds support for <color>.

you're fast >_>