It is possible for subscriptions to miss messages when chasing the tail under high concurrent load

Why
When inserting messages into SqlStreamStore, it is possible to get gaps in the stream, e.g. by a transaction rolling back, or by a transaction not yet ready for commit.
In the first case, the gap is legitimate, but in the second case, any subscribers to the messages should wait until  the gap has been filled.  It is not possible, upon seeing a gap to canonically determine the scenario under which a gap exists, so SqlStreamStore uses the following algorithm:

Read a page of messages
Check that every message's position is monotonically incrementing
If any message is missing, wait DefaultReloadIntervalms, and reread a batch
Return the new batch, without checking for gaps
The reason for ignoring gaps in step 4 is that if the gap is legitimate (e.g. a tx was rolled back), not to ignore gaps would cause the subscriber to continuously reload a page.

The underlying issue is that after the DefaultReloadInterval when a batch will be reloaded, subsequent messages may be written to the message queue.  These new messages may also contain gaps, but these new messages will never be checked for inconsistencies.
e.g., consider batch size is 100
First read.  5 Messages in the messages table, batch size is 100, and message 3 has not yet committed (but will be)

ReadAllForwards sees messages [1, 2, *, 4, 5] // Message 3 is missing, so it will reload

Second Read. Now 10 messages from messages table, but message 7 has not been committed (but will be)

ReadAllForwards sees messages [1, 2, 3, 4, 5, 6, *, 8, 9, 10] // Message 7 is missing

ReadAllForwards will not re-validate this batch, and will pass it onto the subscription for processing, permanently hiding message 7 form the subscription.

What
Alter the reloading strategy such that, upon reloading a page due to gaps, the reloaded page is re-validated, taking into account that a message may never exist:

Load a page
If a gap is detected:

Wait for a delay
Reload the page
Check for new gaps.  Any previously existing gaps can be ignored as abandoned messages (e.g. after a db tx rollback)
Loop until no new gaps exist

How is the thinking about this going?  As we're doing some acceptance tests trying to incorporate SQStreamStore into a new app, we're finding we can easily replicate the case under load where many events are missed by the subscriptions (~5-10 of 500000).  We haven't tried the proposed PR, but we have a very hacky workaround just to prove that this is really the problem.
While at a gut level I don't like the delay approach any more than you appear to, this is a really serious problem that results in data integrity and trust issues, so I'm resigned to the delay.  If we don't want to incorporate that into the base library, could we at least expose a IHandeEventStoreGaps or something we can provide a custom implementation for (so we don't have to fork the library)?
Also, we've found that there's another hole in the base implementation in addition to what's described here.  When there's only a single message on a page, and the gap that's returned is just before it, that message is missed too.  Our wrapper outputs these messages:
00:23:22 Returning contiguous page from base 20813..20815 <= page right before the problem
00:23:22 reading page starting at 20816 with maxCount 1000 <= calling base
00:23:22 Returning contiguous page from base 20817..20817 <= base returned a one-message page with a position higher than the ‘fromPositionInclusive’ it was told to load… and timestamps show that it didn’t wait and retry even though there was a gap
Aside from this issue - this is a really great library - very happy with it's improvements over NEventStore

Hi, @areicher, we feel your pain, and I'm personally setting aside some time this weekend to perform a deep dive into this very problem. Trust me when I say, we want this this fixed sooner rather than later. I hope to come back to you with good news.

Hi, @areicher, we feel your pain, and I'm personally setting aside some time this weekend to perform a deep dive into this very problem. Trust me when I say, we want this this fixed sooner rather than later. I hope to come back to you with good news.

@areicher
I fixed this issue from a functional perspective here
just one thing to bear in mind - when we started getting gaps, this implementation's performance bombed.  While it's safe, I'm not sure it's a reliable solution for the main project.  I didn't try @psibernetic idea because we switched to Kafka for other reasons

In SQL Server at least you may be able to handle the uncommitted (2nd case) by using a sp_applock per sequence number as it is a reader/writer lock, you can block readers when it is being written, if you aren't blocked then it was a rollback. Unfortunately the other DBs may not have similar capabilities.

Argh, sorry!
Closed by accident!

Thanks @yreynhout - that would be great! In case it's helpful: today we copied enough of the classes into our library to apply a temporary fix for the very short term (still based on the idea of delaying, but then on returning the contiguous subset of the page). If you're interested in looking at that for your implementation for some reason, the file's attached (only the ReadAllForwards has relevant changes).  In addition to what I mentioned earlier, we think there's still another risk in only looking at the last page for this too, since the boundary is (for this purpose) arbitrary and the gap could appear across it. The attache impl has a time based filter instead of page with the idea that for our case the ES is both the reader and writer so time synchronization shouldn't be a problem.
CustomReadonlyStreamStoreBase.zip

Before we start it's useful to explain the actual problem with our SqlStreamStore implementation on top of SQL Server. The position of a message in the virtual all stream is based on an IDENTITY column. Each message that is appended to a stream gets its own unique position within the all stream. Under normal circumstances, you can think of the position as being part of a monotonically incrementing sequence. However ... each time a stream-append-transaction is rolled back, whatever may be the reason (e.g. wrong expected version, a crash or fail-over, etc...), there's a chance that those positions are lost (this is by design - blame Microsoft SQL Server). In essence, what this means is that positions are NOT monotonic. Phrased differently, you can expect gaps. For example, [0,1,2,3,4,5,6,7,1000,1001,1002,...] is a perfectly acceptable sequence of positions. If only that was the end of our troubles. When stream-append-transactions are in-flight, they each allocate one or more positions. What we do not have control over is the order in which these transactions commit and thus the order in which other - mostly implicit read - transactions observe the committed positions. This due to the transaction isolation level being used and the ORDER BY [Position] clause. In other words, this is yet another source of gaps, but a temporary one. Once the transaction does commit, any later read transactions will observe the positions in the correct order. This is what the title of this issue alludes to - this only happens under higher concurrent load. So to summarize, there are two issues that may cause gaps, one is legit the other only of a temporary nature, without many hints as to which one we're dealing with. Why is this a problem? Mostly because a lot of consumers, especially subscribers, will expect to observe all positions in ascending order.
The only thing I've found that comes close to giving us a certain degree of order are Log Sequence Numbers (LSN) but to be honest I know too little about them, nor how they behave over time and space, let alone how to reconcile them with what we have today. Change data capture builds on top of LSN, so that might be worth exploring in the future but for now, again, I think it'd take us too far away from what we have already in place.
Thus I set out to build a mental model that attempts to overcome this issue as best as I can, building on top of what some of you have already covered.

When a subscription starts from a position that is "far way" from the head (I keep thinking tail), I think there's a window, either in time or number of positions between where the subscription is at and where the head is at, in which it's safe to say that we don't need to be detecting gaps, and can safely ignore them since, if they are there, it's probably because of rollbacks. Given that SQLStreamStore is in charge of the transaction life cycle I'm not envisioning transactions that have a very long lifespan. Nonetheless, I think our best option is to allow people to inject what window they feel comfortable with (think "it's a setting" with a reasonable default). As a subscription "enters" that window, the behavior it exhibits should switch from ignoring gaps to detecting gaps. If the positions being read are increasing monotonically, we're in what I'd call a gapless state. As soon as we detect a gap we enter into a gapped state where we may want to wait for that gap to be filled, albeit in a reasonable amount of time (think "another setting" people can leverage). When positions increase monotonically again, we can switch back to the gapless state. If we "exit" the window between the subscription position and the head we can go back to ignoring gaps (e.g. a subscriber that is slowing down).
I'll be the first to acknowledge that doing it this way does not provide absolute guarantees nor is it a fundamental shift from what has been proposed or implemented thus far. There are certainly edge cases to be covered, especially with regard to the position as of which one subscribes and / or gaps at the edges of a page. Because most of the subscription logic is written on top of the IReadonlyStreamStore abstraction, it's not that hard to emulate an implementation which exhibits gaps. It'll be my next order of business to spike these ideas, refine them and evaluate the result.

Hmm. That seems like a reasonable idea. Mine bombed because it treated gaps
due to rollback the same as gaps due to in-flight transactions.
One interesting thing is that there will generally be a subscription that
is ahead. That will have to deal with gaps by repolling I think, but it
could always report back to a DB table where it got to.
I haven't worked with them for a long time, but SQL 2005+ supports push
notifications to clients which could be used to notify other active
subscriptions that a gap is legitimate. All they'd need to know is where
the absolute correct head is: any gaps before that have already been
handled.
It doesn't help the first consumer, but it will stop churn subsequently.
On Sun, 10 Feb 2019, 13:26 Yves Reynhout<EMAIL_ADDRESS>wrote:

