-
Notifications
You must be signed in to change notification settings - Fork 1.2k
Do not put data to ETCD when no date is changed. #5291
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from 1 commit
7100647
9402d57
f25273d
8252a58
ca75f44
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -470,6 +470,33 @@ case class InvokerResourceMessage(status: String, | |
* Serializes message to string. Must be idempotent. | ||
*/ | ||
override def serialize: String = InvokerResourceMessage.serdes.write(this).compactPrint | ||
|
||
def canEqual(a: Any) = a.isInstanceOf[InvokerResourceMessage] | ||
|
||
override def equals(that: Any): Boolean = | ||
that match { | ||
case that: InvokerResourceMessage => { | ||
that.canEqual(this) && | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I think There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Good. |
||
this.status == that.status && | ||
this.freeMemory == that.freeMemory && | ||
this.busyMemory == that.busyMemory && | ||
this.inProgressMemory == that.inProgressMemory && | ||
this.tags.toSet == that.tags.toSet && | ||
this.dedicatedNamespaces.toSet == that.dedicatedNamespaces.toSet | ||
} | ||
case _ => false | ||
} | ||
|
||
override def hashCode: Int = { | ||
var result = 1 | ||
val prime = 31 | ||
result = prime * 31 + status.hashCode() | ||
result = prime * 31 + freeMemory.hashCode() | ||
result = prime * 31 + busyMemory.hashCode() | ||
result = prime * 31 + inProgressMemory.hashCode() | ||
result = prime * 31 + tags.hashCode() | ||
result | ||
} | ||
} | ||
|
||
object InvokerResourceMessage extends DefaultJsonProtocol { | ||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -389,6 +389,24 @@ case class SchedulerStates(sid: SchedulerInstanceId, queueSize: Int, endpoints: | |
def getSchedulerId(): SchedulerInstanceId = sid | ||
|
||
def serialize = SchedulerStates.serdes.write(this).compactPrint | ||
|
||
def canEqual(a: Any) = a.isInstanceOf[SchedulerStates] | ||
|
||
override def equals(that: Any): Boolean = | ||
that match { | ||
case that: SchedulerStates => { | ||
that.canEqual(this) && | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. doesn't required either There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Updated. |
||
this.queueSize == that.queueSize | ||
} | ||
case _ => false | ||
} | ||
|
||
override def hashCode: Int = { | ||
var result = 1 | ||
val prime = 31 | ||
result = prime * 31 + queueSize.hashCode() | ||
result | ||
} | ||
} | ||
|
||
object SchedulerStates extends DefaultJsonProtocol { | ||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,87 @@ | ||
package org.apache.openwhisk.core.connector.test | ||
|
||
import akka.actor.ActorSystem | ||
import akka.testkit.TestKit | ||
import org.apache.openwhisk.common.InvokerState.{Healthy, Unhealthy} | ||
import org.apache.openwhisk.core.connector.InvokerResourceMessage | ||
import org.apache.openwhisk.core.entity.SchedulerInstanceId | ||
import org.apache.openwhisk.core.scheduler.{SchedulerEndpoints, SchedulerStates} | ||
import org.junit.runner.RunWith | ||
import org.scalatest.junit.JUnitRunner | ||
import org.scalatest.{FlatSpecLike, Matchers} | ||
|
||
@RunWith(classOf[JUnitRunner]) | ||
class MessageTests extends TestKit(ActorSystem("Message")) with FlatSpecLike with Matchers { | ||
behavior of "Message" | ||
|
||
it should "be able to compare the InvokerResourceMessage" in { | ||
val msg1 = InvokerResourceMessage(Unhealthy.asString, 1024L, 0, 0, Seq.empty, Seq.empty) | ||
val msg2 = InvokerResourceMessage(Unhealthy.asString, 1024L, 0, 0, Seq.empty, Seq.empty) | ||
|
||
msg1 == msg2 shouldBe true | ||
} | ||
|
||
it should "be different when the state of InvokerResourceMessage is different" in { | ||
val msg1 = InvokerResourceMessage(Unhealthy.asString, 1024L, 0, 0, Seq.empty, Seq.empty) | ||
val msg2 = InvokerResourceMessage(Healthy.asString, 1024L, 0, 0, Seq.empty, Seq.empty) | ||
|
||
msg1 != msg2 shouldBe true | ||
} | ||
|
||
it should "be different when the free memory of InvokerResourceMessage is different" in { | ||
val msg1 = InvokerResourceMessage(Healthy.asString, 1024L, 0, 0, Seq.empty, Seq.empty) | ||
val msg2 = InvokerResourceMessage(Healthy.asString, 2048L, 0, 0, Seq.empty, Seq.empty) | ||
|
||
msg1 != msg2 shouldBe true | ||
} | ||
|
||
it should "be different when the busy memory of InvokerResourceMessage is different" in { | ||
val msg1 = InvokerResourceMessage(Healthy.asString, 1024L, 0, 0, Seq.empty, Seq.empty) | ||
val msg2 = InvokerResourceMessage(Healthy.asString, 1024L, 1024L, 0, Seq.empty, Seq.empty) | ||
|
||
msg1 != msg2 shouldBe true | ||
} | ||
|
||
it should "be different when the in-progress memory of InvokerResourceMessage is different" in { | ||
val msg1 = InvokerResourceMessage(Healthy.asString, 1024L, 0, 0, Seq.empty, Seq.empty) | ||
val msg2 = InvokerResourceMessage(Healthy.asString, 1024L, 0, 1024L, Seq.empty, Seq.empty) | ||
|
||
msg1 != msg2 shouldBe true | ||
} | ||
|
||
it should "be different when the tags of InvokerResourceMessage is different" in { | ||
val msg1 = InvokerResourceMessage(Healthy.asString, 1024L, 0, 0, Seq("tag1"), Seq.empty) | ||
val msg2 = InvokerResourceMessage(Healthy.asString, 1024L, 0, 0, Seq("tag1", "tag2"), Seq.empty) | ||
|
||
msg1 != msg2 shouldBe true | ||
} | ||
|
||
it should "be different when the dedicated namespaces of InvokerResourceMessage is different" in { | ||
val msg1 = InvokerResourceMessage(Healthy.asString, 1024L, 0, 0, Seq.empty, Seq("ns1")) | ||
val msg2 = InvokerResourceMessage(Healthy.asString, 1024L, 0, 0, Seq.empty, Seq("ns2")) | ||
|
||
msg1 != msg2 shouldBe true | ||
} | ||
|
||
it should "be able to compare the SchedulerStates" in { | ||
val msg1 = SchedulerStates(SchedulerInstanceId("0"), queueSize = 0, SchedulerEndpoints("10.10.10.10", 1234, 1234)) | ||
val msg2 = SchedulerStates(SchedulerInstanceId("0"), queueSize = 0, SchedulerEndpoints("10.10.10.10", 1234, 1234)) | ||
|
||
msg1 == msg2 shouldBe true | ||
} | ||
|
||
it should "be different when the queue size of SchedulerStates is different" in { | ||
val msg1 = SchedulerStates(SchedulerInstanceId("0"), queueSize = 20, SchedulerEndpoints("10.10.10.10", 1234, 1234)) | ||
val msg2 = SchedulerStates(SchedulerInstanceId("0"), queueSize = 10, SchedulerEndpoints("10.10.10.10", 1234, 1234)) | ||
|
||
msg1 != msg2 shouldBe true | ||
} | ||
|
||
it should "be not different when other than the queue size of SchedulerStates is different" in { | ||
// only the queue size matter | ||
val msg1 = SchedulerStates(SchedulerInstanceId("0"), queueSize = 20, SchedulerEndpoints("10.10.10.10", 1234, 1234)) | ||
val msg2 = SchedulerStates(SchedulerInstanceId("1"), queueSize = 20, SchedulerEndpoints("10.10.10.20", 5678, 5678)) | ||
|
||
msg1 == msg2 shouldBe true | ||
} | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The data management service compares the message to decide whether to put data or not.
https://github.com/apache/openwhisk/blob/master/common/scala/src/main/scala/org/apache/openwhisk/core/service/DataManagementService.scala#L161
So we need to override the
equals
method to make it compare messages with==
.