Caught in the act: Use of ExpressionVector does not guard against premature garbage collection

In Utils.mkCharacterEmbedding, the code that simplifies down to this
    val fwOuts = transduce(charEmbeddings, charFwRnnBuilder)
    val fwOut = fwOuts.last
   ...
    val bwOuts = transduce(charEmbeddings.reverse, charBwRnnBuilder)
    val bwOut = bwOuts.last
   ...
    concatenate(fwOut, bwOut)
  }

makes two ExpressionVectors, then only uses the last of the Expressions for concatenation.  After last(), the ExpressionVectors are free to be garbage collected, and they are.  Unfortunately, the C++ code that eventually deletes the vector also deletes all of the contained Expressions, not knowing that the last one is still being used.  By the time concatenate() gets called, the Expression is often gone (it depends on the asynchronous garbage collection and perhaps on whether C++ has reappropriated the memory yet).  This results in a SIGSEGV error.  I've verified that this is happening to specific pointers to the underlying memory.
This is very much related to a comment in the Scala code:
class Expression private[dynet](
  private[dynet] val expr: internal.Expression,
  // Expressions sometimes rely on things (e.g. wrapped C++ vectors) that get deleted when the JVM
  // garbage collector runs. By explicitly grabbing references to them, we can prevent this
  // premature garbage collection.
  val references: Seq[AnyRef] = Seq.empty
) {

The strategy doesn't work in this situation.  I believe the work-around is to skip the ExpressionVector in this case and just use a Scala Seq of Expressions from which the last can be plucked.  This might not be the only instance of the problem, but other times transduce is called, the resulting ExpressionVector is not available for garbage collection until after concatenation.
This is all happening suspiciously close the the code below and I wonder if it may be a false fix:
    // Some embeddings may be empty in some weird Unicode encodings
    ...
    val fwOut =
      if (fwOuts.nonEmpty) fwOuts.last
      else transduce(Array(lookup(charLookupParameters, 0)), charFwRnnBuilder).head // 0 = UNK

Very nice find!
So, what fix do you suggest exactly? I am not sure changing from an ExpressionVector to a Seq[Expression] would work, since the ExpressionVector is implemented as a collection also? Am I wrong?

It seems to be working.  The Seq stays in Scalaland and does not garbage collect its elements that are referenced elsewhere.  So far the Expressions are staying around.  The ExpressionVector wraps a C++ vectordynet::Expression which does delete its elements.   I could also just add a line after concatenate that does something with fwOuts and bwOuts to force them to stay around, but it would just be busy work.

Cool! Should I go through my code to look for these situations?
Also, what is the preferred way to convert the ExpressionVector to Seq[Expression]?

I'm still testing.  It seems that ExpressionVectors are OK as long as the contained expressions are used before the vector is garbage collected.  It may be just this one problematic case in which last() is extracted and lives on slightly longer than the vector.  I'll be checking each use.

Everything that is generated in the EmbeddingLayer will live for a long time. So there might be more situations like that. I'll check tonight.

It has crashed again under different & strange circumstances.

That long life seems to be true.  I don't see that the majority of Scala Expressions are ever garbage collected.  One test run finally crashed after 15,504,951 were created and not destroyed.  Their C++ counterparts are very likely already deleted and I will check on that.  I don't know what is keeping the others around.  They should all be invalid after the ComputationGraph is updated to the next generation.  I think that matches the general observation that memory use creeps up over time and performance goes down as garbage collection is a struggle.

So, the C++ expression seqs are over collected, while the Scala ones are never collected? :)
Clearly both these are major problems. But I don't understand the latter. Why would they not be collected? They should lose their references once their CG is destroyed.

Is this a common issue with scala/java/C++ bindings?
On Wed, Dec 16, 2020 at 7:35 AM Mihai Surdeanu<EMAIL_ADDRESS>wrote:

External Email
So, the C++ expression seqs are over collected, while the Scala ones are
never collected? :)
Clearly both these are major problems. But I don't understand the latter.
Why would they not be collected? They should lose their references once
their CG is destroyed.
—
You are receiving this because you are subscribed to this thread.
Reply to this email directly, view it on GitHub
https://github.com/clulab/processors/issues/437#issuecomment-746389163,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/ABJCPCJETUVJY5LZKEA743LSVDAUPANCNFSM4U4WH37A
.

I still have to look into both issues.  The Expressions are not registered with the Scala ComputationGraph at all, unlike with the C++.  Remember in the Scala that there is only ever one graph (per thread) and the association is implicit.  Scala doesn't know to delete the Expressions when the CG moves on (that I have noticed so far).  I'm not really sure yet why they stay around at all.  Maybe it is indeed a JNI thing.  In the meantime I don't trust it to be done right and given how much we're starting to rely on DyNet, am compelled to double check on a few things even when this is already taking forever.

Thanks for doing this Keith! This is important, so take your time.

It still crashes,  but my counts were off.  I had neglected one static keyword and missed an implicit copy constructor.  Still looking...

The way to go about handling the memory in an ExpressionVector might be to just change ExpressionVector.apply(idx: Int): Expression from
override def apply(idx: Int): Expression = new Expression(vector.get(idx))

to either
override def apply(idx: Int): Expression = new Expression(vector.get(idx), Seq(vector))

or
override def apply(idx: Int): Expression = new Expression(vector.get(idx), Seq(this))

so that the vector or this has to live at least as long as the resulting Expresssion.  That would keep it from being garbage collection out from under the Scala wrapper, at least theoretically.

I see. That would be very nice, as it doesn't impact any of our code.
Also, I think my email with suggestions of getting rid of ExpressionVector was overkill. Even if we want to reduce its usage, we only need to worry about situations where the ExpressionVector "dies" before one of its elements. That is not common in our code (but it does happen).

There are parts of the code in which conversion is taking place, so that even if ExpressionVector is never cited (in an import or as a variable type), they are still being used.
def concatenate(exprs: Expression*): Expression = concatenate(new ExpressionVector(exprs))

object ExpressionVector {
  implicit def Seq2ExpressionVector(x: Seq[Expression]) =
    new ExpressionVector(x)
}

One or more gotchas (and maybe a bug) are still getting us, but it doesn't seem like the solution can be too far away.

exciting progress guys!
On Fri, Dec 18, 2020 at 9:16 AM Keith Alcock<EMAIL_ADDRESS>wrote:

External Email
There are parts of the code in which conversion is taking place, so that
even if ExpressionVector is never cited (in an import or as a variable
type), they are still being used.
def concatenate(exprs: Expression*): Expression = concatenate(new ExpressionVector(exprs))
object ExpressionVector {
implicit def Seq2ExpressionVector(x: Seq[Expression]) =
new ExpressionVector(x)
}
One or more gotchas (and maybe a bug) are still getting us, but it doesn't
seem like the solution can be too far away.
—
You are receiving this because you commented.
Reply to this email directly, view it on GitHub
https://github.com/clulab/processors/issues/437#issuecomment-748182440,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/ABJCPCIZDK3K3QEQSC2RL63SVN55DANCNFSM4U4WH37A
.

By guys you should mean Keith 👍

well, yes for sure he's the one solving it, but you BOTH can share in the
celebration of the progress!!!
On Fri, Dec 18, 2020 at 11:33 AM Mihai Surdeanu<EMAIL_ADDRESS>wrote:

External Email
By guys you should mean Keith 👍
—
You are receiving this because you commented.
Reply to this email directly, view it on GitHub
https://github.com/clulab/processors/issues/437#issuecomment-748248642,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/ABJCPCI2D4L42NSDDPIFONDSVOOAXANCNFSM4U4WH37A
.

I am the fan watching an exciting sports event and cheering for my team :)

hahahahaha YES that!
On Fri, Dec 18, 2020 at 11:43 AM Mihai Surdeanu<EMAIL_ADDRESS>wrote:

External Email
I am the fan watching an exciting sports event and cheering for my team :)
—
You are receiving this because you commented.
Reply to this email directly, view it on GitHub
https://github.com/clulab/processors/issues/437#issuecomment-748252881,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/ABJCPCNVJJKLRXO75XKYVJDSVOPE7ANCNFSM4U4WH37A
.

I am not sure how the Scala compiler optimizes things, but, in this code:
override def apply(idx: Int): Expression = new Expression(vector.get(idx), Seq(this))

it might be possible that the there is a new Seq(this) created on every call to apply. That is clearly excessive...

I take it back. It should create a new Seq on every call to apply, and have it stored in references, which was designed exactly for that purpose. Please ignore the last two messages :)

IIRC late last week I ran the unit tests of Eidos using that potential fix and it passed once.  However, I had not yet checked whether the memory was ever freed correctly or whether it worked with processors, especially under stress.

This is exciting!

One test program survived overnight, which it hasn't done for a long time, using the code
  override def apply(idx: Int): Expression = new Expression(vector.get(idx), Seq(vector))

There's more testing to do (other test programs and especially other operating systems), but it's a very good sign, I think.  The overhead is troublesome, but given that every single Scala Expression involves this extra Seq, adding the ExpressionVector to the list will probably not be very noticeable.

Yay!!! Awesome progress!

Two machines worked all night without a crash, one running a processors test program and the other running Eidos, which processed over 10,000 files.  So far, so good.
I think that DyNetSync can be moved to FatDynet and become standard procedure for anything manipulating a ComputationGraph.  In most cases it will be the only place in which ComputationGraph.renew() needs to be called and it can check to make sure that constraint is not violated.  In the meantime it has assertions so that a single process doesn't reenter the synchronized section which has helped catch the unexpected out of order operations (lazy variables, class initialization, exception handling).  I need to update it work when we really do want parallel processing, which might happen fairly soon if the serial version continues to be stable.

Two machines worked all night without a crash, one running a processors test program and the other running Eidos, which processed over 10,000 files.  So far, so good.
I think that DyNetSync can be moved to FatDynet and become standard procedure for anything manipulating a ComputationGraph.  In most cases it will be the only place in which ComputationGraph.renew() needs to be called and it can check to make sure that constraint is not violated.  In the meantime it has assertions so that a single process doesn't reenter the synchronized section which has helped catch the unexpected out of order operations (lazy variables, class initialization, exception handling).  I need to update it work when we really do want parallel processing, which might happen fairly soon if the serial version continues to be stable.

Yay!!
I agree with all suggested changes.

Yay!!
I agree with all suggested changes.

Eidos on the one machine read the 45,000 document corpus in three days or so without crashing once.  I restarted the program twice, but just because I hadn't transferred all the files in one batch.  Memory use would go both up and down as garbage collection cycles ran and I've seen ExpressionVectors being finalized.  I'm pretty satisfied with this version.  All four layers (dynet, fatdynet, processors, eidos) are locally published, so I'm preparing updates for all of them.
On the AWS machine the processors test program has been running.  It has never crashed in C++ code or crashed otherwise, but the oom_reaper (out of memory) did kill the process twice.  I'm not sure how successfully the -Xmx kind of setting is getting from the environment variable, through sbt, to Java, and to what extent it is heeded.  I have read that the garbage collector may have difficulty managing memory needs because it can't take into account what C++ is doing.  There may be some garbage collector settings that can help with the issue, like a high water mark, that should be tuned.  I'll look into those when the full stack is ready to deploy there.
So, it's good news mostly and maybe the ordeal is soon over.