Before we start it's useful to explain the actual problem with our
SqlStreamStore implementation on top of SQL Server. The position
https://github.com/SQLStreamStore/SQLStreamStore/blob/master/src/SqlStreamStore/Streams/StreamMessage.cs#L12
of a message in the virtual all stream is based on an IDENTITY
https://github.com/SQLStreamStore/SQLStreamStore/blob/master/src/SqlStreamStore.MsSql/ScriptsV3/CreateSchema.sql#L55
column. Each message that is appended to a stream gets its own unique
position within the all stream. Under normal circumstances, you can think
of the position as being part of a monotonically incrementing sequence.
However ... each time a stream-append-transaction is rolled back, whatever
may be the reason (e.g. wrong expected version, a crash or fail-over,
etc...), there's a chance that those positions are lost (this is by
design - blame Microsoft SQL Server). In essence, what this means is that
positions are NOT monotonic. Phrased differently, you can expect gaps.
For example, [0,1,2,3,4,5,6,7,1000,1001,1002,...] is a perfectly
acceptable sequence of positions. If only that was the end of our
troubles. When stream-append-transactions are in-flight, they each allocate
one or more positions. What we do not have control over is the order in
which these transactions commit and thus the order in which other -
mostly implicit read - transactions observe the committed positions. This
due to the transaction isolation level being used and the ORDER BY
[Position] clause. In other words, this is yet another source of gaps,
but a temporary one. Once the transaction does commit, any later read
transactions will observe the positions in the correct order. This is
what the title of this issue alludes to - this only happens under higher
concurrent load. So to summarize, there are two issues that may cause
gaps, one is legit the other only of a temporary nature, without many
hints as to which one we're dealing with. Why is this a problem? Mostly
because a lot of consumers, especially subscribers, will expect to observe
all positions in ascending order.
The only thing I've found that comes close to giving us a certain degree
of order are Log Sequence Numbers (LSN) but to be honest I know too
little about them, nor how they behave over time and space, let alone how
to reconcile them with what we have today. Change data capture builds on
top of LSN, so that might be worth exploring in the future but for now,
again, I think it'd take us too far away from what we have already in place.
Thus I set out to build a mental model that attempts to overcome this
issue as best as I can, building on top of what some of you have already
covered.
[image: image]
https://user-images.githubusercontent.com/142834/52533143-dadadc80-2d2f-11e9-8f28-218a9acc5fde.png
When a subscription starts from a position that is "far way" from the head
(I keep thinking tail), I think there's a window, either in time or
number of positions between where the subscription is at and where the head
is at, in which it's safe to say that we don't need to be detecting gaps,
and can safely ignore them since, if they are there, it's probably because
of rollbacks. Given that SQLStreamStore is in charge of the transaction
life cycle I'm not envisioning transactions that have a very long lifespan.
Nonetheless, I think our best option is to allow people to inject what
window they feel comfortable with (think "it's a setting" with a
reasonable default). As a subscription "enters" that window, the behavior
it exhibits should switch from ignoring gaps to detecting gaps. If the
positions being read are increasing monotonically, we're in what I'd call
a gapless state. As soon as we detect a gap we enter into a gapped state
where we may want to wait for that gap to be filled, albeit in a reasonable
amount of time (think "another setting" people can leverage). When
positions increase monotonically again, we can switch back to the gapless
state. If we "exit" the window between the subscription position and the
head we can go back to ignoring gaps (e.g. a subscriber that is slowing
down).
I'll be the first to acknowledge that doing it this way does not provide
absolute guarantees nor is it a fundamental shift from what has been
proposed or implemented thus far. There are certainly edge cases to be
covered, especially with regard to the position as of which one
subscribes and / or gaps at the edges of a page. Because most of the
subscription logic is written on top of the IReadonlyStreamStore
abstraction, it's not that hard to emulate an implementation which exhibits
gaps. It'll be my next order of business to spike these ideas, refine
them and evaluate the result.
—
You are receiving this because you modified the open/close state.
Reply to this email directly, view it on GitHub
https://github.com/SQLStreamStore/SQLStreamStore/issues/121#issuecomment-462132730,
or mute the thread
https://github.com/notifications/unsubscribe-auth/AANOrNV4u294F_qLfAYC2RyUZrnZAKEVks5vMB3-gaJpZM4TvPBJ
.

I doubt that's worth the effort and complexity, but true that's also an assumption on my part and all paths are open at this point.

Something I've been pondering... Isn't Really Committed isolation supposed to prevent the in-flight reading anyway? Essentially, if you read over a section where a tx is in-flight it would block. My only thought here is perhaps it is RCSI (Read Committed Snapshot Isolation) that is "helping" us here by using a lock&free copy-on-read strategy. My suspicion is turning that off would make this go away.
Apologies if this is already being done I just don't want to lose these thoughts. Regarding the gaps in rollbacks, can't we use an offset/fetch? Essentially, you hold your position in another table and each position change on the stream changes the offset in the query, so essentially you do
Order by Id
Offset @position Fetch 100

And then save your position as you checkpoint.
Get Outlook for Androidhttps://aka.ms/ghei36

