I think terminateOfbiz should NOT be portoffset-aware nor should it
kill only one instance. terminateOfbiz is a convenience task to kill
all instances which is mostly used during development. That's the only
purpose it has. I believe it should NOT be used in any automation
suite or buildbot or anything like that.

I have already spent a lot of time correcting your errors in that task
[1]. Please let's try to avoid repeating this time consuming process.

[1] https://s.apache.org/fvBB

On Tue, Jun 27, 2017 at 3:39 PM, Jacques Le Roux
<jacques.le.r...@les7arts.com> wrote:
> We still have a problem with terminateOfbiz: it's not portoffset aware.
>
> So when you run it, it closes all OFBiz instances running on a machine (eg
> on VM demo)
>
> I guess we only need to improve terminateOfbiz by passing a portoffset
> parameter
>
> I'll create a Jira and provide a patch for review
>
> Jacques
>
>
> Le 26/06/2017 à 09:37, Jacques Le Roux a écrit :
>>
>> OK, the shutdown command is somehow our SIGTERM, makes sense
>>
>> Jacques
>>
>>
>> Le 26/06/2017 à 08:45, Taher Alkhateeb a écrit :
>>>
>>> I do not think we should send SIGTERM in the first place. The proper
>>> termination of OFBiz is with the --shutdown command which cleanly stops
>>> everything and calls the shutdown hook. The gradle task "terminateOfbiz"
>>> should only be used if the shutdown command fails (last resort) as cleary
>>> mentioned in the docs.
>>>
>>> On Jun 26, 2017 9:19 AM, "Jacques Le Roux" <jacques.le.r...@les7arts.com>
>>> wrote:
>>>
>>> Thanks Taher,
>>>
>>> I indeed missed that kill is not an atomic operation.  I reverted at
>>> r1799852.
>>>
>>> Before reading your last message I wanted to propose to set a delay
>>> between
>>> the 2 operations.
>>>
>>> So SIGTERM fails. I'd really like to send SIGTERM before killing the
>>> process and only kill it if it's necessary (ie if SIGTERM did not
>>> terminate
>>> the process)
>>>
>>> So we need to catch the SIGTERM exec and send SIGKILL if it fails, right?
>>>
>>> Jacques
>>>
>>>
>>>
>>> Le 25/06/2017 à 16:05, Taher Alkhateeb a écrit :
>>>
>>>> Oh and to prove the second scenario, just add a sleep for a few seconds
>>>> after the SIGTERM kill command and observe how the system will crash:
>>>>
>>>> if (line ==~ /.*org\.apache\.ofbiz\.base\.start\.Start.*/) {
>>>>     exec { commandLine 'kill', '-TERM', line.tokenize().first() }
>>>>     Thread.sleep(5000)
>>>> }
>>>>
>>>> Again, this shows you how poor the quality of this code is. It
>>>> introduces a
>>>> subtle bug, it repeats an if condition unnecessarily, and the comments
>>>> are
>>>> wrong "Only kill if needed"
>>>>
>>>> On Sun, Jun 25, 2017 at 4:22 PM, Taher Alkhateeb <
>>>> slidingfilame...@gmail.com
>>>>
>>>>> wrote:
>>>>> I'm completing my answer for the record to show exactly where your code
>>>>> is
>>>>> faulty and wrong just like in the other previous cases.
>>>>>
>>>>> 1- you have a copy-paste pattern in your code
>>>>> 2- you are calling the kill command twice immediately one after another
>>>>> without checking whether SIGTERM killed the process properly. The whole
>>>>> purpose of doing SIGTERM is to allow cleaning resources before
>>>>> enforcing
>>>>> SIGKILL. You're not giving the JVM an opportunity to call the shutdown
>>>>> hook
>>>>> because you're looking up the same output from the same "ps ax" command
>>>>> for
>>>>> both kill commands.
>>>>>
>>>>> So your code is working almost exactly as if typing:
>>>>> if (line ==~ /.*org\.apache\.ofbiz\.base\.start\.Start.*/) {
>>>>>     exec { commandLine 'kill', '-TERM', line.tokenize().first() }
>>>>>     exec { commandLine 'kill', '-KILL', line.tokenize().first() }
>>>>> }
>>>>>
>>>>> Now what's happening is that SIGKILL is executing before SIGTERM
>>>>> completes, so the build is successful but OFBiz is killed with SIGKILL
>>>>> not
>>>>> SIGTERM. If SIGTERM finishes very quickly (does not happen with me)
>>>>> then
>>>>> the build system would crash because the exit value of SIGKILL would be
>>>>> 1,
>>>>> not 0 (process not found). So either way it is a problem (either
>>>>> killing
>>>>> with SIGKILL or crashing the build system)
>>>>>
>>>>> Convinced? I hope you can revert now.
>>>>>
>>>>> On Sun, Jun 25, 2017 at 2:20 PM, Jacques Le Roux <
>>>>> jacques.le.r...@les7arts.com> wrote:
>>>>>
>>>>> But what's wrong? It's not clear to me, do you see it Michael?
>>>>>>
>>>>>> Not clearly answering this question just adds more work on my side, I
>>>>>> still don't see why I should revert.
>>>>>>
>>>>>> Jacques
>>>>>>
>>>>>>
>>>>>>
>>>>>> Le 25/06/2017 à 13:11, Michael Brohl a écrit :
>>>>>>
>>>>>> I's like to propose the following process to get this worked out
>>>>>> without
>>>>>>>
>>>>>>> endless ping-pong here on the mailing lists:
>>>>>>>
>>>>>>> 1. revert the change as requested
>>>>>>>
>>>>>>> 2. provide a Jira with patch and review/discuss it there (what's the
>>>>>>> problem, how should it be solved etc.)
>>>>>>>
>>>>>>> 3. come to a conclusion and a thumbsup by other committers
>>>>>>>
>>>>>>> 4. commit the solution.
>>>>>>>
>>>>>>> Thanks,
>>>>>>>
>>>>>>> Michael
>>>>>>>
>>>>>>>
>>>>>>> Am 25.06.17 um 12:36 schrieb Taher Alkhateeb:
>>>>>>>
>>>>>>> OK, I take this question as your refusal to revert and cooperate. I'm
>>>>>>>>
>>>>>>>> done
>>>>>>>> spending time here and I leave it up to the community to see if they
>>>>>>>> want
>>>>>>>> incorrect code in the code base.
>>>>>>>>
>>>>>>>> On Sun, Jun 25, 2017 at 1:34 PM, Jacques Le Roux <
>>>>>>>> jacques.le.r...@les7arts.com> wrote:
>>>>>>>>
>>>>>>>> Mmm but anyway, I remember now how I thought that.
>>>>>>>>
>>>>>>>>> In the 2nd "if", if the process was terminated, kill will just say
>>>>>>>>> that it
>>>>>>>>> can't find the process and exec will return. Else the process will
>>>>>>>>> be
>>>>>>>>> killed.
>>>>>>>>>
>>>>>>>>> What's wrong then?
>>>>>>>>>
>>>>>>>>> Jacques
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> Le 25/06/2017 à 12:28, Jacques Le Roux a écrit :
>>>>>>>>>
>>>>>>>>> Ah wait, I see line still contains "start" so will be executed
>>>>>>>>> twice
>>>>>>>>>
>>>>>>>>>> anyway. OK I'll improve that.
>>>>>>>>>>
>>>>>>>>>> Jacques
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> Le 25/06/2017 à 12:18, Jacques Le Roux a écrit :
>>>>>>>>>>
>>>>>>>>>> I don't revert without explanations on why I should revert. Sorry,
>>>>>>>>>>
>>>>>>>>>>> but I
>>>>>>>>>>> don't find your explanations clear.
>>>>>>>>>>>
>>>>>>>>>>> My explanation, tell my what's wrong:
>>>>>>>>>>>
>>>>>>>>>>> The 2 "if" blocks are executed sequentially for each line
>>>>>>>>>>> containing
>>>>>>>>>>> "a
>>>>>>>>>>> start"and ignore other lines. I did not change the previous
>>>>>>>>>>> logic,
>>>>>>>>>>> just
>>>>>>>>>>> added a new if.
>>>>>>>>>>>
>>>>>>>>>>> Gradle exec spawns a new process and waits till it ends (this
>>>>>>>>>>> point
>>>>>>>>>>> is
>>>>>>>>>>> important).
>>>>>>>>>>>
>>>>>>>>>>> If the line contains "a start" the 1st "if" try to terminate it.
>>>>>>>>>>>
>>>>>>>>>>> If it worked the 2nd "if" does not execute. This is better than
>>>>>>>>>>> before
>>>>>>>>>>> because it allows the "'start" process "a chance to clean up
>>>>>>>>>>> after
>>>>>>>>>>> itself"
>>>>>>>>>>> (cf unix.stackexchange.com below)
>>>>>>>>>>>
>>>>>>>>>>> If the "start" process is not terminated then it's killed by the
>>>>>>>>>>> 2nd
>>>>>>>>>>> "if", like it was done before.
>>>>>>>>>>>
>>>>>>>>>>> As I said it cleanly worked with 2 OFBiz instances running in the
>>>>>>>>>>> background.
>>>>>>>>>>>
>>>>>>>>>>> Now tell me what's wrong?
>>>>>>>>>>>
>>>>>>>>>>> Thanks
>>>>>>>>>>>
>>>>>>>>>>> Jacques
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> Le 25/06/2017 à 11:22, Taher Alkhateeb a écrit :
>>>>>>>>>>>
>>>>>>>>>>> As usual, you refuse to revert because you don't understand the
>>>>>>>>>>> code
>>>>>>>>>>>
>>>>>>>>>>>> and I
>>>>>>>>>>>> pay the price of spending my time explaining. I hope you will
>>>>>>>>>>>> reconsider
>>>>>>>>>>>> this time consuming and non-cooperative behavior.
>>>>>>>>>>>>
>>>>>>>>>>>> The quick version:
>>>>>>>>>>>> - copy and paste antipattern
>>>>>>>>>>>> - incorrect conditional checking leading to both blocks getting
>>>>>>>>>>>> executed or
>>>>>>>>>>>> both blocks not executing
>>>>>>>>>>>>
>>>>>>>>>>>> Your belief that Gradle fails because java does not expect to be
>>>>>>>>>>>> killed
>>>>>>>>>>>> is
>>>>>>>>>>>> amazing! It means you do not understand what this code is doing
>>>>>>>>>>>> and
>>>>>>>>>>>> what is
>>>>>>>>>>>> causing the failure.
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>> On Jun 25, 2017 10:42 AM, "Jacques Le Roux" <
>>>>>>>>>>>> jacques.le.r...@les7arts.com>
>>>>>>>>>>>> wrote:
>>>>>>>>>>>>
>>>>>>>>>>>> What makes you think it's wrong? I tested it locally using 2
>>>>>>>>>>>> background
>>>>>>>>>>>> instances and it cleaned worked.
>>>>>>>>>>>>
>>>>>>>>>>>> I also tried with one standard instance (not in background). It
>>>>>>>>>>>> works,
>>>>>>>>>>>> and
>>>>>>>>>>>> you get this message
>>>>>>>>>>>>
>>>>>>>>>>>> :ofbiz FAILED
>>>>>>>>>>>> FAILURE: Build failed with an exception.
>>>>>>>>>>>> * What went wrong:
>>>>>>>>>>>> Execution failed for task ':ofbiz'.
>>>>>>>>>>>>
>>>>>>>>>>>> Process 'command '/usr/lib/jvm/java-8-oracle/bin/java'' finished
>>>>>>>>>>>>
>>>>>>>>>>>>> with
>>>>>>>>>>>>>
>>>>>>>>>>>>> non-zero exit value 137
>>>>>>>>>>>>>
>>>>>>>>>>>> Which I believe is OK because Java does not expect to be killed!
>>>>>>>>>>>>
>>>>>>>>>>>> Jacques
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>> Le 24/06/2017 à 20:04, Taher Alkhateeb a écrit :
>>>>>>>>>>>>
>>>>>>>>>>>> This commit is wrong and bad on multiple levels. Please revert
>>>>>>>>>>>>
>>>>>>>>>>>> On Sat, Jun 24, 2017 at 10:56 AM, <jler...@apache.org> wrote:
>>>>>>>>>>>>>
>>>>>>>>>>>>> Author: jleroux
>>>>>>>>>>>>>
>>>>>>>>>>>>> Date: Sat Jun 24 07:56:45 2017
>>>>>>>>>>>>>
>>>>>>>>>>>>>> New Revision: 1799736
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> URL: http://svn.apache.org/viewvc?rev=1799736&view=rev
>>>>>>>>>>>>>> Log:
>>>>>>>>>>>>>> No functional change
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> Improves terminateOfbiz byt using TERM before KILL
>>>>>>>>>>>>>> https://fr.wikipedia.org/wiki/Kill_(Unix)
>>>>>>>>>>>>>> https://unix.stackexchange.com/questions/8916/when-
>>>>>>>>>>>>>> should-i-not-kill-9-a-process
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> Modified:
>>>>>>>>>>>>>> ofbiz/ofbiz-framework/trunk/build.gradle
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> Modified: ofbiz/ofbiz-framework/trunk/build.gradle
>>>>>>>>>>>>>> URL: http://svn.apache.org/viewvc/ofbiz/ofbiz-framework/trunk/
>>>>>>>>>>>>>> build.gradle?rev=1799736&r1=1799735&r2=1799736&view=diff
>>>>>>>>>>>>>> ============================================================
>>>>>>>>>>>>>> ==================
>>>>>>>>>>>>>> --- ofbiz/ofbiz-framework/trunk/build.gradle (original)
>>>>>>>>>>>>>> +++ ofbiz/ofbiz-framework/trunk/build.gradle Sat Jun 24
>>>>>>>>>>>>>> 07:56:45
>>>>>>>>>>>>>> 2017
>>>>>>>>>>>>>> @@ -332,8 +332,13 @@ task terminateOfbiz(group: ofbizServer,
>>>>>>>>>>>>>>                       standardOutput = processOutput
>>>>>>>>>>>>>>                   }
>>>>>>>>>>>>>> processOutput.toString().split(System.lineSeparator()).each
>>>>>>>>>>>>>> { line ->
>>>>>>>>>>>>>> +                // Try to terminate cleanly
>>>>>>>>>>>>>>                       if (line ==~
>>>>>>>>>>>>>> /.*org\.apache\.ofbiz\.base\.s
>>>>>>>>>>>>>> tart\.Start.*/)
>>>>>>>>>>>>>> {
>>>>>>>>>>>>>> -                    exec { commandLine 'kill', '-9',
>>>>>>>>>>>>>> line.tokenize().first() }
>>>>>>>>>>>>>> +                    exec { commandLine 'kill', '-TERM',
>>>>>>>>>>>>>> line.tokenize().first() }
>>>>>>>>>>>>>> +                }
>>>>>>>>>>>>>> +                // Only kill if needed
>>>>>>>>>>>>>> +                if (line ==~ /.*org\.apache\.ofbiz\.base\.s
>>>>>>>>>>>>>> tart\.Start.*/)
>>>>>>>>>>>>>> {
>>>>>>>>>>>>>> +                    exec { commandLine 'kill', '-KILL',
>>>>>>>>>>>>>> line.tokenize().first() }
>>>>>>>>>>>>>>                       }
>>>>>>>>>>>>>>                   }
>>>>>>>>>>>>>>               }
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>
>>
>

Reply via email to