Skip to content
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

[SPARK-7729][UI]Executor which has been killed should also be displayed on Executor Tab #10058

Closed
wants to merge 26 commits into from

Conversation

lianhuiwang
Copy link
Contributor

@andrewor14 @squito Dead Executors should also be displayed on Executor Tab.
as following:
image

@lianhuiwang lianhuiwang changed the title [SPARK-7729][UI]Executor which has been killed should also be displayed on [SPARK-7729][UI]Executor which has been killed should also be displayed on Executor Tab Dec 1, 2015
@SparkQA
Copy link

SparkQA commented Dec 1, 2015

Test build #46941 has finished for PR 10058 at commit bd40d49.

  • This patch fails Scala style tests.
  • This patch merges cleanly.
  • This patch adds the following public classes (experimental):\n * class StorageStatusListener(conf: SparkConf) extends SparkListener\n

@SparkQA
Copy link

SparkQA commented Dec 1, 2015

Test build #46942 has finished for PR 10058 at commit 97dbd62.

  • This patch fails Scala style tests.
  • This patch merges cleanly.
  • This patch adds no public classes.

@SparkQA
Copy link

SparkQA commented Dec 1, 2015

Test build #46943 has finished for PR 10058 at commit 16e175d.

  • This patch passes all tests.
  • This patch merges cleanly.
  • This patch adds the following public classes (experimental):\n * class StorageStatusListener(conf: SparkConf) extends SparkListener\n

@CodingCat
Copy link
Contributor

what's wrong with the font here? seems quite different with the original one?