Eidos on the one machine read the 45,000 document corpus in three days or so without crashing once.  I restarted the program twice, but just because I hadn't transferred all the files in one batch.  Memory use would go both up and down as garbage collection cycles ran and I've seen ExpressionVectors being finalized.  I'm pretty satisfied with this version.  All four layers (dynet, fatdynet, processors, eidos) are locally published, so I'm preparing updates for all of them.
On the AWS machine the processors test program has been running.  It has never crashed in C++ code or crashed otherwise, but the oom_reaper (out of memory) did kill the process twice.  I'm not sure how successfully the -Xmx kind of setting is getting from the environment variable, through sbt, to Java, and to what extent it is heeded.  I have read that the garbage collector may have difficulty managing memory needs because it can't take into account what C++ is doing.  There may be some garbage collector settings that can help with the issue, like a high water mark, that should be tuned.  I'll look into those when the full stack is ready to deploy there.
So, it's good news mostly and maybe the ordeal is soon over.

Wow! Big achievement!

Wow! Big achievement!

I now think that the solution to create a Seq on each call to ExpressionVector.apply() is probably overkill... This means that every time one access an element of the ExpressionVector, we create a different Seq? That sounds like too much...
Instead I would propose to add a new field to the ExpressionVector class that parallels the private[dynet] val vector: internal.ExpressionVector. That is:

add private scalaVector: Vector[Expression] as a new member to the ExpressionVector class.
Make sure that any method in the ExpressionVector class that changes the original vector also changes the additional scalaVector in the same way.

This way, we do not create a new Seq on any access, but a single one for each ExpressionVector, which to me seems better. What do you think?

I now think that the solution to create a Seq on each call to ExpressionVector.apply() is probably overkill... This means that every time one access an element of the ExpressionVector, we create a different Seq? That sounds like too much...
Instead I would propose to add a new field to the ExpressionVector class that parallels the private[dynet] val vector: internal.ExpressionVector. That is:

add private scalaVector: Vector[Expression] as a new member to the ExpressionVector class.
Make sure that any method in the ExpressionVector class that changes the original vector also changes the additional scalaVector in the same way.

This way, we do not create a new Seq on any access, but a single one for each ExpressionVector, which to me seems better. What do you think?

I should see how many times that code is being called to make sure it's an issue.
If it's fair to change DyNet code, then I'd start with what seems more like the problem: Expression,
class Expression private[dynet](
  private[dynet] val expr: internal.Expression,
  // Expressions sometimes rely on things (e.g. wrapped C++ vectors) that get deleted when the JVM
  // garbage collector runs. By explicitly grabbing references to them, we can prevent this
  // premature garbage collection.
  val references: Seq[AnyRef] = Seq.empty
)

I'm not sure there's a good reason that references is a Seq.  It looks like there are plenty to times in which a Seq is constructed just to hold one item.  If it was
val reference: AnyRef

then either the one item could be used or in the cases there are more, the same Seq(item1, item2) would work is well, one would think.

I should see how many times that code is being called to make sure it's an issue.
If it's fair to change DyNet code, then I'd start with what seems more like the problem: Expression,
class Expression private[dynet](
  private[dynet] val expr: internal.Expression,
  // Expressions sometimes rely on things (e.g. wrapped C++ vectors) that get deleted when the JVM
  // garbage collector runs. By explicitly grabbing references to them, we can prevent this
  // premature garbage collection.
  val references: Seq[AnyRef] = Seq.empty
)

I'm not sure there's a good reason that references is a Seq.  It looks like there are plenty to times in which a Seq is constructed just to hold one item.  If it was
val reference: AnyRef

then either the one item could be used or in the cases there are more, the same Seq(item1, item2) would work is well, one would think.

I think it's fair to change the Scala wrapper.
I agree with the suggested change to Expression.
And I still think the change to ExpressinVector.apply is necessary. Even if we don't currently use it that much, accessing a vector's element should be much more frequent than the creation of that vector.

I think it's fair to change the Scala wrapper.
I agree with the suggested change to Expression.
And I still think the change to ExpressinVector.apply is necessary. Even if we don't currently use it that much, accessing a vector's element should be much more frequent than the creation of that vector.

If Expression is changed, then lots of Seq(item1) will be simplified to item1 including the one in ExpressionVector.  Then there shouldn't be a need to cache a Seq for the vector so that it can be reused for each element.
new Expression(vector.get(idx), Seq(vector))

might be just
new Expression(vector.get(idx), vector)

If Expression is changed, then lots of Seq(item1) will be simplified to item1 including the one in ExpressionVector.  Then there shouldn't be a need to cache a Seq for the vector so that it can be reused for each element.
new Expression(vector.get(idx), Seq(vector))

might be just
new Expression(vector.get(idx), vector)

I think that is better.
Also, I am not sure my solution is correct, as the ExpressionVector might be discarded before its elements...
Yours might be as good as it gets.

I think that is better.
Also, I am not sure my solution is correct, as the ExpressionVector might be discarded before its elements...
Yours might be as good as it gets.

AFAIK the Scala/Java ExpressionVector can't be discarded (garbage collected) precisely because it is being referred to by its elements... at least until the elements can be discarded as well.

AFAIK the Scala/Java ExpressionVector can't be discarded (garbage collected) precisely because it is being referred to by its elements... at least until the elements can be discarded as well.

Hey, does your idea below work?
new Expression(vector.get(idx), vector)

Hey, does your idea below work?
new Expression(vector.get(idx), vector)

It passed all the unit tests and didn't crash in the process.  All the Expressions that unnecessarily took a Seq(item) were simplified to just item as well.  I need to do the stress tests with it.    It needs to work on large jobs to make sure garbage collection doesn't cause a problem.

It passed all the unit tests and didn't crash in the process.  All the Expressions that unnecessarily took a Seq(item) were simplified to just item as well.  I need to do the stress tests with it.    It needs to work on large jobs to make sure garbage collection doesn't cause a problem.

Good news. Thanks!

Good news. Thanks!

I believe to have found that the Scala FloatPointer, IntPointer, and UnsignedPointer were leaking their C++ counterparts.  In some cases, if I can be certain that the Java garbage collector has finished, then I can now inspect the C++ heap and show that it is completely empty.  The C++ cleanup operation has been updated to remove objects that were previously left dangling for the OS to handle.  I'm working through example programs checking for other leaks, building up to processors and eidos.

I believe to have found that the Scala FloatPointer, IntPointer, and UnsignedPointer were leaking their C++ counterparts.  In some cases, if I can be certain that the Java garbage collector has finished, then I can now inspect the C++ heap and show that it is completely empty.  The C++ cleanup operation has been updated to remove objects that were previously left dangling for the OS to handle.  I'm working through example programs checking for other leaks, building up to processors and eidos.

mihai, it’s second christmas! +100 keith!
On Thursday, January 14, 2021, Keith Alcock<EMAIL_ADDRESS>wrote:

External Email
I believe to have found that the Scala FloatPointer, IntPointer, and
UnsignedPointer were leaking their C++ counterparts. In some cases, if I
can be certain that the Java garbage collector has finished, then I can now
inspect the C++ heap and show that it is completely empty. The C++ cleanup
operation has been updated to remove objects that were previously left
dangling for the OS to handle. I'm working through example programs
checking for other leaks, building up to processors and eidos.
—
You are receiving this because you commented.
Reply to this email directly, view it on GitHub
https://github.com/clulab/processors/issues/437#issuecomment-760690195,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/ABJCPCIFM4NNF2QSINTV4NLSZ7QCVANCNFSM4U4WH37A
.

mihai, it’s second christmas! +100 keith!
On Thursday, January 14, 2021, Keith Alcock<EMAIL_ADDRESS>wrote:

External Email
I believe to have found that the Scala FloatPointer, IntPointer, and
UnsignedPointer were leaking their C++ counterparts. In some cases, if I
can be certain that the Java garbage collector has finished, then I can now
inspect the C++ heap and show that it is completely empty. The C++ cleanup
operation has been updated to remove objects that were previously left
dangling for the OS to handle. I'm working through example programs
checking for other leaks, building up to processors and eidos.
—
You are receiving this because you commented.
Reply to this email directly, view it on GitHub
https://github.com/clulab/processors/issues/437#issuecomment-760690195,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/ABJCPCIFM4NNF2QSINTV4NLSZ7QCVANCNFSM4U4WH37A
.

Wow!
How did you discover this, and how did you fix it?

Wow!
How did you discover this, and how did you fix it?

This probably could have been discovered with a simple code review, but it was done the hard way with low-level instrumentation calling heap tracking functions.  Googling for things like crtdbg.h, _CrtDumpMemoryLeaks, _CRTDBG_ALLOC_MEM_DF, _CrtSetBreakAlloc should get someone else on track.  Every malloc and new has been rerouted to versions that keep better tabs.  It comes at a performance cost, so there are macros to turn it on and off.  These will eventually be reported to CMU if they hold.
Old code:
class FloatPointer {
  val floatp = dn.new_floatp
  set(0f)

  def set(value: Float): Unit = dn.floatp_assign(floatp, value)

  def value(): Float = dn.floatp_value(floatp)
}

New code:
class FloatPointer {
  val floatp = dn.new_floatp
  set(0f)

  def set(value: Float): Unit = dn.floatp_assign(floatp, value)

  def value(): Float = dn.floatp_value(floatp)

  override protected def finalize(): Unit = {
    dn.delete_floatp(floatp)
  }
}

This probably could have been discovered with a simple code review, but it was done the hard way with low-level instrumentation calling heap tracking functions.  Googling for things like crtdbg.h, _CrtDumpMemoryLeaks, _CRTDBG_ALLOC_MEM_DF, _CrtSetBreakAlloc should get someone else on track.  Every malloc and new has been rerouted to versions that keep better tabs.  It comes at a performance cost, so there are macros to turn it on and off.  These will eventually be reported to CMU if they hold.
Old code:
class FloatPointer {
  val floatp = dn.new_floatp
  set(0f)

  def set(value: Float): Unit = dn.floatp_assign(floatp, value)

  def value(): Float = dn.floatp_value(floatp)
}

New code:
class FloatPointer {
  val floatp = dn.new_floatp
  set(0f)

  def set(value: Float): Unit = dn.floatp_assign(floatp, value)

  def value(): Float = dn.floatp_value(floatp)

  override protected def finalize(): Unit = {
    dn.delete_floatp(floatp)
  }
}

Oh, so nice!
I wonder how many other Scala classes are affected by the lack of a finalize method?

Oh, so nice!
I wonder how many other Scala classes are affected by the lack of a finalize method?

I'll be checking.  It was probably just luck that a sample program included a FloatPointer and it's probably not what's wrong with processors, but that kind of thing might occur elsewhere.
The ParameterCollection has also been leaking and I had addressed/fixed that for the parallel version and am moving it to this debugging version so that it can be verified.  It came up in the next example app that I tested.