From: Yves Reynhout<EMAIL_ADDRESS>Sent: Sunday, February 10, 2019 6:00:56 AM
To: SQLStreamStore/SQLStreamStore
Cc: Ovan Crone; Mention
Subject: Re: [SQLStreamStore/SQLStreamStore] It is possible for subscriptions to miss messages when chasing the tail under high concurrent load (#121)
I doubt that's worth the effort and complexity, but true that's also an assumption on my part and all paths are open at this point.
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHubhttps://github.com/SQLStreamStore/SQLStreamStore/issues/121#issuecomment-462135395, or mute the threadhttps://github.com/notifications/unsubscribe-auth/AAl8JTLXKsTqiK9a0LVIjG-fvHTKSWNCks5vMCYYgaJpZM4TvPBJ.

I think only serializable gives that guarantee (but I'll be sure to measure). While correctness is preferred over speed, I'm not convinced this particular problem warrants throwing out the advantages of snapshot isolation. Granted, at this point I'm willing to try anything.
I'm a bit puzzled as to how offset / fetch is going to improve matters, especially given the sorting is happening on ID (I assume you're querying the [Messages] table) - identity column gaps happen because the number allocation happens "outside" of the user transaction (unless maybe if we turn off identity_cache at the database level but then there's a performance penalty for that as well). Could you elaborate a bit more?

Our local workaround (I work with @areicher) essentially does what I think @yreynhout outlined above.
We've updated ReadOnlyStreamStoreBase a little:
			// Under heavy parallel load, gaps may appear in the position sequence due to sequence
			// number reservation of in-flight transactions.
			// Here we check if there are any gaps, and in the unlikely event there is, we delay a little bit
			// and re-issue the read. This is expected
			/*
			if(!page.IsEnd || page.Messages.Length <= 1)
			{
				return await FilterExpired(page, ReadNext, cancellationToken).NotOnCapturedContext();
			}
			*/

			// only short circuit now for empty pages or 'old' pages, where
			// 'old' is defined as pages whose last message is older than _positionWriteDelayThreshold ago
			if(page.Messages.Length == 0 || ((DateTime.UtcNow - page.Messages[page.Messages.Length-1].CreatedUtc) > _positionWriteDelayThreshold))
				return await FilterExpired(page, ReadNext, cancellationToken).NotOnCapturedContext();

			// Check for gap between last page and this.
			if(page.Messages[0].Position != fromPositionInclusive)
			{
				if(!page.IsEnd || page.Messages.Length == 1)
					Logger.DebugFormat("Gap detected at lower page boundary.  Potentially could have lost {lostMessageCount} events if the gap is transient", page.Messages[0].Position - fromPositionInclusive);
				page = await ReloadAfterDelay(fromPositionInclusive, maxCount, prefetchJsonData, ReadNext, cancellationToken);
			}

			// check for gap in messages collection
			for(int i = 0; i < page.Messages.Length - 1; i++)
			{
				var expectedNextPosition = page.Messages[i].Position + 1;
				if(expectedNextPosition != page.Messages[i + 1].Position)
				{
					Logger.InfoFormat("Gap detected in "+(page.IsEnd?"last":"(NOT the last)")+" page.  Returning partial page {fromPosition}-{toPosition}", fromPositionInclusive, fromPositionInclusive+i+1);

					// switched this to return the partial page, then re-issue load starting at gap
					// this speeds up the retry instead of taking a 3 second delay immediately
					var messagesBeforeGap = new StreamMessage[i+1];
					page.Messages.Take(i+1).ToArray().CopyTo(messagesBeforeGap, 0);
					return new ReadAllPage(page.FromPosition, expectedNextPosition, page.IsEnd, page.Direction, ReadNext, messagesBeforeGap);
				}
			}

			return await FilterExpired(page, ReadNext, cancellationToken).NotOnCapturedContext();

I am happy to submit this as a PR (or Aaron would, I'm sure), but given the hesitation around the previous PR, I think we wanted to avoid that unless it was likely to get accepted.
Would you like us to make a PR?  To be honest, we would very much rather have this in a patched 1.1.x or in a trunk version than continue using a local workaround.

What's the current consensus on this?

What is the status on this issue? Seems like a high priority issue. The SQLStreamStore is not reliable while this is unsolved.
Will this be fixed or is should we not use SQLStreamStore when you want a reliable store?

What is the status on this issue? Seems like a high priority issue. The SQLStreamStore is not reliable while this is unsolved.
Will this be fixed or is should we not use SQLStreamStore when you want a reliable store?

@bertzor I think one workaround that came up is running you database connection in serializeable transaction mode. This will definitely hurt performance, but should give guarentees.

@bertzor I think one workaround that came up is running you database connection in serializeable transaction mode. This will definitely hurt performance, but should give guarentees.

We had good luck with the changes I posted above, but ymmv.  The missing piece from my snippet above is the backing field:
private TimeSpan _positionWriteDelayThreshold = TimeSpan.FromMinutes(5);```

Keep in mind that my change above was applied to 1.1.3, and I haven't looked at updated sources.  I am not actively using EventSourcing at the moment, and unfortunately I don't really have time to do an up-to-date PR for this against the latest sources with tests, but I will try to respond if there are specific questions.  It would be great if this made it into official sources, though, because I expect to be back to using SQLStreamStore soon.

We had good luck with the changes I posted above, but ymmv.  The missing piece from my snippet above is the backing field:
private TimeSpan _positionWriteDelayThreshold = TimeSpan.FromMinutes(5);```

Keep in mind that my change above was applied to 1.1.3, and I haven't looked at updated sources.  I am not actively using EventSourcing at the moment, and unfortunately I don't really have time to do an up-to-date PR for this against the latest sources with tests, but I will try to respond if there are specific questions.  It would be great if this made it into official sources, though, because I expect to be back to using SQLStreamStore soon.

What about using the lowest transaction start time from pg_stat_activity instead of relying on gap detection?
i.e. subscription polls would use something like:
SELECT * FROM messages
WHERE created_utc < (select min(xact_start) from pg_stat_activity)
  AND position > _from_position

An alternative idea:  instead of guessing, ask the database.  If you requested 1000 rows and received less than 1000 rows, then check if there are gaps (using last position minus first position).  If there are gaps, issue a COUNT over the same query you're using to retrieve the messages.  The result of this query will (?) accurately account for rolled back transactions vs. uncommitted transactions.  If the result matches the number of rows you previously received, you know you can process the page.  If it does not match, you repeat the above process until it does.

@ryanjshaw That's a fine idea. I'm not sure it would work because the reads don't necessarily hit the serialization issues (at least not from my preliminary testing)
I did have success with just trying to append to the table with the missing position
-- transaction 1
BEGIN
-- this will be position 13 in the test
SELECT * from dbo.append_to_stream(
    'hashedid'::char(42),
    'Test-123'::varchar(1000),
    'hashedmetadataid'::char(42),
    -2::integer,
    now()::timestamp without time zone,
    Array[(uuid_generate_v4(), 'Test', '{"test": 123}', NULL)]::dbo.new_stream_message[])

-- transaction 2
BEGIN
SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
insert into dbo.messages(stream_id_internal, stream_version, position, message_id, created_utc, type, json_data, json_metadata)
values (
        -- we insert position 13 triggering a wait for the 1st transaction
        1, 13, 13, uuid_generate_v4(), now(), '$$gapcheck', '{"position": 13}', null
       ) on conflict do nothing;
-- transaction 2 is now blocked
-- transaction 1
COMMIT;

-- transaction 2 is now unblocked
select * from dbo.read_all(10, 10, true, true);
commit;

So some pseudocode
function read_all (from, limit) {
  result = sql_read_all(from, limit)
  if (hasGaps(result)) {
    gap = getGap(result)
    appendResult = insertGapCheckMessageAtPosition(gap)
    if (isSuccessful(appendResult)) {
      // this gap is fine (either a deleted message or reverted trx)
      deleteMessage(appendResult)
    } else {
      return read_all(from, limit)
    }
  }
}

@nordfjord I'm not sure I follow.  My understand of the issue, based on comments from @spadger and @yreynhout, is as follows:
We want to retrieve a page of messages where the range of rows is being determined by an IDENTITY column. Unfortunately using an IDENTITY column in a range query has the problem of UNCOMMITTED transactions affecting the query result.
Note:  fromPosition is the parameter @position supplied to https://github.com/SQLStreamStore/SQLStreamStore/blob/master/src/SqlStreamStore.MsSql/ScriptsV3/ReadAllForward.sql.
Scenario 1 - no rolled back or uncommitted transactions in the range
Position 1 COMMITTED
Position 2 COMMITTED
Position 3 COMMITTED

Query Results:  3 rows returned, fromPosition == 1 and lastPosition == 3
Analysis:  lastPosition - fromPosition + 1 == rowCount => 3 - 1 + 1 == 3 therefore there are no gaps in our page, we can process the page
Scenario 2 - rolled back/uncommitted exclusively following committed
Position 1 COMMITTED
Position 2 ROLLED BACK
Position 3 UNCOMMITTED

Query Results:  1 row returned, 'fromPosition' == 1 and 'lastPosition' == 1
Analysis:  lastPosition - fromPosition + 1 == rowCount => 1 - 1 + 1 == 1 therefore there are no gaps in our page, we can process the page
Position 3, once committed, will be selected for in a subsequent query, which will then map to one of these scenarios depending on exactly how things play out.
Scenario 3 - a rolled back transaction between committed transactions
Position 1 COMMITTED
Position 2 ROLLED BACK
Position 3 COMMITTED

Query Results:  2 rows returned, 'fromPosition' == 1 and 'lastPosition' == 3
Analysis:  lastPosition - fromPosition + 1 != rowCount => 3 - 1 + 1 != 2 therefore there are gaps in our page, we can need to check if any of these rows are uncommitted rows or if they are all just rolled back transactions
So we issue a READ UNCOMMITTED (e.g. WITH (NOLOCK)) COUNT(*) WHERE Position BETWEEN @fromPosition AND @lastPosition
Query Results:  2 (i.e. there's only COMMITTED/UNCOMMITTED rows between the two positions)
2 matches our row count, therefore we can process the page.
Scenario 4 - an uncommitted transaction between committed transactions
Position 1 COMMITTED
Position 2 UNCOMMITTED
Position 3 COMMITTED

Query Results:  2 rows returned, 'fromPosition' == 1 and 'lastPosition' == 3
Analysis:  lastPosition - fromPosition + 1 != rowCount => 3 - 1 + 1 != 2 therefore there are gaps in our page, we can need to check if any of these rows are uncommitted rows or if they are all just rolled back transactions
As you can see, the analysis is the same as for scenario 3 -- we have a gap.  But in this case we also have a problem, because if we process the page, we will start looking for @position >= 4 and miss @position == 2 forever.
So we issue a the same READ UNCOMMITTED COUNT query as per above
Query Results:  3 (i.e. there's THREE COMMITTED/UNCOMMITTED rows between the two positions supplied)
3 does not match our row count, therefore we need to wait for the row in the gap to be committed (or rolled back).  We can implement a small delay before restarting our logic, at which point we may see something like:
Position 1 COMMITTED
Position 2 COMMITTED OR ROLLED BACK
Position 3 COMMITTED

which is covered by one of the previous scenarios
Scenario 5 - an mix of rolled back and uncommitted transactions between committed transactions
Position 1 COMMITTED
Position 2 UNCOMMITTED
Position 3 ROLLED BACK
Position 4 COMMITTED

Query Results:  2 rows returned, 'fromPosition' == 1 and 'lastPosition' == 4
Analysis:  lastPosition - fromPosition + 1 != rowCount => 4 - 1 + 1 != 2 therefore there are gaps in our page, we can need to check if any of these rows are uncommitted rows or if they are all just rolled back transactions
So we issue a the same READ UNCOMMITTED COUNT query as per above
Query Results:  3 (i.e. there's THREE COMMITTED/UNCOMMITTED rows between the two positions supplied)
3 does not match our row count, therefore we need to wait for the row in the gap to be committed (or rolled back).  We can implement a small delay before restarting our logic, at which point we may see something like:
Position 1 COMMITTED
Position 2 COMMITTED OR ROLLED BACK
Position 3 ROLLED BACK
Position 4 COMMITTED

which is covered by one of the previous scenarios

@ryanjshaw Are you sure READ UNCOMMITTED gives you the guarantees you want? I didn't have success even at the SERIALIZABLE isolation level with the following test (on a fresh schema):

transaction 1
transaction 2
result

BEGIN

append_to_stream

Appends at position 0

BEGIN

SET TRANSACTION ISOLATION LEVEL SERIALIZABLE

read_all
returns nothing

select count(*) where position > 0 and position <= 10
returns 0

COMMIT

COMMIT

@nordfjord I'm not sure I follow why you are using serializable?
You should execute ReadForwardAll with READ COMMITTED and you should execute the count with READ UNCOMMITTED.

@nordfjord I'm not sure I follow why you are using SERIALIZABLE?
You should execute ReadAllForward with READ COMMITTED and you should execute the count with READ UNCOMMITTED.

I was testing this on Postgres where READ UNCOMMITTED is automatically upgraded to READ COMMITTED so the solution is a no-go for Postgres if it requires READ UNCOMMITTED. Would be lovely if it works for sql-server though 😄

@nordfjord I'm not sure I follow why you are using SERIALIZABLE?
You should execute ReadAllForward with READ COMMITTED and you should execute the count with READ UNCOMMITTED.

I was testing this on Postgres where READ UNCOMMITTED is automatically upgraded to READ COMMITTED so the solution is a no-go for Postgres if it requires READ UNCOMMITTED. Would be lovely if it works for sql-server though 😄

Ah, that's really interesting.  This seems like an oversight on the part of the PostgreSQL designers:  they support something (SERIAL/GENERATED AS IDENTITY) which allows UNCOMMITTED and ROLLED BACK transactions to affect a resource in the scope of another transaction, but they give you no way to read from that UNCOMMITTED state.
I understand now why you are trying to insert into those positions - it's the only way you can probe the UNCOMMITTED state.  I wonder if you can do something like `SELECT 1 FROM Messages WITH (UPDLOCK) WHERE Position IN (@TVP)", and check the row count, to avoid performing a modification?
Here is what happens in SQL Server -- works perfectly:

@nordfjord I've been thinking about this and maybe those PostgreSQL guys are smart after all.
I think we could implement a new procedure, WaitForPageToCommit, which looks like this on SQL Server:
SELECT 1 FROM [Message] WITH (UPDLOCK) WHERE [Position] BETWEEN @fromPosition AND @toPosition
It seems that PostgreSQL has something similar, SELECT ... FOR UPDATE but I can't confirm the behaviour is the same - can you?  See https://www.postgresql.org/docs/9.0/sql-select.html#SQL-FOR-UPDATE-SHARE:  "if an UPDATE, DELETE, or SELECT FOR UPDATE from another transaction has already locked a selected row or rows, SELECT FOR UPDATE will wait for the other transaction to complete, and will then lock and return the updated row (or no row, if the row was deleted)."
I tested this with SQL Server and it works perfectly in snapshot isolation mode (default mode for SQLStreamStore).
Aside from the same pattern being applicable to all databases, what's really nice about approach is you execute this SQL when you detect a gap, and the DBMS will return when your page is ready -- there is no repeated polling, no arbitrary delays, etc.

Hey, I've tried using FOR UPDATE in postgres but that does not seem to work unfortunately. I don't think there's any way in postgres to make an uncommitted row visible other than probing at a constraint.
But it sounds like there's a decent way forward for the rest of the sql databases.
I think you might run into deadlock scenarios if you introduce locking into ReadAllForwards. imagine you have an event at position 1, and an in flight transaction at position 2, then query with (UPDLOCK) where position between 0 and 10, then before the transaction at position 2 completes another one starts at position 3. Now the tx at pos 3 is waiting for the select to finish, and the select is waiting for the tx to finish 😕 .

@nordfjord According to the PostgreSQL manual ink I shared, FOR UPDATE only affects other "UPDATE, DELETE, or SELECT FOR UPDATE" transactions so INSERT shouldn't be blocked?  But then it seems FOR UPDATE doesn't work as expected so maybe I'm missing something fundamental about the PostgreSQL MVCC model.  Hopefully somebody else with PostgreSQL experience can see something we're not;   on my part, I will be performing more SQL Server testing and see if I can contribute a PR.

Yet another idea for this. What if we used a separate table for the all stream that was updated via a deferrable constraint trigger?
CREATE TABLE all_messages
(
    position   bigserial not null,
    stream_id  text      not null,
    message_id uuid      not null,
    primary key (position)
);

create or replace function append_message_to_all()
    returns trigger
    language plpgsql
as
$$
begin
    insert into all_messages(stream_id, message_id) VALUES (NEW.stream_id_internal, NEW.id);
    return NEW;
end;

$$;

create constraint trigger append_to_all
    after insert
    on messages
    deferrable initially deferred
    for each row
execute procedure append_message_to_all();

The deferrable initially deferred means the procedure will execute at the very end of the transaction before it's committed. This might drastically reduce the likelihood of gaps in the first place.
Alternatively making the all stream an eventually consistent projection is starting to sound like a better and better idea 😂

Think I found a solution https://github.com/adamfur/Chaser. It runs 4 concurrent writers and one worker that chases the auto increment value. A lot of gaps occurs but it's doesn't cause any problems. I accumulated all the items auto increment values in the loop then compare to an aggregation to the actual content of the database. Always get the correct result.

For anybody still interested in this topic, I stumbled across @evgeniy-khist and their PostgreSQL event sourcing reference implementation today.
They have an interesting solution that uses transaction IDs to solve this problem, and a thorough discussion of their solution with beautiful sequence diagrams:  https://github.com/evgeniy-khist/postgresql-event-sourcing#4-7-1.
You should also note an important caveat that is not discussed in that section, but later in the document:

A long-running transaction in the same database will effectively "pause" all event handlers. pg_snapshot_xmin(pg_snapshot) will return the ID of this long-running transaction and events created by all later transactions will be read by the event subscription processor only after this long-running transaction is committed.


Only works on same domain

With CSRF and relying on laravel cookies, it appears this can not be opened up to cross-domains. The best setup is to have API and UI on their own isolated domain names. a root and a subdomain. Unless I'm missing something, it doesn't appear that this will work.

Hi @timothymarois ,
This should work as long as your API and frontend share the same top-level domain.
From the Laravel Sanctum docs:

In order to authenticate, your SPA and API must share the same top-level domain. However, they may be placed on different subdomains.

You will likely need to add this to your Laravel's .env file to avoid authentication issues:
SESSION_DOMAIN=.yourdomain.com

Pay attention to include that dot prefix.
Hope this helps.


input type text width

Hi all,
i have one question, is posible or change the width of input type text in the head? i have one column that the filter is input text but the width of that colum change when create a filter, so is posible work like a select filter? chosen for example is adjust to the width of the column.
Thanks,

Hi,
Every yadcf filter / its wrapper have a class / id so you can set any style / width / etc to the filters, this is the only way possible to control the size of the filters.


config: adding support for GetCertificate(*tls.ClientHello)

Description
Add support for GetCertificate func(*tls.ClientHelloInfo) (*tls.Certificate, error). The goal is to close the feature parity gap with stdlib's tls package.
Questions to reviewers: What other tests should I be adding? I'm certain that I've missed some code paths.
Reference issue
Fixes #386

When I implemented GetCertificate and created PR, I saw yours. Could I add you as a contributor to my PR and close this one?

oh jeez sorry I missed this @zllovesuki
That sounds like the right thing to do to me @jkralik! Thanks for adding as contributor to your PR :)


fix: log level message for nfs linux sampler

The warning message is logged even if there are no NFS in the system.
This commit moves the log level to debug in case there are no NFS mounts.

Thank you @rogercoll !


Contact Us Section Not Responsive

Hi @Naresh-chandanbatve, I have identified an issue related to the responsiveness of the "Contact Us" section.
Problem:
The current implementation of the "Contact Us" section lacks responsiveness, causing it to display improperly on different devices and screen sizes. This issue hampers user experience and may result in difficulty for users trying to access the contact information or interact with the section.

Approach:
To address this problem, I propose the following steps:

Responsive Design: Implement responsive CSS techniques to ensure that the "Contact Us" section adapts smoothly to various screen sizes, such as mobile, tablet, and desktop views. This will enhance the usability and accessibility of the section.

Media Queries: Utilize CSS media queries to define specific styles for different breakpoints, enabling the section to adjust its layout and content dynamically based on the device or screen size. This approach will ensure that the "Contact Us" section remains legible and user-friendly across various devices.

Additional Information:
As a participant in GSSOC3 with prior experience in similar projects, I aim to apply my expertise and prior experience in addressing similar issues to enhance the responsiveness of the "Contact Us" section. This will contribute to the overall improvement of the project and enhance the user experience.
Thank you for considering my involvement in resolving this issue. I look forward to collaborating with the organization to ensure the successful implementation of the necessary changes.
Best regards,
Premsai Varma

Go for it @premsaivarmachekuri ..

Working on it Naresh.
On Thu, May 25, 2023 at 2:01 PM Naresh Chandanbatve <
@.***> wrote:

@premsaivarmachekuri https://github.com/premsaivarmachekuri progress?
—
Reply to this email directly, view it on GitHub
https://github.com/UBA-GCOEN/StichHub/issues/7#issuecomment-1562501160,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/A2NVDOO74F4RJF7GEMVETGTXH4KFTANCNFSM6AAAAAAYI2FEWM
.
You are receiving this because you were mentioned.Message ID:
@.***>

I want to work on this issue under gssoc'23

okay @vk20july go ahead

@Siddhant-Patil0203 sir can you check is it still non-responsive as i think it is responsive in all different size

@Siddhant-Patil0203 sir can you check is it still non-responsive as i think it is responsive in all different size

Yup it is responsive now 🙂


A MessageBox extension that allows "Further Details" to be shown

Press a button, and a slide down panel will be shown with "Application" extended more info style..
Could be an RTF control.
Will still need to Ctrl+C compatible.

https://github.com/Nexus-Mods/Nexus-Mod-Manager/blob/master/UI/Controls/ExtendedMessageBox.cs

Not allow4ed to use that code due to "GNU General Public License v2.0"

Ahh ok, I'm trying to create the message boxes using winforms. Message boxes with 'extra details' may require new controls to be written. I have been trying to find some controls to use, but haven't found any yet. Also, how big should the message box icon be (in pixels), as I intend users to have the option to set a custom one alongside default ones, any thoughts?

Have a look at the KryptonMessageBox code as the start point.
Also the WPF Message has prettier (relative) and slightly larger icons.

Yes I have extracted the code as a reference point. I'm going to look into how best to do a timeout function, a progress bar might be a nice feature here, possibly attached to a bool argument to toggle viability of it?

Most of these messageBox enhancements could be covered as a subset of a "Task Dialog"
https://www.developerfusion.com/article/71793/windows-7-task-dialogs/
I think once the CommandLink button is sorted then the above would be able to do the rest of the MessageBox things.

I do have a Windows API Code Pack Nuget package already available if this helps.

I have a CommandLink C# Button already in my projects "https://github.com/Smurf-IV/Elucidate/tree/master/Elucidate/Elucidate/Shared"
It just need to be put into "Krypton Language" so that the layout is corrected.
You can assign that request to me if you like.

https://github.com/JohannBlais/InformationBox


make clippy warnings errors in CI

Oh hey also this will expose the warnings and fail the check, but will not block the merging of the PR, that's currently pegged on 1: a good review, and 2: passing ubuntu-latest build check.

I think thats fine @dconnolly, if people end up ignoring the clippy warnings just because they're not blocking the merge then we can think about making it a blocker, but I bet this will be sufficient for preventing warnings from sneaking into the codebase.

I think thats fine @dconnolly, if people end up ignoring the clippy warnings just because they're not blocking the merge then we can think about making it a blocker, but I bet this will be sufficient for preventing warnings from sneaking into the codebase.

@yaahc the underlying problem is that warnings on forks don't appear in the job status as a failed clippy build, due to a GitHub integration issue with annotations:

I didn't see the clippy warnings when I did the review, because GitHub doesn't show check annotations in PRs from forked repositories:
actions-rs/clippy-check#2
(See #598.)


Extension contributed submenus missing with errors in output

Does this issue occur when all extensions are disabled?: No

VS Code Version: 1.70.0-insider
OS Version: Darwin x64 21.5.0

VS Code version info
Version: 1.70.0-insider
Commit: 052d5b0027f6c9d64c8ca35955cb5117ba94d5d7
Date: 2022-07-13T05:21:34.551Z
Electron: 18.3.5
Chromium: 100.0.4896.160
Node.js: 16.13.2
V8: <IP_ADDRESS>-electron.0
OS: Darwin x64 21.5.0

The Azure Resource Groups extension has a submenus that aren't showing up on Insiders, but show up as expected on VS Code Stable. https://github.com/microsoft/vscode-azureresourcegroups/issues/330
The issue only reproduces on insiders 1.70.0-insider. Does not repro on stable (1.69.1)
I've verified that this bug impacts GitLens submenus as well, but haven't had time to log the issue over there yet.
I've made a sample extension as a minimal reproduction. https://github.com/alexweininger/vscode-submenu-sample
Steps to Reproduce:

Open new window of VS Code Insiders (with a folder/files open if you want to verify that the sample submenu disappears)
Install Submenu sample extension VSIX of the sample extension I made that contributes a submenu to the editor/title.
View "Log (Window)" output channel. If there aren't errors yet, disabling the submenu sample extension, which seems to reload all the extension contributions which causes the error.
After these errors are shown in the logs, the submenu disappears.

I believe it could be caused by 21147b8 (#154801)
Errors from the "Log (Window)" output channel:
[2022-07-13 00:16:54.982] [renderer7] [error] Duplicate menu identifier api:git.commit: Error: Duplicate menu identifier api:git.commit
    at new o (vscode-file://vscode-app/Applications/Visual%20Studio%20Code%20-%20Insiders.app/Contents/Resources/app/out/vs/workbench/workbench.desktop.main.js:697:3734)
    at i._handler (vscode-file://vscode-app/Applications/Visual%20Studio%20Code%20-%20Insiders.app/Contents/Resources/app/out/vs/workbench/workbench.desktop.main.js:1691:42853)
    at i._handle (vscode-file://vscode-app/Applications/Visual%20Studio%20Code%20-%20Insiders.app/Contents/Resources/app/out/vs/workbench/workbench.desktop.main.js:1686:26570)
    at i.acceptUsers (vscode-file://vscode-app/Applications/Visual%20Studio%20Code%20-%20Insiders.app/Contents/Resources/app/out/vs/workbench/workbench.desktop.main.js:1686:26474)
    at Function._handleExtensionPoint (vscode-file://vscode-app/Applications/Visual%20Studio%20Code%20-%20Insiders.app/Contents/Resources/app/out/vs/workbench/workbench.desktop.main.js:3172:33062)
    at E._doHandleExtensionPoints (vscode-file://vscode-app/Applications/Visual%20Studio%20Code%20-%20Insiders.app/Contents/Resources/app/out/vs/workbench/workbench.desktop.main.js:3172:31895)
    at E._deltaExtensions (vscode-file://vscode-app/Applications/Visual%20Studio%20Code%20-%20Insiders.app/Contents/Resources/app/out/vs/workbench/workbench.desktop.main.js:3172:20709)
    at async E._handleDeltaExtensions (vscode-file://vscode-app/Applications/Visual%20Studio%20Code%20-%20Insiders.app/Contents/Resources/app/out/vs/workbench/workbench.desktop.main.js:3172:19726)
[2022-07-13 00:16:54.983] [renderer7] [error] [vscode.git]: Menu item references a submenu `git.commit` which is not defined in the 'submenus' section.
[2022-07-13 00:16:54.984] [renderer7] [error] [vscode.git]: Menu item references a submenu `git.changes` which is not defined in the 'submenus' section.
[2022-07-13 00:16:54.984] [renderer7] [error] [vscode.git]: Menu item references a submenu `git.pullpush` which is not defined in the 'submenus' section.
[2022-07-13 00:16:54.984] [renderer7] [error] [vscode.git]: Menu item references a submenu `git.branch` which is not defined in the 'submenus' section.
[2022-07-13 00:16:54.984] [renderer7] [error] [vscode.git]: Menu item references a submenu `git.remotes` which is not defined in the 'submenus' section.
[2022-07-13 00:16:54.984] [renderer7] [error] [vscode.git]: Menu item references a submenu `git.stash` which is not defined in the 'submenus' section.
[2022-07-13 00:16:54.985] [renderer7] [error] [vscode.git]: Menu item references a submenu `git.tags` which is not defined in the 'submenus' section.
[2022-07-13 00:16:54.985] [renderer7] [info] [vscode.git]: `git.commit` is not a valid menu identifier
[2022-07-13 00:16:54.985] [renderer7] [info] [vscode.git]: `git.changes` is not a valid menu identifier
[2022-07-13 00:16:54.985] [renderer7] [info] [vscode.git]: `git.pullpush` is not a valid menu identifier
[2022-07-13 00:16:54.985] [renderer7] [info] [vscode.git]: `git.branch` is not a valid menu identifier
[2022-07-13 00:16:54.986] [renderer7] [info] [vscode.git]: `git.remotes` is not a valid menu identifier
[2022-07-13 00:16:54.986] [renderer7] [info] [vscode.git]: `git.stash` is not a valid menu identifier
[2022-07-13 00:16:54.986] [renderer7] [info] [vscode.git]: `git.tags` is not a valid menu identifier
[2022-07-13 00:16:54.987] [renderer7] [info] [testing.helloworld-sample]: `foo` is not a valid menu identifier
[2022-07-13 00:16:54.987] [renderer7] [error] [testing.helloworld-sample]: Menu item references a submenu `foo` which is not defined in the 'submenus' section.

https://user-images.githubusercontent.com/12476526/178681189-53b164d9-4e84-4bcd-9156-61919cb67f55.mov
You can also easily reproduce this by installing and enabled/disabling various extensions that contribute submenus. Ex: GitLens and Azure Resource Groups.

@jrieken could this be a consequence of your recent work on menus?

Yes. Menu identifiers need to be unique (while they were using a different identity before). I think for contributed submenus this needs to be relaxed

The error mentions a different menu identifier (Error: Duplicate menu identifier api:git.commit) but I can understand how this happens. I will push a fix

@jrieken I'm still able to reproduce this on the latest insiders version.
[2022-07-14 09:23:54.038] [renderer7] [info] [testing.submenu-sample]: `foo` is not a valid menu identifier
[2022-07-14 09:23:54.040] [renderer7] [error] [testing.submenu-sample]: Menu item references a submenu `foo` which is not defined in the 'submenus' section.

Version: 1.70.0-insider
Commit: e0a65a97d4f349cf11a7cae804a5553ccb412528
Date: 2022-07-14T05:17:37.220Z
Electron: 18.3.5
Chromium: 100.0.4896.160
Node.js: 16.13.2
V8: <IP_ADDRESS>-electron.0
OS: Darwin x64 21.5.0

According to @fiveisprime this still repros

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

When debugging the issue doesn't reproduce because the extensions are activated at the same time, and their menus are registered together. However, when not debugging, if the extensions are activated at different times, it fails to register the menus properly.

Let's assign to August for an investigation.
I also asked @alexweininger to provide more info. For example if you build vscode out of source https://github.com/microsoft/vscode/wiki/How-to-Contribute and you revert https://github.com/microsoft/vscode/pull/154801/commits/21147b8c9827809b5dc7db1236b0ff8ccf6c1cd2 can you still repro?

Since this looks like a regression - marking as a candidate for recovery release 2.

Created a PR https://github.com/microsoft/vscode/pull/158140 fixing this

@jeanp413 awesome, thanks a lot!
@jrieken just came back from vacation, and will review the PR and investigate more in the bug. We quickly glanced at the PR together and it seems to be fixing the right thing.
@alexweininger we expect to have a stable release on Wednesday that will have a fix for this issue. Thanks!

Fix is in main and in release/1.70

@alexweininger Can you please verify this with latest insiders and/or 1.70.2 release candidate

Verified with latest insiders.'


Add Git tags for Azure deployments and swaps (OSOE-861)

We've talked about this in various ways, but here's an approach that I think is feasible and would be very useful to see what the state of the Azure app is in the repo.

[ ] When doing a deployment, add a staging (by default, configurable) tag to the current commit. This tag always points to the latest staging commit, so move it if it already exists. Also add a commit that contains the exact timestamp, e.g. staging-2020-12-31-23:37UTC. This tag stays.
[ ] When doing a swap, look up the latest deployment tag and similarly add a production (by default, configurable) tag to it (and always move to the latest) and a similar timestamp permanent tag. This will need a push token and repo URL configured, since the swap repo is different than the deploy repo.

Jira issue

@BenedekFarkas what do you think?

And @wAsnk @DemeSzabolcs as PLs of two affected apps.

LGTM

I think we talked about the problem of "I want to know what went into Production with the last swap" a couple months ago, so yeah, this is something I personally lack from our setup at the moment. The information is available, but a ready-made list would be convenient and useful.
Couple notes:

Swap should also have a permanent (timestamped) tag and the timestamp should be the same as the datetime of the AI annotation, so they're easier to correlate (same goes for the timestamped tag for staging).
Naming: To make it easier to browse (in GitExt for example) the naming structure could be e.g., staging/latest and staging/{timestamp} (because over time we'll have a lot of these). BTW same as with branches, you cannot have staging and staging/latest at the same time for example.
Swapping should also create a release in the code repo, this shouldn't be an issue based on the already present tags.

@AydinE Tick above what you've completed.


Manual test

The manual tests are fully done by @MedHazem
I tested it locally and everything runs well. Well done @MedHazem! 🤜🤛
I just changed the development library file to the production file in this commit: 4ca34d38ab0f0fdb21cd98a8b08af06e82d9c648
as in a real-world scenario, the production build will be shipped to the end-user.

Thank you Mourad


fix fibonacci example typo

fix fibonacci example typo in Math section

Found the same issue with fibonacciUntilNum. The expected output should be [0, 1, 1, 2, 3, 5, 8] for fibonacciCountUntilNum(10)


#250 Add es module build

Fixes #250.
This outputs and es modules build so people using rollup or webpack 2+ can benefit from tree shaking.
I will note that it's complaining about the current export setup.

Straight from the rollup docs:

It is bad practice to mix default and named exports in the same module, though it is allowed by the specification.

For module consumers to be able to treeshake effectively they'll need to consume the named exports. I don't think leaving this in is a big deal... we could configure the exports setting like they recommend. I'll leave that up to you though.

Looks great!

we could configure the exports setting like they recommend

Yes, please do.
A bit of a history why it ended up this way: when I first published Kefir, I wanted const {Kefir} = require('kefir') to work for some reason. And when we migrated to rollup we preserved this.
But I don't think any more that this is important, and it breaks tree shaking. Let's get rid of it. Some people will have to update their code maybe, but it should be easy for them.

Although wait :)
We probably want import Kefir from 'kefir' to still work, and that what rollup is complaining about.
We also allow to import {Kefir} from 'kefir' AFAIK, which I think is ok to remove.

Losing import Kefir from 'kefir'; would be a painful breaking change, so yeah, please leave that in.
Not that I'm opposed to the PR, but I also don't think tree shaking is going to have a large impact on the size of a bundle using Kefir, because most of the weight is in prototype methods, which can't be shaken out.

@zephraph , could you please look if not supporting import {Kefir} from 'kefir' will improve anything it terms of tree shaking? And if so, remove support of it.
Otherwise I think this PR is good to go!

To get any benefit from tree shaking the esm build can't use import Kefir from 'kefir'. That doesn't mean that the current build needs to change. If you're just using babel or require statements it should work as it always has.
I don't think we should remove the default export though, maybe just set the exports: named flag as rollup suggests.
Though, I do question whether this should be released as a major following semantic versioning. People on webpack or rollup may suddenly experience a breaking change if this rolls out. There's nothing we could due to preserve the import Kefir from 'kefir' for those users unless there was only a default export... which I assume would break others.
Lastly, I was trying this out last night in my build and for whatever reason babel was puking... maybe an issue with my setup. Anyway, I can't verify yet the size changes. I'll report back if I get it working, but if anyone else could try it out I'd appreciate it!

I don't think we should remove the default export though, maybe just set the exports: named flag as rollup suggests.

Agree.

Though, I think this may need to be released as a major following semantic versioning. People on webpack or rollup may suddenly experience a breaking change if this rolls out.

Why? Because webpack or rollup will pick up our new ESM build? But seems like it has both named and default exports:
export { dissableDeprecationWarnings, Kefir, Observable, Stream, Property, never, later, interval,
 sequentially, fromPoll, withInterval, fromCallback, fromNodeCallback, fromEvents, stream, constant,
 constantError, fromPromise, fromESObservable, combine, zip, merge, concat$1 as concat, Pool,
 pool, repeat, staticLand };export default Kefir;

Lastly, I was trying this out last night in my build and for whatever reason babel was puking... maybe an issue with my setup.

I've tried doing npm run build with fresh node_modules, works fine for me.

seems like it has both named and default exports

You're absolutely right, it does have both. The docs from rollup say that...

The wrinkle is that if you use named exports but also have a default export, a user would have to do something like this to use the default export:

var yourMethod = require( 'your-lib' ).yourMethod;
var yourLib = require( 'your-lib' )['default'];

Maybe this is a non-issue. Maybe webpack and rollup will handle this correctly. From the docs this seems to be more pointing towards commonjs compatibility (which we wouldn't need to worry about being the commonjs build is preserved). I think we'll just have to make sure we test it well and it doesn't break an existing webpack or rollup build.

I've tried doing npm run build with fresh node_modules, works fine for me.

That's not what I meant. I've got a webpack 3 project that uses kefir. When I tried to build with that project it choked on kefir by complaining about some of my babel plugins. I'm not sure why exactly because I've set babel-loader to ignore the node_modules directory...
Regardless, I've just been unable to test it yet.

In our case require('your-lib') will equal to require('your-lib')['default'], because in export {...};export default Kefir; the {...} is the same as Kefir. So, we should be fine.
I just worry that collecting all exports in single object (Kefir) may ruin tree shaking. But we probably ruin it by collecting all methods in Observable prototype anyway, as @mAAdhaTTah pointed out above :(

I'm not sure why exactly because I've set babel-loader to ignore the node_modules directory...

I've had this problem. If you're symlinking the build, it uses the resolved path, so the regex that ignores node_modules doesn't apply. If you update test for your loader to be something like /(node_modules|kefir)/, it'll work how you expect.

Amazing hint. Thanks!

@zephraph Were you able to test this? Any progress?

Yep! Heh, as others had said it had very, very little impact.

I hate to throw away good work, but if it doesn't have a huge impact, I think not complicating the build process would be preferable here. I can be convinced, so I'll leave this open for a bit, but I'm leaning against.

Sorry, I haven't had time to grab the branch and set everything back up. I'm just going to close the PR for now. It's always here for historical context so if we decide to enable it later we can revisit.

@zephraph Actually, I have a use case for an ESM build: I'm going to be teaching Observables to my coworkers, and I'd like to be able to set them up with an index.html and app.js file that they can just start with something like:
import Kefir from 'https://some.cdn.com/kefir/dist/kefir.esm.js';

and get started. I think the idea of having everyone use ES6 w/ ESM without a build process would be kind of neat to see in practice. This is just for an exercise, so the fact that it could end up serving a bunch of files doesn't really matter here.
@rpominov I'm willing to accept that's not necessarily a strong enough reason to distribute an ESM build and thus complicate the build process, but thought I would throw it out there. Thoughts?

I'd have to ramp back up on this. All things considered I don't really see this as vastly increasing the complexity of the build. There were some concerns we had about it potentially affecting how the imports worked though. We'll likely need to revisit that topic.

@zephraph Yeah, I'm inclined to agree, looking at the changes now. Mostly curious for @rpominov's opinion before I merge this.

Regarding the way imports work, there are 4 ways to import Kefir:
import Kefir from 'kefir'
const Kefir = require('kefir')
import {Kefir} from 'kefir'
const {Kefir} = require('kefir')

We should make sure the first two still work of course 😅
As for other two, I'm not sure which of them we support now, tbh. But we probably should try to preserve what we support if possible. It shouldn't be a problem if supporting tree shaking isn't our goal.

@rpominov This PR doesn't change the current build, but creates a new one that's an ESM.
That said, does this:
const Kefir = require('kefir')

actually work? I might have thought it would need to be
const Kefir = require('kefir').default

but I'm not as familiar with rollup (and I also don't really use CJS at all anymore).

This PR doesn't change the current build, but creates a new one that's an ESM.

I still worry that someone could use import {Kefir} from 'kefir' and their setup configured to pick up ESM bundles if available, and then Kefir's bundle become available but doesn't support import {Kefir}, and build breaks. But maybe I shouldn't be so paranoid, seems like a pretty rare case.

does this ... actually work?

Looking at the build, it should. We put every property that present in Kefir object directly at exports as well, which makes exports equivalent to Kefir`:
https://github.com/kefirjs/kefir/blob/1a1751c32d177c20702bc515dc5c41c3b08bd47e/dist/kefir.js#L3671-L3698

Ahh, I see, fair enough.
By default, any bundler & node is going to use pkg#main, so there shouldn't be any conflict there either.

Do we want to remove pkg#module for now?

That might be a good compromise in the interm. Otherwise it really is potentially a transparent breaking change. Alternatively we could just adjust the exports how we want them to be and do a major sem-ver release. So long as the change is transparent and well documented it might be worth just doing it right.

I don't think this is worth a major version bump for Kefir; the exports don't really need to be changed yet. We should consider how we're going to tree shake, but that requires a deeper investigation to do right.

@zephraph Can you update this PR to remove the inclusion of pkg#module for now and squash your commits? Either that or allow maintainers to update ur branch.
@rpominov If we make that change, any lingering objections? Would love to get this in so I can finalize my lesson for Friday.

Maintainer edits are allowed. Github allows squash merges, right? Should just be able to use that when it's ready.

Github allows squash merges, right?

True story, forgot about that.

Merged! Need to get this exercise done. @rpominov If you have any objections, we can revert.

Sorry, missed the comments. No objections 👍


Result::unwrap() on an Err value: BadWordCount(1)

Since version v0.11.1 I get the following error:
Feb 28 23:33:43 goethe crunch[1340050]: thread 'async-std/runtime' panicked at src/crunch.rs:173:42:
Feb 28 23:33:43 goethe crunch[1340050]: called `Result::unwrap()` on an `Err` value: BadWordCount(1)
Feb 28 23:33:43 goethe crunch[1340050]: note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
Feb 28 23:33:43 goethe systemd[1]: crunch-bot.service: Main process exited, code=exited, status=101/n/a
Feb 28 23:33:43 goethe systemd[1]: crunch-bot.service: Failed with result 'exit-code'.

The expected behavior is that crunchbot pays out my nominators, which doesn't happen because of the error.
The error happens on an amd64 Ubuntu 22.04 cloud server.
I can confirm the error happening on v0.11.1, v0.11.2 and v12.0. Currently I run v10.1 which doesn't have this problem.

Hi thanks for raising this issue. Since version 0.11 the seed file must contain a mnemonic phrase, but from the error you are getting i'm assuming you are using a secret key, correct?

Yes! That's correct. I actually didn't know a mnemonic phrase is possible. Is secret key support intentionally dropped and won't come back?

I'm working on a fix, should be out soon.

I started the new version v12.1 . I get a new error:
Feb 29 15:27:56 goethe crunch[1366400]: [2024-02-29T14:27:56Z INFO  crunch::runtimes::kusama] Inspect and `crunch` unclaimed payout rewards
Feb 29 15:27:56 goethe crunch[1366400]: [2024-02-29T14:27:56Z ERROR crunch::crunch] SecretError error: Invalid secret phrase format

The bot doesn't crash, but it says in the matrix chat the following:

🚨 An error was raised -> crunch on hold for 2 min while rescue is on the way 🚁 🚒 🚑 🚓

🚨 An error was raised -> crunch on hold for 4 min while rescue is on the way 🚁 🚒 🚑 🚓

I can confirm new version v0.12.1 results in the following error:
Feb 29 15:16:12 gb-utils01 crunch[49821]: [2024-02-29T15:16:12Z ERROR crunch::crunch] SecretError error: Invalid secret phrase format

Thanks @paulormart !

Hey guys, latest release v0.12.2 should fix this issue. Please let me know if you have any problems.

Thank you! It works.

It works on my side too!!!
Thanks @paulormart thanks @MrLawrence


Add lz4 and zstd compression algorithms options support.

I think I should append some documentation about how to install compression libraries.

And you should also set these flags when compiling rocksdb. It doesn't work now i think

And you should also set these flags when compiling rocksdb. It doesn't work now i think

Yep, I'll add documentation, compilation flags and test cases later.

https://github.com/KvrocksLabs/kvrocks/blob/unstable/build_detect_platform#L127
Maybe it should work since we added the detection, but didn't have a try on my side.

https://github.com/KvrocksLabs/kvrocks/blob/unstable/build_detect_platform#L127
Maybe it should work since we added the detection, but didn't have a try on my side.

Copy that, I'll fill and check the flags.Thanks.

Thanks for your hard work. @WyattJia


corrected the link of memory alarms

corrected the link of memory alarms at queue.md

@super1-chen Please sign the Contributor License Agreement!
Click here to manually synchronize the status of this Pull Request.
See the FAQ for frequently asked questions.

@super1-chen Thank you for signing the Contributor License Agreement!

@super1-chen Thank you for signing the Contributor License Agreement!

Thank you!


ENH: Add scatter plot for Frame

ideally, should use docstring with is identical to what pandas have, however, i encountered quite annoying linting error issue with docstring, so for now, i keep s and c docstring very simple. Will change/complete them in future PR where I update docstring for all functions.

Codecov Report

Merging #719 into master will increase coverage by <.01%.
The diff coverage is 100%.

@@            Coverage Diff             @@
##           master     #719      +/-   ##
==========================================
+ Coverage   94.18%   94.19%   +<.01%
==========================================
  Files          32       32
  Lines        5559     5568       +9
==========================================
+ Hits         5236     5245       +9
  Misses        323      323

Impacted Files
Coverage Δ

databricks/koalas/plot.py
94.92% <100%> (+0.13%)
:arrow_up:

Continue to review full report at Codecov.

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

@charlesdong1991, before we merge, can you check if Koalas plot adds "showing top 1,000 elements only" in the output chart when the rows are larger than 1000?

@HyukjinKwon good call! cannot really read it because font size is a bit too small to me 😅 but we probably can tell from density of points that koalas plot less.

Thanks for testing it out, @charlesdong1991.

How to use all the rows for the plot?
Setting, ks.set_option('compute.max_rows', 50000)
ks.set_option("display.max_rows", 50000) seems not to be working

plotting.max_rows should work for that. There's a documentation here - https://koalas.readthedocs.io/en/latest/user_guide/options.html#available-options

plotting.max_rows should work for that. There's a documentation here - https://koalas.readthedocs.io/en/latest/user_guide/options.html#available-options
Thanks! I somehow missed it. It is working as anticipated.

@HyukjinKwon I am trying to make subplots using Koalas Dataframe but it comes blank.
d1 is a koalas dataframe.
Sample Code:
fig, (ax1, ax2)  = plt.subplots(1, 2)
ax1 = d1.plot.scatter(x="col1", y="col2")
ax2 = d1.plot.scatter(x="col1", y="col2")
display(fig)
Any suggestions or help on this?

@Ankurneural can you create a new ticket with the full codes and output?


Classcast Exception

I am using eu.davidea:flexible-adapter:5.1.0' to show expandable list view headers in recyclerview. However, there is a case, where I would like to disable sticky headers.
So in view holder class, that extends from ExpandableViewHolder. I am setting the stickyHeader to false using this constructor   super(view, adapter, false);//True for sticky
When the recycler view item is updated, I get the following exception
java.lang.ClassCastException: android.widget.FrameLayout$LayoutParams cannot be cast to androidx.recyclerview.widget.RecyclerView$LayoutParams
at androidx.recyclerview.widget.RecyclerView$LayoutManager.getLeftDecorationWidth(RecyclerView.java:9492)
at eu.davidea.flexibleadapter.helpers.StickyHeaderHelper.applyLayoutParamsAndMargins(StickyHeaderHelper.java:275)
at eu.davidea.flexibleadapter.helpers.StickyHeaderHelper.ensureHeaderParent(StickyHeaderHelper.java:262)
at eu.davidea.flexibleadapter.helpers.StickyHeaderHelper.updateHeader(StickyHeaderHelper.java:173)
at eu.davidea.flexibleadapter.helpers.StickyHeaderHelper.updateOrClearHeader(StickyHeaderHelper.java:138)
at eu.davidea.flexibleadapter.FlexibleAdapter$AdapterDataObserver$1.run(FlexibleAdapter.java:5336)
at android.os.Handler.handleCallback(Handler.java:789)
at android.os.Handler.dispatchMessage(Handler.java:98)
at android.os.Looper.loop(Looper.java:164)
What am I missing ? Can you please help?

@vdotm, You must keep that constructor with true if you have element with sticky headers in your project.  To disable sticky headers you must use the Adapter function.

Thanks a lot for the quick reply. I was able to set it through the adapter function.


hiveadmission logs showing authentication error: x509: certificate signed by unknown authority

OCP 4.2 running in IBM Fyre environment
OCP was deployed and less than one hour later MCM (with hive pulled from master in a personal build and PR I am working on) was installed.  Less than 24 hours later,  Dominique was attempting to do some hive operations and noticed the following:
oc logs hiveadmission-949dfdff6-mm6k8 -n hive
Error from server (InternalError): error when creating "STDIN": Internal error occurred: failed calling webhook "clusterimagesetvalidators.admission.hive.openshift.io": the server is currently unable to handle the request
[HIVE INSTALL] Create image set failed
 [HIVE INSTALL] FAILURE: Failed to create image set

and tons of
Error in admin webhook:
E0213 12:26:19.887956       1 authentication.go:65] Unable to authenticate the request due to an error: x509: certificate signed by unknown authority

@dgoodwin noted the following in slack channel mgmt-collab-guest (https://ibm-cloudplatform.slack.com/archives/GNXFTBZCL/p1581597401090400)
dgoodwin-4049  2 hours ago
whats the environment like where hive was running?

dgoodwin-4049  2 hours ago
and how long had that cluster been in existence when hive was installed?

dgoodwin-4049  2 hours ago
we might need you to file a github issue for that, i will likely need the teams help to debug and i dont think all of them are on this slack

dgoodwin-4049  2 hours ago
openshift rotates certs after something like 24 hours, i believe we've seen it cause issues like this if hive was installed in the first 24 on a openshift 4 cluster

dgoodwin-4049  2 hours ago
its not something we see often because all our prod hive envs we still run on 3.11, and developers would rarely leave a cluster up more than a day

dgoodwin-4049  2 hours ago
so may be an important discovery

FYI... @itdove

So Hive installed within 24 hours, but the error surfaced within 24 hours also.
What is this Fyre environment?
Does deleting the hiveadmission pods fix the problem?

Fyre is an infra we use to deploy OCP.
Does deleting the hiveadmission pods fix the problem? yes

Ok that's very good, strong indication of what we thought might be going on. Still weird it's not happening after a 24h though.

Fixed by #830.
/close


ChatGPT & Code Refactors

Summary

Clean up some code & add docstrings
Integrate ChatGPT and move to utils folder
Create a format_dt file for logging purposes
Commands now defer automatically to prevent timeout

You forgot to include openai to requirements.txt

Also the .env file should have a variable for the OpenAI key if we need it


SNK 134,135,170: Cache for renderers + ACL renderer + UTs

Coverage increased (+5.4%) to 45.062% when pulling 3f39c736761a90319072e6754f5c8e567a066a73 on milanlenco:master into 0100d04f0dc29a39cf0cab1832b6ef75d0f08ae4 on contiv:master.

Coverage increased (+8.4%) to 47.989% when pulling 833d8ba83005f7bfddd78ac95817e58e16bfe1b8 on milanlenco:master into 0100d04f0dc29a39cf0cab1832b6ef75d0f08ae4 on contiv:master.

Coverage increased (+10.9%) to 50.479% when pulling ea07f134090af8b9f03fcba38a0c7dc06da92d2b on milanlenco:master into 0100d04f0dc29a39cf0cab1832b6ef75d0f08ae4 on contiv:master.

Coverage increased (+10.8%) to 50.336% when pulling 4e3a95e657a35815fa7d07582196ae1e27d0c8f5 on milanlenco:master into d0275623372c5b3b1d8de95dc1c9211ca70fd508 on contiv:master.

Coverage increased (+8.7%) to 48.145% when pulling bdd6d813d1e712b0d184f4d83cdbdd17686f5ed9 on milanlenco:master into d0275623372c5b3b1d8de95dc1c9211ca70fd508 on contiv:master.


Update binding-hack.sh

Hi, i didn't find how to create issues, the ibm course on coursera (https://www.coursera.org/learn/introduccion-a-contenedores-con-docker) is completely deprecated :-( even the resources it uses -> https://cloud.ibm.com/apidocs/tone-analyzer?code=python. Regards.


[flash_ctrl] Invalid command affecting DUT work

Hi @tjaychen , when I send following commands: first program (0x1 Prog) and second invalid Operation(0x3) test is passing.
if I extend checking for program with read operation and send following commands: program, invalid op and read, test is failing due to an error.
Spec does not contain exact scenario what will happen in case that invalid Op (0x3) is written into FLASH_CTRL.CONTROL @ 0x20 register and if someone by accident send it, DUT might get stucked. I think that DUT would need to handle Invalid OP without affecting content of memory or at least to get back some erroneous message. Currently this is not the case and if lines for reading of file flash_ctrl_sw_op_vseq.sv 165-172 are commented out, test will just pass.
Please use branch: https://github.com/nikola-miladinovic/opentitan/tree/flash_ctrl_invalid_op for reproducing the issue.
command is:  ./util/dvsim/dvsim.py hw/ip/flash_ctrl/dv/flash_ctrl_sim_cfg.hjson -i flash_ctrl_sw_op --purge -v h --fixed-seed 1.

hmm...interesting question. Now that you bring this up, I'm really sure what's supposed to happen either.
I will have a look.

alright, it appears i forgot to handle the case where software supplies an invalid command.
So what happens is that the flash transaction will never finish (since it never really gets started from the HW perspective).
I will fix this and have it explicitly error back (i think).


Man pages are generated for 'hidden' commands

See original issue on GitLab
In GitLab by [Gitlab user @jennis] on Jan 22, 2019, 14:54
Summary
By working around #880, we can generate the man pages for our commands defined in cli.py.
However, when we generate these man pages, man pages for the 'hidden' click commands (our deprecated commands) are also generated. This should not be the case.
Fix
This is an issue with an upstream package, click-man.

An upstream issue has been filed: https://github.com/click-contrib/click-man/issues/27
An upstream PR exists to fix this: https://github.com/click-contrib/click-man/pull/29

In GitLab by [Gitlab user @jennis] on Jan 22, 2019, 15:08
mentioned in merge request !1045

In GitLab by [Gitlab user @jennis] on Jan 22, 2019, 15:32
mentioned in commit 35377522ddff7c2b47a7c9978c8cd0fa7be7d28c

In GitLab by [Gitlab user @jennis] on Jan 22, 2019, 15:34
mentioned in merge request !1097

In GitLab by [Gitlab user @jennis] on Jan 24, 2019, 14:45
UPDATE: I've created a PR upstream: https://github.com/click-contrib/click-man/pull/29 - this solved the issue locally for me. Hopefully it'll get merged so that we can use it in the next release.

In GitLab by [Gitlab user @jennis] on Jan 24, 2019, 14:50
changed the description

In GitLab by [Gitlab user @jennis] on Jan 24, 2019, 16:34
UPDATE: Upstream PR has merged.
Also, I just realised that we don't actually generate the man pages anywhere so I guess there is no point in waiting for the release (although, it may have already happened)
Therefore, for now, I'll just manually regenerate (with the all new and improved click-man) and push the man pages

In GitLab by [Gitlab user @cs-shadow] on Jan 24, 2019, 21:21
mentioned in commit 7c42a208c9be722ab09dbed1eb310fb5b8775831

In GitLab by [Gitlab user @cs-shadow] on Jan 24, 2019, 21:23
mentioned in merge request !1107

In GitLab by [Gitlab user @cs-shadow] on Jan 25, 2019, 18:22
mentioned in commit e4603096aedb8bc0b2f8f0526b94b7aa567420ba

In GitLab by [Gitlab user @cs-shadow] on Jan 25, 2019, 23:50
mentioned in commit d74386886a1ca53a394dc80c1a29c777e087398a

In GitLab by [Gitlab user @tristanvb] on Jan 26, 2019, 05:10
closed via merge request !1107

In GitLab by [Gitlab user @tristanvb] on Jan 26, 2019, 05:10
mentioned in commit 222753ac50e00d14fd27c62f725c4ba4c514f3e5


Retrieve windows instance passwords via Aws::EC2::Client#get_password_data

Test Kitchen retrieves the dynamically generated password to connect to new windows instances:
Which utilizes Aws::EC2::Client#get_password_data
Without this you have to set the password via the user data batch file that we use to enable winrm.

The WindowsGuide/ec2-windows-passwords docs state
When you connect to a Windows instance, you must specify a user account that has permission to access the instance, along with the password for the account. The first time that you connect to your instance, specify the Administrator account and the default password. This default password is automatically generated by the EC2Config service.

So I don't think there is anyway to set the password other than in the userdata.

I also poked around the WindowsGuide/UsingConfig_WinAMI which had info on running password sets (and resets) on subsequent boots but nothing to set it via the initial API calls.

https://github.com/chef/chef-provisioning-aws/blob/64e23b6acae83a0417f06795b6c4b8812635e71a/lib/chef/provisioning/aws_driver/driver.rb#L833 Looks like I'm behind the curve on this.


feat: add allow-custom to combobox

most useful in string lists
I also didn't want popup showing for fully custom selection, I suppose this could also be an option; open to ideas if you're interested.

Close in favor of #101


fix(vscode): server bin path resolution

Summary
This PR fixes an issue where the VS Code extension cannot resolve the path to the biome CLI when using certain package managers, notably pnpm.
The new strategy is to point to the node_modules/.bin/biome path, which is consistent for all package managers.
Test Plan

[x] Tested working with npm on:

[x] macOS
[ ] Windows
[ ] Linux

[x] Tested working with pnpm on:

[x] macOS
[ ] Windows
[ ] Linux

[x] Tested working with yarn on:

[x] macOS
[ ] Windows
[ ] Linux

[x] Tested working with bun on:

[x] macOS
[ ] Windows
[ ] Linux

I'd like some help to test under Windows, I don't have a machine handy.

Could you add an automation test on the CI to test this code properly?

Could you add an automation test on the CI to test this code properly?

It is technically possible, and while I'm usually all for it, this would require a non-trivial amount of additional work, for which I'm not willing to invest time at the moment.
Considering that the VS Code extension rarely changes, I think that doing a manual test will suffice for now. Feel free to PR something if/when this is merged.

what's left for this pull request to be considered ready for review? i'd love it if it managed to get included in the next biome release

It needs to be tested under Windows and Linux.
I'll come up with a detailed test plan tomorrow.

Alright, it works as expected on Linux. I'll be testing on a Windows VM today and then we should be good to go.

A little adjustment was needed to make it work with Windows, but it should be all good now. I'll mark the PR as ready and will let review the code.

Guys, when do you plan to add this into release? I'm trying to incorporate biome in my company's processes with several Windows machines.
(Found this thread, trying to make exactly the same pull request.)


SEO link doesn't work

The Search Engine Optimization link at the top of the page doesn't actually do anything.

Fixed it by adding id="search-engine-optimization"


Receptor density panel occassionally incomplete althouth data is available

The panel for receptor densities does sometimes only show the textual description, not the fingerprint and profiles, although they are available for this region. This is not to be confused with plain EBRAINS features for receptors - it happens for the explicit receptor feature type.
My feeling is that it is related to how quickly a user clicks the entry. Is it possible that if a user clicks the feature too early, the profile/fingerpinrt data is not yet completely loaded and therefore not shown?
It happened to me, for example, in hOc1 where such data is definitly available. After selecting the feature a few times in sequence, and possibly selecting a different area in between, the feature was displayed correctly.

cannot reproduce in latest (2.7.6)
closing for now.
feel free to re-open if the issue persist


Accidentally send

Transaction id 9c3213eff73d69c4d1e8144a2e143ad63f8d388ad58101c99a751340ec388531
I send it by accidentally plz help me can bitpay refund help me !!!

Hello, I am afraid bitcoin transactions are irreversible, there is no why to refund them.


There might not be DOM content in the connectedCallback

connectedCallback() {
    const textareaEl = this.querySelector('textarea');

There might not be a <textarea>
See: https://dev.to/dannyengelman/web-component-developers-do-not-connect-with-the-connectedcallback-yet-4jo7

Thanks Danny,
Great spot,
fancy spinning up a PR that check to see if a textarea exists, and log an error if it doesn't?
Or do you think there's a more appropriate way of handling this error?

See the long read I posted, a setTimeout will do

Thanks, resolved in v1.0.1

I still see:
  connectedCallback() {
    const textareaEl = this.querySelector('textarea');

That is a red flag, the <textarea>  you are after does not exist if the DOM isn't parsed yet


Injector Saying cannot inject a 32 bit dll into a 64 bit progress

Steps i did:
Downloaded from GitHub
Downloaded Injector
Added DLL to injector
selected injector to inject into 1v1.lol(steam)
pressed inject
said ERROR cannot inject a 32 bit dll into a 64 bit progress

Might be a problem with your windows version

Might be a problem with your windows version

Funfact, it seems that he attempted to inject it with some injector like Extreme Injector or maybe Xenos kekw


Output audio format should match input format

From @epicycles and @haerdogan:
Scaper used to make outputs in the same format (e.g., float32 vs int16) as the audio input, but since #55 was merged it is always outputting int16, regardless of the input.
@haerdogan traced this down to the code that fixes sox off-by-one errors, and wrote a pull request to handle this (the currently closed without merge #86).
@pseeth will create a PR for this based on @haerdogan's proposed solution in #86.

Yeah, feel free to copy something from my fork if it helps. I have not tested it well enough and it may cause some issues.

Fixed via #88


Method captureOutput didOutputSampleBuffer: fromConnection: randomly doesn't work

My colleague noticed that on his device instead video capturing randomly appear black screen. After some investigation I figure out that in file CameraSource.mm method
- (void)captureOutput:(AVCaptureOutput *)captureOutput didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer fromConnection:(AVCaptureConnection *)connection
sometimes just doesn't working.
I looked on many video session creation examples - I didn't find any fundamental differences between them, so I can't understand why this issue appears. I checked different errors - for example on:
input = [AVCaptureDeviceInput deviceInputWithDevice:((AVCaptureDevice*)m_captureDevice) error:&inputError];
There are no errors.
Any ideas/suggestion?
Thanks in advance.

@SonnyBlack I recently noticed this happening on 6 and 6s plus devices as well.

Finally I have founded reason. If you use  [output setSampleBufferDelegate: queue:] multiple times, be careful.
In my case I have 2 view controllers(further - VC): one with my video session, second with Video Core session. From 1st VC app perform transition to second. As result, in 1st VC session destroyed later (after creating Video Core session in second VC). Although app used different queues, in my case they bind to system AVFoundation queue, so it looks like using of shared resource.


Enable stdin on windows

An error occurred in the entryFromReader() function where the entry time was being obtained.
On Windows, it is not possible to os.Stat() for "/dev/stdin".
On Windows with standard input, the entry is set to the current time.

ref: #61

Great! Released as v0.13.4.