> On Jan. 17, 2015, 12:19 a.m., Xuefu Zhang wrote: > > spark-client/src/main/java/org/apache/hive/spark/client/JobHandleImpl.java, > > line 179 > > <https://reviews.apache.org/r/29954/diff/1-2/?file=823286#file823286line179> > > > > Sorry I didn't get it, but why? > > Clarity but not perf is my concern. Here we are notifying listeners > > with a new Spark job ID, which is done in the for loop, which is > > synchronized. This means no listener may be added or removed from the > > listeners. On the other hand, sparkJobIds.add(sparkJobId) seems irrelevant > > to any changes to listeners, unless I missed anything. I don't understand > > why either of the two cases might happen as you suggested.
Threads: T1 updating the job handle, T2 adding a listener Case 1: Statement 1 (S1): sparkJobIds.add(sparkJobId); Statement 2 (S2): synchronized (listeners) { /* call onSparkJobStarted(newSparkJobId) on every listener */ } Timeline: T1: executes S1 T2: calls addListener(), new listener is notified of the sparkJobId added above T1: executes S2. New listener is notified again of new spark job ID. Case 2: Invert S1 and S2. T2: calls addListener() T1: executes S1. Listener is called with the current state of the handle and new Spark job ID. Listener checks `handle.getSparkJobIDs().contains(newSparkJobId)`, check fails. Those seem pretty easy to understand to me. The current code avoids both of them. - Marcelo ----------------------------------------------------------- This is an automatically generated e-mail. To reply, visit: https://reviews.apache.org/r/29954/#review68513 ----------------------------------------------------------- On Jan. 16, 2015, 11:24 p.m., Marcelo Vanzin wrote: > > ----------------------------------------------------------- > This is an automatically generated e-mail. To reply, visit: > https://reviews.apache.org/r/29954/ > ----------------------------------------------------------- > > (Updated Jan. 16, 2015, 11:24 p.m.) > > > Review request for hive, Brock Noland, chengxiang li, and Xuefu Zhang. > > > Bugs: HIVE-9179 > https://issues.apache.org/jira/browse/HIVE-9179 > > > Repository: hive-git > > > Description > ------- > > HIVE-9179. Add listener API to JobHandle. > > > Diffs > ----- > > spark-client/pom.xml 77016df61a0bcbd94058bcbd2825c6c210a70e14 > spark-client/src/main/java/org/apache/hive/spark/client/BaseProtocol.java > f9c10b196ab47b5b4f4c0126ad455869ab68f0ca > spark-client/src/main/java/org/apache/hive/spark/client/JobHandle.java > e760ce35d92bedf4d301b08ec57d1c2dc37a39f0 > spark-client/src/main/java/org/apache/hive/spark/client/JobHandleImpl.java > 1b8feedb0b23aa7897dc6ac37ea5c0209e71d573 > spark-client/src/main/java/org/apache/hive/spark/client/RemoteDriver.java > 0d49ed3d9e33ca08d6a7526c1c434a0dd0a06a67 > > spark-client/src/main/java/org/apache/hive/spark/client/SparkClientImpl.java > a30d8cbbaae9d25b1cffdc286b546f549e439545 > spark-client/src/test/java/org/apache/hive/spark/client/TestJobHandle.java > PRE-CREATION > > spark-client/src/test/java/org/apache/hive/spark/client/TestSparkClient.java > 795d62c776cec5e9da2a24b7d40bc749a03186ab > > Diff: https://reviews.apache.org/r/29954/diff/ > > > Testing > ------- > > > Thanks, > > Marcelo Vanzin > >