val storageStatusList = listener.storageStatusList
(0 until storageStatusList.size).map { statusId =>
ExecutorsPage.getExecInfo(listener, statusId)
listener.synchronized {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

maybe I missed something, why we need synchronized here?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

more than one thread use listener object. There are rest api, executor page in UI, and SparkListener.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm still confused about the reason on imposing the sequential access here.....can you give an example of the problem without this synchronized....

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Because ExecutorsPage.getExecInfo() use executorToTasksActive, executorToTasksFailed of ExecutorsListener and SparkListenerBus thread also change value of executorToTasksActive,executorToTasksFailed in onPostEvent() , we need to use synchronized there. It is better that synchronized is used in ExecutorsPage.getExecInfo().

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't think it is necessary, essentially you are imposing that even the GET operations are to be processed sequentially....

@lianhuiwang
Copy link
Contributor Author

@CodingCat I have addressed your comments. Thanks.

@SparkQA
Copy link

SparkQA commented Dec 1, 2015

Test build #46964 has finished for PR 10058 at commit 7b244ff.

  • This patch fails to build.
  • This patch merges cleanly.
  • This patch adds the following public classes (experimental):\n * class StorageStatusListener(conf: SparkConf) extends SparkListener\n

@@ -52,68 +53,82 @@ private[ui] class ExecutorsPage(
private val listener = parent.listener

def render(request: HttpServletRequest): Seq[Node] = {
val storageStatusList = listener.storageStatusList
listener.synchronized {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

similar situation here

@lianhuiwang
Copy link
Contributor Author

@CodingCat Can you take a look again?Thanks

@SparkQA
Copy link

SparkQA commented Dec 2, 2015

Test build #47038 has finished for PR 10058 at commit b106cfe.

  • This patch passes all tests.
  • This patch merges cleanly.
  • This patch adds the following public classes (experimental):\n * class StorageStatusListener(conf: SparkConf) extends SparkListener\n

@SparkQA
Copy link

SparkQA commented Dec 2, 2015

Test build #47043 has finished for PR 10058 at commit 47255fa.

  • This patch fails from timeout after a configured wait of 250m.
  • This patch merges cleanly.
  • This patch adds the following public classes (experimental):\n * class StorageStatusListener(conf: SparkConf) extends SparkListener\n

@@ -87,8 +94,13 @@ class StorageStatusListener extends SparkListener {
override def onBlockManagerRemoved(blockManagerRemoved: SparkListenerBlockManagerRemoved) {
synchronized {
val executorId = blockManagerRemoved.blockManagerId.executorId
executorIdToStorageStatus.remove(executorId)
val removedStorageStatus = executorIdToStorageStatus.remove(executorId)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nit: looks nicer if you do executorIdToStorageStatus.remove(executorId).foreach { status =>

@vanzin
Copy link
Contributor

vanzin commented Dec 3, 2015

The code looks good, but I'd like to see at least a basic test.

@lianhuiwang
Copy link
Contributor Author

@vanzin I address your comments. Can you take a look again? Thanks.

@SparkQA
Copy link

SparkQA commented Dec 4, 2015

Test build #47198 has finished for PR 10058 at commit 325149f.

  • This patch fails Spark unit tests.
  • This patch merges cleanly.
  • This patch adds the following public classes (experimental):\n * class StorageStatusListener(conf: SparkConf) extends SparkListener\n

@vanzin
Copy link
Contributor

vanzin commented Dec 4, 2015

retest this please

@vanzin
Copy link
Contributor

vanzin commented Dec 4, 2015

LGTM pending tests.

@SparkQA
Copy link

SparkQA commented Feb 2, 2016

Test build #50548 has finished for PR 10058 at commit f749a5f.

  • This patch fails Scala style tests.
  • This patch merges cleanly.
  • This patch adds no public classes.

@lianhuiwang
Copy link
Contributor Author

retest this please

@SparkQA
Copy link

SparkQA commented Feb 2, 2016

Test build #50566 has finished for PR 10058 at commit 8f0be11.

  • This patch passes all tests.
  • This patch merges cleanly.
  • This patch adds no public classes.

@SparkQA
Copy link

SparkQA commented Feb 2, 2016

Test build #50567 has finished for PR 10058 at commit 8f0be11.

  • This patch passes all tests.
  • This patch merges cleanly.
  • This patch adds no public classes.

@lianhuiwang
Copy link
Contributor Author

@zsxwing I have updated it to resolve the conflicts. and now executor ui is the following(many active executors that can not be seen in the picture are displayed on the bottom of ui ):
dead-exec-ui

@zsxwing
Copy link
Member

zsxwing commented Feb 17, 2016

Looks great. ping @andrewor14 to take a look

def storageStatusList: Seq[StorageStatus] = storageStatusListener.storageStatusList
def activeStorageStatusList: Seq[StorageStatus] = storageStatusListener.activeStorageStatusList

def deadStorageStatusList: Seq[StorageStatus] = storageStatusListener.deadStorageStatusList
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

is this used anywhere

@andrewor14
Copy link
Contributor

@lianhuiwang Looks good. Can you rebase to master?

@SparkQA
Copy link

SparkQA commented Feb 21, 2016

Test build #51636 has finished for PR 10058 at commit 96950c6.

  • This patch passes all tests.
  • This patch merges cleanly.
  • This patch adds no public classes.

@lianhuiwang
Copy link
Contributor Author

@andrewor14 Now all tests have been passed.

@andrewor14
Copy link
Contributor

Sorry this conflicts with master again. Once you rebase I'll go ahead and merge it.

Conflicts:
	project/MimaExcludes.scala
@lianhuiwang
Copy link
Contributor Author

@andrewor14 Thanks. I have updated with master. I think you can go ahead after all tests have been passed.

Conflicts:
	project/MimaExcludes.scala
@SparkQA
Copy link

SparkQA commented Feb 23, 2016

Test build #51734 has finished for PR 10058 at commit c88afa8.

  • This patch passes all tests.
  • This patch merges cleanly.
  • This patch adds no public classes.

@andrewor14
Copy link
Contributor

Alright, I've merged this into master after resolving the conflicts myself. It was a tiny Mima thing so it wasn't so bad. Thanks for working on this.

@asfgit asfgit closed this in 9f42633 Feb 23, 2016
@lianhuiwang
Copy link
Contributor Author

@andrewor14 Thanks.

asfgit pushed a commit that referenced this pull request Mar 4, 2016
…otals Table

## What changes were proposed in this pull request?

Now that dead executors are shown in the executors table (#10058) the totals table is updated to include the separate totals for alive and dead executors as well as the current total, as originally discussed in #10668

## How was this patch tested?

Manually verified by running the Standalone Web UI in the latest Safari and Firefox ESR

Author: Alex Bozarth <ajbozart@us.ibm.com>

Closes #11381 from ajbozarth/spark13459.
roygao94 pushed a commit to roygao94/spark that referenced this pull request Mar 22, 2016
…otals Table

## What changes were proposed in this pull request?

Now that dead executors are shown in the executors table (apache#10058) the totals table is updated to include the separate totals for alive and dead executors as well as the current total, as originally discussed in apache#10668

## How was this patch tested?

Manually verified by running the Standalone Web UI in the latest Safari and Firefox ESR

Author: Alex Bozarth <ajbozart@us.ibm.com>

Closes apache#11381 from ajbozarth/spark13459.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
6 participants