I'll be checking.  It was probably just luck that a sample program included a FloatPointer and it's probably not what's wrong with processors, but that kind of thing might occur elsewhere.
The ParameterCollection has also been leaking and I had addressed/fixed that for the parallel version and am moving it to this debugging version so that it can be verified.  It came up in the next example app that I tested.

These were addressed in https://github.com/clab/dynet/pull/1629 and https://github.com/clab/dynet/pull/1628 and will soon be available in the master branch of fatdynet.  They are currently still in a side branch, but it seems safe to close this.

These were addressed in https://github.com/clab/dynet/pull/1629 and https://github.com/clab/dynet/pull/1628 and will soon be available in the master branch of fatdynet.  They are currently still in a side branch, but it seems safe to close this.


Mind Flay ticks trigger Judgement of Wisdom

Describe the bug
Mind Flay ticks are incorrectly triggering Judgement of Wisdom mana returns, resulting in way too much mana being returned to the priest.
To Reproduce
Steps to reproduce the behavior:

Run any Shadow priest sim config with Judgement of Wisdom active under Settings.
Click Log,
CTRL+f search for "Judgement of Wisdom". Look for an instance where Mind Flay is the trigger.

Expected behavior
Mind Flay ticks should not trigger Judgement of Wisdom.
Sim Links and Screenshots
Example sim link.
Example of incorrect trigger in Log:
[3.86] [Player (#1)] [Target 1] {SpellID: 48156, Tag: 2} [DEBUG] MAP: 755.7, RAP: 755.7, SP: 3429.0, BaseDamage:1390.8, AfterAttackerMods:1746.3, AfterTargetMods:1973.3, AfterResistances:1776.0, AfterOutcome:1776.0, AfterPostOutcome:1776.0
[3.86] [Player (#1)] Mind Flay (2 Tick) Hit Target 1 for 1775.99. (1775.99 Threat)
[3.86] [Target 1] Aura refreshed: Misery.
[3.86] [Player (#1)] Gained 2.8 Mana from Judgement of Wisdom. (20608.2 --> 20611.0)
[3.86] [Player (#1)] Shadow Weaving stacks: 3 --> 4.

Desktop (please complete the following information):

OS: Manjaro Linux / Windows 10
Browser: Firefox

JoW is definitely giving more mana than it should, but I do not think it's related to MF proccing it. It looks like JoW is just proccing  a lot. Also, why do you think MF ticks cannot proc JoW?

It's a conclusion I've arrived at by looking at WCL. Comparing JoW proc timings to MF ticks and other spell cast timings, JoW procs line up with spells landing rather than MF ticks. For example, compare timestamps procs to casts vs. mf ticks. If MF ticks could trigger JoW I think, shouldn't they account for most of the procs? It's by far the most frequent hitting ability. Unless it would, for some reason, have an innately lower chance of procing.

User glucera#5830 on Discord suggests a 4 sec icd on JoW procs for spells being the reason for why the behavior is observed in logs:

4 second icd on spells JoW needs to be in sim, melee has no icd its why shadowfiend + pets can proc it more, any spells casted within the 4 second window of icd are ineligible to proc it including mind flay the initial application + damage ticks will not proc it extending portions of no JoW past 4 second icd. also spell batching / queueing happens and can multi proc if situations happen where you queue a mindflay after a hard cast MB-> flay (if in an eligible window you will get multiple JoW ticks in succession)

So MF ticks not being able to trigger JoW could be functionally right, but maybe not technically?

JOW was fixed here https://github.com/wowsims/wotlk/pull/3119 so that initial application can proc JoW but the ticks cannot


Different cache settings?

We use some more specific cache settings than this action offers. I tried disabling the cache from this action, and adding another step, but:

If I put this action first, the cache doesn't seem to get hit https://github.com/PRQL/prql/pull/2558/files#diff-b73931d39044edca7c78f83713af7326a8d63dac151088b8d905e39f060ed8a6R29-R37 (maybe it's a deterministic change such that it would get hit in future though?)
If I put the cache first, the cache is hit but isn't used

Your workflow looks good to me.
This actions sets some environment variables which can affect the cache keys used by Swatinem/rust-cache and can make cargo incapable of using old caches (e.g., incremental is turned off). That should settle itself after you create a new cache with the new data and key. You only enable cache storage on main save-if: ${{ github.ref == 'refs/heads/main' }} so you wouldn't see that yet.
I'm confident everything will work out if you merge the code. You can test everything in a fork to make sure the cache storing on the main branch works.

Thanks — that makes sense, I'll close!


Determine necessary packages and update packages.json

The forked code specifies that "Node version v8.11.2 or beyond recommended. (Tested with node v 8.11.2). Was running v21.7.0 for testing and was unable to start the web server. Node is not in the package.json file.


Add the newly extracted manageiq-appliance_console

cc @simaishi I'm not sure how this will affect downstream builds, but upstream builds should be good.

Does the 'productization' path (for loading different menu or locale) need to be changed for downstream?

@simaishi I think that should be okay as of https://github.com/ManageIQ/manageiq-gems-pending/commit/7d12a12f right?


error: Do not know conversation from Java type to such rust type 'Vec < Foo >'

Sorry for all the questions, I really appreciate your help - let's discuss if you'd like me to contribute financially!
For some reason, I can return Vec<Foo>s from methods but not accept them as params. References and arrays also have the same issue.
--- stderr
error in android bindings: src/ffi_glue.rs.in
parsing of android bindings: src/ffi_glue.rs.in failed
error: Do not know conversation from Java type to such rust type 'Vec < Foo >'
	fn TestContainers::set_struct_vec(&mut self, _: Vec<Foo>);
                                                 ^^^

I basically copied the code from the tests:
#[derive(Clone, Default)]
pub struct Foo {
	u32: bar,
}

#[derive(Default)]
pub struct TestContainers {
	struct_vec: Vec<Foo>,
}

impl TestContainers {
	fn set_struct_vec(&mut self, v: Vec<Foo>) {
		self.struct_vec = v;
	}
}

foreign_class!(class Foo {
	self_type Foo;
	constructor Foo::default() -> Foo;
});

foreign_class!(class TestContainers {
	self_type TestContainers;
	constructor TestContainers::default() -> TestContainers;
	fn TestContainers::set_struct_vec(&mut self, _: Vec<Foo>);
});

For some reason, I can return Vecs from methods but not accept them as params. References > and arrays also have the same issue.

All type conversation rules is described via Domain specific language,
that looks like Rust macroses.
Corresponding to your problem rule you can find here:
https://github.com/Dushistov/rust_swig/blob/84846c680c84981188025ac641dfa30e4002bd1d/macroslib/src/java_jni/jni-include.rs#L470
As you see to "trigger" this rule your type should implement Clone,
rust_swig doesn't parse your real Rust code, so you should point rust_swig about Clone implementation via:
foreign_class!(
#[derive(Clone)]
class Foo {

Sorry for all the questions
you'd like me to contribute financially!

I am more interesting in code contribution and testing.
So contribution via questions is not bad, because of it real usage in other words testing.

Thanks! Adding that derive inside the foreign_class! did the trick.
Is something bad possible if I mismatch them?

Is something bad possible if I mismatch them?

No, rust_swig generates normal Rust code, so you got compilation error about
generated code if something goes wrong.


example files

Signed-off-by: leecalcote<EMAIL_ADDRESS>fixes #2

Hey everyone! I keep getting bombarded by emails from github for every pr made by the organization. I tried removing myself from the organization and stopped watching repos but I’m still getting emails. Could you see if I’m listed somewhere and remove me please? Thanks!

Hi @mcastre, broadly, it sounds like you'll be unsubscribed. Two instances come to mind in which you'll get notifications:

unwatch this repo - https://github.com/layer5io/service-mesh-performance-specification/watchers
there are specific issues that your user has been listed on or has had activity on and so GH sends you notifications on those specific ones. I think there are only a couple of those left.

Hey Lee! Yea maybe I need to manually unwatch repos

Thank you, gents.
@mcastre unwanted notifications are a nuisance. Meshery is seeing a big uptick in interest. Please know that you’re always welcome in the community - come and go as you will. 👍  Thank you for the impact that you have already made.


CSS-Clean the Last Character from CSS Class/Selector etc

Hey mate, there seems to be a problem running your tool where it cuts off the end character of the final css selectors.
I have made a gif below that illustrates the error.

Hey nice gif and thank you for taking the time, posting the CSS code for bugs is the most useful you can display what broke it.

It's the position of the '{' brace. Good catch.

No worries mate :) Glad I could help! Awesome little plugin.
On Mar 24, 2016, at 11:13 PM, Sean MacIsaac<EMAIL_ADDRESS>wrote:
It's the position of the '{' brace. Good catch.
—
You are receiving this because you authored the thread.
Reply to this email directly or view it on GitHub https://github.com/SeanJM/css-clean/issues/12#issuecomment-200806710

Fixed


Serialization of struct object.

Hi, nlohmann!
Thank you for your project.
I don't want to set the key and value manually.
So I have used the code below.
// create a person
ns::person p {"Ned Flanders", "744 Evergreen Terrace", 60};

// conversion: person -> json
json j = p;

std::cout << j << std::endl;
// {"address":"744 Evergreen Terrace","age":60,"name":"Ned Flanders"}

// conversion: json -> person
auto p2 = j.get<ns::person>();

// that's it
assert(p == p2);

But this code has some errors.
no suitable user-defined conversion from "ns::person" to "nlohmann::json" exists

no instance of overloaded function "nlohmann::basic_json<ObjectType, ArrayType, StringType, BooleanType, NumberIntegerType, NumberUnsignedType, NumberFloatType, AllocatorType, JSONSerializer>::get [with ObjectType=std::map, ArrayType=std::vector, StringType=std::string, BooleanType=bool, NumberIntegerType=int64_t, NumberUnsignedType=uint64_t, NumberFloatType=double, AllocatorType=std::allocator, JSONSerializer=nlohmann::adl_serializer]" matches the argument list

How can I fix these errors?
I hope your help.
Thanks.

You also need to copy the to_json/from_json functions from the example.
Von meinem iPhone gesendet

Am 23.12.2019 um 11:04 schrieb AlexRos101<EMAIL_ADDRESS>
Hi, nlohmann!
Thank you for your project.
I don't want to set the key and value manually.
So I have used the code below.
// create a person
ns::person p {"Ned Flanders", "744 Evergreen Terrace", 60};
// conversion: person -> json
json j = p;
std::cout << j << std::endl;
// {"address":"744 Evergreen Terrace","age":60,"name":"Ned Flanders"}
// conversion: json -> person
auto p2 = j.getns::person();
// that's it
assert(p == p2);
But this code has some errors.
no suitable user-defined conversion from "ns::person" to "nlohmann::json" exists
no instance of overloaded function "nlohmann::basic_json<ObjectType, ArrayType, StringType, BooleanType, NumberIntegerType, NumberUnsignedType, NumberFloatType, AllocatorType, JSONSerializer>::get [with ObjectType=std::map, ArrayType=std::vector, StringType=std::string, BooleanType=bool, NumberIntegerType=int64_t, NumberUnsignedType=uint64_t, NumberFloatType=double, AllocatorType=std::allocator, JSONSerializer=nlohmann::adl_serializer]" matches the argument list
How can I fix these errors?
I hope your help.
Thanks.
—
You are receiving this because you are subscribed to this thread.
Reply to this email directly, view it on GitHub, or unsubscribe.

Hi!
Thank you for your reply.
So there is no way to convert directly without to_json/from_json function?
Thanks.

No, you need to, at some point, tell the library how to read/write JSON for your type.


Extend the template for "choose email" of GitHub auth.

last issue in https://github.com/zulip/zulip/issues/12638

Also includes refactors in test_auth_backends and addition of a new test.

Testing Plan:
added a test
GIFs or Screenshots:

@timabbott The first commit here's a no-brainer extraction.  I don't know enough about the auth system to fully review the second one.

Looks good! Two ideas, for separate commits I suppose:

Since email_data and expect_choose_email_screen mean nothing in non-github test classes, could we have them in in **kwargs instead of explicitly named? And then have them explicitly named in the github overrides of those methods?
2.filter_usable_emails and get_unverified_emails are super analogical, perhaps we could refactor in such a way: filter_usable_emails returns all emails except the @noreply.github.com ones  and then get_unverified/verified_emails functions do emails = [email_obj['email'] for email_obj in self.filter_usable_emails(...) if [not] email_obj.get('verified')]? Perhaps that'd be cleaner

@chdinesh1089 I replaced the last commit with my own demonstration of what I meant, because I figured it's kind of difficult to explain in words :slightly_smiling_face: And inserted some extra cleanup as the second commit.
Oh, now that I'm looking through it, I think we forgot this https://github.com/zulip/zulip/pull/14386#discussion_r403029922?

Oh, now that I'm looking through it, I think we forgot this #14386 (comment)?

Ohh, sorry, I made the changed and stashed it. added that too now.

I replaced the last commit with my own demonstration of what I meant

Okay, now it's clear what you were saying. I think I can understand the benefit of explicitly having expect_choose_email_screen and email_data as args in GitHub test class. (We can avoid the if statements inside the function and also suggest the developer to give those args when adding a new test, right?)

Okay, now it's clear what you were saying. I think I can understand the benefit of explicitly having expect_choose_email_screen and email_data as args in GitHub test class. (We can avoid the if statements inside the function and also suggest the developer to give those args when adding a new test, right?)

Yes, and it should be much less confusing for someone going through Google tests not to have to look at logic that's applicable only to Github and makes no sense in Google context.
Okay, things look good to me now! @timabbott Can you review?

Merged as the series ending with a3329f288c196d7c371ba5b70a09149020885a91, see the comments above on some changes (others are clear from reading the code).  The result is pretty clean and simple.
Thanks @chdinesh1089 and @mateuszmandera!


Add an option to only use extra_repositories

When using a local mirror of repos and passing them as
ROOKCHECK_ANSIBLE_EXTRA_VARS, the default repos are still configured
though not used because of priorities. This slows down deployment
because of the refresh, and is not always necessary.
This PR add an options extra_repos_only that can be set to true
so that ansible only use extra repos.

This is starting to get a bit convoluted. Wouldn't it be better to use ROOKCHECK_ANSIBLE_EXTRA_VARS to set "repositories" (maybe renaming that var to something more explicit and moving it into a file)?

The thing is ROOKCHECK_ANSIBLE_EXTRA_VARS can be used to pass anything to ansible, not only repositories.
I also thought about placing this into a file, but overall I'm not sure it is really easier.
For example I just pass:
export ROOKCHECK_ANSIBLE_EXTRA_VARS='{"extra_repos_only": "true", "extra_repos":{"basesystem_pool": "http://<IP_ADDRESS>/Products/SLE-Module-Basesystem/15-SP2/x86_64/product/", "basesystem_updates": "http://<IP_ADDRESS>/Updates/SLE-Module-Basesystem/15-SP2/x86_64/update/", "containers_pool": "http://<IP_ADDRESS>/Products/SLE-Module-Containers/15-SP2/x86_64/product/", "containers_updates": "http://<IP_ADDRESS>/Updates/SLE-Module-Containers/15-SP2/x86_64/update/", "serverapps_pool": "http://<IP_ADDRESS>/Products/SLE-Module-Server-Applications/15-SP2/x86_64/product/", "serverapps_updates": "http://<IP_ADDRESS>/Updates/SLE-Module-Server-Applications/15-SP2/x86_64/update/", "sle_server_pool": "http://<IP_ADDRESS>/Products/SLE-Product-SLES/15-SP2/x86_64/product/", "sle_server_updates": "http://<IP_ADDRESS>/Updates/SLE-Product-SLES/15-SP2/x86_64/update/", "caasp": "http://<IP_ADDRESS>/Products/SUSE-CAASP/4.5/x86_64/product/", "caasp_updates": "http://<IP_ADDRESS>/Updates/SUSE-CAASP/4.5/x86_64/update/", "public_cloud": "http://<IP_ADDRESS>/Products/SLE-Module-Public-Cloud/15-SP2/x86_64/product/"}}'
And this is working fine.
.
The other option is to have all repos within a yaml like config, and provide a way to override somehow that file

Right, I meant moving the default repos into roles/caasp/defaults/main.yaml and then using ROOKCHECK_ANSIBLE_EXTRA_VARS to overwrite the defaults. Thus we don't need an extra option for only using the extra_repos. In fact, we could possibly drop the extra repos, but then to add any more repos you still have to list the defaults.


Error: Cannot find module '../build/Debug/nodegit.node'

When launching Atom, I get nothing but what appears to be a Chrome JavaScript error page.

The error in question is: Cannot find module '../build/Debug/nodegit.node'.
I'm unfamiliar with NodeJS, but it appears to me that perhaps there may be an omission in the build instructions. It looks like I'm missing something that I need, but what is it?
v.1.6.0beta3 built from source on Ubuntu 14.04 32-bit and installed from a self-built .deb, all done according to the instructions.

I got same error.

OS: Ubuntu 14.04 32-bit
Atom version: v.1.6.0beta3

/cc @joshaber

This is the error detail.
Error: Cannot find module '../build/Debug/nodegit.node'
    at Module._resolveFilename (module.js:336:15)
    at Function.Module._resolveFilename (/usr/local/share/atom/resources/app.asar/src/module-cache.js:383:52)
    at Function.Module._load (module.js:286:25)
    at Module.require (module.js:365:17)
    at require (/usr/local/share/atom/resources/app.asar/src/native-compile-cache.js:50:27)
    at Object.<anonymous> (/usr/local/share/atom/resources/app.asar/node_modules/nodegit/lib/nodegit.js:15:12)
    at Module._compile (/usr/local/share/atom/resources/app.asar/src/native-compile-cache.js:103:30)
    at Object.defineProperty.value [as .js] (/usr/local/share/atom/resources/app.asar/src/compile-cache.js:208:21)
    at Module.load (module.js:355:32)
    at Function.Module._load (module.js:310:12)
    at Module.require (module.js:365:17)
    at require (/usr/local/share/atom/resources/app.asar/src/native-compile-cache.js:50:27)
    at Object.<anonymous> (/usr/local/share/atom/resources/app.asar/src/git-repository-async.js:25:16)
    at Module._compile (/usr/local/share/atom/resources/app.asar/src/native-compile-cache.js:103:30)
    at Object.defineProperty.value [as .js] (/usr/local/share/atom/resources/app.asar/src/compile-cache.js:208:21)
    at Module.load (module.js:355:32)
    at Function.Module._load (module.js:310:12)
    at Module.require (module.js:365:17)
    at require (/usr/local/share/atom/resources/app.asar/src/native-compile-cache.js:50:27)
    at Object.<anonymous> (/usr/local/share/atom/resources/app.asar/src/git-repository.js:12:24)
    at Object.<anonymous> (/usr/local/share/atom/resources/app.asar/src/git-repository.js:428:4)
    at Module._compile (/usr/local/share/atom/resources/app.asar/src/native-compile-cache.js:103:30)
    at Object.defineProperty.value [as .js] (/usr/local/share/atom/resources/app.asar/src/compile-cache.js:208:21)
    at Module.load (module.js:355:32)
    at Function.Module._load (module.js:310:12)
    at Module.require (module.js:365:17)
    at require (/usr/local/share/atom/resources/app.asar/src/native-compile-cache.js:50:27)
    at Object.<anonymous> (/usr/local/share/atom/resources/app.asar/src/git-repository-provider.js:8:19)
    at Object.<anonymous> (/usr/local/share/atom/resources/app.asar/src/git-repository-provider.js:83:4)
    at Module._compile (/usr/local/share/atom/resources/app.asar/src/native-compile-cache.js:103:30)

Hmm very odd! What happens if you try npm install nodegit?

Running npm install nodegit changes nothing. However, I haven't rebuilt Atom. I don't know if it's necessary to do so, but rebuilding on my machine will require about 2 hours, so I'm not anxious to do any extra work. And anyway, since nodejs is Javascript, I'm assuming it's interpreted at runtime, anyway. (I may be showing my ignorance here.)

I rebuilt atom, but the issue persists.

I've same problem.

same problem with Debian testing (32 bits)

Atom    : 1.7.0-dev-ac35fec
Electron: 0.36.8
Chrome  : 47.0.2526.110
Node    : 5.1.1
index.js:62 Error: Cannot find module '../build/Debug/nodegit.node'
    at Module._resolveFilename (module.js:338:15)
    at Function.Module._resolveFilename (/home/mingjunyang/bin/atom/Atom/resources/app.asar/src/module-cache.js:383:52)
    at Function.Module._load (module.js:289:25)
    at Module.require (module.js:366:17)
    at require (/home/mingjunyang/bin/atom/Atom/resources/app.asar/src/native-compile-cache.js:50:27)
    at Object.<anonymous> (/home/mingjunyang/bin/atom/Atom/resources/app.asar/node_modules/nodegit/lib/nodegit.js:17:12)
    at Module._compile (/home/mingjunyang/bin/atom/Atom/resources/app.asar/src/native-compile-cache.js:103:30)
    at Object.defineProperty.value [as .js] (/home/mingjunyang/bin/atom/Atom/resources/app.asar/src/compile-cache.js:208:21)
    at Module.load (module.js:356:32)
    at Function.Module._load (module.js:313:12)
    at Module.require (module.js:366:17)
    at require (/home/mingjunyang/bin/atom/Atom/resources/app.asar/src/native-compile-cache.js:50:27)
    at Object.<anonymous> (/home/mingjunyang/bin/atom/Atom/resources/app.asar/src/git-repository-async.js:25:16)
    at Module._compile (/home/mingjunyang/bin/atom/Atom/resources/app.asar/src/native-compile-cache.js:103:30)
    at Object.defineProperty.value [as .js] (/home/mingjunyang/bin/atom/Atom/resources/app.asar/src/compile-cache.js:208:21)
    at Module.load (module.js:356:32)
    at Function.Module._load (module.js:313:12)
    at Module.require (module.js:366:17)
    at require (/home/mingjunyang/bin/atom/Atom/resources/app.asar/src/native-compile-cache.js:50:27)
    at Object.<anonymous> (/home/mingjunyang/bin/atom/Atom/resources/app.asar/src/git-repository.js:12:24)
    at Object.<anonymous> (/home/mingjunyang/bin/atom/Atom/resources/app.asar/src/git-repository.js:428:4)
    at Module._compile (/home/mingjunyang/bin/atom/Atom/resources/app.asar/src/native-compile-cache.js:103:30)
    at Object.defineProperty.value [as .js] (/home/mingjunyang/bin/atom/Atom/resources/app.asar/src/compile-cache.js:208:21)
    at Module.load (module.js:356:32)
    at Function.Module._load (module.js:313:12)
    at Module.require (module.js:366:17)
    at require (/home/mingjunyang/bin/atom/Atom/resources/app.asar/src/native-compile-cache.js:50:27)
    at Object.<anonymous> (/home/mingjunyang/bin/atom/Atom/resources/app.asar/src/git-repository-provider.js:8:19)
    at Object.<anonymous> (/home/mingjunyang/bin/atom/Atom/resources/app.asar/src/git-repository-provider.js:83:4)
    at Module._compile (/home/mingjunyang/bin/atom/Atom/resources/app.asar/src/native-compile-cache.js:103:30)

v1.5.3 works well.
But v1.6.0 and v1.7.0-beta0 still have the probrem. :crying_cat_face:

I have the same issue too. So what's the solution for this ?

Seeing this problem as well, nothing changes when running atom using --safe.

Ubuntu 15.10
Atom 1.6.0

What's C++ toolchain ? Where to get that ?

Me too facing this Issue post update of Atom in Ubuntu 15.10 x86

I've got this issue on Ubuntu 15.10

I have also tried rebuilding it from source, but still same issue i guess it is something related to packaging, but not able to understand which directory it is trying to access, if I can get hold of it then can add that module & resolve this issue.

I have this problem too
Arch Linux
Rebuild don't solve.

When i try run npm install nodegit show this error:
node-pre-gyp ERR! install error  node-pre-gyp ERR! stack Error: 403 status code downloading tarball https://nodegit.s3.amazonaws.com/nodegit/nodegit/nodegit-v0.11.9-node-v47-linux-ia32.tar.gz node-pre-gyp ERR! stack     at Request.<anonymous> (/usr/lib/node_modules/nodegit/node_modules/node-pre-gyp/lib/install.js:101:37) node-pre-gyp ERR! stack     at emitOne (events.js:95:20)

Thanks for all the reports. Is everyone using some 32-bit Linux distro?

I am.

The same problem. Mint 17.3 x32.

I have the same problem.
Ubuntu 15.10 32bit using the WebUpd8 package.

Same problem as everyone above, running 32bit Ubuntu 15.10.

Revert to Version 1.5.3 for Ubuntu 15.10 x86
I have build v1.5.3 for Atom on Ubuntu 15.10 x86 can be downloaded below
[https://onedrive.live.com/redir?resid=E6C14FDDB7D6AE69!3766&authkey=!AL8jSJiCFgbnfnA&ithint=file%2Cdeb]

@srujalsk thank you so much!

Version 1.5.3 works on Debian (32bit) too, but it would be nice to be able to successfully build the latest version and/or to understand what's wrong with it.

@korova08 Agree, but there seems to be some issue with packaging so, I just provided an option to revert back to previous version instead of getting involved in all the process of Building from Source

Arch linux 32-bit, too

For anyone using the WebUpd8 PPA: if you just hosed atom by updating to 1.6, you can remove it and then manually install this deb:
http://ppa.launchpad.net/webupd8team/atom/ubuntu/pool/main/a/atom/atom_1.5.4-1~webupd8~0_i386.deb

Same symptoms and error and also on 32bit

Link dweldon above provided no longer exists, found a working one here: https://bugs.launchpad.net/~nilarimogard/+archive/ubuntu/test3/+files/atom_1.5.4-1~webupd8~0_i386.deb

Why is this still marked as needs reproduction, we have clearly reproduced it many times.

The same thing with v1.6.0 x32 build at slackware

@jag3rm3ist3r Very true!
To provide some context, on most platforms we download pre-built binaries of NodeGit. 32-bit Linux is the one exception. But it should fall back to building from source. Clearly that's not happening.

I've builded by hand the nodegit and clearly seeing it (nodegit.node ELF binary) in my local node_modules directory (~/node_modules/nodegit/build/Release/). So I'm seeing that atom installs the similar binary ELF file in /usr/local/share/atom/resources/app.asar.unpacked/node_modules/git-utils/build/Release but it is named git.node.

@Sfinx Ah, note that git-utils is different from nodegit.

I built on another machine(32bit Lubuntu).
But not works.

git-utils contains the same libgit2 functions linked inside (checked with nm) as the nodegit.node.

Yes, both git-utils and nodegit include libgit2. However, this issue is about nodegit.

I have the same issue
Build atom from the sources v1.7.0-beta0
uname -a
Linux iogane-pc 3.19.0-56-generic #62~14.04.1-Ubuntu SMP Fri Mar 11 11:03:33 UTC 2016 i686 i686 i686 GNU/Linux

May be related ?
http://www.theregister.co.uk/2016/03/23/npm_left_pad_chaos/

@Sfinx No, left-pad was un-unpublished. "Cannot read property 'target' of null" is a known npm issue that isn't related to unpublished packages, that looks like it's still being worked on.

@SEAPUNK I see. I mean that the original author have been unpublished all his modules
https://gist.githubusercontent.com/azer/db27417ee84b5f34a6ea/raw/50ab7ef26dbde2d4ea52318a3590af78b2a21162/gistfile1.txt
left-pad was published back without his permission and will

same problem on  Gentoo x86 i686(32bit)

Same problem here in Arch linux 32 bits. Steps to reproduce:

Follow https://github.com/atom/atom/blob/master/docs/build-instructions/linux.md
execute atom-beta
P/D: no relevant errors / information in the terminal

Same problem with Arch Linux i686, Atom v1.6 built from AUR, v1.5.4 is fine.
Please fix this problem.
$ atom -f
[23329:0328/115549:ERROR:browser_main_loop.cc(189)] Running without the SUID sandbox! See https://code.google.com/p/chromium/wiki/LinuxSUIDSandboxDevelopment for more information on developing with the sandbox on.
[23329:0328/115550:INFO:audio_manager_pulse.cc(258)] Failed to connect to the context.  Error: Connection refused
App load time: 563ms

@rafaelsoaresbr I'm also on Arch Linux, very surprised that AUR doesn't install the prebuilt when one exists and instead opts to recompile and install.
Unless you're missing the Arch base-devel package, I can't imagine why it wouldn't compile from source for you. Did you see any GCC output?

@tbranyen I'm on Arch/AUR as well, and it builds the atom package fine for me -- I think nodegit silently fails to install. When I manually attempted to install nodegit (npm install nodegit in a clean directory), it gave me the error in my previous comment (https://github.com/atom/atom/issues/10819#issuecomment-200963545).

@tbranyen I got a lot of erros when I run npm install nodegit (http://pastebin.com/WtvmN2JP)
I have tried to build form source with no success (http://www.nodegit.org/guides/install/from-source/)

Same issue with the very latest trunk source. OS : xubuntu 14.04.1 LTS

@joshaber I'm getting the error on
Linux nik-desk 4.4.5-1-ARCH #1 SMP PREEMPT Thu Mar 10 07:38:19 CET 2016 x86_64 GNU/Linux

I created a PR over at nodegit that should start publishing 32-bit binaries for nodegit. If this works, then after a new release of nodegit is out, and after atom bumps its version, it should hopefully start working again.

That's fantastic! Thanks @SEAPUNK!

same error on
OSX EI Capitan 10.11.4
node v5.7.0

https://github.com/nodegit/nodegit/commit/25afe8a80fae9c0a82b6861768ccb0e22b852616
The fix was merged upstream, let's see how it does.

Just published v0.12.2 of nodegit which contains the 32-build prebuilt binaries https://github.com/nodegit/nodegit/releases/tag/v0.12.2

For those running Arch Linux i686 it's now possible to build/run Atom 1.6.2 (from AUR) editing packages.json file:
https://github.com/sjug/atom-editor/issues/4#issuecomment-207211093
I hope that @sjug create a patch inside AUR package.

so i think it's just a matter of updating the nodegit version in the package.json file to 0.12.2

Yes @artynet
Since https://github.com/nodegit/nodegit/pull/980 has been merged.
I've just opened a pull request to fix AUR package:
https://github.com/sjug/atom-editor/pull/5

I have the same issue with v1.6.1 and v1.6.2 but v1.6.0 works fine.
My system: elementry OS Freya (Ubuntu 14.04) 64-bit
P.S. I updated atom to v1.6.2 on my Linux Mint 17.3 Rosa (Ubuntu 14.04) 64-bit and it worked with no problem.

This problem is related to 32bits machines. There wasn't 32-bit prebuilt binaries of nodegit.
If you have this problem on 64-bit machine, then something went wrong with you build. Or not, can someone confirm this? For me this problem doesn't happen on 64-bit Linux machine.
Running:
npm install nodegit

Didn't solve this problem on 32bit machines (See https://github.com/atom/atom/issues/10819#issuecomment-198778893)

As of #11426 we should be able to nodegit's 32-bit binaries too.

Upgrading to atom 1.8.0-beta1 has fixed the issue for me. Working flawlessly now :)

I'm on Ubuntu trusty 32bit. I built version 1.7.1 today and same errors happen. I upgraded nodegit by npm install nodegit, but nothing changed!

@AnwarShah
ask the package maintainer to apply a [small patch] (https://github.com/sjug/atom-editor/blob/master/package.patch) like the one applied to the AUR package (for Arch Linux) or use v1.8beta instead.

v1.8.0beta (commit 9e39445f802a63....) still not working when building from source code at Slackware 32bit.

Sorry, my fault - missed "atom-beta" binary name, 1.8.0beta works ! ;)

@Sfinx I built the package myself. Trying to apply the patch. Thanks

Sorry to clutter this thread.
I managed to have atom working on Ubuntu 32-bit, but it is not perfect.
After script/build of brench version atom-beta-1.8.0beta2, I git cloned nodegit, installed nodegit (here I think I missed something) and manually copied nodegid installation form my default installed modules folder into atom-beta-1.8.0beta2 modules sub-folder. In this way atom can start from out folder, but installed atom in /usr/local/bin shows once more
Error: Cannot find module '../build/Debug/nodegit.node'
etc. etc.

This is still a problem in master (1.90-dev). I had to cd into node_modules/ohnogit/node_modules/nodegit/ and run npm run install. I tried npm run installDebug but it had an error. I then duplicated the node_modules/ohnogit/node_modules/nodegit/build/Release to node_modules/ohnogit/node_modules/nodegit/build/Debug and everything worked.
Atom maintainers need to trigger a post install hook for that module


[WIP] buildtest config compilers find --file

Hi @shahzebsiddiqui, running command below keeps getting unrecognized arguments error. Can you take a look?
buildtest config compilers find --file /tmp/buildtest.config.yml -u

usage: buildtest [options] [COMMANDS]
buildtest: error: unrecognized arguments: /tmp/buildtest.config.yml

Hi @shahzebsiddiqui, running command below keeps getting unrecognized arguments error. Can you take a look?
buildtest config compilers find --file /tmp/buildtest.config.yml -u

usage: buildtest [options] [COMMANDS] buildtest: error: unrecognized arguments: /tmp/buildtest.config.yml

see my message https://github.com/buildtesters/buildtest/pull/1420/files#r1157445437 the add_argument is not setup correctly. Let me know if this fix. the issue

@Xiangs18 i saw the gitlab runner was stuck so i restarted it now your CI job is running on Perlmutter https://software.nersc.gov/NERSC/buildtest/-/jobs/202208 hopefully we will see the test coverage results in codecov.


Event Grid IP Firewall in Preview?

In the first set of dot points at the top of this page, the dot point related to the Event Grid firewall has a "(preview)". Is this feature actually still in preview?

Document Details
⚠ Do not edit this section. It is required for docs.microsoft.com ➟ GitHub issue linking.

ID: 22711686-7353-1674-4313-96801a0808dc
Version Independent ID: ef864bd9-a9ad-3537-18e3-9cd41f035ffb
Content: Network security for Azure Event Grid resources - Azure Event Grid
Content Source: articles/event-grid/network-security.md
Service: event-grid
GitHub Login: @VidyaKukke
Microsoft Alias: vkukke

@pnarsi - Thanks for posting the query. We are looking into it and will get back to you soon.

@pnarsi I confirmed with the Event Grid team that this feature is in GA status. We'll remove the "(preview)" part shortly.
We will now proceed to close this thread. If there are further questions regarding this matter, please reopen it and we will gladly continue the discussion.


Easy way to change default settings ?

I looked around but couldn't find an easy way to adjust the default settings.
Are they hardcoded somewhere ?
Looking into the .sqlite, i only found the default resolution in there and nothing else.

Finally found them. Wow. In the queue code of all places.


Pub broken, 7-Zip Error : Cannot use absolute pathnames for this command

This issue was originally filed by<EMAIL_ADDRESS>
Hello
I've cleaned my system and all dart related folders and caches and downloaded and extracted the latest version of Dart (Version Dart Editor version 0.2.3_r14669 and Dart SDK version <IP_ADDRESS>_r14669) to "C:\dev\dart" on a clean Windows 2003.
Opened the "todomvc" example
But Pub Install always complains with error:
Running pub install ...
Pub install fail, Resolving dependencies...
Downloading web_components 0.2.0 from hosted...
Downloading html5lib 0.0.13 from hosted...
Downloading js 0.0.3 from hosted...
Could not un-tar (exit code 7). Error:
7-Zip (A) 9.20  Copyright (c) 1999-2010 Igor Pavlov  2010-11-18
Error:
Cannot use absolute pathnames for this command
/todomvc/build.dart
Failed with error code 255
  Unable to open file: C:/dev/dart/samples/todomvc/packages/web_components/component_build.dart'file:///C:/dev/dart/samples/todomvc/build.dart': Error: line 7 pos 1: library handler failed
  import 'package:web_components/component_build.dart';
  ^
Can anybody help me with that,
thanks and best regards
Bernd

This issue has been moved to dart-lang/pub#275.


[SUPPORT] s3 list cost increases exponentially when using COW table

We started ingesting data from kafka using spark java and wanted to understand the storage cost associated with creating a table.
Interestingly, we see that our s3 listing cost exponentially so wanted to understand if we are missing on something that can help us reduce this cost.
We do have the metadata enabled so the assumption was s3 cost will be reduced but dont see that.
When the spark job starts, we do see that the embedded timeline server starts and errors out post processing of the 1 micro batch. (Not sure if this is causing the listing cost and I believe the embedded timeline server was disabled as per this issue)

Environment Description

Hudi version : 0.15.0

Spark version : 3.4.3

Storage (HDFS/S3/GCS..) : S3

Stacktrace
24/08/08 16:07:56 INFO TimelineService: Starting Timeline server on port :45043
24/08/08 16:07:56 INFO EmbeddedTimelineService: Started embedded timeline server at <......>
24/08/08 16:07:56 INFO BaseHoodieClient: Timeline Server already running. Not restarting the service
24/08/08 16:07:56 INFO HoodieActiveTimeline: Loaded instants upto : Option{val=[20240808160601237__commit__COMPLETED__20240808160625000]}

24/08/08 16:08:02 INFO BaseHoodieClient: Embedded Timeline Server is disabled. Not starting timeline service
24/08/08 16:08:02 INFO BaseHoodieClient: Embedded Timeline Server is disabled. Not starting timeline service

** Hudi config **
df.writeStream()
    .format("hudi")
    .option("hoodie.insert.shuffle.parallelism", "2")
    .option("hoodie.upsert.shuffle.parallelism", "2")
    .option("hoodie.delete.shuffle.parallelism", "2")
    .option(EMBEDDED_TIMELINE_SERVER_ENABLE.key(), "true")

    .option(HoodieWriteConfig.TBL_NAME.key(), newTName)
    .option("hoodie.datasource.write.table.type", HoodieTableType.COPY_ON_WRITE.name())
    .option("hoodie.datasource.write.operation", WriteOperationType.INSERT.value())
    .option(KeyGeneratorOptions.PARTITIONPATH_FIELD_NAME.key(), "ts_date")
    .option("checkpointLocation", newCheckPoint)

    .option(KeyGeneratorOptions.RECORDKEY_FIELD_NAME.key(), "col1,col2,col3,col4")

    .option(HoodieWriteConfig.PRECOMBINE_FIELD_NAME.key(), "time_stamp")
    .option(INDEX_TYPE.key(), GLOBAL_BLOOM.name())

     // Clustering + Compaction config
    .option(ASYNC_CLUSTERING_ENABLE.key(), "true")
    .option("hoodie.clustering.plan.strategy.max.bytes.per.group", "524288000")

     // Metadata Config
    .option(ENABLE_METADATA_INDEX_COLUMN_STATS.key(), "true")
    .option(ASYNC_INDEX_ENABLE.key(), "true")

    .option(ASYNC_CLEAN.key(), "true")

    .outputMode(OutputMode.Append());

resolved and answered on slack
https://apache-hudi.slack.com/archives/C4D716NPQ/p1723225490926329

Thanks for responding @soumilshah1995
The index change did help a bit but we are still seeing a significant cost towards s3 bucket listing api calls

@ankit0811 does s3 has more detail log show which type file cost?

@ankit0811 like audit log?

@KnightChess unfortunately no.

Hi there! It's fantastic to hear that the cost has dropped by 10%. Could you clarify the current cost? Are we looking at something in the hundreds of dollars, or is it less than $100?
We also need a bit more detail to assist you better:
Are you running this on AWS Glue or EMR?
What version of Apache Hudi are you using?
Which version of Spark are you working with?
Could you provide the full script, including the code and configurations?
What type of data are you working with, and which indexing option are you currently using?

Hey, since this is just a POC, its less than $100.
However, the storage cost is half than the listing cost so want to understand if theres an incorrect config that we are using or is this generally expected.

Are you running this on AWS Glue or EMR?

We have our own local clusters and deploy spark using spark-operator (k8s)

What version of Apache Hudi are you using?

0.15.0

Which version of Spark are you working with?

3.4.3

Could you provide the full script, including the code and configurations?

This is the hoodie writer config

df = sparkSession
        .readStream()
        .format("kafka")
        .option("kafka.bootstrap.servers", "kafka-host-port")
        .option("subscribe", "topicName")
        .option("auto.offset.reset", "latest")
        .option("failOnDataLoss", "false")
        .load();

df = df
    .selectExpr("CAST(value AS STRING) as value")
    .select(
        col("value"),
        from_json(col("value"), schema).alias("__rows"))
    .select(
        col("__rows.time_stamp").alias("time_stamp"),
        col("..."),
        col("..."),
        col("..."),,
        explode(col("__rows.nestedColumn")).alias("__data")
    )
    .select(
        col("time_stamp"),
        col("...."),
        col("...."),
        col("....");

 Let me kn ow if this helps.

What type of data are you working with, and which indexing option are you currently using?
the source is a kafka stream where we expect some IOT related data. The volume will be ~ each device sends some data at least twice a minute.

The current volume per day for the above topic is ~11Gb compressed data per day. (FYI this is only dev data and we expect this to be at least 50 times in prod).
We plan to partition this by date. As of now we haven't configured any indexing and are using the default options only (Post your suggestion)

Sure. Please find the schema (due to security reasons, I am not allowed to share the actual schema but this is the closest representation without giving much details)
The work load is approx 11GB (compressed) of streamed data. This is a consistent stream and do not expect spiky traffic.
Also curious, how will schema dictate the listing cost?

StructType nestedCol1 = new StructType(new StructField[] {
        DataTypes.createStructField("col1", DataTypes.StringType, true),
        DataTypes.createStructField("col2", DataTypes.StringType, true),
        DataTypes.createStructField("col3", DataTypes.StringType, true),
        DataTypes.createStructField("col4", DataTypes.StringType, true),
        DataTypes.createStructField("col5", DataTypes.StringType, true),
        DataTypes.createStructField("col6", DataTypes.StringType, true),
        DataTypes.createStructField("col7", DataTypes.StringType, true),
        DataTypes.createStructField("col8", DataTypes.StringType, true),
        DataTypes.createStructField("nested_metric1", DataTypes.IntegerType, true),
        DataTypes.createStructField("nested_metric2", DataTypes.IntegerType, true)
    });

    StructType schema = new StructType(new StructField[] {
        DataTypes.createStructField("time_stamp", DataTypes.DoubleType, false),
        DataTypes.createStructField("id_part1", DataTypes.StringType, false),
        DataTypes.createStructField("id_part2", DataTypes.StringType, false),
        DataTypes.createStructField("id_part3", DataTypes.StringType, false),
        DataTypes.createStructField("id_part4", DataTypes.StringType, false),
        DataTypes.createStructField("id_part5", DataTypes.StringType, false),
        DataTypes.createStructField("attribute1", DataTypes.StringType, true),
        DataTypes.createStructField("attribute2", DataTypes.StringType, true),
        DataTypes.createStructField("attribute3", DataTypes.StringType, true),
        DataTypes.createStructField("attribute4", DataTypes.StringType, true),
        DataTypes.createStructField("attribute5", DataTypes.BooleanType, true),
        DataTypes.createStructField("metric1", DataTypes.DoubleType, true),
        DataTypes.createStructField("metric2", DataTypes.DoubleType, true),
        DataTypes.createStructField("metric3", DataTypes.DoubleType, true),
        DataTypes.createStructField("nested_col1", DataTypes.createArrayType(nestedCol1), true)
    });

sample data

{
	"id_part1": "4a7545a1-9f0d-4038-a8c0-444b55a579fe",
	"id_part2": "cf7755cb-faaf-4805-986c-69f1cd625754",
	"time_stamp":<PHONE_NUMBER>660005600,
	"id_part3": "7fbf2e0d-0567-475e-bc16-cf115f2af435",
	"id_part4": "327da669-a0e9-442b-b423-0d0481688b00",
	"id_part5": "device_type1",
      "attribute1": "device_attribute1",
	"attribute2": "device_attribute2",
	"attribute3": "device_attribute3",
	"attribute4": "device_attribute4",
	"attribute5": false,
	"metric1": 10234.24,
	"metric2": 1.99,
	"metric3": -156.98,
	"etl_out":<PHONE_NUMBER>328.89,

	"nested_col1": [
		{
              "col0": "b9e102ac-d00c-410e-b5c1-d2ada5f53933",
              "col1": "74db6f8b-d99e-4483-b82f-9efaebaf17e8",
              "col2": "478c6f35-e2ac-410b-a390-517f308d8a43",
              "col3": "d6bf71d0-ee70-42df-937e-d9f26280a66a",
              "col4": "45c94e8f-3ac0-4cbd-8284-13808a65846c",
              "col5": "653256d6-bccd-49ac-9256-bae53219db3f",
              "col6": "c953409e-9bf0-43fd-af2f-22751cdbeeb6",
              "col7": "6371c7a4-6b97-4925-8f37-5e0dd474a8b7",
			"nested_metric1": "0",
			"nested_metric2": "-190"
		},
		{
              "col0": "98d52ad0-1482-4ed8-be7b-3f6d81eac4de",
              "col1": "d1022ef4-100b-4c7e-96f5-19f60426a73a",
              "col2": "067a5291-7038-492f-9776-5fb87f673f6c",
              "col3": "601ac625-f7ee-487d-b473-535c09103018",
              "col4": "21a07cf2-633e-478f-a218-9e3ce0564f84",
              "col5": "d7b66f65-388b-45a8-b1ca-ff9ad3a90750",
              "col6": "bfc026d2-f5f4-4a61-9015-113e6464f630",
              "col7": "5870169b-0f2f-4989-b42c-d470e3912277",
              "nested_metric1": "-90",
			"nested_metric2": "-190"
        }
    ]
}

ill review the schema and get back to you on this GH

Hi @ankit0811
I just happened to see your case. ( I am using 100% CoW on Prod + Spark microbatching )
If I were you, I would create a base line with this.
You need a base line stats.

CoW
disable metadata service
disable clustering service
keep the async cleaner

And play with "ProcessingTimeTrigger(120000)".

Run less often

@Gatsby-Lee thanks for the suggestions. I have disabled metadata, clustering and cleaner services atm. Will let it run for a day or so and update with the changes if any. If this doesnt help, will play with the trigger time
@soumilshah1995 the source is a kafka stream and right now since this is a POC, we havent finalized the architecture yet. All we are trying to do is create a hudi table from our raw kafka stream and take it forward from there.
We are using composite key as our primary key

Update:
The listing cost did drop by 50% post disabling metadata, clustering and clean-up.
FYI, this cost is in 10s of $ per day. The storage cost is also in the same range. So wanted to understand if this is a constant cost independent of the storage volume and you see the same kind of cost behavior for your prod workflows? @Gatsby-Lee

Hi @ankit0811
that's great news that the cost dropped. ( BTW, you need the cleaner at minimum )
The cost is not constant.
As you can imagine, there are many factors.
In short, I always think this way.
If ETL does less work, the cost is less.
I don't use clustering since it can add extra complicity.
I only use CoW + Hudi optimization ( like lazy listing ). And, this is already fast enough without using the Metadata Table.
I've experimented the Metadata Table.
And, I think It is NOT always good for everything.
If you don't need it, then you don't need to enable it. It can slow down ETL and increase cost.

The listing cost did drop by 50% post disabling metadata, clustering and clean-up

Would you mind disabling only cleaning ? This reminds me this issue with same exponentiel listing behavior #6373

@parisni Sure will try that as well.
As of now have enabled the cleaner + clustering service and been tweaking the trigger time. So far looks like its moving in the right direction so will keep playing with this. Want this to run for some time to get a fair idea abt the cost part.
Will target experimenting further with cleaner service in a few weeks and keep the thread updated

@parisni I did disabled the cleaner but it did not result in any more decrease in list cost.
So most likely the metadata service + the triggering frequency was causing this
One thing still not clear to me is wasn't the metadata service's role to avoid such increase and use it for listing instead of going to file system ?

thx, can you confirm the usage pattern on this table is write only ? So the listing are related to writer, and not select queries ?
True the metadata goal is to reduce drastically listing which happens mostly during read, but AFAIK during the write path to identify files to copy on write

@parisni I did disabled the cleaner but it did not result in any more decrease in list cost. So most likely the metadata service + the triggering frequency was causing this
One thing still not clear to me is wasn't the metadata service's role to avoid such increase and use it for listing instead of going to file system ?

You need the cleaner at min.
Recently, I completed my experimentation in the Hudi Metadata Table.
Before you use the Hudi Metadata Table ( Indexing ), please think twice. It comes with some cost.


Release 1.7.0

New release includes the latest pattern file
Update GitHub URL to beam-community organization
Update example app to Phoenix 1.4

Is 1.7.0 a suitable version for this release?

@nathany do we have any breaking changes? I don't think so, in which case I think 1.7 is perfectly okay.

@nathany please do add yourself as a maintainer, you should absolutely get recognized for help 😁

No breaking changes.

Thanks Sean. I've added myself as a maintainer and published 1.7.

Awesome! Thank you @nathany! I'm excited to get the chance to work with you, even in a limited capacity 😁
I hope you and your's have a wonderful weekend


Added information about logging SQL queries

Fixes #1903

Is there any other value that’s ever going to be useful to pass in here, other than the default (.debug), or the one to enable logging (.info)?
If not, it might be clearer to just have a boolean parameter logSQLQueries.
The fact that one has to move “down” in detail level from .debug to .info in order to obtain more information is counter-intuitive.


"no parent found" warning when loading labels through napari-ome-zarr

After running the new examples/05_cardio_tiny_dataset_cellpose/run_example_cellpose.py (updated with #292), and opening the output with napari, we get a warning about label parents:
$ napari --plugin napari-ome-zarr tmp_out/20200812-CardiomyocyteDifferentiation14-Cycle1.zarr/B/03/0/

Assistant skips harvesting pyclesperanto as it's not installed.
14:51:25 WARNING no parent found for <ome_zarr.reader.Label object at 0x7f097b0d13f0>: None

This is printed by the Label class of the ome-zarr-py reader.
I'm not sure of whether this has always been there, but I only noticed it now.

I think this has always been there, or at leas tbeen there for a while. I've seen this a few times already.
Not sure what it actually means though, I have never looked into it

Note: we do create the image-label dictionary for labels, but we only fill it with {"version": "0.4"}, as per

The image-label dictionary SHOULD contain a version key whose value MUST be a string specifying the version of the image-label specification.

Ah, interesting. That would be good metadata to add to keep a record of what image the label image is based on. We're not currently using this anywhere. But good to eventually include.
The thing that will get potentially a bit complicated is that a label image can be created from multiple images (e.g. in a napari workflow)


Add ECSQL syntax documentation & update NextVersion.md with recent enhancements.

[x] Bitwise operators
[x] Arithmetic operators
[x] String operators
[x] Boolean operators
[ ] Scalar built-in functions

[x] Sqlite functions
[x] ECSql functions

[ ] Aggregate built-in functions

[ ] Sqlite functions

[x] REGEXP & REGEXP_EXTRACT
[x] Date/Time Literal
[x] Searched CASE expression
[x] LIKE expression
[ ] IN expression
[x] IS (select | value-list | type-list) expression
[ ] EXISTS(subquery) expression
[x] CAST(<expr> AS <type>) expression
[x] ECSQLOPTIONS
[x] LIMIT <expr>[OFFSET <expr>]
[x] GROUP BY <expr> HAVING <expr>
[x] ORDER BY <expr> [,<expr>]
[x] CTE
[x] Instance access $, $->prop
[x] Positional and named parameters
[x] INNER  JOIN, LEFT JOIN, RIGHT JOIN & CROSS JOIN
[x] UNION, UNION ALL, INTERSECT & EXCEPT
[ ] Value subquery
[ ] ALL | ONLY polymorphic constraints
[ ] Table valued function json1.* examples
[x] ECSQL Pragmas

[x] Integrity check

[x] ECSQL Keywords

@mergifyio backport release/4.3.x


Handle image changes sizes as it drags when in rotate mode

Bug already referenced in issue #3. Will work on a fix soon!


Prevent re-rendering while not receiving 'registered' Message

Consider the following program adapted from examples/counter which counts and prints the total number of times .view() has been called (i.e. UI redrawn).
The behaviour I expect is to call .view() only when a 'registered' message (in this case enum Message {IncrementPressed, DecrementPressed}) is received. However, it actually re-renders upon any detectable event e.g. mousedown, mouseup, scroll, keypress. Is there a way to prevent unwanted re-rendering?

use iced::{button, Align, Button, Column, Element, Sandbox, Settings, Text};

static mut N: usize = 0;

pub fn main() -> iced::Result {
    Counter::run(Settings::default())
}

#[derive(Default)]
struct Counter {
    value: i32,
    increment_button: button::State,
    decrement_button: button::State,
}

#[derive(Debug, Clone, Copy)]
enum Message {
    IncrementPressed,
    DecrementPressed,
}

impl Sandbox for Counter {
    type Message = Message;

    fn new() -> Self {
        Self::default()
    }

    fn title(&self) -> String {
        String::from("Counter - Iced")
    }

    fn update(&mut self, message: Message) {
        match message {
            Message::IncrementPressed => {
                self.value += 1;
            }
            Message::DecrementPressed => {
                self.value -= 1;
            }
        }
    }

    fn view(&mut self) -> Element<Message> {
        unsafe {
            N += 1;
            println!("rendered {} times", N);
        }
        Column::new()
            .padding(20)
            .align_items(Align::Center)
            .push(
                Button::new(&mut self.increment_button, Text::new("Increment"))
                    .on_press(Message::IncrementPressed),
            )
            .push(Text::new(self.value.to_string()).size(50))
            .push(
                Button::new(&mut self.decrement_button, Text::new("Decrement"))
                    .on_press(Message::DecrementPressed),
            )
            .into()
    }
}

This is related to #241. I shared my thoughts in https://github.com/hecrj/iced/issues/241#issuecomment-605443289.


Jank in Endloss scroll

Describe the bug
Seeing a jank on scroll.
Device
Model : Redmi note 10 pro max
OS : Android 12
Screenshots
https://user-images.githubusercontent.com/9381846/185351273-649269d4-7655-478e-b16b-9cbc19a741c0.mp4

Redid from 0, please check


Missing : Password Encryption

The passwords are  right now stored into the  Mongo DB Database directly without hashing the password this is creating security risk for the users to store their password . Proper cryptography need to applied in order to ensure that the passwords are stored into the database into the secure manner.
Please assign me this issue so that I could continue working on this issue.

Assigned @MOHINI1403, you're good to go ahead.

Sure I will work on this

Hey! Can you please assign this to me ?


Update the docker image to openjdk:17.0.1-jdk-slim-bullseye

Could you update the docker image to openjdk:17.0.1-jdk-slim-bullseye? For security reasons
Could you also update the software to using node 16? Since node 12 has been off support

Will try

https://github.com/kochetkov-ma/allure-server/releases/tag/v2.13.6


⚠ Bofrost.de has degraded performance

In 027860e, Bofrost.de (https://www.bofrost.de) experienced degraded performance:

HTTP code: 200
Response time: 1398 ms

Resolved: Bofrost.de performance has improved in 27c19d8.


feature: add LZ4 compressor

LZ4 is an extremely fast Compression algorithm. Maybe it should be supported.

lz4/lz4: Extremely Fast Compression algorithm
RealTime Data Compression: LZ4 explained

please fix CI error

please format the code according to the p3c specification

please fix CI error:
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-checkstyle-plugin:3.0.0:check (validate) on project seata-compressor-lz4: Failed during checkstyle execution: There are 4 errors reported by Checkstyle 6.18 with /home/travis/build/seata/seata/style/seata_checkstyle.xml ruleset.

There is an error. And there is no report. So I cannot find it.
@a364176773 I use p3c to check the code. There is not any warning.
Please help me.

please fix CI error:
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-checkstyle-plugin:3.0.0:check (validate) on project seata-compressor-lz4: Failed during checkstyle execution: There are 4 errors reported by Checkstyle 6.18 with /home/travis/build/seata/seata/style/seata_checkstyle.xml ruleset.

There is an error. And there is no report. So I cannot find it.
@a364176773 I use p3c to check the code. There is not any warning.
Please help me.

please check the code format and local mvn clean install -DskipTests=true

please check the code format and local mvn clean install -DskipTests=true

I ran the command. The log had an error. But did not show the detail.
The log is as following:
...
[INFO] seata-spring-boot-starter 1.2.0-SNAPSHOT ........... SUCCESS [  1.714 s]
[INFO] seata-compressor-lz4 1.2.0-SNAPSHOT ................ FAILURE [  0.235 s]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  01:27 min
[INFO] Finished at: 2020-04-07T12:39:15+08:00
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-checkstyle-plugin:3.0.0:check (validate) on project seata-compressor-lz4: Failed during checkstyle execution: There is 1 error reported by Checkstyle 6.18 with /Users/diguage/develop/java/javaprojects/seata/style/seata_checkstyle.xml ruleset. -> [Help 1]
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR]
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoExecutionException
[ERROR]
[ERROR] After correcting the problems, you can resume the build with the command
[ERROR]   mvn <goals> -rf :seata-compressor-lz4

please check the code format and local mvn clean install -DskipTests=true

I ran the command. The log had an error. But did not show the detail.
The log is as following:
...
[INFO] seata-spring-boot-starter 1.2.0-SNAPSHOT ........... SUCCESS [  1.714 s]
[INFO] seata-compressor-lz4 1.2.0-SNAPSHOT ................ FAILURE [  0.235 s]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  01:27 min
[INFO] Finished at: 2020-04-07T12:39:15+08:00
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-checkstyle-plugin:3.0.0:check (validate) on project seata-compressor-lz4: Failed during checkstyle execution: There is 1 error reported by Checkstyle 6.18 with /Users/diguage/develop/java/javaprojects/seata/style/seata_checkstyle.xml ruleset. -> [Help 1]
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR]
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoExecutionException
[ERROR]
[ERROR] After correcting the problems, you can resume the build with the command
[ERROR]   mvn <goals> -rf :seata-compressor-lz4

scroll up to find the corresponding module log, which should have a prompt message

please check the code format and local mvn clean install -DskipTests=true

I ran the command. The log had an error. But did not show the detail.
The log is as following:
...
[INFO] seata-spring-boot-starter 1.2.0-SNAPSHOT ........... SUCCESS [  1.714 s]
[INFO] seata-compressor-lz4 1.2.0-SNAPSHOT ................ FAILURE [  0.235 s]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  01:27 min
[INFO] Finished at: 2020-04-07T12:39:15+08:00
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-checkstyle-plugin:3.0.0:check (validate) on project seata-compressor-lz4: Failed during checkstyle execution: There is 1 error reported by Checkstyle 6.18 with /Users/diguage/develop/java/javaprojects/seata/style/seata_checkstyle.xml ruleset. -> [Help 1]
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR]
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoExecutionException
[ERROR]
[ERROR] After correcting the problems, you can resume the build with the command
[ERROR]   mvn <goals> -rf :seata-compressor-lz4

scroll up to find the corresponding module log, which should have a prompt message

I saw the seata/compressor/seata-compressor-lz4/target/checkstyle-result.xml file. There is a tip.
Thank you very much.

@diguage mvn clean install -DskipTests=true -Dmaven.javadoc.skip=true -Dcheckstyle.skip=false

Codecov Report

Merging #2510 into develop will decrease coverage by 0.10%.
The diff coverage is 82.75%.

@@              Coverage Diff              @@
##             develop    #2510      +/-   ##
=============================================
- Coverage      51.45%   51.34%   -0.11%
- Complexity      2665     2671       +6
=============================================
  Files            529      531       +2
  Lines          16956    16965       +9
  Branches        2051     2014      -37
=============================================
- Hits            8724     8711      -13
+ Misses          7408     7406       -2
- Partials         824      848      +24

Impacted Files
Coverage Δ
Complexity Δ

...src/main/java/io/seata/compressor/lz4/Lz4Util.java
80.76% <80.76%> (ø)
6.00 <6.00> (?)

...in/java/io/seata/compressor/lz4/Lz4Compressor.java
100.00% <100.00%> (ø)
3.00 <3.00> (?)

...obuf/convertor/BranchRegisterRequestConvertor.java
90.47% <0.00%> (-9.53%)
3.00% <0.00%> (ø%)

...otobuf/convertor/BranchReportRequestConvertor.java
90.90% <0.00%> (-9.10%)
3.00% <0.00%> (ø%)

...obuf/convertor/BranchRollbackRequestConvertor.java
92.00% <0.00%> (-8.00%)
3.00% <0.00%> (ø%)

...otobuf/convertor/GlobalBeginResponseConvertor.java
92.59% <0.00%> (-7.41%)
3.00% <0.00%> (ø%)

...otobuf/convertor/GlobalCommitRequestConvertor.java
93.75% <0.00%> (-6.25%)
3.00% <0.00%> (ø%)

...otobuf/convertor/GlobalStatusRequestConvertor.java
93.75% <0.00%> (-6.25%)
3.00% <0.00%> (ø%)

...obuf/convertor/GlobalRollbackRequestConvertor.java
93.75% <0.00%> (-6.25%)
3.00% <0.00%> (ø%)

...protobuf/convertor/RegisterTMRequestConvertor.java
94.73% <0.00%> (-5.27%)
3.00% <0.00%> (ø%)

... and 25 more

@diguage mvn clean install -DskipTests=true -Dmaven.javadoc.skip=true -Dcheckstyle.skip=false

Thank you. I found the error, and fixed it. Thanks again.

seata-all file is missing some configuration

seata-all file is missing some configuration

OK

Please keep the commit log, we can only review the increment.

seata-all file is missing some configuration

OK

The 682 line of seata-al file is missing some configuration

The 682 line of seata-all file is missing some configuration

OK 👌

Please keep the commit log, we can only review the increment.
👌 Thanks.


fix ctrl+click on windows

also fixes a few other minor issues like links not re-using named frames

fixes browser-laptop #412

++ merging

Nit: "dispostion" typo in comment.
Great to have this. Is there another issue on file to clean up at a higher level, so the code doesn't have extra tests that seem to mix concerns and layers? Thanks.

It's actually not too terrible. "AttachGuest" is attaching the browser plugin so flipping the visibility there isn't great, but it's not the worst thing in the world. I haven't tried it yet with a fresh build of libchromiumcontent, but another possible reason this is happening is because all the tabs have the same "embedder" and it is visible even when the guest will not be. I'm definitely going to look into more to verify the underlying issue now that the immediate problem is solved.


solving of issue 271

https://github.com/h6ah4i/android-advancedrecyclerview/issues/271
animated-vector element of ic_expand_more_to_expand_less.xml and ic_expand_less_to_expand_more.xml available only from 21 api level

@ardmn Hi. Thank you for the PR, but I rejected it though. Please refer to the issue #271 for details. Thanks.


Adding glide.yaml for tcheck dependencies

Adding a glide.yaml file for tcheck dependencies

We should include the lock as well.

@blampe I have added the glide.lock


[Feature request] az devops command for making rest requests

I can use az rest to make request to the Azure DevOps REST API by setting the --resource parameter to the application id of Azure DevOps enterprise app. For example, the following command works:
$AZURE_DEVOPS_RESOURCE_ID = '499b84ac-1321-427f-aa17-267ca6975798'
# az rest will only pick up the entire body if it is on a single line.
$body = @"
{
    "resource": {},
    "pipelines": [
        {
            "authorized": true,
            "id": $PipelineId
        }
    ]
}
"@ | ConvertFrom-Json | ConvertTo-Json -Compress
$uri = "https://dev.azure.com/{organization}/{project}/_apis/pipelines/pipelinePermissions/endpoint/{serviceConnectionId}?api-version=5.1-preview.1"
az rest --resource $AZURE_DEVOPS_RESOURCE_ID --method PATCH --uri $uri --headers 'Content-Type=application/json' --body $body -o json

As described by az rest -h, https://dev.azure.com is not listed by az cloud show --query endpoints -o json, and hence az rest does not figure out the az rest --resource parameter out on its own.
There is already the az devops invoke command, but I find it hard to grok what to set its --area, --resource and --route-parameters to in order to make a similar request as the one I described above.
Proposed solution
Add a new command similar to az devops rest which would invoke az rest --resource '499b84ac-1321-427f-aa17-267ca6975798', effectively making in an alias which could be used like this:
az devops rest --method PATCH --uri $uri --headers 'Content-Type=application/json' --body $body -o json

A command would help for discoverability because users will notice it for example by az devops -h.
Alternative solutions
The devops az-plugin could register an additional lookup entry for https://dev.azure.com so that az rest would work out of the box.
The docs of az devops invoke could be clearer so that it is easier to understand what arguments to pass to produce a path similar to /{organization}/{project}/_apis/pipelines/pipelinePermissions/endpoint/{serviceConnectionId}. An additional --body parameter would also be handy so that I do not have to write temporary files as I make requests with --in-file.

@johanclasson awesome idea!!! 😁


Do not return error in reconcile method if child not found

Purpose

$subject

Codecov Report
All modified and coverable lines are covered by tests :white_check_mark:

Comparison is base (df29018) 28.12% compared to head (ec4fc12) 30.38%.
Report is 5 commits behind head on main.

Additional details and impacted files
@@            Coverage Diff             @@
##             main    #1928      +/-   ##
==========================================
+ Coverage   28.12%   30.38%   +2.26%
==========================================
  Files         123       51      -72
  Lines       13932     8840    -5092
  Branches     2567      246    -2321
==========================================
- Hits         3918     2686    -1232
+ Misses       9881     6019    -3862
- Partials      133      135       +2

Flag
Coverage Δ

adapter
27.08% <ø> (?)

idp-domain-service
80.18% <ø> (?)

Flags with carried forward coverage won't be shown. Click here to find out more.

:umbrella: View full report in Codecov by Sentry.
:loudspeaker: Have feedback on the report? Share it here.